diff mbox

[1/3] drm: Add LCD display clock polarity flags

Message ID 1385998768-23512-1-git-send-email-marex@denx.de (mailing list archive)
State New, archived
Headers show

Commit Message

Marek Vasut Dec. 2, 2013, 3:39 p.m. UTC
Add DRM flags for the LCD display clock polarity so the pixelclk-active DT
property can be properly handled by drivers using the DRM API.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Dave Airlie <airlied@gmail.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Shawn Guo <shawn.guo@linaro.org>
---
 drivers/gpu/drm/drm_modes.c | 5 +++++
 include/uapi/drm/drm_mode.h | 3 +++
 2 files changed, 8 insertions(+)

Comments

Russell King - ARM Linux Dec. 2, 2013, 8:01 p.m. UTC | #1
On Mon, Dec 02, 2013 at 04:39:26PM +0100, Marek Vasut wrote:
> Add DRM flags for the LCD display clock polarity so the pixelclk-active DT
> property can be properly handled by drivers using the DRM API.

I still say that not even this should be part of the DRM mode API to
userspace.  The hint that you're changing the user API is that you're
modifying a header file below a 'uapi' directory.

The settings of double scan, sync polarity etc are all part of the
display mode specification (check CEA-861 documents).  Things like
pixel clock polarity are not part of the mode specification, they're
a property of the display itself and are independent of the mode.

Therefore, they should not be part of struct drm_mode_modeinfo.
Marek Vasut Dec. 2, 2013, 11:42 p.m. UTC | #2
Hello Russell,

> On Mon, Dec 02, 2013 at 04:39:26PM +0100, Marek Vasut wrote:
> > Add DRM flags for the LCD display clock polarity so the pixelclk-active
> > DT property can be properly handled by drivers using the DRM API.
> 
> I still say that not even this should be part of the DRM mode API to
> userspace.  The hint that you're changing the user API is that you're
> modifying a header file below a 'uapi' directory.

OK, you are right.

> The settings of double scan, sync polarity etc are all part of the
> display mode specification (check CEA-861 documents).  Things like
> pixel clock polarity are not part of the mode specification, they're
> a property of the display itself and are independent of the mode.
> 
> Therefore, they should not be part of struct drm_mode_modeinfo.

Can you please provide me with some more hint here ? As for as I understand, 
using the 'pixelclk-active' DT prop in the 'display-timings' node for this 
purpose is correct, yes ? What I don't quite grok down is how do I get this 
information from DT into the imx-drm driver.

Thanks!

Best regards,
Marek Vasut
Ville Syrjälä Dec. 3, 2013, 8:51 a.m. UTC | #3
On Mon, Dec 02, 2013 at 03:32:30PM -0500, Rob Clark wrote:
> On Mon, Dec 2, 2013 at 3:01 PM, Russell King - ARM Linux
> <linux@arm.linux.org.uk> wrote:
> > On Mon, Dec 02, 2013 at 04:39:26PM +0100, Marek Vasut wrote:
> >> Add DRM flags for the LCD display clock polarity so the pixelclk-active DT
> >> property can be properly handled by drivers using the DRM API.
> >
> > I still say that not even this should be part of the DRM mode API to
> > userspace.  The hint that you're changing the user API is that you're
> > modifying a header file below a 'uapi' directory.
> >
> > The settings of double scan, sync polarity etc are all part of the
> > display mode specification (check CEA-861 documents).  Things like
> > pixel clock polarity are not part of the mode specification, they're
> > a property of the display itself and are independent of the mode.
> >
> > Therefore, they should not be part of struct drm_mode_modeinfo.
> 
> Note that we could make them part of drm_display_mode (but
> drm_crtc_convert_to_umode() should filter them out when copying from
> drm_mode_modeinfo.. I agree this information should not be coming from
> userspace).  Seems like the sort of thing that the bridge or encoder
> could set on the adjusted_mode.

Probably better to not mix user visible and internal flags in
drm_display_mode.flags. Just makes it more difficult to add
real flags. Maybe just stick them into private_flags for the
drivers that care.
Shawn Guo Dec. 3, 2013, 11:44 a.m. UTC | #4
On Mon, Dec 02, 2013 at 04:39:26PM +0100, Marek Vasut wrote:
> Add DRM flags for the LCD display clock polarity so the pixelclk-active DT
> property can be properly handled by drivers using the DRM API.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Dave Airlie <airlied@gmail.com>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: Sascha Hauer <s.hauer@pengutronix.de>
> Cc: Shawn Guo <shawn.guo@linaro.org>
> ---
>  drivers/gpu/drm/drm_modes.c | 5 +++++
>  include/uapi/drm/drm_mode.h | 3 +++
>  2 files changed, 8 insertions(+)
> 
> diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
> index 85071a1..d1f3bfc 100644
> --- a/drivers/gpu/drm/drm_modes.c
> +++ b/drivers/gpu/drm/drm_modes.c
> @@ -537,6 +537,11 @@ int drm_display_mode_from_videomode(const struct videomode *vm,
>  		dmode->flags |= DRM_MODE_FLAG_DBLSCAN;
>  	if (vm->flags & DISPLAY_FLAGS_DOUBLECLK)
>  		dmode->flags |= DRM_MODE_FLAG_DBLCLK;
> +	if (vm->flags & DISPLAY_FLAGS_PIXDATA_POSEDGE)
> +		dmode->flags |= DRM_MODE_FLAG_PIXELCLK_PPOL;
> +	else if (vm->flags & DISPLAY_FLAGS_PIXDATA_NEGEDGE)
> +		dmode->flags |= DRM_MODE_FLAG_PIXELCLK_NPOL;
> +
>  	drm_mode_set_name(dmode);
>  
>  	return 0;
> diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
> index f104c26..a6169ca 100644
> --- a/include/uapi/drm/drm_mode.h
> +++ b/include/uapi/drm/drm_mode.h
> @@ -73,6 +73,9 @@
>  #define  DRM_MODE_FLAG_3D_TOP_AND_BOTTOM	(7<<14)
>  #define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF	(8<<14)
>  
> +/* CRTC LCD clock polarity flags. */
> +#define DRM_MODE_FLAG_PIXELCLK_PPOL		(1<<19)
> +#define DRM_MODE_FLAG_PIXELCLK_NPOL		(1<<20)

Marek,

It looks that Denis (copied) is working on the same problem, so you may
want to be aware of his effort [1][2].

Shawn

[1] http://thread.gmane.org/gmane.linux.drivers.driver-project.devel/42832
[2] http://thread.gmane.org/gmane.linux.drivers.driver-project.devel/42850/focus=279646

>  
>  /* DPMS flags */
>  /* bit compatible with the xorg definitions. */
> -- 
> 1.8.4.2
>
Russell King - ARM Linux Dec. 3, 2013, 12:07 p.m. UTC | #5
On Tue, Dec 03, 2013 at 07:44:52PM +0800, Shawn Guo wrote:
> On Mon, Dec 02, 2013 at 04:39:26PM +0100, Marek Vasut wrote:
> > Add DRM flags for the LCD display clock polarity so the pixelclk-active DT
> > property can be properly handled by drivers using the DRM API.
> > 
> > Signed-off-by: Marek Vasut <marex@denx.de>
> > Cc: Dave Airlie <airlied@gmail.com>
> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > Cc: Philipp Zabel <p.zabel@pengutronix.de>
> > Cc: Sascha Hauer <s.hauer@pengutronix.de>
> > Cc: Shawn Guo <shawn.guo@linaro.org>
> > ---
> >  drivers/gpu/drm/drm_modes.c | 5 +++++
> >  include/uapi/drm/drm_mode.h | 3 +++
> >  2 files changed, 8 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
> > index 85071a1..d1f3bfc 100644
> > --- a/drivers/gpu/drm/drm_modes.c
> > +++ b/drivers/gpu/drm/drm_modes.c
> > @@ -537,6 +537,11 @@ int drm_display_mode_from_videomode(const struct videomode *vm,
> >  		dmode->flags |= DRM_MODE_FLAG_DBLSCAN;
> >  	if (vm->flags & DISPLAY_FLAGS_DOUBLECLK)
> >  		dmode->flags |= DRM_MODE_FLAG_DBLCLK;
> > +	if (vm->flags & DISPLAY_FLAGS_PIXDATA_POSEDGE)
> > +		dmode->flags |= DRM_MODE_FLAG_PIXELCLK_PPOL;
> > +	else if (vm->flags & DISPLAY_FLAGS_PIXDATA_NEGEDGE)
> > +		dmode->flags |= DRM_MODE_FLAG_PIXELCLK_NPOL;
> > +
> >  	drm_mode_set_name(dmode);
> >  
> >  	return 0;
> > diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
> > index f104c26..a6169ca 100644
> > --- a/include/uapi/drm/drm_mode.h
> > +++ b/include/uapi/drm/drm_mode.h
> > @@ -73,6 +73,9 @@
> >  #define  DRM_MODE_FLAG_3D_TOP_AND_BOTTOM	(7<<14)
> >  #define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF	(8<<14)
> >  
> > +/* CRTC LCD clock polarity flags. */
> > +#define DRM_MODE_FLAG_PIXELCLK_PPOL		(1<<19)
> > +#define DRM_MODE_FLAG_PIXELCLK_NPOL		(1<<20)
> 
> Marek,
> 
> It looks that Denis (copied) is working on the same problem, so you may
> want to be aware of his effort [1][2].

Indeed, and I made very similar comments in that thread.
Marek Vasut Dec. 9, 2013, 10:55 a.m. UTC | #6
On Tuesday, December 03, 2013 at 12:44:52 PM, Shawn Guo wrote:
> On Mon, Dec 02, 2013 at 04:39:26PM +0100, Marek Vasut wrote:
> > Add DRM flags for the LCD display clock polarity so the pixelclk-active
> > DT property can be properly handled by drivers using the DRM API.
> > 
> > Signed-off-by: Marek Vasut <marex@denx.de>
> > Cc: Dave Airlie <airlied@gmail.com>
> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > Cc: Philipp Zabel <p.zabel@pengutronix.de>
> > Cc: Sascha Hauer <s.hauer@pengutronix.de>
> > Cc: Shawn Guo <shawn.guo@linaro.org>
> > ---
> > 
> >  drivers/gpu/drm/drm_modes.c | 5 +++++
> >  include/uapi/drm/drm_mode.h | 3 +++
> >  2 files changed, 8 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
> > index 85071a1..d1f3bfc 100644
> > --- a/drivers/gpu/drm/drm_modes.c
> > +++ b/drivers/gpu/drm/drm_modes.c
> > @@ -537,6 +537,11 @@ int drm_display_mode_from_videomode(const struct
> > videomode *vm,
> > 
> >  		dmode->flags |= DRM_MODE_FLAG_DBLSCAN;
> >  	
> >  	if (vm->flags & DISPLAY_FLAGS_DOUBLECLK)
> >  	
> >  		dmode->flags |= DRM_MODE_FLAG_DBLCLK;
> > 
> > +	if (vm->flags & DISPLAY_FLAGS_PIXDATA_POSEDGE)
> > +		dmode->flags |= DRM_MODE_FLAG_PIXELCLK_PPOL;
> > +	else if (vm->flags & DISPLAY_FLAGS_PIXDATA_NEGEDGE)
> > +		dmode->flags |= DRM_MODE_FLAG_PIXELCLK_NPOL;
> > +
> > 
> >  	drm_mode_set_name(dmode);
> >  	
> >  	return 0;
> > 
> > diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
> > index f104c26..a6169ca 100644
> > --- a/include/uapi/drm/drm_mode.h
> > +++ b/include/uapi/drm/drm_mode.h
> > @@ -73,6 +73,9 @@
> > 
> >  #define  DRM_MODE_FLAG_3D_TOP_AND_BOTTOM	(7<<14)
> >  #define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF	(8<<14)
> > 
> > +/* CRTC LCD clock polarity flags. */
> > +#define DRM_MODE_FLAG_PIXELCLK_PPOL		(1<<19)
> > +#define DRM_MODE_FLAG_PIXELCLK_NPOL		(1<<20)
> 
> Marek,
> 
> It looks that Denis (copied) is working on the same problem, so you may
> want to be aware of his effort [1][2].

He also just sent a new patchset, so I would focus on his work instead. It makes 
more sense as he is not breaking the userland stuff.

Thank you Shawn, Russell!

Best regards,
Marek Vasut
diff mbox

Patch

diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index 85071a1..d1f3bfc 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -537,6 +537,11 @@  int drm_display_mode_from_videomode(const struct videomode *vm,
 		dmode->flags |= DRM_MODE_FLAG_DBLSCAN;
 	if (vm->flags & DISPLAY_FLAGS_DOUBLECLK)
 		dmode->flags |= DRM_MODE_FLAG_DBLCLK;
+	if (vm->flags & DISPLAY_FLAGS_PIXDATA_POSEDGE)
+		dmode->flags |= DRM_MODE_FLAG_PIXELCLK_PPOL;
+	else if (vm->flags & DISPLAY_FLAGS_PIXDATA_NEGEDGE)
+		dmode->flags |= DRM_MODE_FLAG_PIXELCLK_NPOL;
+
 	drm_mode_set_name(dmode);
 
 	return 0;
diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
index f104c26..a6169ca 100644
--- a/include/uapi/drm/drm_mode.h
+++ b/include/uapi/drm/drm_mode.h
@@ -73,6 +73,9 @@ 
 #define  DRM_MODE_FLAG_3D_TOP_AND_BOTTOM	(7<<14)
 #define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF	(8<<14)
 
+/* CRTC LCD clock polarity flags. */
+#define DRM_MODE_FLAG_PIXELCLK_PPOL		(1<<19)
+#define DRM_MODE_FLAG_PIXELCLK_NPOL		(1<<20)
 
 /* DPMS flags */
 /* bit compatible with the xorg definitions. */