[PATCH 3/4] drm/tilcdc: Stop using struct drm_driver load() callback

2016-10-19 Thread Daniel Vetter
On Wed, Oct 19, 2016 at 12:33:55AM +0300, Jyri Sarha wrote:
> Stop using struct drm_driver load() callback. The load() callback
> should not be used anymore. Instead the drm_device is allocated with
> drm_dev_alloc() and registered with drm_dev_register() only after the
> driver is completely initialized.
> 
> Signed-off-by: Jyri Sarha 
> ---
>  drivers/gpu/drm/tilcdc/tilcdc_drv.c | 103 
> 
>  1 file changed, 58 insertions(+), 45 deletions(-)
> 
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c 
> b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index 231f2c7..2dca822 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -230,25 +230,31 @@ static int tilcdc_unload(struct drm_device *dev)
>   return 0;
>  }
>  
> -static int tilcdc_load(struct drm_device *dev, unsigned long flags)
> +static int tilcdc_init(struct drm_driver *ddrv, struct device *dev)
>  {
> - struct platform_device *pdev = dev->platformdev;
> - struct device_node *node = pdev->dev.of_node;
> + struct drm_device *ddev;
> + struct platform_device *pdev = to_platform_device(dev);
> + struct device_node *node = dev->of_node;
>   struct tilcdc_drm_private *priv;
>   struct resource *res;
>   u32 bpp = 0;
>   int ret;
>  
> - priv = devm_kzalloc(dev->dev, sizeof(*priv), GFP_KERNEL);
> + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
>   if (!priv) {
> - dev_err(dev->dev, "failed to allocate private data\n");
> + dev_err(dev, "failed to allocate private data\n");
>   return -ENOMEM;
>   }
>  
> - dev->dev_private = priv;
> + ddev = drm_dev_alloc(ddrv, dev);
> + if (IS_ERR(ddev))
> + return PTR_ERR(ddev);
> +
> + ddev->platformdev = pdev;
> + ddev->dev_private = priv;
>  
>   priv->is_componentized =
> - tilcdc_get_external_components(dev->dev, NULL) > 0;
> + tilcdc_get_external_components(dev, NULL) > 0;
>  
>   priv->wq = alloc_ordered_workqueue("tilcdc", 0);
>   if (!priv->wq) {
> @@ -258,21 +264,21 @@ static int tilcdc_load(struct drm_device *dev, unsigned 
> long flags)
>  
>   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>   if (!res) {
> - dev_err(dev->dev, "failed to get memory resource\n");
> + dev_err(dev, "failed to get memory resource\n");
>   ret = -EINVAL;
>   goto fail_free_wq;
>   }
>  
>   priv->mmio = ioremap_nocache(res->start, resource_size(res));
>   if (!priv->mmio) {
> - dev_err(dev->dev, "failed to ioremap\n");
> + dev_err(dev, "failed to ioremap\n");
>   ret = -ENOMEM;
>   goto fail_free_wq;
>   }
>  
> - priv->clk = clk_get(dev->dev, "fck");
> + priv->clk = clk_get(dev, "fck");
>   if (IS_ERR(priv->clk)) {
> - dev_err(dev->dev, "failed to get functional clock\n");
> + dev_err(dev, "failed to get functional clock\n");
>   ret = -ENODEV;
>   goto fail_iounmap;
>   }
> @@ -282,7 +288,7 @@ static int tilcdc_load(struct drm_device *dev, unsigned 
> long flags)
>   ret = cpufreq_register_notifier(>freq_transition,
>   CPUFREQ_TRANSITION_NOTIFIER);
>   if (ret) {
> - dev_err(dev->dev, "failed to register cpufreq notifier\n");
> + dev_err(dev, "failed to register cpufreq notifier\n");
>   goto fail_put_clk;
>   }
>  #endif
> @@ -303,11 +309,11 @@ static int tilcdc_load(struct drm_device *dev, unsigned 
> long flags)
>  
>   DBG("Maximum Pixel Clock Value %dKHz", priv->max_pixelclock);
>  
> - pm_runtime_enable(dev->dev);
> + pm_runtime_enable(dev);
>  
>   /* Determine LCD IP Version */
> - pm_runtime_get_sync(dev->dev);
> - switch (tilcdc_read(dev, LCDC_PID_REG)) {
> + pm_runtime_get_sync(dev);
> + switch (tilcdc_read(ddev, LCDC_PID_REG)) {
>   case 0x4c100102:
>   priv->rev = 1;
>   break;
> @@ -316,14 +322,14 @@ static int tilcdc_load(struct drm_device *dev, unsigned 
> long flags)
>   priv->rev = 2;
>   break;
>   default:
> - dev_warn(dev->dev, "Unknown PID Reg value 0x%08x, "
> - "defaulting to LCD revision 1\n",
> - tilcdc_read(dev, LCDC_PID_REG));
> + dev_warn(dev, "Unknown PID Reg value 0x%08x, "
> + "defaulting to LCD revision 1\n",
> + tilcdc_read(ddev, LCDC_PID_REG));
>   priv->rev = 1;
>   break;
>   }
>  
> - pm_runtime_put_sync(dev->dev);
> + pm_runtime_put_sync(dev);
>  
>   if (priv->rev == 1) {
>   DBG("Revision 1 LCDC supports only RGB565 format");
> @@ -356,74 +362,82 @@ static int tilcdc_load(struct drm_device *dev, unsigned 
> long flags)
>   }
> 

[PATCH 3/4] drm/tilcdc: Stop using struct drm_driver load() callback

2016-10-19 Thread Jyri Sarha
Stop using struct drm_driver load() callback. The load() callback
should not be used anymore. Instead the drm_device is allocated with
drm_dev_alloc() and registered with drm_dev_register() only after the
driver is completely initialized.

Signed-off-by: Jyri Sarha 
---
 drivers/gpu/drm/tilcdc/tilcdc_drv.c | 103 
 1 file changed, 58 insertions(+), 45 deletions(-)

diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c 
b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index 231f2c7..2dca822 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -230,25 +230,31 @@ static int tilcdc_unload(struct drm_device *dev)
return 0;
 }

-static int tilcdc_load(struct drm_device *dev, unsigned long flags)
+static int tilcdc_init(struct drm_driver *ddrv, struct device *dev)
 {
-   struct platform_device *pdev = dev->platformdev;
-   struct device_node *node = pdev->dev.of_node;
+   struct drm_device *ddev;
+   struct platform_device *pdev = to_platform_device(dev);
+   struct device_node *node = dev->of_node;
struct tilcdc_drm_private *priv;
struct resource *res;
u32 bpp = 0;
int ret;

-   priv = devm_kzalloc(dev->dev, sizeof(*priv), GFP_KERNEL);
+   priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
if (!priv) {
-   dev_err(dev->dev, "failed to allocate private data\n");
+   dev_err(dev, "failed to allocate private data\n");
return -ENOMEM;
}

-   dev->dev_private = priv;
+   ddev = drm_dev_alloc(ddrv, dev);
+   if (IS_ERR(ddev))
+   return PTR_ERR(ddev);
+
+   ddev->platformdev = pdev;
+   ddev->dev_private = priv;

priv->is_componentized =
-   tilcdc_get_external_components(dev->dev, NULL) > 0;
+   tilcdc_get_external_components(dev, NULL) > 0;

priv->wq = alloc_ordered_workqueue("tilcdc", 0);
if (!priv->wq) {
@@ -258,21 +264,21 @@ static int tilcdc_load(struct drm_device *dev, unsigned 
long flags)

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) {
-   dev_err(dev->dev, "failed to get memory resource\n");
+   dev_err(dev, "failed to get memory resource\n");
ret = -EINVAL;
goto fail_free_wq;
}

priv->mmio = ioremap_nocache(res->start, resource_size(res));
if (!priv->mmio) {
-   dev_err(dev->dev, "failed to ioremap\n");
+   dev_err(dev, "failed to ioremap\n");
ret = -ENOMEM;
goto fail_free_wq;
}

-   priv->clk = clk_get(dev->dev, "fck");
+   priv->clk = clk_get(dev, "fck");
if (IS_ERR(priv->clk)) {
-   dev_err(dev->dev, "failed to get functional clock\n");
+   dev_err(dev, "failed to get functional clock\n");
ret = -ENODEV;
goto fail_iounmap;
}
@@ -282,7 +288,7 @@ static int tilcdc_load(struct drm_device *dev, unsigned 
long flags)
ret = cpufreq_register_notifier(>freq_transition,
CPUFREQ_TRANSITION_NOTIFIER);
if (ret) {
-   dev_err(dev->dev, "failed to register cpufreq notifier\n");
+   dev_err(dev, "failed to register cpufreq notifier\n");
goto fail_put_clk;
}
 #endif
@@ -303,11 +309,11 @@ static int tilcdc_load(struct drm_device *dev, unsigned 
long flags)

DBG("Maximum Pixel Clock Value %dKHz", priv->max_pixelclock);

-   pm_runtime_enable(dev->dev);
+   pm_runtime_enable(dev);

/* Determine LCD IP Version */
-   pm_runtime_get_sync(dev->dev);
-   switch (tilcdc_read(dev, LCDC_PID_REG)) {
+   pm_runtime_get_sync(dev);
+   switch (tilcdc_read(ddev, LCDC_PID_REG)) {
case 0x4c100102:
priv->rev = 1;
break;
@@ -316,14 +322,14 @@ static int tilcdc_load(struct drm_device *dev, unsigned 
long flags)
priv->rev = 2;
break;
default:
-   dev_warn(dev->dev, "Unknown PID Reg value 0x%08x, "
-   "defaulting to LCD revision 1\n",
-   tilcdc_read(dev, LCDC_PID_REG));
+   dev_warn(dev, "Unknown PID Reg value 0x%08x, "
+   "defaulting to LCD revision 1\n",
+   tilcdc_read(ddev, LCDC_PID_REG));
priv->rev = 1;
break;
}

-   pm_runtime_put_sync(dev->dev);
+   pm_runtime_put_sync(dev);

if (priv->rev == 1) {
DBG("Revision 1 LCDC supports only RGB565 format");
@@ -356,74 +362,82 @@ static int tilcdc_load(struct drm_device *dev, unsigned 
long flags)
}
}

-   ret = modeset_init(dev);
+   ret = modeset_init(ddev);
if (ret < 0) {
-   dev_err(dev->dev, "failed to initialize mode