Re: [PATCH] Add LVDS RGB media bus formats

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Sakari,

Am Mittwoch, den 03.12.2014, 17:47 +0200 schrieb Sakari Ailus:
> Hi Philipp,
> 
> On Tue, Dec 02, 2014 at 08:41:24PM +0100, Philipp Zabel wrote:
> > This patch adds three new RGB media bus formats that describe
> > 18-bit or 24-bit samples transferred over an LVDS bus with three
> > or four differential data pairs, serialized into 7 time slots,
> > using standard SPWG/PSWG/VESA or JEIDA data ordering.
> > 
> > Signed-off-by: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>
> > ---
> >  Documentation/DocBook/media/v4l/subdev-formats.xml | 189 +++++++++++++++++++++
> >  include/uapi/linux/media-bus-format.h              |   5 +-
> >  2 files changed, 193 insertions(+), 1 deletion(-)
> > 
> > diff --git a/Documentation/DocBook/media/v4l/subdev-formats.xml b/Documentation/DocBook/media/v4l/subdev-formats.xml
> > index 0d6f731..52d7f04 100644
> > --- a/Documentation/DocBook/media/v4l/subdev-formats.xml
> > +++ b/Documentation/DocBook/media/v4l/subdev-formats.xml
> > @@ -89,6 +89,11 @@
> >        <constant>MEDIA_BUS_FMT_RGB555_2X8_PADHI_BE</constant>.
> >        </para>
> >  
> > +      <para>On LVDS buses, usually each sample is transferred in seven time slots
> > +      on three (18-bit) or four (24-bit) differential data pairs at the same time.
> > +      The remaining bits are used for control signals as defined by SPWG/PSWG/VESA
> > +      or JEIDA standards.</para>
> > +
> >        <para>The following tables list existing packed RGB formats.</para>
> >  
> >        <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-rgb">
> > @@ -606,6 +611,190 @@
> >  	  </tbody>
> >  	</tgroup>
> >        </table>
> > +      <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-rgb-lvds">
> > +	<title>LVDS RGB formats</title>
> > +	<tgroup cols="11">
> > +	  <colspec colname="id" align="left" />
> > +	  <colspec colname="code" align="center" />
> > +	  <colspec colname="pair" align="center" />
> > +	  <colspec colname="slot" />
> > +	  <colspec colnum="4" colname="s00" align="center" />
> > +	  <colspec colnum="5" colname="s01" align="center" />
> > +	  <colspec colnum="6" colname="s02" align="center" />
> > +	  <colspec colnum="7" colname="s03" align="center" />
> > +	  <colspec colnum="8" colname="s04" align="center" />
> > +	  <colspec colnum="9" colname="s05" align="center" />
> > +	  <colspec colnum="10" colname="s06" align="center" />
> > +	  <spanspec namest="s00" nameend="s06" spanname="s0" />
> > +	  <thead>
> > +	    <row>
> > +	      <entry>Identifier</entry>
> > +	      <entry>Code</entry>
> > +	      <entry></entry>
> > +	      <entry></entry>
> > +	      <entry spanname="s0">Data organization</entry>
> > +	    </row>
> > +	    <row>
> > +	      <entry></entry>
> > +	      <entry></entry>
> > +	      <entry>Pair</entry>
> > +	      <entry>Slot</entry>
> > +	      <entry>0</entry>
> > +	      <entry>1</entry>
> > +	      <entry>2</entry>
> > +	      <entry>3</entry>
> > +	      <entry>4</entry>
> > +	      <entry>5</entry>
> > +	      <entry>6</entry>
> > +	    </row>
> > +	  </thead>
> > +	  <tbody valign="top">
> > +	    <row id="MEDIA-BUS-FMT-RGB666-LVDS-SPWG">
> > +	      <entry>MEDIA_BUS_FMT_RGB666_LVDS_SPWG</entry>
> > +	      <entry>0x1010</entry>
> > +	      <entry>data0</entry>
> > +	      <entry></entry>
> > +	      <entry>g<subscript>0</subscript></entry>
> > +	      <entry>r<subscript>5</subscript></entry>
> > +	      <entry>r<subscript>4</subscript></entry>
> > +	      <entry>r<subscript>3</subscript></entry>
> > +	      <entry>r<subscript>2</subscript></entry>
> > +	      <entry>r<subscript>1</subscript></entry>
> > +	      <entry>r<subscript>0</subscript></entry>
> > +	    </row>
> > +	    <row>
> > +	      <entry></entry>
> > +	      <entry></entry>
> > +	      <entry>data1</entry>
> > +	      <entry></entry>
> > +	      <entry>b<subscript>1</subscript></entry>
> > +	      <entry>b<subscript>0</subscript></entry>
> > +	      <entry>g<subscript>5</subscript></entry>
> > +	      <entry>g<subscript>4</subscript></entry>
> > +	      <entry>g<subscript>3</subscript></entry>
> > +	      <entry>g<subscript>2</subscript></entry>
> > +	      <entry>g<subscript>1</subscript></entry>
> > +	    </row>
> > +	    <row>
> > +	      <entry></entry>
> > +	      <entry></entry>
> > +	      <entry>data2</entry>
> > +	      <entry></entry>
> > +	      <entry>de</entry>
> > +	      <entry>vs</entry>
> > +	      <entry>hs</entry>
> > +	      <entry>b<subscript>5</subscript></entry>
> > +	      <entry>b<subscript>4</subscript></entry>
> > +	      <entry>b<subscript>3</subscript></entry>
> > +	      <entry>b<subscript>2</subscript></entry>
> > +	    </row>
> > +	    <row id="MEDIA-BUS-FMT-RGB888-LVDS-SPWG">
> > +	      <entry>MEDIA_BUS_FMT_RGB888_LVDS_SPWG</entry>
> > +	      <entry>0x1011</entry>
> > +	      <entry>data0</entry>
> > +	      <entry></entry>
> > +	      <entry>g<subscript>0</subscript></entry>
> > +	      <entry>r<subscript>5</subscript></entry>
> > +	      <entry>r<subscript>4</subscript></entry>
> > +	      <entry>r<subscript>3</subscript></entry>
> > +	      <entry>r<subscript>2</subscript></entry>
> > +	      <entry>r<subscript>1</subscript></entry>
> > +	      <entry>r<subscript>0</subscript></entry>
> > +	    </row>
> > +	    <row>
> > +	      <entry></entry>
> > +	      <entry></entry>
> > +	      <entry>data1</entry>
> > +	      <entry></entry>
> > +	      <entry>b<subscript>1</subscript></entry>
> > +	      <entry>b<subscript>0</subscript></entry>
> > +	      <entry>g<subscript>5</subscript></entry>
> > +	      <entry>g<subscript>4</subscript></entry>
> > +	      <entry>g<subscript>3</subscript></entry>
> > +	      <entry>g<subscript>2</subscript></entry>
> > +	      <entry>g<subscript>1</subscript></entry>
> > +	    </row>
> > +	    <row>
> > +	      <entry></entry>
> > +	      <entry></entry>
> > +	      <entry>data2</entry>
> > +	      <entry></entry>
> > +	      <entry>de</entry>
> > +	      <entry>vs</entry>
> > +	      <entry>hs</entry>
> > +	      <entry>b<subscript>5</subscript></entry>
> > +	      <entry>b<subscript>4</subscript></entry>
> > +	      <entry>b<subscript>3</subscript></entry>
> > +	      <entry>b<subscript>2</subscript></entry>
> > +	    </row>
> > +	    <row>
> > +	      <entry></entry>
> > +	      <entry></entry>
> > +	      <entry>data3</entry>
> > +	      <entry></entry>
> > +	      <entry>ctl</entry>
> > +	      <entry>b<subscript>7</subscript></entry>
> > +	      <entry>b<subscript>6</subscript></entry>
> > +	      <entry>g<subscript>7</subscript></entry>
> > +	      <entry>g<subscript>6</subscript></entry>
> > +	      <entry>r<subscript>7</subscript></entry>
> > +	      <entry>r<subscript>6</subscript></entry>
> > +	    </row>
> > +	    <row id="MEDIA-BUS-FMT-RGB888-LVDS-JEIDA">
> > +	      <entry>MEDIA_BUS_FMT_RGB888_LVDS_JEIDA</entry>
> > +	      <entry>0x1012</entry>
> > +	      <entry>data0</entry>
> > +	      <entry></entry>
> > +	      <entry>g<subscript>2</subscript></entry>
> > +	      <entry>r<subscript>7</subscript></entry>
> > +	      <entry>r<subscript>6</subscript></entry>
> > +	      <entry>r<subscript>5</subscript></entry>
> > +	      <entry>r<subscript>4</subscript></entry>
> > +	      <entry>r<subscript>3</subscript></entry>
> > +	      <entry>r<subscript>2</subscript></entry>
> > +	    </row>
> > +	    <row>
> > +	      <entry></entry>
> > +	      <entry></entry>
> > +	      <entry>data1</entry>
> > +	      <entry></entry>
> > +	      <entry>b<subscript>3</subscript></entry>
> > +	      <entry>b<subscript>2</subscript></entry>
> > +	      <entry>g<subscript>7</subscript></entry>
> > +	      <entry>g<subscript>6</subscript></entry>
> > +	      <entry>g<subscript>5</subscript></entry>
> > +	      <entry>g<subscript>4</subscript></entry>
> > +	      <entry>g<subscript>3</subscript></entry>
> > +	    </row>
> > +	    <row>
> > +	      <entry></entry>
> > +	      <entry></entry>
> > +	      <entry>data2</entry>
> > +	      <entry></entry>
> > +	      <entry>de</entry>
> > +	      <entry>vs</entry>
> > +	      <entry>hs</entry>
> > +	      <entry>b<subscript>7</subscript></entry>
> > +	      <entry>b<subscript>6</subscript></entry>
> > +	      <entry>b<subscript>5</subscript></entry>
> > +	      <entry>b<subscript>4</subscript></entry>
> > +	    </row>
> > +	    <row>
> > +	      <entry></entry>
> > +	      <entry></entry>
> > +	      <entry>data3</entry>
> > +	      <entry></entry>
> > +	      <entry>ctl</entry>
> > +	      <entry>b<subscript>1</subscript></entry>
> > +	      <entry>b<subscript>0</subscript></entry>
> > +	      <entry>g<subscript>1</subscript></entry>
> > +	      <entry>g<subscript>0</subscript></entry>
> > +	      <entry>r<subscript>1</subscript></entry>
> > +	      <entry>r<subscript>0</subscript></entry>
> > +	    </row>
> > +	  </tbody>
> > +	</tgroup>
> > +      </table>
> 
> In general, I'd be more concerned with the pixel data itself than on low
> level bus signalling related matters. For that reason I'd just say the
> non-data bits are simply undefined.

Sure, I could change the vs/hs/de/ctl to undefined.

> Could you instead create more generic format definitions that are not
> specific to SPWG/PSWG/VESA or JEIDA?

Then what should the nomenclature be? On the LVDS bus we have one sample
per pixel clock, but the data lanes change at seven times the pixel
clock rate, at least for the proposed formats:

time ------------>

RGB666_LVDS_SPWG:
CLK    -----.________.-----
DATA0  G0 R5 R4 R3 R2 R1 R0
DATA1  B1 B0 G5 G4 G3 G2 G1
DATA2  x  x  x  B5 B4 B3 B2

RGB888_LVDS_SPWG:
CLK    -----.________.-----
DATA0  G0 R5 R4 R3 R2 R1 R0
DATA1  B1 B0 G5 G4 G3 G2 G1
DATA2  x  x  x  B5 B4 B3 B2
DATA3  x  B7 B6 G7 G6 R7 R6

RGB888_LVDS_JEIDA:
CLK    -----.________.-----
DATA0  G2 R7 R6 R5 R4 R3 R2
DATA1  B3 B2 G7 G6 G5 G4 G3
DATA2  x  x  x  B7 B6 B5 B4
DATA3  x  B1 B0 G1 G0 R1 R0

We could describe this as "RGB888_LVDS_1X7X4_%s", but what should "%s"
be to differentiate between the MSB on DATA3 (SPWG) and LSB on DATA3
(JEIDA) variants?
Also, I think it would helpful to at least have a comment which format
definitions correspond to the SPWG/JEIDA ordering, because that's what
you often find in LVDS panel data sheets. I'd prefer to just keep them.

> I think this falls to the domain of the parallel-like interfaces since it
> defines per bus pin which data is transferred over which pin.

That might be, but as you can see above the ordering is a bit special.

> Is the wire order defined by the above standards as well? 

Yes.

> It is exactly the opposite to what is currently defined there.

Note that the LVDS table has the wire pairs in rows, the columns
represent the seven time slots, because I thought a four-wide table with
seven rows per entry looked a bit strange, and that's the order these
formats are commonly depicted.

regards
Philipp

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




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux