[PATCH v5] drm/imx: convey the pixelclk-active and de-active flags from DT to the ipu-di driver
On Tue, Jul 12, 2016 at 06:50:36PM +0200, Philipp Zabel wrote: > From: Lothar WaÃmann > > The 'de-active' and 'pixelclk-active' DT properties are evaluated > by of_parse_display_timing() called from of_get_drm_display_mode(), > but later lost in the conversion from videomode.flags to > drm_display_mode.flags. > Enhance of_get_drm_display_mode() to also return the bus flags in a > separate variable, so that they can be passed on to the ipu-di > driver. > > Signed-off-by: Lothar WaÃmann > Signed-off-by: Philipp Zabel > --- > Changes since v4: > - Rebased onto imx-drm/next after atomic modeset changes > --- > drivers/gpu/drm/drm_modes.c| 5 - > drivers/gpu/drm/imx/imx-ldb.c | 9 - > drivers/gpu/drm/imx/parallel-display.c | 10 +++--- > include/drm/drm_modes.h| 2 +- > 4 files changed, 20 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c > index 51804e5..1570487 100644 > --- a/drivers/gpu/drm/drm_modes.c > +++ b/drivers/gpu/drm/drm_modes.c > @@ -687,7 +687,8 @@ EXPORT_SYMBOL_GPL(drm_bus_flags_from_videomode); > * 0 on success, a negative errno code when no of videomode node was found. > */ > int of_get_drm_display_mode(struct device_node *np, > - struct drm_display_mode *dmode, int index) > + struct drm_display_mode *dmode, u32 *bus_flags, Failed to update the kerneldoc. Please provide a fixup patch. Also I think checking this should be part of review. Just run $ make htmldocs and make sure the output is looking good and there's no warnings. -Daniel > + int index) > { > struct videomode vm; > int ret; > @@ -697,6 +698,8 @@ int of_get_drm_display_mode(struct device_node *np, > return ret; > > drm_display_mode_from_videomode(, dmode); > + if (bus_flags) > + drm_bus_flags_from_videomode(, bus_flags); > > pr_debug("%s: got %dx%d display mode from %s\n", > of_node_full_name(np), vm.hactive, vm.vactive, np->name); > diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c > index 5d2831d..dc2b420 100644 > --- a/drivers/gpu/drm/imx/imx-ldb.c > +++ b/drivers/gpu/drm/imx/imx-ldb.c > @@ -66,6 +66,7 @@ struct imx_ldb_channel { > struct drm_display_mode mode; > int mode_valid; > u32 bus_format; > + u32 bus_flags; > }; > > static inline struct imx_ldb_channel *con_to_imx_ldb_ch(struct drm_connector > *c) > @@ -382,8 +383,13 @@ static int imx_ldb_encoder_atomic_check(struct > drm_encoder *encoder, > u32 bus_format = imx_ldb_ch->bus_format; > > /* Bus format description in DT overrides connector display info. */ > - if (!bus_format && di->num_bus_formats) > + if (!bus_format && di->num_bus_formats) { > bus_format = di->bus_formats[0]; > + imx_crtc_state->bus_flags = di->bus_flags; > + } else { > + bus_format = imx_ldb_ch->bus_format; > + imx_crtc_state->bus_flags = imx_ldb_ch->bus_flags; > + } > switch (bus_format) { > case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG: > imx_crtc_state->bus_format = MEDIA_BUS_FMT_RGB666_1X18; > @@ -677,6 +683,7 @@ static int imx_ldb_bind(struct device *dev, struct device > *master, void *data) > /* fallback to display-timings node */ > ret = of_get_drm_display_mode(child, > >mode, > + > >bus_flags, > > OF_USE_NATIVE_MODE); > if (!ret) > channel->mode_valid = 1; > diff --git a/drivers/gpu/drm/imx/parallel-display.c > b/drivers/gpu/drm/imx/parallel-display.c > index 4abac21..0b96653 100644 > --- a/drivers/gpu/drm/imx/parallel-display.c > +++ b/drivers/gpu/drm/imx/parallel-display.c > @@ -33,6 +33,7 @@ struct imx_parallel_display { > void *edid; > int edid_len; > u32 bus_format; > + u32 bus_flags; > struct drm_display_mode mode; > struct drm_panel *panel; > }; > @@ -79,6 +80,7 @@ static int imx_pd_connector_get_modes(struct drm_connector > *connector) > return -EINVAL; > > ret = of_get_drm_display_mode(np, >mode, > + >bus_flags, > OF_USE_NATIVE_MODE); > if (ret) > return ret; > @@ -124,11 +126,13 @@ static int imx_pd_encoder_atomic_check(struct > drm_encoder *encoder, > struct drm_display_info *di = _state->connector->display_info; > struct imx_parallel_display *imxpd = enc_to_imxpd(encoder); > > - imx_crtc_state->bus_flags = di->bus_flags; > - if (!imxpd->bus_format
[PATCH v5] drm/imx: convey the pixelclk-active and de-active flags from DT to the ipu-di driver
Hi, On Thu, 14 Jul 2016 11:47:52 +0200 Philipp Zabel wrote: > Hi Lothar, > > Am Dienstag, den 12.07.2016, 18:50 +0200 schrieb Philipp Zabel: > > From: Lothar WaÃmann > > > > The 'de-active' and 'pixelclk-active' DT properties are evaluated > > by of_parse_display_timing() called from of_get_drm_display_mode(), > > but later lost in the conversion from videomode.flags to > > drm_display_mode.flags. > > Enhance of_get_drm_display_mode() to also return the bus flags in a > > separate variable, so that they can be passed on to the ipu-di > > driver. > > > > Signed-off-by: Lothar WaÃmann > > Signed-off-by: Philipp Zabel > > --- > > Changes since v4: > > - Rebased onto imx-drm/next after atomic modeset changes > > could you double check > git://git.pengutronix.de/git/pza/linux.git imx-drm/next > works for you? > Let me know if you agree with my changes to your patch. > I'm just back from vacation and will check this soon. Lothar WaÃmann
[PATCH v5] drm/imx: convey the pixelclk-active and de-active flags from DT to the ipu-di driver
Hi Lothar, Am Dienstag, den 12.07.2016, 18:50 +0200 schrieb Philipp Zabel: > From: Lothar WaÃmann > > The 'de-active' and 'pixelclk-active' DT properties are evaluated > by of_parse_display_timing() called from of_get_drm_display_mode(), > but later lost in the conversion from videomode.flags to > drm_display_mode.flags. > Enhance of_get_drm_display_mode() to also return the bus flags in a > separate variable, so that they can be passed on to the ipu-di > driver. > > Signed-off-by: Lothar WaÃmann > Signed-off-by: Philipp Zabel > --- > Changes since v4: > - Rebased onto imx-drm/next after atomic modeset changes could you double check git://git.pengutronix.de/git/pza/linux.git imx-drm/next works for you? Let me know if you agree with my changes to your patch. regards Philipp
[PATCH v5] drm/imx: convey the pixelclk-active and de-active flags from DT to the ipu-di driver
From: Lothar WaÃmannThe 'de-active' and 'pixelclk-active' DT properties are evaluated by of_parse_display_timing() called from of_get_drm_display_mode(), but later lost in the conversion from videomode.flags to drm_display_mode.flags. Enhance of_get_drm_display_mode() to also return the bus flags in a separate variable, so that they can be passed on to the ipu-di driver. Signed-off-by: Lothar WaÃmann Signed-off-by: Philipp Zabel --- Changes since v4: - Rebased onto imx-drm/next after atomic modeset changes --- drivers/gpu/drm/drm_modes.c| 5 - drivers/gpu/drm/imx/imx-ldb.c | 9 - drivers/gpu/drm/imx/parallel-display.c | 10 +++--- include/drm/drm_modes.h| 2 +- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c index 51804e5..1570487 100644 --- a/drivers/gpu/drm/drm_modes.c +++ b/drivers/gpu/drm/drm_modes.c @@ -687,7 +687,8 @@ EXPORT_SYMBOL_GPL(drm_bus_flags_from_videomode); * 0 on success, a negative errno code when no of videomode node was found. */ int of_get_drm_display_mode(struct device_node *np, - struct drm_display_mode *dmode, int index) + struct drm_display_mode *dmode, u32 *bus_flags, + int index) { struct videomode vm; int ret; @@ -697,6 +698,8 @@ int of_get_drm_display_mode(struct device_node *np, return ret; drm_display_mode_from_videomode(, dmode); + if (bus_flags) + drm_bus_flags_from_videomode(, bus_flags); pr_debug("%s: got %dx%d display mode from %s\n", of_node_full_name(np), vm.hactive, vm.vactive, np->name); diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c index 5d2831d..dc2b420 100644 --- a/drivers/gpu/drm/imx/imx-ldb.c +++ b/drivers/gpu/drm/imx/imx-ldb.c @@ -66,6 +66,7 @@ struct imx_ldb_channel { struct drm_display_mode mode; int mode_valid; u32 bus_format; + u32 bus_flags; }; static inline struct imx_ldb_channel *con_to_imx_ldb_ch(struct drm_connector *c) @@ -382,8 +383,13 @@ static int imx_ldb_encoder_atomic_check(struct drm_encoder *encoder, u32 bus_format = imx_ldb_ch->bus_format; /* Bus format description in DT overrides connector display info. */ - if (!bus_format && di->num_bus_formats) + if (!bus_format && di->num_bus_formats) { bus_format = di->bus_formats[0]; + imx_crtc_state->bus_flags = di->bus_flags; + } else { + bus_format = imx_ldb_ch->bus_format; + imx_crtc_state->bus_flags = imx_ldb_ch->bus_flags; + } switch (bus_format) { case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG: imx_crtc_state->bus_format = MEDIA_BUS_FMT_RGB666_1X18; @@ -677,6 +683,7 @@ static int imx_ldb_bind(struct device *dev, struct device *master, void *data) /* fallback to display-timings node */ ret = of_get_drm_display_mode(child, >mode, + >bus_flags, OF_USE_NATIVE_MODE); if (!ret) channel->mode_valid = 1; diff --git a/drivers/gpu/drm/imx/parallel-display.c b/drivers/gpu/drm/imx/parallel-display.c index 4abac21..0b96653 100644 --- a/drivers/gpu/drm/imx/parallel-display.c +++ b/drivers/gpu/drm/imx/parallel-display.c @@ -33,6 +33,7 @@ struct imx_parallel_display { void *edid; int edid_len; u32 bus_format; + u32 bus_flags; struct drm_display_mode mode; struct drm_panel *panel; }; @@ -79,6 +80,7 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector) return -EINVAL; ret = of_get_drm_display_mode(np, >mode, + >bus_flags, OF_USE_NATIVE_MODE); if (ret) return ret; @@ -124,11 +126,13 @@ static int imx_pd_encoder_atomic_check(struct drm_encoder *encoder, struct drm_display_info *di = _state->connector->display_info; struct imx_parallel_display *imxpd = enc_to_imxpd(encoder); - imx_crtc_state->bus_flags = di->bus_flags; - if (!imxpd->bus_format && di->num_bus_formats) + if (!imxpd->bus_format && di->num_bus_formats) { + imx_crtc_state->bus_flags = di->bus_flags; imx_crtc_state->bus_format = di->bus_formats[0]; - else + } else { + imx_crtc_state->bus_flags = imxpd->bus_flags; imx_crtc_state->bus_format = imxpd->bus_format; + }