diff options
author | Benoit Parrot <bparrot@ti.com> | 2013-06-18 18:18:31 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-06-20 00:08:01 -0400 |
commit | dc28aa072f502433b6adc5c9ae8f56955c07580a (patch) | |
tree | 1ad878f61cc05cd5005be10573e9024d6753b82a | |
parent | d6f76f3707b809c1a7f7b7a931f6e7aaa861e0e2 (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.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_drv.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_panel.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_slave.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_tfp410.c | 2 |
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 | ||
94 | void tilcdc_module_init(struct tilcdc_module *mod, const char *name, | 95 | 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 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"); |