Message ID | 20180618132242.8673-2-tomi.valkeinen@ti.com |
---|---|
State | New |
Headers | show |
Series | [RFC,PATCHv2,1/9] drm: Add support for extracting sync signal drive edge from videomode | expand |
On Mon, Jun 18, 2018 at 04:22:34PM +0300, Tomi Valkeinen wrote: > From: Peter Ujfalusi <peter.ujfalusi@ti.com> > > The sync in some panels needs to be driven by different edge of the pixel > clock compared to data. This is reflected by the > DISPLAY_FLAGS_SYNC_(POS|NEG)EDGE in videmode flags. > Add similar similar definitions for bus_flags and convert the sync drive > edge via drm_bus_flags_from_videomode(). > > Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> > Signed-off-by: Jyri Sarha <jsarha@ti.com> > --- > drivers/gpu/drm/drm_modes.c | 15 +++++++++++---- > include/drm/drm_connector.h | 4 ++++ > 2 files changed, 15 insertions(+), 4 deletions(-) Also applied this as a dependency for patch 7/9. How do you want to deal with the remaining patches? Thierry
Hi Tomi, Thank you for the patch. On Monday, 18 June 2018 16:22:34 EEST Tomi Valkeinen wrote: > From: Peter Ujfalusi <peter.ujfalusi@ti.com> > > The sync in some panels needs to be driven by different edge of the pixel > clock compared to data. This is reflected by the > DISPLAY_FLAGS_SYNC_(POS|NEG)EDGE in videmode flags. > Add similar similar definitions for bus_flags and convert the sync drive > edge via drm_bus_flags_from_videomode(). > > Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> > Signed-off-by: Jyri Sarha <jsarha@ti.com> Given "[PATCH 08/23] drm: Add display info bus flags to specify sync signals clock edges" (https://patchwork.kernel.org/patch/10454713/), Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > drivers/gpu/drm/drm_modes.c | 15 +++++++++++---- > include/drm/drm_connector.h | 4 ++++ > 2 files changed, 15 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c > index e82b61e08f8c..1661bfc55687 100644 > --- a/drivers/gpu/drm/drm_modes.c > +++ b/drivers/gpu/drm/drm_modes.c > @@ -659,10 +659,12 @@ EXPORT_SYMBOL_GPL(drm_display_mode_to_videomode); > * drm_bus_flags_from_videomode - extract information about pixelclk and > * DE polarity from videomode and store it in a separate variable > * @vm: videomode structure to use > - * @bus_flags: information about pixelclk and DE polarity will be stored > here + * @bus_flags: information about pixelclk, sync and DE polarity will > be stored + * here > * > - * Sets DRM_BUS_FLAG_DE_(LOW|HIGH) and DRM_BUS_FLAG_PIXDATA_(POS|NEG)EDGE > - * in @bus_flags according to DISPLAY_FLAGS found in @vm > + * Sets DRM_BUS_FLAG_DE_(LOW|HIGH), DRM_BUS_FLAG_PIXDATA_(POS|NEG)EDGE and > + * DISPLAY_FLAGS_SYNC_(POS|NEG)EDGE in @bus_flags according to > DISPLAY_FLAGS + * found in @vm > */ > void drm_bus_flags_from_videomode(const struct videomode *vm, u32 > *bus_flags) { > @@ -672,6 +674,11 @@ void drm_bus_flags_from_videomode(const struct > videomode *vm, u32 *bus_flags) if (vm->flags & > DISPLAY_FLAGS_PIXDATA_NEGEDGE) > *bus_flags |= DRM_BUS_FLAG_PIXDATA_NEGEDGE; > > + if (vm->flags & DISPLAY_FLAGS_SYNC_POSEDGE) > + *bus_flags |= DRM_BUS_FLAG_SYNC_POSEDGE; > + if (vm->flags & DISPLAY_FLAGS_SYNC_NEGEDGE) > + *bus_flags |= DRM_BUS_FLAG_SYNC_NEGEDGE; > + > if (vm->flags & DISPLAY_FLAGS_DE_LOW) > *bus_flags |= DRM_BUS_FLAG_DE_LOW; > if (vm->flags & DISPLAY_FLAGS_DE_HIGH) > @@ -684,7 +691,7 @@ EXPORT_SYMBOL_GPL(drm_bus_flags_from_videomode); > * of_get_drm_display_mode - get a drm_display_mode from devicetree > * @np: device_node with the timing specification > * @dmode: will be set to the return value > - * @bus_flags: information about pixelclk and DE polarity > + * @bus_flags: information about pixelclk, sync and DE polarity > * @index: index into the list of display timings in devicetree > * > * This function is expensive and should only be used, if only one mode is > to be diff --git a/include/drm/drm_connector.h > b/include/drm/drm_connector.h index 675cc3f8cf85..8fa901637f00 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -290,6 +290,10 @@ struct drm_display_info { > #define DRM_BUS_FLAG_DATA_MSB_TO_LSB (1<<4) > /* data is transmitted LSB to MSB on the bus */ > #define DRM_BUS_FLAG_DATA_LSB_TO_MSB (1<<5) > +/* drive sync on pos. edge */ > +#define DRM_BUS_FLAG_SYNC_POSEDGE (1<<6) > +/* drive sync on neg. edge */ > +#define DRM_BUS_FLAG_SYNC_NEGEDGE (1<<7) > > /** > * @bus_flags: Additional information (like pixel signal polarity) for -- Regards, Laurent Pinchart -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c index e82b61e08f8c..1661bfc55687 100644 --- a/drivers/gpu/drm/drm_modes.c +++ b/drivers/gpu/drm/drm_modes.c @@ -659,10 +659,12 @@ EXPORT_SYMBOL_GPL(drm_display_mode_to_videomode); * drm_bus_flags_from_videomode - extract information about pixelclk and * DE polarity from videomode and store it in a separate variable * @vm: videomode structure to use - * @bus_flags: information about pixelclk and DE polarity will be stored here + * @bus_flags: information about pixelclk, sync and DE polarity will be stored + * here * - * Sets DRM_BUS_FLAG_DE_(LOW|HIGH) and DRM_BUS_FLAG_PIXDATA_(POS|NEG)EDGE - * in @bus_flags according to DISPLAY_FLAGS found in @vm + * Sets DRM_BUS_FLAG_DE_(LOW|HIGH), DRM_BUS_FLAG_PIXDATA_(POS|NEG)EDGE and + * DISPLAY_FLAGS_SYNC_(POS|NEG)EDGE in @bus_flags according to DISPLAY_FLAGS + * found in @vm */ void drm_bus_flags_from_videomode(const struct videomode *vm, u32 *bus_flags) { @@ -672,6 +674,11 @@ void drm_bus_flags_from_videomode(const struct videomode *vm, u32 *bus_flags) if (vm->flags & DISPLAY_FLAGS_PIXDATA_NEGEDGE) *bus_flags |= DRM_BUS_FLAG_PIXDATA_NEGEDGE; + if (vm->flags & DISPLAY_FLAGS_SYNC_POSEDGE) + *bus_flags |= DRM_BUS_FLAG_SYNC_POSEDGE; + if (vm->flags & DISPLAY_FLAGS_SYNC_NEGEDGE) + *bus_flags |= DRM_BUS_FLAG_SYNC_NEGEDGE; + if (vm->flags & DISPLAY_FLAGS_DE_LOW) *bus_flags |= DRM_BUS_FLAG_DE_LOW; if (vm->flags & DISPLAY_FLAGS_DE_HIGH) @@ -684,7 +691,7 @@ EXPORT_SYMBOL_GPL(drm_bus_flags_from_videomode); * of_get_drm_display_mode - get a drm_display_mode from devicetree * @np: device_node with the timing specification * @dmode: will be set to the return value - * @bus_flags: information about pixelclk and DE polarity + * @bus_flags: information about pixelclk, sync and DE polarity * @index: index into the list of display timings in devicetree * * This function is expensive and should only be used, if only one mode is to be diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 675cc3f8cf85..8fa901637f00 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -290,6 +290,10 @@ struct drm_display_info { #define DRM_BUS_FLAG_DATA_MSB_TO_LSB (1<<4) /* data is transmitted LSB to MSB on the bus */ #define DRM_BUS_FLAG_DATA_LSB_TO_MSB (1<<5) +/* drive sync on pos. edge */ +#define DRM_BUS_FLAG_SYNC_POSEDGE (1<<6) +/* drive sync on neg. edge */ +#define DRM_BUS_FLAG_SYNC_NEGEDGE (1<<7) /** * @bus_flags: Additional information (like pixel signal polarity) for