Re: [PATCHv15 2/7] video: add display_timing and videomode

2012-12-07 Thread Tomi Valkeinen
On 2012-12-06 12:07, Grant Likely wrote:
 On Mon, 26 Nov 2012 16:39:58 +0100, Steffen Trumtrar 
 s.trumt...@pengutronix.de wrote:
 On Mon, Nov 26, 2012 at 02:37:26PM +0200, Tomi Valkeinen wrote:
 On 2012-11-26 11:07, Steffen Trumtrar wrote:

 +/*
 + * Subsystem independent description of a videomode.
 + * Can be generated from struct display_timing.
 + */
 +struct videomode {
 +  u32 pixelclock; /* pixelclock in Hz */

 I don't know if this is of any importance, but the linux clock framework
 manages clock rates with unsigned long. Would it be better to use the
 same type here?


 Hm, I don't know. Anyone? u32 should be large enough for a pixelclock.
 
 4GHz is a pretty large pixel clock. I have no idea how conceivable it is
 that hardware will get to that speed. However, if it will ever be
 larger, then you'll need to account for that in the DT binding so that
 the pixel clock can be specified using 2 cells.

I didn't mention the type because of the size of the field, but only
because to me it makes sense to use the same type for clock rates all
around the kernel. In many cases the value will be passed to clk_set_rate().

I can't see any real issues with u32, though.

 Tomi




signature.asc
Description: OpenPGP digital signature


Re: [PATCHv15 2/7] video: add display_timing and videomode

2012-12-06 Thread Grant Likely
On Mon, 26 Nov 2012 16:39:58 +0100, Steffen Trumtrar 
s.trumt...@pengutronix.de wrote:
 On Mon, Nov 26, 2012 at 02:37:26PM +0200, Tomi Valkeinen wrote:
  On 2012-11-26 11:07, Steffen Trumtrar wrote:
  
   +/*
   + * Subsystem independent description of a videomode.
   + * Can be generated from struct display_timing.
   + */
   +struct videomode {
   + u32 pixelclock; /* pixelclock in Hz */
  
  I don't know if this is of any importance, but the linux clock framework
  manages clock rates with unsigned long. Would it be better to use the
  same type here?
  
 
 Hm, I don't know. Anyone? u32 should be large enough for a pixelclock.

4GHz is a pretty large pixel clock. I have no idea how conceivable it is
that hardware will get to that speed. However, if it will ever be
larger, then you'll need to account for that in the DT binding so that
the pixel clock can be specified using 2 cells.

g.
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCHv15 2/7] video: add display_timing and videomode

2012-11-26 Thread Steffen Trumtrar
Add display_timing structure and the according helper functions. This allows
the description of a display via its supported timing parameters.

Also, add helper functions to convert from display timings to a generic 
videomode
structure.

The struct display_timing specifies all needed parameters to describe the signal
properties of a display in one mode. This includes
- ranges for signals that may have min-, max- and typical values
- single integers for signals that can be on, off or are ignored
- booleans for signals that are either on or off

As a display may support multiple modes like this, a struct display_timings is
added, that holds all given struct display_timing pointers and declares the
native mode of the display.

Although a display may state that a signal can be in a range, it is driven with
fixed values that indicate a videomode. Therefore graphic drivers don't need all
the information of struct display_timing, but would generate a videomode from
the given set of supported signal timings and work with that.

The video subsystems all define their own structs that describe a mode and work
with that (e.g. fb_videomode or drm_display_mode). To slowly replace all those
various structures and allow code reuse across those subsystems, add struct
videomode as a generic description.

This patch only includes the most basic fields in struct videomode. All missing
fields that are needed to have a really generic video mode description can be
added at a later stage.

Signed-off-by: Steffen Trumtrar s.trumt...@pengutronix.de
Reviewed-by: Thierry Reding thierry.red...@avionic-design.de
Acked-by: Thierry Reding thierry.red...@avionic-design.de
Tested-by: Thierry Reding thierry.red...@avionic-design.de
Tested-by: Philipp Zabel p.za...@pengutronix.de
Reviewed-by: Laurent Pinchart laurent.pinch...@ideasonboard.com
Acked-by: Laurent Pinchart laurent.pinch...@ideasonboard.com
---
 drivers/video/Kconfig  |6 +++
 drivers/video/Makefile |2 +
 drivers/video/display_timing.c |   24 ++
 drivers/video/videomode.c  |   44 +
 include/linux/display_timing.h |  104 
 include/linux/videomode.h  |   54 +
 6 files changed, 234 insertions(+)
 create mode 100644 drivers/video/display_timing.c
 create mode 100644 drivers/video/videomode.c
 create mode 100644 include/linux/display_timing.h
 create mode 100644 include/linux/videomode.h

diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index d08d799..2a23b18 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -33,6 +33,12 @@ config VIDEO_OUTPUT_CONTROL
  This framework adds support for low-level control of the video 
  output switch.
 
+config DISPLAY_TIMING
+   bool
+
+config VIDEOMODE
+   bool
+
 menuconfig FB
tristate Support for frame buffer devices
---help---
diff --git a/drivers/video/Makefile b/drivers/video/Makefile
index 23e948e..fc30439 100644
--- a/drivers/video/Makefile
+++ b/drivers/video/Makefile
@@ -167,3 +167,5 @@ obj-$(CONFIG_FB_VIRTUAL)  += vfb.o
 
 #video output switch sysfs driver
 obj-$(CONFIG_VIDEO_OUTPUT_CONTROL) += output.o
+obj-$(CONFIG_DISPLAY_TIMING) += display_timing.o
+obj-$(CONFIG_VIDEOMODE) += videomode.o
diff --git a/drivers/video/display_timing.c b/drivers/video/display_timing.c
new file mode 100644
index 000..ac9bbbc
--- /dev/null
+++ b/drivers/video/display_timing.c
@@ -0,0 +1,24 @@
+/*
+ * generic display timing functions
+ *
+ * Copyright (c) 2012 Steffen Trumtrar s.trumt...@pengutronix.de, Pengutronix
+ *
+ * This file is released under the GPLv2
+ */
+
+#include linux/display_timing.h
+#include linux/export.h
+#include linux/slab.h
+
+void display_timings_release(struct display_timings *disp)
+{
+   if (disp-timings) {
+   unsigned int i;
+
+   for (i = 0; i  disp-num_timings; i++)
+   kfree(disp-timings[i]);
+   kfree(disp-timings);
+   }
+   kfree(disp);
+}
+EXPORT_SYMBOL_GPL(display_timings_release);
diff --git a/drivers/video/videomode.c b/drivers/video/videomode.c
new file mode 100644
index 000..784eaad
--- /dev/null
+++ b/drivers/video/videomode.c
@@ -0,0 +1,44 @@
+/*
+ * generic display timing functions
+ *
+ * Copyright (c) 2012 Steffen Trumtrar s.trumt...@pengutronix.de, Pengutronix
+ *
+ * This file is released under the GPLv2
+ */
+
+#include linux/display_timing.h
+#include linux/errno.h
+#include linux/export.h
+#include linux/videomode.h
+
+int videomode_from_timing(const struct display_timings *disp,
+ struct videomode *vm, unsigned int index)
+{
+   struct display_timing *dt;
+
+   dt = display_timings_get(disp, index);
+   if (!dt)
+   return -EINVAL;
+
+   vm-pixelclock = display_timing_get_value(dt-pixelclock, TE_TYP);
+   vm-hactive = display_timing_get_value(dt-hactive, TE_TYP);
+   

Re: [PATCHv15 2/7] video: add display_timing and videomode

2012-11-26 Thread Tomi Valkeinen
On 2012-11-26 11:07, Steffen Trumtrar wrote:

 +/*
 + * Subsystem independent description of a videomode.
 + * Can be generated from struct display_timing.
 + */
 +struct videomode {
 + u32 pixelclock; /* pixelclock in Hz */

I don't know if this is of any importance, but the linux clock framework
manages clock rates with unsigned long. Would it be better to use the
same type here?

 + u32 hactive;
 + u32 hfront_porch;
 + u32 hback_porch;
 + u32 hsync_len;
 +
 + u32 vactive;
 + u32 vfront_porch;
 + u32 vback_porch;
 + u32 vsync_len;
 +
 + u32 hah;/* hsync active high */
 + u32 vah;/* vsync active high */
 + u32 de; /* data enable */
 + u32 pixelclk_pol;

What values will these 4 have? Aren't these booleans?

The data enable comment should be data enable active high.

The next patch says in the devtree binding documentation that the values
may be on/off/ignored. Is that represented here somehow, i.e. values are
0/1/2 or so? If not, what does it mean if the value is left out from
devtree data, meaning not used on hardware?

There's also a doubleclk value mentioned in the devtree bindings doc,
but not shown here.

I think this videomode struct is the one that display drivers are going
to use (?), in addition to the display_timing, so it would be good to
document it well.

 Tomi




signature.asc
Description: OpenPGP digital signature


Re: [PATCHv15 2/7] video: add display_timing and videomode

2012-11-26 Thread Steffen Trumtrar
On Mon, Nov 26, 2012 at 02:37:26PM +0200, Tomi Valkeinen wrote:
 On 2012-11-26 11:07, Steffen Trumtrar wrote:
 
  +/*
  + * Subsystem independent description of a videomode.
  + * Can be generated from struct display_timing.
  + */
  +struct videomode {
  +   u32 pixelclock; /* pixelclock in Hz */
 
 I don't know if this is of any importance, but the linux clock framework
 manages clock rates with unsigned long. Would it be better to use the
 same type here?
 

Hm, I don't know. Anyone? u32 should be large enough for a pixelclock.

  +   u32 hactive;
  +   u32 hfront_porch;
  +   u32 hback_porch;
  +   u32 hsync_len;
  +
  +   u32 vactive;
  +   u32 vfront_porch;
  +   u32 vback_porch;
  +   u32 vsync_len;
  +
  +   u32 hah;/* hsync active high */
  +   u32 vah;/* vsync active high */
  +   u32 de; /* data enable */
  +   u32 pixelclk_pol;
 
 What values will these 4 have? Aren't these booleans?
 
 The data enable comment should be data enable active high.
 
 The next patch says in the devtree binding documentation that the values
 may be on/off/ignored. Is that represented here somehow, i.e. values are
 0/1/2 or so? If not, what does it mean if the value is left out from
 devtree data, meaning not used on hardware?


Hm, I think you might be right here. It is no problem in the DT part of the 
code.
The properties are optional, left out means not used on hardware.
But this does not propagate correctly to the videomode. I should set the fields
to -EINVAL in case they are omitted, than everything should work nicely.

 There's also a doubleclk value mentioned in the devtree bindings doc,
 but not shown here.
 

Argh. That slipped through. I have patches that add this property to all
structs and the devicetree binding. But it is not supposed to be in this
series, because I want to at least have the binding stable for now.

 I think this videomode struct is the one that display drivers are going
 to use (?), in addition to the display_timing, so it would be good to
 document it well.
 

Yes. Maybe I have to put more of the devicetree documentation in the code.

Regards,
Steffen


-- 
Pengutronix e.K.   | |
Industrial Linux Solutions | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0|
Amtsgericht Hildesheim, HRA 2686   | Fax:   +49-5121-206917- |
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html