Commit 53574023 authored by Paul Boddie's avatar Paul Boddie Committed by Paul Cercueil

drm/ingenic: Fix support for JZ4780 HDMI output

We have to make sure that
- JZ_LCD_OSDC_ALPHAEN is set
- plane f0 is disabled as it's not working yet

Tested on MIPS Creator CI20 board.
Signed-off-by: default avatarPaul Boddie <paul@boddie.org.uk>
Signed-off-by: default avatarEzequiel Garcia <ezequiel@collabora.com>
Signed-off-by: default avatarH. Nikolaus Schaller <hns@goldelico.com>
Fixes: ef2f5d0a ("drm/ingenic: prepare ingenic drm for later addition of JZ4780")
Signed-off-by: default avatarPaul Cercueil <paul@crapouillou.net>
[pcercuei: add proper fixes commit, slightly reword commit description]
Link: https://patchwork.freedesktop.org/patch/msgid/9d3a2000d2bb014f1afb0613537bdc523202135d.1644681054.git.hns@goldelico.com
parent c6fc8364
...@@ -65,8 +65,10 @@ struct ingenic_dma_hwdescs { ...@@ -65,8 +65,10 @@ struct ingenic_dma_hwdescs {
struct jz_soc_info { struct jz_soc_info {
bool needs_dev_clk; bool needs_dev_clk;
bool has_osd; bool has_osd;
bool has_alpha;
bool map_noncoherent; bool map_noncoherent;
bool use_extended_hwdesc; bool use_extended_hwdesc;
bool plane_f0_not_working;
unsigned int max_width, max_height; unsigned int max_width, max_height;
const u32 *formats_f0, *formats_f1; const u32 *formats_f0, *formats_f1;
unsigned int num_formats_f0, num_formats_f1; unsigned int num_formats_f0, num_formats_f1;
...@@ -453,7 +455,7 @@ static int ingenic_drm_plane_atomic_check(struct drm_plane *plane, ...@@ -453,7 +455,7 @@ static int ingenic_drm_plane_atomic_check(struct drm_plane *plane,
if (!crtc) if (!crtc)
return 0; return 0;
if (plane == &priv->f0) if (priv->soc_info->plane_f0_not_working && plane == &priv->f0)
return -EINVAL; return -EINVAL;
crtc_state = drm_atomic_get_existing_crtc_state(state, crtc_state = drm_atomic_get_existing_crtc_state(state,
...@@ -1055,6 +1057,7 @@ static int ingenic_drm_bind(struct device *dev, bool has_components) ...@@ -1055,6 +1057,7 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)
long parent_rate; long parent_rate;
unsigned int i, clone_mask = 0; unsigned int i, clone_mask = 0;
int ret, irq; int ret, irq;
u32 osdc = 0;
soc_info = of_device_get_match_data(dev); soc_info = of_device_get_match_data(dev);
if (!soc_info) { if (!soc_info) {
...@@ -1312,7 +1315,10 @@ static int ingenic_drm_bind(struct device *dev, bool has_components) ...@@ -1312,7 +1315,10 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)
/* Enable OSD if available */ /* Enable OSD if available */
if (soc_info->has_osd) if (soc_info->has_osd)
regmap_write(priv->map, JZ_REG_LCD_OSDC, JZ_LCD_OSDC_OSDEN); osdc |= JZ_LCD_OSDC_OSDEN;
if (soc_info->has_alpha)
osdc |= JZ_LCD_OSDC_ALPHAEN;
regmap_write(priv->map, JZ_REG_LCD_OSDC, osdc);
mutex_init(&priv->clk_mutex); mutex_init(&priv->clk_mutex);
priv->clock_nb.notifier_call = ingenic_drm_update_pixclk; priv->clock_nb.notifier_call = ingenic_drm_update_pixclk;
...@@ -1511,7 +1517,9 @@ static const struct jz_soc_info jz4770_soc_info = { ...@@ -1511,7 +1517,9 @@ static const struct jz_soc_info jz4770_soc_info = {
static const struct jz_soc_info jz4780_soc_info = { static const struct jz_soc_info jz4780_soc_info = {
.needs_dev_clk = true, .needs_dev_clk = true,
.has_osd = true, .has_osd = true,
.has_alpha = true,
.use_extended_hwdesc = true, .use_extended_hwdesc = true,
.plane_f0_not_working = true, /* REVISIT */
.max_width = 4096, .max_width = 4096,
.max_height = 2048, .max_height = 2048,
.formats_f1 = jz4770_formats_f1, .formats_f1 = jz4770_formats_f1,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment