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>
This commit is contained in:
committed by
Dave Airlie
parent
d6f76f3707
commit
dc28aa072f
@@ -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)
|
|||||||
|
|
||||||
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 {
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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");
|
||||||
|
|||||||
Reference in New Issue
Block a user