Commit dc28aa07 authored by Benoit Parrot's avatar Benoit Parrot Committed by Dave Airlie

gpu:drm:tilcdc: get preferred_bpp value from DT

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: default avatarBenoit Parrot <bparrot@ti.com>
Acked-by: default avatarRob Clark <robdclark@gmail.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent d6f76f37
...@@ -157,7 +157,9 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags) ...@@ -157,7 +157,9 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
struct platform_device *pdev = dev->platformdev; struct platform_device *pdev = dev->platformdev;
struct device_node *node = pdev->dev.of_node; struct device_node *node = pdev->dev.of_node;
struct tilcdc_drm_private *priv; struct tilcdc_drm_private *priv;
struct tilcdc_module *mod;
struct resource *res; struct resource *res;
u32 bpp = 0;
int ret; int ret;
priv = kzalloc(sizeof(*priv), GFP_KERNEL); priv = kzalloc(sizeof(*priv), GFP_KERNEL);
...@@ -256,7 +258,15 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags) ...@@ -256,7 +258,15 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
platform_set_drvdata(pdev, dev); 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_crtc,
dev->mode_config.num_connector); dev->mode_config.num_connector);
......
...@@ -89,6 +89,7 @@ struct tilcdc_module { ...@@ -89,6 +89,7 @@ struct tilcdc_module {
const char *name; const char *name;
struct list_head list; struct list_head list;
const struct tilcdc_module_ops *funcs; const struct tilcdc_module_ops *funcs;
unsigned int preferred_bpp;
}; };
void tilcdc_module_init(struct tilcdc_module *mod, const char *name, void tilcdc_module_init(struct tilcdc_module *mod, const char *name,
......
...@@ -393,6 +393,8 @@ static int panel_probe(struct platform_device *pdev) ...@@ -393,6 +393,8 @@ static int panel_probe(struct platform_device *pdev)
goto fail; goto fail;
} }
mod->preferred_bpp = panel_mod->info->bpp;
panel_mod->backlight = of_find_backlight_by_node(node); panel_mod->backlight = of_find_backlight_by_node(node);
if (panel_mod->backlight) if (panel_mod->backlight)
dev_info(&pdev->dev, "found backlight\n"); dev_info(&pdev->dev, "found backlight\n");
......
...@@ -323,6 +323,8 @@ static int slave_probe(struct platform_device *pdev) ...@@ -323,6 +323,8 @@ static int slave_probe(struct platform_device *pdev)
goto fail; goto fail;
} }
mod->preferred_bpp = slave_info.bpp;
i2c_node = of_find_node_by_phandle(i2c_phandle); i2c_node = of_find_node_by_phandle(i2c_phandle);
if (!i2c_node) { if (!i2c_node) {
dev_err(&pdev->dev, "could not get i2c bus node\n"); dev_err(&pdev->dev, "could not get i2c bus node\n");
......
...@@ -354,6 +354,8 @@ static int tfp410_probe(struct platform_device *pdev) ...@@ -354,6 +354,8 @@ static int tfp410_probe(struct platform_device *pdev)
goto fail; goto fail;
} }
mod->preferred_bpp = dvi_info.bpp;
i2c_node = of_find_node_by_phandle(i2c_phandle); i2c_node = of_find_node_by_phandle(i2c_phandle);
if (!i2c_node) { if (!i2c_node) {
dev_err(&pdev->dev, "could not get i2c bus node\n"); dev_err(&pdev->dev, "could not get i2c bus node\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment