Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -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);

+1 −0
Original line number Diff line number Diff line
@@ -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,
+2 −0
Original line number Diff line number Diff line
@@ -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");
+2 −0
Original line number Diff line number Diff line
@@ -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");
+2 −0
Original line number Diff line number Diff line
@@ -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");