Skip to content

Commit

Permalink
drm/tilcdc: Choose console BPP that supports RGB
Browse files Browse the repository at this point in the history
commit c566538 upstream.

Choose console BPP that supports RGB and remove the old fbdev bpp
selection code. LCDC on AM335x has red and blue wires switched between
24 bit and 16 bit colors. If 24 format is wired for RGB colors, the 16
bit format is wired for BGR. drm_fbdev_cma_init() does not currently
like anything else but RGB formats, so we must choose such bytes per
pixel value that supports RGB.

Signed-off-by: Jyri Sarha <[email protected]>
Reviewed-by: Tomi Valkeinen <[email protected]>
  • Loading branch information
Jyri Sarha committed Sep 2, 2016
1 parent 9f6aed1 commit 984edb0
Show file tree
Hide file tree
Showing 6 changed files with 9 additions and 19 deletions.
14 changes: 5 additions & 9 deletions drivers/gpu/drm/tilcdc/tilcdc_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,6 @@ 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;
Expand Down Expand Up @@ -336,6 +335,7 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
DBG("Revision 1 LCDC supports only RGB565 format");
priv->pixelformats = tilcdc_rev1_formats;
priv->num_pixelformats = ARRAY_SIZE(tilcdc_rev1_formats);
bpp = 16;
} else {
const char *str = "\0";

Expand All @@ -345,17 +345,20 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
priv->pixelformats = tilcdc_crossed_formats;
priv->num_pixelformats =
ARRAY_SIZE(tilcdc_crossed_formats);
bpp = 32; /* Choose bpp with RGB support for fbdef */
} else if (0 == strcmp(str, "straight")) {
DBG("Configured for straight blue and red wires");
priv->pixelformats = tilcdc_straight_formats;
priv->num_pixelformats =
ARRAY_SIZE(tilcdc_straight_formats);
bpp = 16; /* Choose bpp with RGB support for fbdef */
} else {
DBG("Blue and red wiring '%s' unknown, use legacy mode",
str);
priv->pixelformats = tilcdc_legacy_formats;
priv->num_pixelformats =
ARRAY_SIZE(tilcdc_legacy_formats);
bpp = 16; /* This is just a guess */
}
}

Expand All @@ -372,7 +375,7 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
if (ret < 0)
goto fail_mode_config_cleanup;

ret = tilcdc_add_external_encoders(dev, &bpp);
ret = tilcdc_add_external_encoders(dev);
if (ret < 0)
goto fail_component_cleanup;
}
Expand All @@ -395,13 +398,6 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
goto fail_vblank_cleanup;
}

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;
}

drm_mode_config_reset(dev);

priv->fbdev = drm_fbdev_cma_init(dev, bpp,
Expand Down
1 change: 0 additions & 1 deletion drivers/gpu/drm/tilcdc/tilcdc_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,6 @@ 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,
Expand Down
7 changes: 3 additions & 4 deletions drivers/gpu/drm/tilcdc/tilcdc_external.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ static int tilcdc_external_mode_valid(struct drm_connector *connector,
return MODE_OK;
}

static int tilcdc_add_external_encoder(struct drm_device *dev, int *bpp,
static int tilcdc_add_external_encoder(struct drm_device *dev,
struct drm_connector *connector)
{
struct tilcdc_drm_private *priv = dev->dev_private;
Expand All @@ -64,7 +64,6 @@ static int tilcdc_add_external_encoder(struct drm_device *dev, int *bpp,
/* Only tda998x is supported at the moment. */
tilcdc_crtc_set_simulate_vesa_sync(priv->crtc, true);
tilcdc_crtc_set_panel_info(priv->crtc, &panel_info_tda998x);
*bpp = panel_info_tda998x.bpp;

connector_funcs = devm_kzalloc(dev->dev, sizeof(*connector_funcs),
GFP_KERNEL);
Expand Down Expand Up @@ -94,7 +93,7 @@ static int tilcdc_add_external_encoder(struct drm_device *dev, int *bpp,
return 0;
}

int tilcdc_add_external_encoders(struct drm_device *dev, int *bpp)
int tilcdc_add_external_encoders(struct drm_device *dev)
{
struct tilcdc_drm_private *priv = dev->dev_private;
struct drm_connector *connector;
Expand All @@ -108,7 +107,7 @@ int tilcdc_add_external_encoders(struct drm_device *dev, int *bpp)
if (connector == priv->connectors[i])
found = true;
if (!found) {
ret = tilcdc_add_external_encoder(dev, bpp, connector);
ret = tilcdc_add_external_encoder(dev, connector);
if (ret)
return ret;
}
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/tilcdc/tilcdc_external.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
#ifndef __TILCDC_EXTERNAL_H__
#define __TILCDC_EXTERNAL_H__

int tilcdc_add_external_encoders(struct drm_device *dev, int *bpp);
int tilcdc_add_external_encoders(struct drm_device *dev);
void tilcdc_remove_external_encoders(struct drm_device *dev);
int tilcdc_get_external_components(struct device *dev,
struct component_match **match);
Expand Down
2 changes: 0 additions & 2 deletions drivers/gpu/drm/tilcdc/tilcdc_panel.c
Original file line number Diff line number Diff line change
Expand Up @@ -406,8 +406,6 @@ static int panel_probe(struct platform_device *pdev)
goto fail_timings;
}

mod->preferred_bpp = panel_mod->info->bpp;

return 0;

fail_timings:
Expand Down
2 changes: 0 additions & 2 deletions drivers/gpu/drm/tilcdc/tilcdc_tfp410.c
Original file line number Diff line number Diff line change
Expand Up @@ -336,8 +336,6 @@ 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");
Expand Down

0 comments on commit 984edb0

Please sign in to comment.