[PATCH 1/1] gpu:drm:tilcdc: get preferred_bpp value from DT

Rob Clark robdclark at gmail.com
Tue Jun 18 17:12:54 PDT 2013


On Tue, Jun 18, 2013 at 6:18 PM, Benoit Parrot <bparrot at ti.com> wrote:
> The preferred_bpp value in currently hard-coded to 16.
> This causes color corruption on the am335x-evm lcd panel which
> requires 32 bpp instead. This changes attempts to use the configured
> bpp value from the DT or built-in panel-info struct.
>
> Signed-off-by: Benoit Parrot <bparrot at ti.com>

Acked-by: Rob Clark <robdclark at gmail.com>

> ---
>  drivers/gpu/drm/tilcdc/tilcdc_drv.c    |   12 +++++++++++-
>  drivers/gpu/drm/tilcdc/tilcdc_drv.h    |    1 +
>  drivers/gpu/drm/tilcdc/tilcdc_panel.c  |    2 ++
>  drivers/gpu/drm/tilcdc/tilcdc_slave.c  |    2 ++
>  drivers/gpu/drm/tilcdc/tilcdc_tfp410.c |    2 ++
>  5 files changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index 2b5461b..f2a6528 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -157,7 +157,9 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
>         struct platform_device *pdev = dev->platformdev;
>         struct device_node *node = pdev->dev.of_node;
>         struct tilcdc_drm_private *priv;
> +       struct tilcdc_module *mod;
>         struct resource *res;
> +       u32 bpp = 0;
>         int ret;
>
>         priv = kzalloc(sizeof(*priv), GFP_KERNEL);
> @@ -256,7 +258,15 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
>
>         platform_set_drvdata(pdev, dev);
>
> -       priv->fbdev = drm_fbdev_cma_init(dev, 16,
> +
> +       list_for_each_entry(mod, &module_list, list) {
> +               DBG("%s: preferred_bpp: %d", mod->name, mod->preferred_bpp);
> +               bpp = mod->preferred_bpp;
> +               if (bpp > 0)
> +                       break;
> +       }
> +
> +       priv->fbdev = drm_fbdev_cma_init(dev, bpp,
>                         dev->mode_config.num_crtc,
>                         dev->mode_config.num_connector);
>
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.h b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
> index 8242b5a..0906843 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.h
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
> @@ -89,6 +89,7 @@ struct tilcdc_module {
>         const char *name;
>         struct list_head list;
>         const struct tilcdc_module_ops *funcs;
> +       unsigned int preferred_bpp;
>  };
>
>  void tilcdc_module_init(struct tilcdc_module *mod, const char *name,
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_panel.c b/drivers/gpu/drm/tilcdc/tilcdc_panel.c
> index 0917665..86c6732 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_panel.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_panel.c
> @@ -393,6 +393,8 @@ static int panel_probe(struct platform_device *pdev)
>                 goto fail;
>         }
>
> +       mod->preferred_bpp = panel_mod->info->bpp;
> +
>         panel_mod->backlight = of_find_backlight_by_node(node);
>         if (panel_mod->backlight)
>                 dev_info(&pdev->dev, "found backlight\n");
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_slave.c b/drivers/gpu/drm/tilcdc/tilcdc_slave.c
> index db1d2fc..8bf4fd1 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_slave.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_slave.c
> @@ -323,6 +323,8 @@ static int slave_probe(struct platform_device *pdev)
>                 goto fail;
>         }
>
> +       mod->preferred_bpp = slave_info.bpp;
> +
>         i2c_node = of_find_node_by_phandle(i2c_phandle);
>         if (!i2c_node) {
>                 dev_err(&pdev->dev, "could not get i2c bus node\n");
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c b/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c
> index a36788f..925c7cd 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c
> @@ -354,6 +354,8 @@ static int tfp410_probe(struct platform_device *pdev)
>                 goto fail;
>         }
>
> +       mod->preferred_bpp = dvi_info.bpp;
> +
>         i2c_node = of_find_node_by_phandle(i2c_phandle);
>         if (!i2c_node) {
>                 dev_err(&pdev->dev, "could not get i2c bus node\n");
> --
> 1.7.9.5
>


More information about the dri-devel mailing list