[PATCH 0/7] drm/exynos: move hdmiphy related code to hdmiphy driver

Inki Dae inki.dae at samsung.com
Fri Aug 30 02:06:27 PDT 2013


One more thing, you would need to check if other driver can be probed in
probe context. With your patch, exynos_hdmiphy_driver_register() is called
in hdmi_probe() via hdmi_get_phy_device(), and then
platform_driver_reigster() is called via the
exynos_hdmiphy_driver_register(). I remember that was failed.

Thanks,
Inki Dae

> -----Original Message-----
> From: dri-devel-bounces+inki.dae=samsung.com at lists.freedesktop.org
> [mailto:dri-devel-bounces+inki.dae=samsung.com at lists.freedesktop.org] On
> Behalf Of Inki Dae
> Sent: Friday, August 30, 2013 5:33 PM
> To: 'Rahul Sharma'; linux-samsung-soc at vger.kernel.org; dri-
> devel at lists.freedesktop.org
> Cc: kgene.kim at samsung.com; sw0312.kim at samsung.com; joshi at samsung.com;
> s.nawrocki at samsung.com
> Subject: RE: [PATCH 0/7] drm/exynos: move hdmiphy related code to hdmiphy
> driver
> 
> Hi Rahul.
> 
> Thanks for your patch set.
> 
> I had just quick review to all patch series. And I think we could fully
> hide
> hdmiphy interfaces,
> exynos_hdmiphy_enable/disable/check_mode/set_mode/conf_apply, from hdmi
> driver.
> That may be prototyped like below,
> 
> at exynos_hdmi.h
> 
> /* Define hdmiphy callbacks. */
> struct exynos_hdmiphy_ops {
> 	void (*enable)(struct device *dev);
> 	void (*disable)(struct device *dev);
> 	int (*check_mode)(struct device *dev, struct drm_display_mode
> *mode);
> 	int (*set_mode)(struct device *dev, struct drm_display_mode *mode);
> 	int (*apply)(struct device *dev);
> };
> 
> 
> at exynos_hdmi.c
> 
> /*
>   * Add a new structure for hdmi driver data.
>   * type could be HDMI_TYPE13 or HDMI_TYPE14.
>   * i2c_hdmiphy could be true or false: true means that current hdmi
> device
> uses i2c
>   * based hdmiphy device, otherwise platform device based one.
>   */
> struct hdmi_drv_data {
> 	unsigned int type;
> 	unsigned int i2c_hdmiphy;
> };
> 
> ...
> 
> /* Add new members to hdmi context. */
> struct hdmi_context {
> 	...
> 	struct hdmi_drv_data *drv_data;
> 	struct hdmiphy_ops *ops;
> 	...
> };
> 
> 
> /* Add hdmi device data according Exynos SoC. */
> static struct hdmi_drv_data exynos4212_hdmi_drv_data = {
> 	.type = HDMI_TYPE14,
> 	.i2c_hdmiphy = true
> };
> 
> static struct hdmi_drv_data exynos5420_hdmi_drv_data = {
> 	.type = HDMI_TYPE14,
> 	.i2c_hdmiphy = false
> };
> 
> 
> static struct of_device_id hdmi_match_types[] = {
> 	{
> 		.compatible = "samsung,exynos4212-hdmi",
> 		.data		= (void *)&exynos4212_hdmi_drv_data,
> 	}, {
> 	...
> 
> 		.compatible = "samsung,exynos5420-hdmi",
> 		.data		= (void *)&exynos5420_hdmi_drv_data,
> 	}, {
> 	}
> };
> 
> /* the below example function shows how hdmiphy interfaces can be hided
> from
> hdmi driver. */
> static void hdmi_mode_set(...)
> {
> 	...
> 	hdata->ops->set_mode(hdata->hdmiphy_dev, mode);
> }
> 
> static int hdmi_get_phy_device(struct hdmi_context *hdata)
> {
> 	struct hdmi_drv_data *data = hdata->drv_data;
> 
> 	...
> 	/* Register hdmiphy driver according to i2c_hdmiphy value. */
> 	ret = exynos_hdmiphy_driver_register(data->i2c_hdmiphy);
> 	...
> 	/* Get hdmiphy driver ops according to i2c_hdmiphy value. */
> 	hdata->ops = exynos_hdmiphy_get_ops(data->i2c_hdmiphy);
> 	...
> }
> 
> 
> at exynos_hdmiphy.c
> 
> /* Define hdmiphy ops respectively. */
> struct exynos_hdmiphy_ops hdmiphy_i2c_ops = {
> 	.enable = exynos_hdmiphy_i2c_enable,
> 	.disable = exynos_hdmiphy_i2c_disable,
> 	...
> };
> 
> struct exynos_hdmiphy_ops hdmiphy_platdev_ops = {
> 	.enable = exynos_hdmiphy_platdev_enable,
> 	.disable = exynos_hdmiphy_platdev_disable,
> 	...
> };
> 
> struct exynos_hdmiphy_ops *exynos_hdmiphy_get_ops(unsigned int
i2c_hdmiphy)
> {
> 	/* Return hdmiphy ops appropriately according to i2c_hdmiphy. */
> 	if (i2c_hdmiphy)
> 		return &hdmiphy_i2c_ops;
> 
> 	return &hdmiphy_platdev_ops;
> }
> 
> int exynos_hdmiphy_driver_register(unsigned int i2c_hdmiphy)
> {
> 	...
> 	/* Register hdmiphy driver appropriately according to i2c_hdmiphy.
> */
> 	if (i2c_hdmiphy) {
> 		ret = i2c_add_driver(&hdmiphy_i2c_driver);
> 		...
> 	} else {
> 		ret = platform_driver_register(&hdmiphy_platform_driver);
> 		...
> 	}
> 
> 	return ret;
> }
> 
> Thanks,
> Inki Dae
> 
> > -----Original Message-----
> > From: Rahul Sharma [mailto:rahul.sharma at samsung.com]
> > Sent: Friday, August 30, 2013 3:59 PM
> > To: linux-samsung-soc at vger.kernel.org; dri-devel at lists.freedesktop.org
> > Cc: kgene.kim at samsung.com; sw0312.kim at samsung.com; inki.dae at samsung.com;
> > seanpaul at chromium.org; l.stach at pengutronix.de; tomasz.figa at gmail.com;
> > s.nawrocki at samsung.com; joshi at samsung.com; r.sh.open at gmail.com; Rahul
> > Sharma
> > Subject: [PATCH 0/7] drm/exynos: move hdmiphy related code to hdmiphy
> > driver
> >
> > Currently, exynos hdmiphy operations and configs are kept
> > inside the hdmi driver. Hdmiphy related code is tightly
> > coupled with hdmi IP driver.
> >
> > This series also removes hdmiphy dummy clock for hdmiphy
> > and replace it with Phy PMU Control from the hdmiphy driver.
> >
> > At the end, support for exynos5420 hdmiphy is added to the
> > hdmiphy driver which is a platform device.
> >
> > Drm related paches are based on exynos-drm-next branch at
> > git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git
> >
> > Arch patches are dependent on
> > http://www.mail-archive.com/linux-samsung-
> > soc at vger.kernel.org/msg22195.html
> >
> > Rahul Sharma (7):
> >   drm/exynos: move hdmiphy related code to hdmiphy driver
> >   drm/exynos: remove dummy hdmiphy clock
> >   drm/exynos: add hdmiphy pmu bit control in hdmiphy driver
> >   drm/exynos: add support for exynos5420 hdmiphy
> >   exynos/drm: fix ddc i2c device probe failure
> >   ARM: dts: update hdmiphy dt node for exynos5250
> >   ARM: dts: update hdmiphy dt node for exynos5420
> >
> >  .../devicetree/bindings/video/exynos_hdmi.txt      |    2 +
> >  .../devicetree/bindings/video/exynos_hdmiphy.txt   |    6 +
> >  arch/arm/boot/dts/exynos5250-smdk5250.dts          |    9 +-
> >  arch/arm/boot/dts/exynos5420.dtsi                  |   12 +
> >  drivers/gpu/drm/exynos/exynos_ddc.c                |    5 +
> >  drivers/gpu/drm/exynos/exynos_drm_hdmi.h           |   13 +
> >  drivers/gpu/drm/exynos/exynos_hdmi.c               |  353 ++--------
> >  drivers/gpu/drm/exynos/exynos_hdmiphy.c            |  738
> > +++++++++++++++++++-
> >  drivers/gpu/drm/exynos/regs-hdmiphy.h              |   35 +
> >  9 files changed, 868 insertions(+), 305 deletions(-)
> >  create mode 100644 drivers/gpu/drm/exynos/regs-hdmiphy.h
> >
> > --
> > 1.7.10.4
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel



More information about the dri-devel mailing list