aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenoit Parrot <bparrot@ti.com>2013-06-18 18:18:31 -0400
committerDave Airlie <airlied@redhat.com>2013-06-20 00:08:01 -0400
commitdc28aa072f502433b6adc5c9ae8f56955c07580a (patch)
tree1ad878f61cc05cd5005be10573e9024d6753b82a
parentd6f76f3707b809c1a7f7b7a931f6e7aaa861e0e2 (diff)
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: Benoit Parrot <bparrot@ti.com> Acked-by: Rob Clark <robdclark@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--drivers/gpu/drm/tilcdc/tilcdc_drv.c12
-rw-r--r--drivers/gpu/drm/tilcdc/tilcdc_drv.h1
-rw-r--r--drivers/gpu/drm/tilcdc/tilcdc_panel.c2
-rw-r--r--drivers/gpu/drm/tilcdc/tilcdc_slave.c2
-rw-r--r--drivers/gpu/drm/tilcdc/tilcdc_tfp410.c2
5 files changed, 18 insertions, 1 deletions
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index 2b5461bcd9fb..f2a6528ddef0 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)
157 struct platform_device *pdev = dev->platformdev; 157 struct platform_device *pdev = dev->platformdev;
158 struct device_node *node = pdev->dev.of_node; 158 struct device_node *node = pdev->dev.of_node;
159 struct tilcdc_drm_private *priv; 159 struct tilcdc_drm_private *priv;
160 struct tilcdc_module *mod;
160 struct resource *res; 161 struct resource *res;
162 u32 bpp = 0;
161 int ret; 163 int ret;
162 164
163 priv = kzalloc(sizeof(*priv), GFP_KERNEL); 165 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
@@ -256,7 +258,15 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
256 258
257 platform_set_drvdata(pdev, dev); 259 platform_set_drvdata(pdev, dev);
258 260
259 priv->fbdev = drm_fbdev_cma_init(dev, 16, 261
262 list_for_each_entry(mod, &module_list, list) {
263 DBG("%s: preferred_bpp: %d", mod->name, mod->preferred_bpp);
264 bpp = mod->preferred_bpp;
265 if (bpp > 0)
266 break;
267 }
268
269 priv->fbdev = drm_fbdev_cma_init(dev, bpp,
260 dev->mode_config.num_crtc, 270 dev->mode_config.num_crtc,
261 dev->mode_config.num_connector); 271 dev->mode_config.num_connector);
262 272
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.h b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
index 8242b5a4307b..090684341fdb 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.h
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
@@ -89,6 +89,7 @@ struct tilcdc_module {
89 const char *name; 89 const char *name;
90 struct list_head list; 90 struct list_head list;
91 const struct tilcdc_module_ops *funcs; 91 const struct tilcdc_module_ops *funcs;
92 unsigned int preferred_bpp;
92}; 93};
93 94
94void tilcdc_module_init(struct tilcdc_module *mod, const char *name, 95void 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 09176654fddb..86c67329b605 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)
393 goto fail; 393 goto fail;
394 } 394 }
395 395
396 mod->preferred_bpp = panel_mod->info->bpp;
397
396 panel_mod->backlight = of_find_backlight_by_node(node); 398 panel_mod->backlight = of_find_backlight_by_node(node);
397 if (panel_mod->backlight) 399 if (panel_mod->backlight)
398 dev_info(&pdev->dev, "found backlight\n"); 400 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 db1d2fc9dfb5..8bf4fd19181c 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)
323 goto fail; 323 goto fail;
324 } 324 }
325 325
326 mod->preferred_bpp = slave_info.bpp;
327
326 i2c_node = of_find_node_by_phandle(i2c_phandle); 328 i2c_node = of_find_node_by_phandle(i2c_phandle);
327 if (!i2c_node) { 329 if (!i2c_node) {
328 dev_err(&pdev->dev, "could not get i2c bus node\n"); 330 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 a36788fbcd98..925c7cddeff9 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)
354 goto fail; 354 goto fail;
355 } 355 }
356 356
357 mod->preferred_bpp = dvi_info.bpp;
358
357 i2c_node = of_find_node_by_phandle(i2c_phandle); 359 i2c_node = of_find_node_by_phandle(i2c_phandle);
358 if (!i2c_node) { 360 if (!i2c_node) {
359 dev_err(&pdev->dev, "could not get i2c bus node\n"); 361 dev_err(&pdev->dev, "could not get i2c bus node\n");