Merge remote-tracking branch 'linuxtv/vsp1' into HEAD
This commit is contained in:
commit
4c4400504f
|
@ -229,6 +229,7 @@ X!Isound/sound_firmware.c
|
|||
!Iinclude/media/v4l2-dv-timings.h
|
||||
!Iinclude/media/v4l2-event.h
|
||||
!Iinclude/media/v4l2-flash-led-class.h
|
||||
!Iinclude/media/v4l2-mc.h
|
||||
!Iinclude/media/v4l2-mediabus.h
|
||||
!Iinclude/media/v4l2-mem2mem.h
|
||||
!Iinclude/media/v4l2-of.h
|
||||
|
|
|
@ -2329,6 +2329,14 @@ to search and match for the present Macroblock (MB) in the reference picture. Th
|
|||
vertical search range for motion estimation module in video encoder.</entry>
|
||||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row id="v4l2-mpeg-video-force-key-frame">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME</constant> </entry>
|
||||
<entry>button</entry>
|
||||
</row><row><entry spanname="descr">Force a key frame for the next queued buffer. Applicable to encoders.
|
||||
This is a general, codec-agnostic keyframe control.</entry>
|
||||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE</constant> </entry>
|
||||
|
@ -5069,6 +5077,46 @@ interface and may change in the future.</para>
|
|||
This control is applicable to VGA, DVI-A/D, HDMI and DisplayPort connectors.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_DV_TX_IT_CONTENT_TYPE</constant></entry>
|
||||
<entry id="v4l2-dv-content-type">enum v4l2_dv_it_content_type</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">Configures the IT Content Type
|
||||
of the transmitted video. This information is sent over HDMI and DisplayPort connectors
|
||||
as part of the AVI InfoFrame. The term 'IT Content' is used for content that originates
|
||||
from a computer as opposed to content from a TV broadcast or an analog source. The
|
||||
enum v4l2_dv_it_content_type defines the possible content types:</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entrytbl spanname="descr" cols="2">
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>V4L2_DV_IT_CONTENT_TYPE_GRAPHICS</constant> </entry>
|
||||
<entry>Graphics content. Pixel data should be passed unfiltered and without
|
||||
analog reconstruction.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_DV_IT_CONTENT_TYPE_PHOTO</constant> </entry>
|
||||
<entry>Photo content. The content is derived from digital still pictures.
|
||||
The content should be passed through with minimal scaling and picture
|
||||
enhancements.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_DV_IT_CONTENT_TYPE_CINEMA</constant> </entry>
|
||||
<entry>Cinema content.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_DV_IT_CONTENT_TYPE_GAME</constant> </entry>
|
||||
<entry>Game content. Audio and video latency should be minimized.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_DV_IT_CONTENT_TYPE_NO_ITC</constant> </entry>
|
||||
<entry>No IT Content information is available and the ITC bit in the AVI
|
||||
InfoFrame is set to 0.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</entrytbl>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_DV_RX_POWER_PRESENT</constant></entry>
|
||||
<entry>bitmask</entry>
|
||||
|
@ -5098,6 +5146,16 @@ interface and may change in the future.</para>
|
|||
This control is applicable to VGA, DVI-A/D, HDMI and DisplayPort connectors.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="id"><constant>V4L2_CID_DV_RX_IT_CONTENT_TYPE</constant></entry>
|
||||
<entry>enum v4l2_dv_it_content_type</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">Reads the IT Content Type
|
||||
of the received video. This information is sent over HDMI and DisplayPort connectors
|
||||
as part of the AVI InfoFrame. The term 'IT Content' is used for content that originates
|
||||
from a computer as opposed to content from a TV broadcast or an analog source. See
|
||||
<constant>V4L2_CID_DV_TX_IT_CONTENT_TYPE</constant> for the available content types.</entry>
|
||||
</row>
|
||||
<row><entry></entry></row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
|
|
|
@ -48,9 +48,6 @@
|
|||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para><emphasis role="bold">NOTE:</emphasis> This new ioctl is programmed to be added on Kernel 4.6. Its definition/arguments may change until its final version.</para>
|
||||
|
||||
<para>The typical usage of this ioctl is to call it twice.
|
||||
On the first call, the structure defined at &media-v2-topology; should
|
||||
be zeroed. At return, if no errors happen, this ioctl will return the
|
||||
|
|
|
@ -56,10 +56,6 @@
|
|||
<entry><constant>MEDIA_ENT_F_CONN_COMPOSITE</constant></entry>
|
||||
<entry>Connector for a RGB composite signal.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>MEDIA_ENT_F_CONN_TEST</constant></entry>
|
||||
<entry>Connector for a test generator.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>MEDIA_ENT_F_CAM_SENSOR</constant></entry>
|
||||
<entry>Camera video sensor entity.</entry>
|
||||
|
@ -84,7 +80,34 @@
|
|||
</row>
|
||||
<row>
|
||||
<entry><constant>MEDIA_ENT_F_TUNER</constant></entry>
|
||||
<entry>Digital TV, analog TV, radio and/or software radio tuner.</entry>
|
||||
<entry>Digital TV, analog TV, radio and/or software radio tuner,
|
||||
with consists on a PLL tuning stage that converts radio
|
||||
frequency (RF) signal into an Intermediate Frequency (IF).
|
||||
Modern tuners have internally IF-PLL decoders for audio
|
||||
and video, but older models have those stages implemented
|
||||
on separate entities.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>MEDIA_ENT_F_IF_VID_DECODER</constant></entry>
|
||||
<entry>IF-PLL video decoder. It receives the IF from a PLL
|
||||
and decodes the analog TV video signal. This is commonly
|
||||
found on some very old analog tuners, like Philips MK3
|
||||
designs. They all contain a tda9887 (or some software
|
||||
compatible similar chip, like tda9885). Those devices
|
||||
use a different I2C address than the tuner PLL.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>MEDIA_ENT_F_IF_AUD_DECODER</constant></entry>
|
||||
<entry>IF-PLL sound decoder. It receives the IF from a PLL
|
||||
and decodes the analog TV audio signal. This is commonly
|
||||
found on some very old analog hardware, like Micronas
|
||||
msp3400, Philips tda9840, tda985x, etc. Those devices
|
||||
use a different I2C address than the tuner PLL and
|
||||
should be controlled together with the IF-PLL video
|
||||
decoder.
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
|
|
|
@ -1,35 +1,43 @@
|
|||
<refentry id="V4L2-PIX-FMT-YUV420M">
|
||||
<refentry>
|
||||
<refmeta>
|
||||
<refentrytitle>V4L2_PIX_FMT_YUV420M ('YM12')</refentrytitle>
|
||||
<refentrytitle>V4L2_PIX_FMT_YUV420M ('YM12'), V4L2_PIX_FMT_YVU420M ('YM21')</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
<refnamediv>
|
||||
<refname> <constant>V4L2_PIX_FMT_YUV420M</constant></refname>
|
||||
<refpurpose>Variation of <constant>V4L2_PIX_FMT_YUV420</constant>
|
||||
with planes non contiguous in memory. </refpurpose>
|
||||
<refname id="V4L2-PIX-FMT-YUV420M"><constant>V4L2_PIX_FMT_YUV420M</constant></refname>
|
||||
<refname id="V4L2-PIX-FMT-YVU420M"><constant>V4L2_PIX_FMT_YVU420M</constant></refname>
|
||||
<refpurpose>Variation of <constant>V4L2_PIX_FMT_YUV420</constant> and
|
||||
<constant>V4L2_PIX_FMT_YVU420</constant> with planes non contiguous
|
||||
in memory.</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>This is a multi-planar format, as opposed to a packed format.
|
||||
The three components are separated into three sub- images or planes.
|
||||
The three components are separated into three sub-images or planes.</para>
|
||||
|
||||
The Y plane is first. The Y plane has one byte per pixel. The Cb data
|
||||
<para>The Y plane is first. The Y plane has one byte per pixel.
|
||||
For <constant>V4L2_PIX_FMT_YUV420M</constant> the Cb data
|
||||
constitutes the second plane which is half the width and half
|
||||
the height of the Y plane (and of the image). Each Cb belongs to four
|
||||
pixels, a two-by-two square of the image. For example,
|
||||
Cb<subscript>0</subscript> belongs to Y'<subscript>00</subscript>,
|
||||
Y'<subscript>01</subscript>, Y'<subscript>10</subscript>, and
|
||||
Y'<subscript>11</subscript>. The Cr data, just like the Cb plane, is
|
||||
in the third plane. </para>
|
||||
in the third plane.</para>
|
||||
|
||||
<para><constant>V4L2_PIX_FMT_YVU420M</constant> is the same except
|
||||
the Cr data is stored in the second plane and the Cb data in the third plane.
|
||||
</para>
|
||||
|
||||
<para>If the Y plane has pad bytes after each row, then the Cb
|
||||
and Cr planes have half as many pad bytes after their rows. In other
|
||||
words, two Cx rows (including padding) is exactly as long as one Y row
|
||||
(including padding).</para>
|
||||
|
||||
<para><constant>V4L2_PIX_FMT_YUV420M</constant> is intended to be
|
||||
<para><constant>V4L2_PIX_FMT_YUV420M</constant> and
|
||||
<constant>V4L2_PIX_FMT_YVU420M</constant> are intended to be
|
||||
used only in drivers and applications that support the multi-planar API,
|
||||
described in <xref linkend="planar-apis"/>. </para>
|
||||
|
||||
|
|
|
@ -1,40 +1,45 @@
|
|||
<refentry id="V4L2-PIX-FMT-YVU420M">
|
||||
<refentry>
|
||||
<refmeta>
|
||||
<refentrytitle>V4L2_PIX_FMT_YVU420M ('YM21')</refentrytitle>
|
||||
<refentrytitle>V4L2_PIX_FMT_YUV422M ('YM16'), V4L2_PIX_FMT_YVU422M ('YM61')</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
<refnamediv>
|
||||
<refname> <constant>V4L2_PIX_FMT_YVU420M</constant></refname>
|
||||
<refpurpose>Variation of <constant>V4L2_PIX_FMT_YVU420</constant>
|
||||
with planes non contiguous in memory. </refpurpose>
|
||||
<refname id="V4L2-PIX-FMT-YUV422M"><constant>V4L2_PIX_FMT_YUV422M</constant></refname>
|
||||
<refname id="V4L2-PIX-FMT-YVU422M"><constant>V4L2_PIX_FMT_YVU422M</constant></refname>
|
||||
<refpurpose>Planar formats with ½ horizontal resolution, also
|
||||
known as YUV and YVU 4:2:2</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>This is a multi-planar format, as opposed to a packed format.
|
||||
The three components are separated into three sub-images or planes.
|
||||
The three components are separated into three sub-images or planes.</para>
|
||||
|
||||
The Y plane is first. The Y plane has one byte per pixel. The Cr data
|
||||
constitutes the second plane which is half the width and half
|
||||
the height of the Y plane (and of the image). Each Cr belongs to four
|
||||
pixels, a two-by-two square of the image. For example,
|
||||
Cr<subscript>0</subscript> belongs to Y'<subscript>00</subscript>,
|
||||
Y'<subscript>01</subscript>, Y'<subscript>10</subscript>, and
|
||||
Y'<subscript>11</subscript>. The Cb data, just like the Cr plane, constitutes
|
||||
the third plane. </para>
|
||||
<para>The Y plane is first. The Y plane has one byte per pixel.
|
||||
For <constant>V4L2_PIX_FMT_YUV422M</constant> the Cb data
|
||||
constitutes the second plane which is half the width of the Y plane (and of the
|
||||
image). Each Cb belongs to two pixels. For example,
|
||||
Cb<subscript>0</subscript> belongs to Y'<subscript>00</subscript>,
|
||||
Y'<subscript>01</subscript>. The Cr data, just like the Cb plane, is
|
||||
in the third plane. </para>
|
||||
|
||||
<para>If the Y plane has pad bytes after each row, then the Cr
|
||||
and Cb planes have half as many pad bytes after their rows. In other
|
||||
<para><constant>V4L2_PIX_FMT_YVU422M</constant> is the same except
|
||||
the Cr data is stored in the second plane and the Cb data in the third plane.
|
||||
</para>
|
||||
|
||||
<para>If the Y plane has pad bytes after each row, then the Cb
|
||||
and Cr planes have half as many pad bytes after their rows. In other
|
||||
words, two Cx rows (including padding) is exactly as long as one Y row
|
||||
(including padding).</para>
|
||||
|
||||
<para><constant>V4L2_PIX_FMT_YVU420M</constant> is intended to be
|
||||
<para><constant>V4L2_PIX_FMT_YUV422M</constant> and
|
||||
<constant>V4L2_PIX_FMT_YVU422M</constant> are intended to be
|
||||
used only in drivers and applications that support the multi-planar API,
|
||||
described in <xref linkend="planar-apis"/>. </para>
|
||||
|
||||
<example>
|
||||
<title><constant>V4L2_PIX_FMT_YVU420M</constant> 4 × 4
|
||||
<title><constant>V4L2_PIX_FMT_YUV422M</constant> 4 × 4
|
||||
pixel image</title>
|
||||
|
||||
<formalpara>
|
||||
|
@ -75,25 +80,45 @@ pixel image</title>
|
|||
<row><entry></entry></row>
|
||||
<row>
|
||||
<entry>start1 + 0:</entry>
|
||||
<entry>Cr<subscript>00</subscript></entry>
|
||||
<entry>Cr<subscript>01</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start1 + 2:</entry>
|
||||
<entry>Cr<subscript>10</subscript></entry>
|
||||
<entry>Cr<subscript>11</subscript></entry>
|
||||
</row>
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<entry>start2 + 0:</entry>
|
||||
<entry>Cb<subscript>00</subscript></entry>
|
||||
<entry>Cb<subscript>01</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start2 + 2:</entry>
|
||||
<entry>start1 + 2:</entry>
|
||||
<entry>Cb<subscript>10</subscript></entry>
|
||||
<entry>Cb<subscript>11</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start1 + 4:</entry>
|
||||
<entry>Cb<subscript>20</subscript></entry>
|
||||
<entry>Cb<subscript>21</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start1 + 6:</entry>
|
||||
<entry>Cb<subscript>30</subscript></entry>
|
||||
<entry>Cb<subscript>31</subscript></entry>
|
||||
</row>
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<entry>start2 + 0:</entry>
|
||||
<entry>Cr<subscript>00</subscript></entry>
|
||||
<entry>Cr<subscript>01</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start2 + 2:</entry>
|
||||
<entry>Cr<subscript>10</subscript></entry>
|
||||
<entry>Cr<subscript>11</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start2 + 4:</entry>
|
||||
<entry>Cr<subscript>20</subscript></entry>
|
||||
<entry>Cr<subscript>21</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start2 + 6:</entry>
|
||||
<entry>Cr<subscript>30</subscript></entry>
|
||||
<entry>Cr<subscript>31</subscript></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
|
@ -113,36 +138,23 @@ pixel image</title>
|
|||
</row>
|
||||
<row>
|
||||
<entry>0</entry>
|
||||
<entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
|
||||
<entry>Y</entry><entry></entry><entry>Y</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry></entry><entry>C</entry><entry></entry><entry></entry>
|
||||
<entry></entry><entry>C</entry><entry></entry>
|
||||
<entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry>
|
||||
<entry>Y</entry><entry>C</entry><entry>Y</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>1</entry>
|
||||
<entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
|
||||
<entry>Y</entry><entry></entry><entry>Y</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry>
|
||||
<entry>Y</entry><entry>C</entry><entry>Y</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>2</entry>
|
||||
<entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
|
||||
<entry>Y</entry><entry></entry><entry>Y</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry></entry><entry>C</entry><entry></entry><entry></entry>
|
||||
<entry></entry><entry>C</entry><entry></entry>
|
||||
<entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry>
|
||||
<entry>Y</entry><entry>C</entry><entry>Y</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>3</entry>
|
||||
<entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
|
||||
<entry>Y</entry><entry></entry><entry>Y</entry>
|
||||
<entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry>
|
||||
<entry>Y</entry><entry>C</entry><entry>Y</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
|
@ -0,0 +1,177 @@
|
|||
<refentry>
|
||||
<refmeta>
|
||||
<refentrytitle>V4L2_PIX_FMT_YUV444M ('YM24'), V4L2_PIX_FMT_YVU444M ('YM42')</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
<refnamediv>
|
||||
<refname id="V4L2-PIX-FMT-YUV444M"><constant>V4L2_PIX_FMT_YUV444M</constant></refname>
|
||||
<refname id="V4L2-PIX-FMT-YVU444M"><constant>V4L2_PIX_FMT_YVU444M</constant></refname>
|
||||
<refpurpose>Planar formats with full horizontal resolution, also
|
||||
known as YUV and YVU 4:4:4</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>This is a multi-planar format, as opposed to a packed format.
|
||||
The three components are separated into three sub-images or planes.</para>
|
||||
|
||||
<para>The Y plane is first. The Y plane has one byte per pixel.
|
||||
For <constant>V4L2_PIX_FMT_YUV444M</constant> the Cb data
|
||||
constitutes the second plane which is the same width and height as the Y plane
|
||||
(and as the image). The Cr data, just like the Cb plane, is in the third plane.
|
||||
</para>
|
||||
|
||||
<para><constant>V4L2_PIX_FMT_YVU444M</constant> is the same except
|
||||
the Cr data is stored in the second plane and the Cb data in the third plane.
|
||||
</para>
|
||||
<para>If the Y plane has pad bytes after each row, then the Cb
|
||||
and Cr planes have the same number of pad bytes after their rows.</para>
|
||||
|
||||
<para><constant>V4L2_PIX_FMT_YUV444M</constant> and
|
||||
<constant>V4L2_PIX_FMT_YUV444M</constant> are intended to be
|
||||
used only in drivers and applications that support the multi-planar API,
|
||||
described in <xref linkend="planar-apis"/>. </para>
|
||||
|
||||
<example>
|
||||
<title><constant>V4L2_PIX_FMT_YUV444M</constant> 4 × 4
|
||||
pixel image</title>
|
||||
|
||||
<formalpara>
|
||||
<title>Byte Order.</title>
|
||||
<para>Each cell is one byte.
|
||||
<informaltable frame="none">
|
||||
<tgroup cols="5" align="center">
|
||||
<colspec align="left" colwidth="2*" />
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>start0 + 0:</entry>
|
||||
<entry>Y'<subscript>00</subscript></entry>
|
||||
<entry>Y'<subscript>01</subscript></entry>
|
||||
<entry>Y'<subscript>02</subscript></entry>
|
||||
<entry>Y'<subscript>03</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start0 + 4:</entry>
|
||||
<entry>Y'<subscript>10</subscript></entry>
|
||||
<entry>Y'<subscript>11</subscript></entry>
|
||||
<entry>Y'<subscript>12</subscript></entry>
|
||||
<entry>Y'<subscript>13</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start0 + 8:</entry>
|
||||
<entry>Y'<subscript>20</subscript></entry>
|
||||
<entry>Y'<subscript>21</subscript></entry>
|
||||
<entry>Y'<subscript>22</subscript></entry>
|
||||
<entry>Y'<subscript>23</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start0 + 12:</entry>
|
||||
<entry>Y'<subscript>30</subscript></entry>
|
||||
<entry>Y'<subscript>31</subscript></entry>
|
||||
<entry>Y'<subscript>32</subscript></entry>
|
||||
<entry>Y'<subscript>33</subscript></entry>
|
||||
</row>
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<entry>start1 + 0:</entry>
|
||||
<entry>Cb<subscript>00</subscript></entry>
|
||||
<entry>Cb<subscript>01</subscript></entry>
|
||||
<entry>Cb<subscript>02</subscript></entry>
|
||||
<entry>Cb<subscript>03</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start1 + 4:</entry>
|
||||
<entry>Cb<subscript>10</subscript></entry>
|
||||
<entry>Cb<subscript>11</subscript></entry>
|
||||
<entry>Cb<subscript>12</subscript></entry>
|
||||
<entry>Cb<subscript>13</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start1 + 8:</entry>
|
||||
<entry>Cb<subscript>20</subscript></entry>
|
||||
<entry>Cb<subscript>21</subscript></entry>
|
||||
<entry>Cb<subscript>22</subscript></entry>
|
||||
<entry>Cb<subscript>23</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start1 + 12:</entry>
|
||||
<entry>Cb<subscript>20</subscript></entry>
|
||||
<entry>Cb<subscript>21</subscript></entry>
|
||||
<entry>Cb<subscript>32</subscript></entry>
|
||||
<entry>Cb<subscript>33</subscript></entry>
|
||||
</row>
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<entry>start2 + 0:</entry>
|
||||
<entry>Cr<subscript>00</subscript></entry>
|
||||
<entry>Cr<subscript>01</subscript></entry>
|
||||
<entry>Cr<subscript>02</subscript></entry>
|
||||
<entry>Cr<subscript>03</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start2 + 4:</entry>
|
||||
<entry>Cr<subscript>10</subscript></entry>
|
||||
<entry>Cr<subscript>11</subscript></entry>
|
||||
<entry>Cr<subscript>12</subscript></entry>
|
||||
<entry>Cr<subscript>13</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start2 + 8:</entry>
|
||||
<entry>Cr<subscript>20</subscript></entry>
|
||||
<entry>Cr<subscript>21</subscript></entry>
|
||||
<entry>Cr<subscript>22</subscript></entry>
|
||||
<entry>Cr<subscript>23</subscript></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>start2 + 12:</entry>
|
||||
<entry>Cr<subscript>30</subscript></entry>
|
||||
<entry>Cr<subscript>31</subscript></entry>
|
||||
<entry>Cr<subscript>32</subscript></entry>
|
||||
<entry>Cr<subscript>33</subscript></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title>Color Sample Location.</title>
|
||||
<para>
|
||||
<informaltable frame="none">
|
||||
<tgroup cols="7" align="center">
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry>0</entry><entry></entry><entry>1</entry><entry></entry>
|
||||
<entry>2</entry><entry></entry><entry>3</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>0</entry>
|
||||
<entry>YC</entry><entry></entry><entry>YC</entry><entry></entry>
|
||||
<entry>YC</entry><entry></entry><entry>YC</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>1</entry>
|
||||
<entry>YC</entry><entry></entry><entry>YC</entry><entry></entry>
|
||||
<entry>YC</entry><entry></entry><entry>YC</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>2</entry>
|
||||
<entry>YC</entry><entry></entry><entry>YC</entry><entry></entry>
|
||||
<entry>YC</entry><entry></entry><entry>YC</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>3</entry>
|
||||
<entry>YC</entry><entry></entry><entry>YC</entry><entry></entry>
|
||||
<entry>YC</entry><entry></entry><entry>YC</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
</para>
|
||||
</formalpara>
|
||||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1628,7 +1628,8 @@ information.</para>
|
|||
&sub-y41p;
|
||||
&sub-yuv420;
|
||||
&sub-yuv420m;
|
||||
&sub-yvu420m;
|
||||
&sub-yuv422m;
|
||||
&sub-yuv444m;
|
||||
&sub-yuv410;
|
||||
&sub-yuv422p;
|
||||
&sub-yuv411p;
|
||||
|
|
|
@ -60,9 +60,19 @@ input</refpurpose>
|
|||
automatically, similar to sensing the video standard. To do so, applications
|
||||
call <constant>VIDIOC_QUERY_DV_TIMINGS</constant> with a pointer to a
|
||||
&v4l2-dv-timings;. Once the hardware detects the timings, it will fill in the
|
||||
timings structure.
|
||||
timings structure.</para>
|
||||
|
||||
If the timings could not be detected because there was no signal, then
|
||||
<para>Please note that drivers shall <emphasis>not</emphasis> switch timings automatically
|
||||
if new timings are detected. Instead, drivers should send the
|
||||
<constant>V4L2_EVENT_SOURCE_CHANGE</constant> event (if they support this) and expect
|
||||
that userspace will take action by calling <constant>VIDIOC_QUERY_DV_TIMINGS</constant>.
|
||||
The reason is that new timings usually mean different buffer sizes as well, and you
|
||||
cannot change buffer sizes on the fly. In general, applications that receive the
|
||||
Source Change event will have to call <constant>VIDIOC_QUERY_DV_TIMINGS</constant>,
|
||||
and if the detected timings are valid they will have to stop streaming, set the new
|
||||
timings, allocate new buffers and start streaming again.</para>
|
||||
|
||||
<para>If the timings could not be detected because there was no signal, then
|
||||
<errorcode>ENOLINK</errorcode> is returned. If a signal was detected, but
|
||||
it was unstable and the receiver could not lock to the signal, then
|
||||
<errorcode>ENOLCK</errorcode> is returned. If the receiver could lock to the signal,
|
||||
|
|
|
@ -59,6 +59,16 @@ then the driver will return V4L2_STD_UNKNOWN. When detection is not
|
|||
possible or fails, the set must contain all standards supported by the
|
||||
current video input or output.</para>
|
||||
|
||||
<para>Please note that drivers shall <emphasis>not</emphasis> switch the video standard
|
||||
automatically if a new video standard is detected. Instead, drivers should send the
|
||||
<constant>V4L2_EVENT_SOURCE_CHANGE</constant> event (if they support this) and expect
|
||||
that userspace will take action by calling <constant>VIDIOC_QUERYSTD</constant>.
|
||||
The reason is that a new video standard can mean different buffer sizes as well, and you
|
||||
cannot change buffer sizes on the fly. In general, applications that receive the
|
||||
Source Change event will have to call <constant>VIDIOC_QUERYSTD</constant>,
|
||||
and if the detected video standard is valid they will have to stop streaming, set the new
|
||||
standard, allocate new buffers and start streaming again.</para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
|
|
|
@ -20,6 +20,8 @@ Optional Properties:
|
|||
|
||||
- link-frequencies: List of allowed link frequencies in Hz. Each frequency is
|
||||
expressed as a 64-bit big-endian integer.
|
||||
- reset-gpios: GPIO handle which is connected to the reset pin of the chip.
|
||||
- standby-gpios: GPIO handle which is connected to the standby pin of the chip.
|
||||
|
||||
For further reading on port node refer to
|
||||
Documentation/devicetree/bindings/media/video-interfaces.txt.
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
* Texas Instruments TVP5150 and TVP5151 video decoders
|
||||
|
||||
The TVP5150 and TVP5151 are video decoders that convert baseband NTSC and PAL
|
||||
(and also SECAM in the TVP5151 case) video signals to either 8-bit 4:2:2 YUV
|
||||
with discrete syncs or 8-bit ITU-R BT.656 with embedded syncs output formats.
|
||||
|
||||
Required Properties:
|
||||
- compatible: value must be "ti,tvp5150"
|
||||
- reg: I2C slave address
|
||||
|
||||
Optional Properties:
|
||||
- pdn-gpios: phandle for the GPIO connected to the PDN pin, if any.
|
||||
- reset-gpios: phandle for the GPIO connected to the RESETB pin, if any.
|
||||
|
||||
Optional nodes:
|
||||
- connectors: The input connectors of tvp5150 have to be defined under
|
||||
a subnode name "connectors" using the following format:
|
||||
|
||||
input-connector-name {
|
||||
input connector properties
|
||||
};
|
||||
|
||||
Each input connector must contain the following properties:
|
||||
|
||||
- label: a name for the connector.
|
||||
- input: the input connector.
|
||||
|
||||
The possible values for the "input" property are:
|
||||
0: Composite0
|
||||
1: Composite1
|
||||
2: S-Video
|
||||
|
||||
and on a tvp5150am1 and tvp5151 there is another:
|
||||
4: Signal generator
|
||||
|
||||
The list of valid input connectors are defined in dt-bindings/media/tvp5150.h
|
||||
header file and can be included by device tree source files.
|
||||
|
||||
Each input connector can be defined only once.
|
||||
|
||||
The device node must contain one 'port' child node for its digital output
|
||||
video port, in accordance with the video interface bindings defined in
|
||||
Documentation/devicetree/bindings/media/video-interfaces.txt.
|
||||
|
||||
Required Endpoint Properties for parallel synchronization:
|
||||
|
||||
- hsync-active: active state of the HSYNC signal. Must be <1> (HIGH).
|
||||
- vsync-active: active state of the VSYNC signal. Must be <1> (HIGH).
|
||||
- field-even-active: field signal level during the even field data
|
||||
transmission. Must be <0>.
|
||||
|
||||
If none of hsync-active, vsync-active and field-even-active is specified,
|
||||
the endpoint is assumed to use embedded BT.656 synchronization.
|
||||
|
||||
Example:
|
||||
|
||||
&i2c2 {
|
||||
...
|
||||
tvp5150@5c {
|
||||
compatible = "ti,tvp5150";
|
||||
reg = <0x5c>;
|
||||
pdn-gpios = <&gpio4 30 GPIO_ACTIVE_LOW>;
|
||||
reset-gpios = <&gpio6 7 GPIO_ACTIVE_LOW>;
|
||||
|
||||
connectors {
|
||||
composite0 {
|
||||
label = "Composite0";
|
||||
input = <TVP5150_COMPOSITE0>;
|
||||
};
|
||||
|
||||
composite1 {
|
||||
label = "Composite1";
|
||||
input = <TVP5150_COMPOSITE1>;
|
||||
};
|
||||
|
||||
s-video {
|
||||
label = "S-Video";
|
||||
input = <TVP5150_SVIDEO>;
|
||||
};
|
||||
};
|
||||
|
||||
port {
|
||||
tvp5150_1: endpoint {
|
||||
remote-endpoint = <&ccdc_ep>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
|
@ -6,6 +6,7 @@ family of devices. The current blocks are always slaves and suppot one input
|
|||
channel which can be either RGB, YUYV or BT656.
|
||||
|
||||
- compatible: Must be one of the following
|
||||
- "renesas,vin-r8a7795" for the R8A7795 device
|
||||
- "renesas,vin-r8a7794" for the R8A7794 device
|
||||
- "renesas,vin-r8a7793" for the R8A7793 device
|
||||
- "renesas,vin-r8a7791" for the R8A7791 device
|
||||
|
|
|
@ -5,11 +5,12 @@ and decoding function conforming to the JPEG baseline process, so that the JPU
|
|||
can encode image data and decode JPEG data quickly.
|
||||
|
||||
Required properties:
|
||||
- compatible: should containg one of the following:
|
||||
- "renesas,jpu-r8a7790" for R-Car H2
|
||||
- "renesas,jpu-r8a7791" for R-Car M2-W
|
||||
- "renesas,jpu-r8a7792" for R-Car V2H
|
||||
- "renesas,jpu-r8a7793" for R-Car M2-N
|
||||
- compatible: "renesas,jpu-<soctype>", "renesas,rcar-gen2-jpu" as fallback.
|
||||
Examples with soctypes are:
|
||||
- "renesas,jpu-r8a7790" for R-Car H2
|
||||
- "renesas,jpu-r8a7791" for R-Car M2-W
|
||||
- "renesas,jpu-r8a7792" for R-Car V2H
|
||||
- "renesas,jpu-r8a7793" for R-Car M2-N
|
||||
|
||||
- reg: Base address and length of the registers block for the JPU.
|
||||
- interrupts: JPU interrupt specifier.
|
||||
|
@ -17,7 +18,7 @@ Required properties:
|
|||
|
||||
Example: R8A7790 (R-Car H2) JPU node
|
||||
jpeg-codec@fe980000 {
|
||||
compatible = "renesas,jpu-r8a7790";
|
||||
compatible = "renesas,jpu-r8a7790", "renesas,rcar-gen2-jpu";
|
||||
reg = <0 0xfe980000 0 0x10300>;
|
||||
interrupts = <0 272 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&mstp1_clks R8A7790_CLK_JPU>;
|
||||
|
|
|
@ -1,30 +1,18 @@
|
|||
* Renesas VSP1 Video Processing Engine
|
||||
* Renesas VSP Video Processing Engine
|
||||
|
||||
The VSP1 is a video processing engine that supports up-/down-scaling, alpha
|
||||
The VSP is a video processing engine that supports up-/down-scaling, alpha
|
||||
blending, color space conversion and various other image processing features.
|
||||
It can be found in the Renesas R-Car second generation SoCs.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible: Must contain "renesas,vsp1"
|
||||
- compatible: Must contain one of the following values
|
||||
- "renesas,vsp1" for the R-Car Gen2 VSP1
|
||||
- "renesas,vsp2" for the R-Car Gen3 VSP2
|
||||
|
||||
- reg: Base address and length of the registers block for the VSP1.
|
||||
- interrupts: VSP1 interrupt specifier.
|
||||
- clocks: A phandle + clock-specifier pair for the VSP1 functional clock.
|
||||
|
||||
- renesas,#rpf: Number of Read Pixel Formatter (RPF) modules in the VSP1.
|
||||
- renesas,#uds: Number of Up Down Scaler (UDS) modules in the VSP1.
|
||||
- renesas,#wpf: Number of Write Pixel Formatter (WPF) modules in the VSP1.
|
||||
|
||||
|
||||
Optional properties:
|
||||
|
||||
- renesas,has-lif: Boolean, indicates that the LCD Interface (LIF) module is
|
||||
available.
|
||||
- renesas,has-lut: Boolean, indicates that the Look Up Table (LUT) module is
|
||||
available.
|
||||
- renesas,has-sru: Boolean, indicates that the Super Resolution Unit (SRU)
|
||||
module is available.
|
||||
- reg: Base address and length of the registers block for the VSP.
|
||||
- interrupts: VSP interrupt specifier.
|
||||
- clocks: A phandle + clock-specifier pair for the VSP functional clock.
|
||||
|
||||
|
||||
Example: R8A7790 (R-Car H2) VSP1-S node
|
||||
|
@ -34,10 +22,4 @@ Example: R8A7790 (R-Car H2) VSP1-S node
|
|||
reg = <0 0xfe928000 0 0x8000>;
|
||||
interrupts = <0 267 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&mstp1_clks R8A7790_CLK_VSP1_S>;
|
||||
|
||||
renesas,has-lut;
|
||||
renesas,has-sru;
|
||||
renesas,#rpf = <5>;
|
||||
renesas,#uds = <3>;
|
||||
renesas,#wpf = <4>;
|
||||
};
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
Texas Instruments DRA72x CAMERA ADAPTATION LAYER (CAL)
|
||||
------------------------------------------------------
|
||||
|
||||
The Camera Adaptation Layer (CAL) is a key component for image capture
|
||||
applications. The capture module provides the system interface and the
|
||||
processing capability to connect CSI2 image-sensor modules to the
|
||||
DRA72x device.
|
||||
|
||||
Required properties:
|
||||
- compatible: must be "ti,dra72-cal"
|
||||
- reg: CAL Top level, Receiver Core #0, Receiver Core #1 and Camera RX
|
||||
control address space
|
||||
- reg-names: cal_top, cal_rx_core0, cal_rx_core1, and camerrx_control
|
||||
registers
|
||||
- interrupts: should contain IRQ line for the CAL;
|
||||
|
||||
CAL supports 2 camera port nodes on MIPI bus. Each CSI2 camera port nodes
|
||||
should contain a 'port' child node with child 'endpoint' node. Please
|
||||
refer to the bindings defined in
|
||||
Documentation/devicetree/bindings/media/video-interfaces.txt.
|
||||
|
||||
Example:
|
||||
cal: cal@4845b000 {
|
||||
compatible = "ti,dra72-cal";
|
||||
ti,hwmods = "cal";
|
||||
reg = <0x4845B000 0x400>,
|
||||
<0x4845B800 0x40>,
|
||||
<0x4845B900 0x40>,
|
||||
<0x4A002e94 0x4>;
|
||||
reg-names = "cal_top",
|
||||
"cal_rx_core0",
|
||||
"cal_rx_core1",
|
||||
"camerrx_control";
|
||||
interrupts = <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
csi2_0: port@0 {
|
||||
reg = <0>;
|
||||
endpoint {
|
||||
slave-mode;
|
||||
remote-endpoint = <&ar0330_1>;
|
||||
};
|
||||
};
|
||||
csi2_1: port@1 {
|
||||
reg = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
i2c5: i2c@4807c000 {
|
||||
ar0330@10 {
|
||||
compatible = "ti,ar0330";
|
||||
reg = <0x10>;
|
||||
|
||||
port {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ar0330_1: endpoint {
|
||||
reg = <0>;
|
||||
clock-lanes = <1>;
|
||||
data-lanes = <0 2 3 4>;
|
||||
remote-endpoint = <&csi2_0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
|
@ -190,7 +190,7 @@ and watch another one.
|
|||
Patches, comments and suggestions are very very welcome.
|
||||
|
||||
3. Acknowledgements
|
||||
Amaury Demol (ademol@dibcom.fr) and Francois Kanounnikoff from DiBcom for
|
||||
Amaury Demol (Amaury.Demol@parrot.com) and Francois Kanounnikoff from DiBcom for
|
||||
providing specs, code and help, on which the dvb-dibusb, dib3000mb and
|
||||
dib3000mc are based.
|
||||
|
||||
|
|
|
@ -647,7 +647,6 @@ Or you can add specific controls to a handler:
|
|||
volume = v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_AUDIO_VOLUME, ...);
|
||||
v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_BRIGHTNESS, ...);
|
||||
v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_CONTRAST, ...);
|
||||
v4l2_ctrl_add_ctrl(&radio_ctrl_handler, volume);
|
||||
|
||||
What you should not do is make two identical controls for two handlers.
|
||||
For example:
|
||||
|
|
|
@ -10855,6 +10855,14 @@ L: linux-omap@vger.kernel.org
|
|||
S: Maintained
|
||||
F: drivers/thermal/ti-soc-thermal/
|
||||
|
||||
TI VPE/CAL DRIVERS
|
||||
M: Benoit Parrot <bparrot@ti.com>
|
||||
L: linux-media@vger.kernel.org
|
||||
W: http://linuxtv.org/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
S: Maintained
|
||||
F: drivers/media/platform/ti-vpe/
|
||||
|
||||
TI CDCE706 CLOCK DRIVER
|
||||
M: Max Filippov <jcmvbkbc@gmail.com>
|
||||
S: Maintained
|
||||
|
|
|
@ -38,7 +38,7 @@ static int flexcop_fe_request_firmware(struct dvb_frontend *fe,
|
|||
#endif
|
||||
|
||||
/* lnb control */
|
||||
#if FE_SUPPORTED(MT312) || FE_SUPPORTED(STV0299)
|
||||
#if (FE_SUPPORTED(MT312) || FE_SUPPORTED(STV0299)) && FE_SUPPORTED(PLL)
|
||||
static int flexcop_set_voltage(struct dvb_frontend *fe,
|
||||
enum fe_sec_voltage voltage)
|
||||
{
|
||||
|
@ -68,7 +68,7 @@ static int flexcop_set_voltage(struct dvb_frontend *fe,
|
|||
#endif
|
||||
|
||||
#if FE_SUPPORTED(S5H1420) || FE_SUPPORTED(STV0299) || FE_SUPPORTED(MT312)
|
||||
static int flexcop_sleep(struct dvb_frontend* fe)
|
||||
static int __maybe_unused flexcop_sleep(struct dvb_frontend* fe)
|
||||
{
|
||||
struct flexcop_device *fc = fe->dvb->priv;
|
||||
if (fc->fe_sleep)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Linux driver for digital TV devices equipped with B2C2 FlexcopII(b)/III
|
||||
* flexcop.c - main module part
|
||||
* Copyright (C) 2004-9 Patrick Boettcher <patrick.boettcher@desy.de>
|
||||
* Copyright (C) 2004-9 Patrick Boettcher <patrick.boettcher@posteo.de>
|
||||
* based on skystar2-driver Copyright (C) 2003 Vadim Catana, skystar@moldova.cc
|
||||
*
|
||||
* Acknowledgements:
|
||||
|
@ -34,7 +34,7 @@
|
|||
#include "flexcop.h"
|
||||
|
||||
#define DRIVER_NAME "B2C2 FlexcopII/II(b)/III digital TV receiver chip"
|
||||
#define DRIVER_AUTHOR "Patrick Boettcher <patrick.boettcher@desy.de"
|
||||
#define DRIVER_AUTHOR "Patrick Boettcher <patrick.boettcher@posteo.de"
|
||||
|
||||
#ifdef CONFIG_DVB_B2C2_FLEXCOP_DEBUG
|
||||
#define DEBSTATUS ""
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* cypress_firmware.c is part of the DVB USB library.
|
||||
*
|
||||
* Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
|
||||
* Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@posteo.de)
|
||||
* see dvb-usb-init.c for copyright information.
|
||||
*
|
||||
* This file contains functions for downloading the firmware to Cypress FX 1
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
|
||||
* Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@posteo.de)
|
||||
* see dvb-usb-init.c for copyright information.
|
||||
*
|
||||
* This file contains functions for downloading the firmware to Cypress FX 1
|
||||
|
|
|
@ -1167,8 +1167,8 @@ static int smscore_load_firmware_from_file(struct smscore_device_t *coredev,
|
|||
return rc;
|
||||
}
|
||||
pr_debug("read fw %s, buffer size=0x%zx\n", fw_filename, fw->size);
|
||||
fw_buf = kmalloc(ALIGN(fw->size, SMS_ALLOC_ALIGNMENT),
|
||||
GFP_KERNEL | GFP_DMA);
|
||||
fw_buf = kmalloc(ALIGN(fw->size + sizeof(struct sms_firmware),
|
||||
SMS_ALLOC_ALIGNMENT), GFP_KERNEL | GFP_DMA);
|
||||
if (!fw_buf) {
|
||||
pr_err("failed to allocate firmware buffer\n");
|
||||
rc = -ENOMEM;
|
||||
|
|
|
@ -1015,12 +1015,6 @@ static int smsdvb_set_frontend(struct dvb_frontend *fe)
|
|||
}
|
||||
}
|
||||
|
||||
/* Nothing to do here, as stats are automatically updated */
|
||||
static int smsdvb_get_frontend(struct dvb_frontend *fe)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int smsdvb_init(struct dvb_frontend *fe)
|
||||
{
|
||||
struct smsdvb_client_t *client =
|
||||
|
@ -1069,7 +1063,6 @@ static struct dvb_frontend_ops smsdvb_fe_ops = {
|
|||
.release = smsdvb_release,
|
||||
|
||||
.set_frontend = smsdvb_set_frontend,
|
||||
.get_frontend = smsdvb_get_frontend,
|
||||
.get_tune_settings = smsdvb_get_tune_settings,
|
||||
|
||||
.read_status = smsdvb_read_status,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* dvb-usb-ids.h is part of the DVB USB library.
|
||||
*
|
||||
* Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) see
|
||||
* Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@posteo.de) see
|
||||
* dvb-usb-init.c for copyright information.
|
||||
*
|
||||
* a header file containing define's for the USB device supported by the
|
||||
|
@ -118,6 +118,7 @@
|
|||
#define USB_PID_DIBCOM_STK807XP 0x1f90
|
||||
#define USB_PID_DIBCOM_STK807XPVR 0x1f98
|
||||
#define USB_PID_DIBCOM_STK8096GP 0x1fa0
|
||||
#define USB_PID_DIBCOM_STK8096PVR 0x1faa
|
||||
#define USB_PID_DIBCOM_NIM8096MD 0x1fa8
|
||||
#define USB_PID_DIBCOM_TFE8096P 0x1f9C
|
||||
#define USB_PID_DIBCOM_ANCHOR_2135_COLD 0x2131
|
||||
|
@ -247,6 +248,7 @@
|
|||
#define USB_PID_TECHNOTREND_CONNECT_CT3650 0x300d
|
||||
#define USB_PID_TECHNOTREND_CONNECT_S2_4600 0x3011
|
||||
#define USB_PID_TECHNOTREND_CONNECT_CT2_4650_CI 0x3012
|
||||
#define USB_PID_TECHNOTREND_CONNECT_CT2_4650_CI_2 0x3015
|
||||
#define USB_PID_TECHNOTREND_TVSTICK_CT2_4400 0x3014
|
||||
#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY 0x005a
|
||||
#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY_2 0x0081
|
||||
|
@ -255,6 +257,10 @@
|
|||
#define USB_PID_TERRATEC_CINERGY_T_EXPRESS 0x0062
|
||||
#define USB_PID_TERRATEC_CINERGY_T_XXS 0x0078
|
||||
#define USB_PID_TERRATEC_CINERGY_T_XXS_2 0x00ab
|
||||
#define USB_PID_TERRATEC_CINERGY_S2_R1 0x00a8
|
||||
#define USB_PID_TERRATEC_CINERGY_S2_R2 0x00b0
|
||||
#define USB_PID_TERRATEC_CINERGY_S2_R3 0x0102
|
||||
#define USB_PID_TERRATEC_CINERGY_S2_R4 0x0105
|
||||
#define USB_PID_TERRATEC_H7 0x10b4
|
||||
#define USB_PID_TERRATEC_H7_2 0x10a3
|
||||
#define USB_PID_TERRATEC_H7_3 0x10a5
|
||||
|
|
|
@ -140,9 +140,12 @@ struct dvb_frontend_private {
|
|||
|
||||
static void dvb_frontend_wakeup(struct dvb_frontend *fe);
|
||||
static int dtv_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c,
|
||||
struct dvb_frontend_parameters *p_out);
|
||||
static int dtv_property_legacy_params_sync(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_parameters *p);
|
||||
static int
|
||||
dtv_property_legacy_params_sync(struct dvb_frontend *fe,
|
||||
const struct dtv_frontend_properties *c,
|
||||
struct dvb_frontend_parameters *p);
|
||||
|
||||
static bool has_get_frontend(struct dvb_frontend *fe)
|
||||
{
|
||||
|
@ -202,6 +205,7 @@ static void dvb_frontend_add_event(struct dvb_frontend *fe,
|
|||
enum fe_status status)
|
||||
{
|
||||
struct dvb_frontend_private *fepriv = fe->frontend_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct dvb_fe_events *events = &fepriv->events;
|
||||
struct dvb_frontend_event *e;
|
||||
int wp;
|
||||
|
@ -209,7 +213,7 @@ static void dvb_frontend_add_event(struct dvb_frontend *fe,
|
|||
dev_dbg(fe->dvb->device, "%s:\n", __func__);
|
||||
|
||||
if ((status & FE_HAS_LOCK) && has_get_frontend(fe))
|
||||
dtv_get_frontend(fe, &fepriv->parameters_out);
|
||||
dtv_get_frontend(fe, c, &fepriv->parameters_out);
|
||||
|
||||
mutex_lock(&events->mtx);
|
||||
|
||||
|
@ -687,6 +691,7 @@ static int dvb_enable_media_tuner(struct dvb_frontend *fe)
|
|||
static int dvb_frontend_thread(void *data)
|
||||
{
|
||||
struct dvb_frontend *fe = data;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct dvb_frontend_private *fepriv = fe->frontend_priv;
|
||||
enum fe_status s;
|
||||
enum dvbfe_algo algo;
|
||||
|
@ -807,7 +812,7 @@ restart:
|
|||
fepriv->algo_status |= DVBFE_ALGO_SEARCH_AGAIN;
|
||||
fepriv->delay = HZ / 2;
|
||||
}
|
||||
dtv_property_legacy_params_sync(fe, &fepriv->parameters_out);
|
||||
dtv_property_legacy_params_sync(fe, c, &fepriv->parameters_out);
|
||||
fe->ops.read_status(fe, &s);
|
||||
if (s != fepriv->status) {
|
||||
dvb_frontend_add_event(fe, s); /* update event list */
|
||||
|
@ -899,10 +904,10 @@ void dvb_frontend_sleep_until(ktime_t *waketime, u32 add_usec)
|
|||
s32 delta;
|
||||
|
||||
*waketime = ktime_add_us(*waketime, add_usec);
|
||||
delta = ktime_us_delta(ktime_get_real(), *waketime);
|
||||
delta = ktime_us_delta(ktime_get_boottime(), *waketime);
|
||||
if (delta > 2500) {
|
||||
msleep((delta - 1500) / 1000);
|
||||
delta = ktime_us_delta(ktime_get_real(), *waketime);
|
||||
delta = ktime_us_delta(ktime_get_boottime(), *waketime);
|
||||
}
|
||||
if (delta > 0)
|
||||
udelay(delta);
|
||||
|
@ -1162,18 +1167,24 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = {
|
|||
_DTV_CMD(DTV_STAT_TOTAL_BLOCK_COUNT, 0, 0),
|
||||
};
|
||||
|
||||
static void dtv_property_dump(struct dvb_frontend *fe, struct dtv_property *tvp)
|
||||
static void dtv_property_dump(struct dvb_frontend *fe,
|
||||
bool is_set,
|
||||
struct dtv_property *tvp)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (tvp->cmd <= 0 || tvp->cmd > DTV_MAX_COMMAND) {
|
||||
dev_warn(fe->dvb->device, "%s: tvp.cmd = 0x%08x undefined\n",
|
||||
__func__, tvp->cmd);
|
||||
dev_warn(fe->dvb->device, "%s: %s tvp.cmd = 0x%08x undefined\n",
|
||||
__func__,
|
||||
is_set ? "SET" : "GET",
|
||||
tvp->cmd);
|
||||
return;
|
||||
}
|
||||
|
||||
dev_dbg(fe->dvb->device, "%s: tvp.cmd = 0x%08x (%s)\n", __func__,
|
||||
tvp->cmd, dtv_cmds[tvp->cmd].name);
|
||||
dev_dbg(fe->dvb->device, "%s: %s tvp.cmd = 0x%08x (%s)\n", __func__,
|
||||
is_set ? "SET" : "GET",
|
||||
tvp->cmd,
|
||||
dtv_cmds[tvp->cmd].name);
|
||||
|
||||
if (dtv_cmds[tvp->cmd].buffer) {
|
||||
dev_dbg(fe->dvb->device, "%s: tvp.u.buffer.len = 0x%02x\n",
|
||||
|
@ -1268,11 +1279,11 @@ static int dtv_property_cache_sync(struct dvb_frontend *fe,
|
|||
/* Ensure the cached values are set correctly in the frontend
|
||||
* legacy tuning structures, for the advanced tuning API.
|
||||
*/
|
||||
static int dtv_property_legacy_params_sync(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_parameters *p)
|
||||
static int
|
||||
dtv_property_legacy_params_sync(struct dvb_frontend *fe,
|
||||
const struct dtv_frontend_properties *c,
|
||||
struct dvb_frontend_parameters *p)
|
||||
{
|
||||
const struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
|
||||
p->frequency = c->frequency;
|
||||
p->inversion = c->inversion;
|
||||
|
||||
|
@ -1344,16 +1355,17 @@ static int dtv_property_legacy_params_sync(struct dvb_frontend *fe,
|
|||
* If p_out is not null, it will update the DVBv3 params pointed by it.
|
||||
*/
|
||||
static int dtv_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c,
|
||||
struct dvb_frontend_parameters *p_out)
|
||||
{
|
||||
int r;
|
||||
|
||||
if (fe->ops.get_frontend) {
|
||||
r = fe->ops.get_frontend(fe);
|
||||
r = fe->ops.get_frontend(fe, c);
|
||||
if (unlikely(r < 0))
|
||||
return r;
|
||||
if (p_out)
|
||||
dtv_property_legacy_params_sync(fe, p_out);
|
||||
dtv_property_legacy_params_sync(fe, c, p_out);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1589,7 +1601,7 @@ static int dtv_property_process_get(struct dvb_frontend *fe,
|
|||
return r;
|
||||
}
|
||||
|
||||
dtv_property_dump(fe, tvp);
|
||||
dtv_property_dump(fe, false, tvp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1830,6 +1842,8 @@ static int dtv_property_process_set(struct dvb_frontend *fe,
|
|||
return r;
|
||||
}
|
||||
|
||||
dtv_property_dump(fe, true, tvp);
|
||||
|
||||
switch(tvp->cmd) {
|
||||
case DTV_CLEAR:
|
||||
/*
|
||||
|
@ -2073,6 +2087,8 @@ static int dvb_frontend_ioctl_properties(struct file *file,
|
|||
dev_dbg(fe->dvb->device, "%s: Property cache is full, tuning\n", __func__);
|
||||
|
||||
} else if (cmd == FE_GET_PROPERTY) {
|
||||
struct dtv_frontend_properties getp = fe->dtv_property_cache;
|
||||
|
||||
dev_dbg(fe->dvb->device, "%s: properties.num = %d\n", __func__, tvps->num);
|
||||
dev_dbg(fe->dvb->device, "%s: properties.props = %p\n", __func__, tvps->props);
|
||||
|
||||
|
@ -2094,17 +2110,18 @@ static int dvb_frontend_ioctl_properties(struct file *file,
|
|||
}
|
||||
|
||||
/*
|
||||
* Fills the cache out struct with the cache contents, plus
|
||||
* the data retrieved from get_frontend, if the frontend
|
||||
* is not idle. Otherwise, returns the cached content
|
||||
* Let's use our own copy of property cache, in order to
|
||||
* avoid mangling with DTV zigzag logic, as drivers might
|
||||
* return crap, if they don't check if the data is available
|
||||
* before updating the properties cache.
|
||||
*/
|
||||
if (fepriv->state != FESTATE_IDLE) {
|
||||
err = dtv_get_frontend(fe, NULL);
|
||||
err = dtv_get_frontend(fe, &getp, NULL);
|
||||
if (err < 0)
|
||||
goto out;
|
||||
}
|
||||
for (i = 0; i < tvps->num; i++) {
|
||||
err = dtv_property_process_get(fe, c, tvp + i, file);
|
||||
err = dtv_property_process_get(fe, &getp, tvp + i, file);
|
||||
if (err < 0)
|
||||
goto out;
|
||||
(tvp + i)->result = err;
|
||||
|
@ -2139,7 +2156,7 @@ static int dtv_set_frontend(struct dvb_frontend *fe)
|
|||
* the user. FE_SET_FRONTEND triggers an initial frontend event
|
||||
* with status = 0, which copies output parameters to userspace.
|
||||
*/
|
||||
dtv_property_legacy_params_sync(fe, &fepriv->parameters_out);
|
||||
dtv_property_legacy_params_sync(fe, c, &fepriv->parameters_out);
|
||||
|
||||
/*
|
||||
* Be sure that the bandwidth will be filled for all
|
||||
|
@ -2451,7 +2468,7 @@ static int dvb_frontend_ioctl_legacy(struct file *file,
|
|||
u8 last = 1;
|
||||
if (dvb_frontend_debug)
|
||||
printk("%s switch command: 0x%04lx\n", __func__, swcmd);
|
||||
nexttime = ktime_get_real();
|
||||
nexttime = ktime_get_boottime();
|
||||
if (dvb_frontend_debug)
|
||||
tv[0] = nexttime;
|
||||
/* before sending a command, initialize by sending
|
||||
|
@ -2462,7 +2479,7 @@ static int dvb_frontend_ioctl_legacy(struct file *file,
|
|||
|
||||
for (i = 0; i < 9; i++) {
|
||||
if (dvb_frontend_debug)
|
||||
tv[i+1] = ktime_get_real();
|
||||
tv[i+1] = ktime_get_boottime();
|
||||
if ((swcmd & 0x01) != last) {
|
||||
/* set voltage to (last ? 13V : 18V) */
|
||||
fe->ops.set_voltage(fe, (last) ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18);
|
||||
|
@ -2509,10 +2526,18 @@ static int dvb_frontend_ioctl_legacy(struct file *file,
|
|||
err = dvb_frontend_get_event (fe, parg, file->f_flags);
|
||||
break;
|
||||
|
||||
case FE_GET_FRONTEND:
|
||||
err = dtv_get_frontend(fe, parg);
|
||||
break;
|
||||
case FE_GET_FRONTEND: {
|
||||
struct dtv_frontend_properties getp = fe->dtv_property_cache;
|
||||
|
||||
/*
|
||||
* Let's use our own copy of property cache, in order to
|
||||
* avoid mangling with DTV zigzag logic, as drivers might
|
||||
* return crap, if they don't check if the data is available
|
||||
* before updating the properties cache.
|
||||
*/
|
||||
err = dtv_get_frontend(fe, &getp, parg);
|
||||
break;
|
||||
}
|
||||
case FE_SET_FRONTEND_TUNE_MODE:
|
||||
fepriv->tune_mode_flags = (unsigned long) parg;
|
||||
err = 0;
|
||||
|
|
|
@ -449,7 +449,8 @@ struct dvb_frontend_ops {
|
|||
int (*set_frontend)(struct dvb_frontend *fe);
|
||||
int (*get_tune_settings)(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* settings);
|
||||
|
||||
int (*get_frontend)(struct dvb_frontend *fe);
|
||||
int (*get_frontend)(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *props);
|
||||
|
||||
int (*read_status)(struct dvb_frontend *fe, enum fe_status *status);
|
||||
int (*read_ber)(struct dvb_frontend* fe, u32* ber);
|
||||
|
|
|
@ -58,7 +58,7 @@ static const char * const dnames[] = {
|
|||
#define DVB_MAX_IDS MAX_DVB_MINORS
|
||||
#else
|
||||
#define DVB_MAX_IDS 4
|
||||
#define nums2minor(num,type,id) ((num << 6) | (id << 4) | type)
|
||||
#define nums2minor(num, type, id) ((num << 6) | (id << 4) | type)
|
||||
#define MAX_DVB_MINORS (DVB_MAX_ADAPTERS*64)
|
||||
#endif
|
||||
|
||||
|
@ -85,7 +85,7 @@ static int dvb_device_open(struct inode *inode, struct file *file)
|
|||
file->private_data = dvbdev;
|
||||
replace_fops(file, new_fops);
|
||||
if (file->f_op->open)
|
||||
err = file->f_op->open(inode,file);
|
||||
err = file->f_op->open(inode, file);
|
||||
up_read(&minor_rwsem);
|
||||
mutex_unlock(&dvbdev_mutex);
|
||||
return err;
|
||||
|
@ -352,7 +352,7 @@ static int dvb_create_media_entity(struct dvb_device *dvbdev,
|
|||
ret = media_device_register_entity(dvbdev->adapter->mdev,
|
||||
dvbdev->entity);
|
||||
if (ret)
|
||||
return (ret);
|
||||
return ret;
|
||||
|
||||
printk(KERN_DEBUG "%s: media entity '%s' registered.\n",
|
||||
__func__, dvbdev->entity->name);
|
||||
|
@ -620,8 +620,7 @@ int dvb_create_media_graph(struct dvb_adapter *adap,
|
|||
return -ENOMEM;
|
||||
adap->conn = conn;
|
||||
|
||||
adap->conn_pads = kcalloc(1, sizeof(*adap->conn_pads),
|
||||
GFP_KERNEL);
|
||||
adap->conn_pads = kzalloc(sizeof(*adap->conn_pads), GFP_KERNEL);
|
||||
if (!adap->conn_pads)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -661,7 +660,7 @@ int dvb_create_media_graph(struct dvb_adapter *adap,
|
|||
if (ntuner && ndemod) {
|
||||
ret = media_create_pad_links(mdev,
|
||||
MEDIA_ENT_F_TUNER,
|
||||
tuner, TUNER_PAD_IF_OUTPUT,
|
||||
tuner, TUNER_PAD_OUTPUT,
|
||||
MEDIA_ENT_F_DTV_DEMOD,
|
||||
demod, 0, MEDIA_LNK_FL_ENABLED,
|
||||
false);
|
||||
|
@ -868,7 +867,7 @@ int dvb_usercopy(struct file *file,
|
|||
parg = sbuf;
|
||||
} else {
|
||||
/* too big to allocate from stack */
|
||||
mbuf = kmalloc(_IOC_SIZE(cmd),GFP_KERNEL);
|
||||
mbuf = kmalloc(_IOC_SIZE(cmd), GFP_KERNEL);
|
||||
if (NULL == mbuf)
|
||||
return -ENOMEM;
|
||||
parg = mbuf;
|
||||
|
|
|
@ -866,9 +866,9 @@ err:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int af9013_get_frontend(struct dvb_frontend *fe)
|
||||
static int af9013_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct af9013_state *state = fe->demodulator_priv;
|
||||
int ret;
|
||||
u8 buf[3];
|
||||
|
@ -1344,6 +1344,10 @@ err:
|
|||
static void af9013_release(struct dvb_frontend *fe)
|
||||
{
|
||||
struct af9013_state *state = fe->demodulator_priv;
|
||||
|
||||
/* stop statistics polling */
|
||||
cancel_delayed_work_sync(&state->statistics_work);
|
||||
|
||||
kfree(state);
|
||||
}
|
||||
|
||||
|
|
|
@ -691,10 +691,10 @@ err:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int af9033_get_frontend(struct dvb_frontend *fe)
|
||||
static int af9033_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct af9033_dev *dev = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
u8 buf[8];
|
||||
|
||||
|
@ -1372,6 +1372,9 @@ static int af9033_remove(struct i2c_client *client)
|
|||
|
||||
dev_dbg(&dev->client->dev, "\n");
|
||||
|
||||
/* stop statistics polling */
|
||||
cancel_delayed_work_sync(&dev->stat_work);
|
||||
|
||||
dev->fe.ops.release = NULL;
|
||||
dev->fe.demodulator_priv = NULL;
|
||||
kfree(dev);
|
||||
|
|
|
@ -190,10 +190,10 @@ static int as102_fe_set_frontend(struct dvb_frontend *fe)
|
|||
return state->ops->set_tune(state->priv, &tune_args);
|
||||
}
|
||||
|
||||
static int as102_fe_get_frontend(struct dvb_frontend *fe)
|
||||
static int as102_fe_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct as102_state *state = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret = 0;
|
||||
struct as10x_tps tps = { 0 };
|
||||
|
||||
|
|
|
@ -297,9 +297,9 @@ static int atbm8830_set_fe(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int atbm8830_get_fe(struct dvb_frontend *fe)
|
||||
static int atbm8830_get_fe(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
dprintk("%s\n", __func__);
|
||||
|
||||
/* TODO: get real readings from device */
|
||||
|
|
|
@ -816,9 +816,9 @@ static int au8522_read_ber(struct dvb_frontend *fe, u32 *ber)
|
|||
return au8522_read_ucblocks(fe, ber);
|
||||
}
|
||||
|
||||
static int au8522_get_frontend(struct dvb_frontend *fe)
|
||||
static int au8522_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct au8522_state *state = fe->demodulator_priv;
|
||||
|
||||
c->frequency = state->current_frequency;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Copyright (C) 2001-5, B2C2 inc.
|
||||
*
|
||||
* GPL/Linux driver written by Patrick Boettcher <patrick.boettcher@desy.de>
|
||||
* GPL/Linux driver written by Patrick Boettcher <patrick.boettcher@posteo.de>
|
||||
*
|
||||
* This driver is "hard-coded" to be used with the 1st generation of
|
||||
* Technisat/B2C2's Air2PC ATSC PCI/USB cards/boxes. The pll-programming
|
||||
|
@ -865,5 +865,5 @@ static struct dvb_frontend_ops bcm3510_ops = {
|
|||
};
|
||||
|
||||
MODULE_DESCRIPTION("Broadcom BCM3510 ATSC (8VSB/16VSB & ITU J83 AnnexB FEC QAM64/256) demodulator driver");
|
||||
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de>");
|
||||
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@posteo.de>");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Copyright (C) 2001-5, B2C2 inc.
|
||||
*
|
||||
* GPL/Linux driver written by Patrick Boettcher <patrick.boettcher@desy.de>
|
||||
* GPL/Linux driver written by Patrick Boettcher <patrick.boettcher@posteo.de>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Copyright (C) 2001-5, B2C2 inc.
|
||||
*
|
||||
* GPL/Linux driver written by Patrick Boettcher <patrick.boettcher@desy.de>
|
||||
* GPL/Linux driver written by Patrick Boettcher <patrick.boettcher@posteo.de>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -345,9 +345,9 @@ static int cx22700_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cx22700_get_frontend(struct dvb_frontend *fe)
|
||||
static int cx22700_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct cx22700_state* state = fe->demodulator_priv;
|
||||
u8 reg09 = cx22700_readreg (state, 0x09);
|
||||
|
||||
|
|
|
@ -562,9 +562,9 @@ static int cx22702_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cx22702_get_frontend(struct dvb_frontend *fe)
|
||||
static int cx22702_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct cx22702_state *state = fe->demodulator_priv;
|
||||
|
||||
u8 reg0C = cx22702_readreg(state, 0x0C);
|
||||
|
|
|
@ -550,9 +550,9 @@ static int cx24110_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cx24110_get_frontend(struct dvb_frontend *fe)
|
||||
static int cx24110_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct cx24110_state *state = fe->demodulator_priv;
|
||||
s32 afc; unsigned sclk;
|
||||
|
||||
|
|
|
@ -1560,10 +1560,10 @@ static int cx24117_get_algo(struct dvb_frontend *fe)
|
|||
return DVBFE_ALGO_HW;
|
||||
}
|
||||
|
||||
static int cx24117_get_frontend(struct dvb_frontend *fe)
|
||||
static int cx24117_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct cx24117_state *state = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct cx24117_cmd cmd;
|
||||
u8 reg, st, inv;
|
||||
int ret, idx;
|
||||
|
|
|
@ -1502,9 +1502,9 @@ static int cx24120_sleep(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cx24120_get_frontend(struct dvb_frontend *fe)
|
||||
static int cx24120_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct cx24120_state *state = fe->demodulator_priv;
|
||||
u8 freq1, freq2, freq3;
|
||||
|
||||
|
|
|
@ -945,9 +945,9 @@ static int cx24123_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cx24123_get_frontend(struct dvb_frontend *fe)
|
||||
static int cx24123_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct cx24123_state *state = fe->demodulator_priv;
|
||||
|
||||
dprintk("\n");
|
||||
|
|
|
@ -101,10 +101,10 @@ error:
|
|||
return ret;
|
||||
}
|
||||
|
||||
int cxd2820r_get_frontend_c(struct dvb_frontend *fe)
|
||||
int cxd2820r_get_frontend_c(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct cxd2820r_priv *priv = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
u8 buf[2];
|
||||
|
||||
|
|
|
@ -313,7 +313,8 @@ static int cxd2820r_read_status(struct dvb_frontend *fe, enum fe_status *status)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int cxd2820r_get_frontend(struct dvb_frontend *fe)
|
||||
static int cxd2820r_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct cxd2820r_priv *priv = fe->demodulator_priv;
|
||||
int ret;
|
||||
|
@ -326,13 +327,13 @@ static int cxd2820r_get_frontend(struct dvb_frontend *fe)
|
|||
|
||||
switch (fe->dtv_property_cache.delivery_system) {
|
||||
case SYS_DVBT:
|
||||
ret = cxd2820r_get_frontend_t(fe);
|
||||
ret = cxd2820r_get_frontend_t(fe, p);
|
||||
break;
|
||||
case SYS_DVBT2:
|
||||
ret = cxd2820r_get_frontend_t2(fe);
|
||||
ret = cxd2820r_get_frontend_t2(fe, p);
|
||||
break;
|
||||
case SYS_DVBC_ANNEX_A:
|
||||
ret = cxd2820r_get_frontend_c(fe);
|
||||
ret = cxd2820r_get_frontend_c(fe, p);
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
|
@ -606,8 +607,7 @@ static int cxd2820r_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
|
|||
static int cxd2820r_gpio_direction_output(struct gpio_chip *chip, unsigned nr,
|
||||
int val)
|
||||
{
|
||||
struct cxd2820r_priv *priv =
|
||||
container_of(chip, struct cxd2820r_priv, gpio_chip);
|
||||
struct cxd2820r_priv *priv = gpiochip_get_data(chip);
|
||||
u8 gpio[GPIO_COUNT];
|
||||
|
||||
dev_dbg(&priv->i2c->dev, "%s: nr=%d val=%d\n", __func__, nr, val);
|
||||
|
@ -620,8 +620,7 @@ static int cxd2820r_gpio_direction_output(struct gpio_chip *chip, unsigned nr,
|
|||
|
||||
static void cxd2820r_gpio_set(struct gpio_chip *chip, unsigned nr, int val)
|
||||
{
|
||||
struct cxd2820r_priv *priv =
|
||||
container_of(chip, struct cxd2820r_priv, gpio_chip);
|
||||
struct cxd2820r_priv *priv = gpiochip_get_data(chip);
|
||||
u8 gpio[GPIO_COUNT];
|
||||
|
||||
dev_dbg(&priv->i2c->dev, "%s: nr=%d val=%d\n", __func__, nr, val);
|
||||
|
@ -636,8 +635,7 @@ static void cxd2820r_gpio_set(struct gpio_chip *chip, unsigned nr, int val)
|
|||
|
||||
static int cxd2820r_gpio_get(struct gpio_chip *chip, unsigned nr)
|
||||
{
|
||||
struct cxd2820r_priv *priv =
|
||||
container_of(chip, struct cxd2820r_priv, gpio_chip);
|
||||
struct cxd2820r_priv *priv = gpiochip_get_data(chip);
|
||||
|
||||
dev_dbg(&priv->i2c->dev, "%s: nr=%d\n", __func__, nr);
|
||||
|
||||
|
@ -731,7 +729,7 @@ struct dvb_frontend *cxd2820r_attach(const struct cxd2820r_config *cfg,
|
|||
priv->gpio_chip.base = -1; /* dynamic allocation */
|
||||
priv->gpio_chip.ngpio = GPIO_COUNT;
|
||||
priv->gpio_chip.can_sleep = 1;
|
||||
ret = gpiochip_add(&priv->gpio_chip);
|
||||
ret = gpiochip_add_data(&priv->gpio_chip, priv);
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
|
|
|
@ -76,7 +76,8 @@ int cxd2820r_rd_reg(struct cxd2820r_priv *priv, u32 reg, u8 *val);
|
|||
|
||||
/* cxd2820r_c.c */
|
||||
|
||||
int cxd2820r_get_frontend_c(struct dvb_frontend *fe);
|
||||
int cxd2820r_get_frontend_c(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p);
|
||||
|
||||
int cxd2820r_set_frontend_c(struct dvb_frontend *fe);
|
||||
|
||||
|
@ -99,7 +100,8 @@ int cxd2820r_get_tune_settings_c(struct dvb_frontend *fe,
|
|||
|
||||
/* cxd2820r_t.c */
|
||||
|
||||
int cxd2820r_get_frontend_t(struct dvb_frontend *fe);
|
||||
int cxd2820r_get_frontend_t(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p);
|
||||
|
||||
int cxd2820r_set_frontend_t(struct dvb_frontend *fe);
|
||||
|
||||
|
@ -122,7 +124,8 @@ int cxd2820r_get_tune_settings_t(struct dvb_frontend *fe,
|
|||
|
||||
/* cxd2820r_t2.c */
|
||||
|
||||
int cxd2820r_get_frontend_t2(struct dvb_frontend *fe);
|
||||
int cxd2820r_get_frontend_t2(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p);
|
||||
|
||||
int cxd2820r_set_frontend_t2(struct dvb_frontend *fe);
|
||||
|
||||
|
|
|
@ -138,10 +138,10 @@ error:
|
|||
return ret;
|
||||
}
|
||||
|
||||
int cxd2820r_get_frontend_t(struct dvb_frontend *fe)
|
||||
int cxd2820r_get_frontend_t(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct cxd2820r_priv *priv = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
u8 buf[2];
|
||||
|
||||
|
|
|
@ -23,8 +23,8 @@
|
|||
|
||||
int cxd2820r_set_frontend_t2(struct dvb_frontend *fe)
|
||||
{
|
||||
struct cxd2820r_priv *priv = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct cxd2820r_priv *priv = fe->demodulator_priv;
|
||||
int ret, i, bw_i;
|
||||
u32 if_freq, if_ctl;
|
||||
u64 num;
|
||||
|
@ -169,10 +169,10 @@ error:
|
|||
|
||||
}
|
||||
|
||||
int cxd2820r_get_frontend_t2(struct dvb_frontend *fe)
|
||||
int cxd2820r_get_frontend_t2(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct cxd2820r_priv *priv = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
u8 buf[2];
|
||||
|
||||
|
|
|
@ -2090,13 +2090,13 @@ static int cxd2841er_sleep_tc_to_active_c(struct cxd2841er_priv *priv,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cxd2841er_get_frontend(struct dvb_frontend *fe)
|
||||
static int cxd2841er_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
enum fe_status status = 0;
|
||||
u16 strength = 0, snr = 0;
|
||||
u32 errors = 0, ber = 0;
|
||||
struct cxd2841er_priv *priv = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
|
||||
dev_dbg(&priv->i2c->dev, "%s()\n", __func__);
|
||||
if (priv->state == STATE_ACTIVE_S)
|
||||
|
|
|
@ -774,6 +774,6 @@ free_mem:
|
|||
}
|
||||
EXPORT_SYMBOL(dib0070_attach);
|
||||
|
||||
MODULE_AUTHOR("Patrick Boettcher <pboettcher@dibcom.fr>");
|
||||
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@posteo.de>");
|
||||
MODULE_DESCRIPTION("Driver for the DiBcom 0070 base-band RF Tuner");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -2669,7 +2669,7 @@ free_mem:
|
|||
}
|
||||
EXPORT_SYMBOL(dib0090_fw_register);
|
||||
|
||||
MODULE_AUTHOR("Patrick Boettcher <pboettcher@dibcom.fr>");
|
||||
MODULE_AUTHOR("Olivier Grenie <olivier.grenie@dibcom.fr>");
|
||||
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@posteo.de>");
|
||||
MODULE_AUTHOR("Olivier Grenie <olivier.grenie@parrot.com>");
|
||||
MODULE_DESCRIPTION("Driver for the DiBcom 0090 base-band RF Tuner");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
* public header file of the frontend drivers for mobile DVB-T demodulators
|
||||
* DiBcom 3000M-B and DiBcom 3000P/M-C (http://www.dibcom.fr/)
|
||||
*
|
||||
* Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de)
|
||||
* Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@posteo.de)
|
||||
*
|
||||
* based on GPL code from DibCom, which has
|
||||
*
|
||||
* Copyright (C) 2004 Amaury Demol for DiBcom (ademol@dibcom.fr)
|
||||
* Copyright (C) 2004 Amaury Demol for DiBcom
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* Acknowledgements
|
||||
*
|
||||
* Amaury Demol (ademol@dibcom.fr) from DiBcom for providing specs and driver
|
||||
* Amaury Demol from DiBcom for providing specs and driver
|
||||
* sources, on which this driver (and the dvb-dibusb) are based.
|
||||
*
|
||||
* see Documentation/dvb/README.dvb-usb for more information
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
* Frontend driver for mobile DVB-T demodulator DiBcom 3000M-B
|
||||
* DiBcom (http://www.dibcom.fr/)
|
||||
*
|
||||
* Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de)
|
||||
* Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@posteo.de)
|
||||
*
|
||||
* based on GPL code from DibCom, which has
|
||||
*
|
||||
* Copyright (C) 2004 Amaury Demol for DiBcom (ademol@dibcom.fr)
|
||||
* Copyright (C) 2004 Amaury Demol for DiBcom
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* Acknowledgements
|
||||
*
|
||||
* Amaury Demol (ademol@dibcom.fr) from DiBcom for providing specs and driver
|
||||
* Amaury Demol from DiBcom for providing specs and driver
|
||||
* sources, on which this driver (and the dvb-dibusb) are based.
|
||||
*
|
||||
* see Documentation/dvb/README.dvb-usb for more information
|
||||
|
@ -36,7 +36,7 @@
|
|||
/* Version information */
|
||||
#define DRIVER_VERSION "0.1"
|
||||
#define DRIVER_DESC "DiBcom 3000M-B DVB-T demodulator"
|
||||
#define DRIVER_AUTHOR "Patrick Boettcher, patrick.boettcher@desy.de"
|
||||
#define DRIVER_AUTHOR "Patrick Boettcher, patrick.boettcher@posteo.de"
|
||||
|
||||
static int debug;
|
||||
module_param(debug, int, 0644);
|
||||
|
@ -112,7 +112,8 @@ static u16 dib3000_seq[2][2][2] = /* fft,gua, inv */
|
|||
}
|
||||
};
|
||||
|
||||
static int dib3000mb_get_frontend(struct dvb_frontend* fe);
|
||||
static int dib3000mb_get_frontend(struct dvb_frontend* fe,
|
||||
struct dtv_frontend_properties *c);
|
||||
|
||||
static int dib3000mb_set_frontend(struct dvb_frontend *fe, int tuner)
|
||||
{
|
||||
|
@ -359,7 +360,7 @@ static int dib3000mb_set_frontend(struct dvb_frontend *fe, int tuner)
|
|||
deb_setf("search_state after autosearch %d after %d checks\n",search_state,as_count);
|
||||
|
||||
if (search_state == 1) {
|
||||
if (dib3000mb_get_frontend(fe) == 0) {
|
||||
if (dib3000mb_get_frontend(fe, c) == 0) {
|
||||
deb_setf("reading tuning data from frontend succeeded.\n");
|
||||
return dib3000mb_set_frontend(fe, 0);
|
||||
}
|
||||
|
@ -450,9 +451,9 @@ static int dib3000mb_fe_init(struct dvb_frontend* fe, int mobile_mode)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int dib3000mb_get_frontend(struct dvb_frontend* fe)
|
||||
static int dib3000mb_get_frontend(struct dvb_frontend* fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct dib3000_state* state = fe->demodulator_priv;
|
||||
enum fe_code_rate *cr;
|
||||
u16 tps_val;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* dib3000mb_priv.h
|
||||
*
|
||||
* Copyright (C) 2004 Patrick Boettcher (patrick.boettcher@desy.de)
|
||||
* Copyright (C) 2004 Patrick Boettcher (patrick.boettcher@posteo.de)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Driver for DiBcom DiB3000MC/P-demodulator.
|
||||
*
|
||||
* Copyright (C) 2004-7 DiBcom (http://www.dibcom.fr/)
|
||||
* Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de)
|
||||
* Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@posteo.de)
|
||||
*
|
||||
* This code is partially based on the previous dib3000mc.c .
|
||||
*
|
||||
|
@ -636,9 +636,9 @@ struct i2c_adapter * dib3000mc_get_tuner_i2c_master(struct dvb_frontend *demod,
|
|||
|
||||
EXPORT_SYMBOL(dib3000mc_get_tuner_i2c_master);
|
||||
|
||||
static int dib3000mc_get_frontend(struct dvb_frontend* fe)
|
||||
static int dib3000mc_get_frontend(struct dvb_frontend* fe,
|
||||
struct dtv_frontend_properties *fep)
|
||||
{
|
||||
struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
|
||||
struct dib3000mc_state *state = fe->demodulator_priv;
|
||||
u16 tps = dib3000mc_read_word(state,458);
|
||||
|
||||
|
@ -726,7 +726,7 @@ static int dib3000mc_set_frontend(struct dvb_frontend *fe)
|
|||
if (found == 0 || found == 1)
|
||||
return 0; // no channel found
|
||||
|
||||
dib3000mc_get_frontend(fe);
|
||||
dib3000mc_get_frontend(fe, fep);
|
||||
}
|
||||
|
||||
ret = dib3000mc_tune(fe);
|
||||
|
@ -939,6 +939,6 @@ static struct dvb_frontend_ops dib3000mc_ops = {
|
|||
.read_ucblocks = dib3000mc_read_unc_blocks,
|
||||
};
|
||||
|
||||
MODULE_AUTHOR("Patrick Boettcher <pboettcher@dibcom.fr>");
|
||||
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@posteo.de>");
|
||||
MODULE_DESCRIPTION("Driver for the DiBcom 3000MC/P COFDM demodulator");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Driver for DiBcom DiB3000MC/P-demodulator.
|
||||
*
|
||||
* Copyright (C) 2004-6 DiBcom (http://www.dibcom.fr/)
|
||||
* Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher\@desy.de)
|
||||
* Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@posteo.de)
|
||||
*
|
||||
* This code is partially based on the previous dib3000mc.c .
|
||||
*
|
||||
|
|
|
@ -1151,9 +1151,9 @@ static int dib7000m_identify(struct dib7000m_state *state)
|
|||
}
|
||||
|
||||
|
||||
static int dib7000m_get_frontend(struct dvb_frontend* fe)
|
||||
static int dib7000m_get_frontend(struct dvb_frontend* fe,
|
||||
struct dtv_frontend_properties *fep)
|
||||
{
|
||||
struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
|
||||
struct dib7000m_state *state = fe->demodulator_priv;
|
||||
u16 tps = dib7000m_read_word(state,480);
|
||||
|
||||
|
@ -1246,7 +1246,7 @@ static int dib7000m_set_frontend(struct dvb_frontend *fe)
|
|||
if (found == 0 || found == 1)
|
||||
return 0; // no channel found
|
||||
|
||||
dib7000m_get_frontend(fe);
|
||||
dib7000m_get_frontend(fe, fep);
|
||||
}
|
||||
|
||||
ret = dib7000m_tune(fe);
|
||||
|
@ -1465,6 +1465,6 @@ static struct dvb_frontend_ops dib7000m_ops = {
|
|||
.read_ucblocks = dib7000m_read_unc_blocks,
|
||||
};
|
||||
|
||||
MODULE_AUTHOR("Patrick Boettcher <pboettcher@dibcom.fr>");
|
||||
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@posteo.de>");
|
||||
MODULE_DESCRIPTION("Driver for the DiBcom 7000MA/MB/PA/PB/MC COFDM demodulator");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -1405,9 +1405,9 @@ static int dib7000p_identify(struct dib7000p_state *st)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int dib7000p_get_frontend(struct dvb_frontend *fe)
|
||||
static int dib7000p_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *fep)
|
||||
{
|
||||
struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
|
||||
struct dib7000p_state *state = fe->demodulator_priv;
|
||||
u16 tps = dib7000p_read_word(state, 463);
|
||||
|
||||
|
@ -1540,7 +1540,7 @@ static int dib7000p_set_frontend(struct dvb_frontend *fe)
|
|||
if (found == 0 || found == 1)
|
||||
return 0;
|
||||
|
||||
dib7000p_get_frontend(fe);
|
||||
dib7000p_get_frontend(fe, fep);
|
||||
}
|
||||
|
||||
ret = dib7000p_tune(fe);
|
||||
|
@ -2834,7 +2834,7 @@ static struct dvb_frontend_ops dib7000p_ops = {
|
|||
.read_ucblocks = dib7000p_read_unc_blocks,
|
||||
};
|
||||
|
||||
MODULE_AUTHOR("Olivier Grenie <ogrenie@dibcom.fr>");
|
||||
MODULE_AUTHOR("Patrick Boettcher <pboettcher@dibcom.fr>");
|
||||
MODULE_AUTHOR("Olivier Grenie <olivie.grenie@parrot.com>");
|
||||
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@posteo.de>");
|
||||
MODULE_DESCRIPTION("Driver for the DiBcom 7000PC COFDM demodulator");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -3382,14 +3382,15 @@ static int dib8000_sleep(struct dvb_frontend *fe)
|
|||
|
||||
static int dib8000_read_status(struct dvb_frontend *fe, enum fe_status *stat);
|
||||
|
||||
static int dib8000_get_frontend(struct dvb_frontend *fe)
|
||||
static int dib8000_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dib8000_state *state = fe->demodulator_priv;
|
||||
u16 i, val = 0;
|
||||
enum fe_status stat = 0;
|
||||
u8 index_frontend, sub_index_frontend;
|
||||
|
||||
fe->dtv_property_cache.bandwidth_hz = 6000000;
|
||||
c->bandwidth_hz = 6000000;
|
||||
|
||||
/*
|
||||
* If called to early, get_frontend makes dib8000_tune to either
|
||||
|
@ -3406,7 +3407,7 @@ static int dib8000_get_frontend(struct dvb_frontend *fe)
|
|||
if (stat&FE_HAS_SYNC) {
|
||||
dprintk("TMCC lock on the slave%i", index_frontend);
|
||||
/* synchronize the cache with the other frontends */
|
||||
state->fe[index_frontend]->ops.get_frontend(state->fe[index_frontend]);
|
||||
state->fe[index_frontend]->ops.get_frontend(state->fe[index_frontend], c);
|
||||
for (sub_index_frontend = 0; (sub_index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[sub_index_frontend] != NULL); sub_index_frontend++) {
|
||||
if (sub_index_frontend != index_frontend) {
|
||||
state->fe[sub_index_frontend]->dtv_property_cache.isdbt_sb_mode = state->fe[index_frontend]->dtv_property_cache.isdbt_sb_mode;
|
||||
|
@ -3426,57 +3427,57 @@ static int dib8000_get_frontend(struct dvb_frontend *fe)
|
|||
}
|
||||
}
|
||||
|
||||
fe->dtv_property_cache.isdbt_sb_mode = dib8000_read_word(state, 508) & 0x1;
|
||||
c->isdbt_sb_mode = dib8000_read_word(state, 508) & 0x1;
|
||||
|
||||
if (state->revision == 0x8090)
|
||||
val = dib8000_read_word(state, 572);
|
||||
else
|
||||
val = dib8000_read_word(state, 570);
|
||||
fe->dtv_property_cache.inversion = (val & 0x40) >> 6;
|
||||
c->inversion = (val & 0x40) >> 6;
|
||||
switch ((val & 0x30) >> 4) {
|
||||
case 1:
|
||||
fe->dtv_property_cache.transmission_mode = TRANSMISSION_MODE_2K;
|
||||
c->transmission_mode = TRANSMISSION_MODE_2K;
|
||||
dprintk("dib8000_get_frontend: transmission mode 2K");
|
||||
break;
|
||||
case 2:
|
||||
fe->dtv_property_cache.transmission_mode = TRANSMISSION_MODE_4K;
|
||||
c->transmission_mode = TRANSMISSION_MODE_4K;
|
||||
dprintk("dib8000_get_frontend: transmission mode 4K");
|
||||
break;
|
||||
case 3:
|
||||
default:
|
||||
fe->dtv_property_cache.transmission_mode = TRANSMISSION_MODE_8K;
|
||||
c->transmission_mode = TRANSMISSION_MODE_8K;
|
||||
dprintk("dib8000_get_frontend: transmission mode 8K");
|
||||
break;
|
||||
}
|
||||
|
||||
switch (val & 0x3) {
|
||||
case 0:
|
||||
fe->dtv_property_cache.guard_interval = GUARD_INTERVAL_1_32;
|
||||
c->guard_interval = GUARD_INTERVAL_1_32;
|
||||
dprintk("dib8000_get_frontend: Guard Interval = 1/32 ");
|
||||
break;
|
||||
case 1:
|
||||
fe->dtv_property_cache.guard_interval = GUARD_INTERVAL_1_16;
|
||||
c->guard_interval = GUARD_INTERVAL_1_16;
|
||||
dprintk("dib8000_get_frontend: Guard Interval = 1/16 ");
|
||||
break;
|
||||
case 2:
|
||||
dprintk("dib8000_get_frontend: Guard Interval = 1/8 ");
|
||||
fe->dtv_property_cache.guard_interval = GUARD_INTERVAL_1_8;
|
||||
c->guard_interval = GUARD_INTERVAL_1_8;
|
||||
break;
|
||||
case 3:
|
||||
dprintk("dib8000_get_frontend: Guard Interval = 1/4 ");
|
||||
fe->dtv_property_cache.guard_interval = GUARD_INTERVAL_1_4;
|
||||
c->guard_interval = GUARD_INTERVAL_1_4;
|
||||
break;
|
||||
}
|
||||
|
||||
val = dib8000_read_word(state, 505);
|
||||
fe->dtv_property_cache.isdbt_partial_reception = val & 1;
|
||||
dprintk("dib8000_get_frontend: partial_reception = %d ", fe->dtv_property_cache.isdbt_partial_reception);
|
||||
c->isdbt_partial_reception = val & 1;
|
||||
dprintk("dib8000_get_frontend: partial_reception = %d ", c->isdbt_partial_reception);
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
int show;
|
||||
|
||||
val = dib8000_read_word(state, 493 + i) & 0x0f;
|
||||
fe->dtv_property_cache.layer[i].segment_count = val;
|
||||
c->layer[i].segment_count = val;
|
||||
|
||||
if (val == 0 || val > 13)
|
||||
show = 0;
|
||||
|
@ -3485,41 +3486,41 @@ static int dib8000_get_frontend(struct dvb_frontend *fe)
|
|||
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d segments = %d ",
|
||||
i, fe->dtv_property_cache.layer[i].segment_count);
|
||||
i, c->layer[i].segment_count);
|
||||
|
||||
val = dib8000_read_word(state, 499 + i) & 0x3;
|
||||
/* Interleaving can be 0, 1, 2 or 4 */
|
||||
if (val == 3)
|
||||
val = 4;
|
||||
fe->dtv_property_cache.layer[i].interleaving = val;
|
||||
c->layer[i].interleaving = val;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d time_intlv = %d ",
|
||||
i, fe->dtv_property_cache.layer[i].interleaving);
|
||||
i, c->layer[i].interleaving);
|
||||
|
||||
val = dib8000_read_word(state, 481 + i);
|
||||
switch (val & 0x7) {
|
||||
case 1:
|
||||
fe->dtv_property_cache.layer[i].fec = FEC_1_2;
|
||||
c->layer[i].fec = FEC_1_2;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d Code Rate = 1/2 ", i);
|
||||
break;
|
||||
case 2:
|
||||
fe->dtv_property_cache.layer[i].fec = FEC_2_3;
|
||||
c->layer[i].fec = FEC_2_3;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d Code Rate = 2/3 ", i);
|
||||
break;
|
||||
case 3:
|
||||
fe->dtv_property_cache.layer[i].fec = FEC_3_4;
|
||||
c->layer[i].fec = FEC_3_4;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d Code Rate = 3/4 ", i);
|
||||
break;
|
||||
case 5:
|
||||
fe->dtv_property_cache.layer[i].fec = FEC_5_6;
|
||||
c->layer[i].fec = FEC_5_6;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d Code Rate = 5/6 ", i);
|
||||
break;
|
||||
default:
|
||||
fe->dtv_property_cache.layer[i].fec = FEC_7_8;
|
||||
c->layer[i].fec = FEC_7_8;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d Code Rate = 7/8 ", i);
|
||||
break;
|
||||
|
@ -3528,23 +3529,23 @@ static int dib8000_get_frontend(struct dvb_frontend *fe)
|
|||
val = dib8000_read_word(state, 487 + i);
|
||||
switch (val & 0x3) {
|
||||
case 0:
|
||||
fe->dtv_property_cache.layer[i].modulation = DQPSK;
|
||||
c->layer[i].modulation = DQPSK;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d DQPSK ", i);
|
||||
break;
|
||||
case 1:
|
||||
fe->dtv_property_cache.layer[i].modulation = QPSK;
|
||||
c->layer[i].modulation = QPSK;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d QPSK ", i);
|
||||
break;
|
||||
case 2:
|
||||
fe->dtv_property_cache.layer[i].modulation = QAM_16;
|
||||
c->layer[i].modulation = QAM_16;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d QAM16 ", i);
|
||||
break;
|
||||
case 3:
|
||||
default:
|
||||
fe->dtv_property_cache.layer[i].modulation = QAM_64;
|
||||
c->layer[i].modulation = QAM_64;
|
||||
if (show)
|
||||
dprintk("dib8000_get_frontend: Layer %d QAM64 ", i);
|
||||
break;
|
||||
|
@ -3553,16 +3554,16 @@ static int dib8000_get_frontend(struct dvb_frontend *fe)
|
|||
|
||||
/* synchronize the cache with the other frontends */
|
||||
for (index_frontend = 1; (index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[index_frontend] != NULL); index_frontend++) {
|
||||
state->fe[index_frontend]->dtv_property_cache.isdbt_sb_mode = fe->dtv_property_cache.isdbt_sb_mode;
|
||||
state->fe[index_frontend]->dtv_property_cache.inversion = fe->dtv_property_cache.inversion;
|
||||
state->fe[index_frontend]->dtv_property_cache.transmission_mode = fe->dtv_property_cache.transmission_mode;
|
||||
state->fe[index_frontend]->dtv_property_cache.guard_interval = fe->dtv_property_cache.guard_interval;
|
||||
state->fe[index_frontend]->dtv_property_cache.isdbt_partial_reception = fe->dtv_property_cache.isdbt_partial_reception;
|
||||
state->fe[index_frontend]->dtv_property_cache.isdbt_sb_mode = c->isdbt_sb_mode;
|
||||
state->fe[index_frontend]->dtv_property_cache.inversion = c->inversion;
|
||||
state->fe[index_frontend]->dtv_property_cache.transmission_mode = c->transmission_mode;
|
||||
state->fe[index_frontend]->dtv_property_cache.guard_interval = c->guard_interval;
|
||||
state->fe[index_frontend]->dtv_property_cache.isdbt_partial_reception = c->isdbt_partial_reception;
|
||||
for (i = 0; i < 3; i++) {
|
||||
state->fe[index_frontend]->dtv_property_cache.layer[i].segment_count = fe->dtv_property_cache.layer[i].segment_count;
|
||||
state->fe[index_frontend]->dtv_property_cache.layer[i].interleaving = fe->dtv_property_cache.layer[i].interleaving;
|
||||
state->fe[index_frontend]->dtv_property_cache.layer[i].fec = fe->dtv_property_cache.layer[i].fec;
|
||||
state->fe[index_frontend]->dtv_property_cache.layer[i].modulation = fe->dtv_property_cache.layer[i].modulation;
|
||||
state->fe[index_frontend]->dtv_property_cache.layer[i].segment_count = c->layer[i].segment_count;
|
||||
state->fe[index_frontend]->dtv_property_cache.layer[i].interleaving = c->layer[i].interleaving;
|
||||
state->fe[index_frontend]->dtv_property_cache.layer[i].fec = c->layer[i].fec;
|
||||
state->fe[index_frontend]->dtv_property_cache.layer[i].modulation = c->layer[i].modulation;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
@ -3671,7 +3672,7 @@ static int dib8000_set_frontend(struct dvb_frontend *fe)
|
|||
if (state->channel_parameters_set == 0) { /* searching */
|
||||
if ((dib8000_get_status(state->fe[index_frontend]) == FE_STATUS_DEMOD_SUCCESS) || (dib8000_get_status(state->fe[index_frontend]) == FE_STATUS_FFT_SUCCESS)) {
|
||||
dprintk("autosearch succeeded on fe%i", index_frontend);
|
||||
dib8000_get_frontend(state->fe[index_frontend]); /* we read the channel parameters from the frontend which was successful */
|
||||
dib8000_get_frontend(state->fe[index_frontend], c); /* we read the channel parameters from the frontend which was successful */
|
||||
state->channel_parameters_set = 1;
|
||||
|
||||
for (l = 0; (l < MAX_NUMBER_OF_FRONTENDS) && (state->fe[l] != NULL); l++) {
|
||||
|
@ -4516,6 +4517,6 @@ void *dib8000_attach(struct dib8000_ops *ops)
|
|||
}
|
||||
EXPORT_SYMBOL(dib8000_attach);
|
||||
|
||||
MODULE_AUTHOR("Olivier Grenie <Olivier.Grenie@dibcom.fr, " "Patrick Boettcher <pboettcher@dibcom.fr>");
|
||||
MODULE_AUTHOR("Olivier Grenie <Olivier.Grenie@parrot.com, Patrick Boettcher <patrick.boettcher@posteo.de>");
|
||||
MODULE_DESCRIPTION("Driver for the DiBcom 8000 ISDB-T demodulator");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -1889,7 +1889,8 @@ static int dib9000_fe_get_tune_settings(struct dvb_frontend *fe, struct dvb_fron
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int dib9000_get_frontend(struct dvb_frontend *fe)
|
||||
static int dib9000_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dib9000_state *state = fe->demodulator_priv;
|
||||
u8 index_frontend, sub_index_frontend;
|
||||
|
@ -1909,7 +1910,7 @@ static int dib9000_get_frontend(struct dvb_frontend *fe)
|
|||
dprintk("TPS lock on the slave%i", index_frontend);
|
||||
|
||||
/* synchronize the cache with the other frontends */
|
||||
state->fe[index_frontend]->ops.get_frontend(state->fe[index_frontend]);
|
||||
state->fe[index_frontend]->ops.get_frontend(state->fe[index_frontend], c);
|
||||
for (sub_index_frontend = 0; (sub_index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[sub_index_frontend] != NULL);
|
||||
sub_index_frontend++) {
|
||||
if (sub_index_frontend != index_frontend) {
|
||||
|
@ -1943,14 +1944,14 @@ static int dib9000_get_frontend(struct dvb_frontend *fe)
|
|||
|
||||
/* synchronize the cache with the other frontends */
|
||||
for (index_frontend = 1; (index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[index_frontend] != NULL); index_frontend++) {
|
||||
state->fe[index_frontend]->dtv_property_cache.inversion = fe->dtv_property_cache.inversion;
|
||||
state->fe[index_frontend]->dtv_property_cache.transmission_mode = fe->dtv_property_cache.transmission_mode;
|
||||
state->fe[index_frontend]->dtv_property_cache.guard_interval = fe->dtv_property_cache.guard_interval;
|
||||
state->fe[index_frontend]->dtv_property_cache.modulation = fe->dtv_property_cache.modulation;
|
||||
state->fe[index_frontend]->dtv_property_cache.hierarchy = fe->dtv_property_cache.hierarchy;
|
||||
state->fe[index_frontend]->dtv_property_cache.code_rate_HP = fe->dtv_property_cache.code_rate_HP;
|
||||
state->fe[index_frontend]->dtv_property_cache.code_rate_LP = fe->dtv_property_cache.code_rate_LP;
|
||||
state->fe[index_frontend]->dtv_property_cache.rolloff = fe->dtv_property_cache.rolloff;
|
||||
state->fe[index_frontend]->dtv_property_cache.inversion = c->inversion;
|
||||
state->fe[index_frontend]->dtv_property_cache.transmission_mode = c->transmission_mode;
|
||||
state->fe[index_frontend]->dtv_property_cache.guard_interval = c->guard_interval;
|
||||
state->fe[index_frontend]->dtv_property_cache.modulation = c->modulation;
|
||||
state->fe[index_frontend]->dtv_property_cache.hierarchy = c->hierarchy;
|
||||
state->fe[index_frontend]->dtv_property_cache.code_rate_HP = c->code_rate_HP;
|
||||
state->fe[index_frontend]->dtv_property_cache.code_rate_LP = c->code_rate_LP;
|
||||
state->fe[index_frontend]->dtv_property_cache.rolloff = c->rolloff;
|
||||
}
|
||||
ret = 0;
|
||||
|
||||
|
@ -2083,7 +2084,7 @@ static int dib9000_set_frontend(struct dvb_frontend *fe)
|
|||
|
||||
/* synchronize all the channel cache */
|
||||
state->get_frontend_internal = 1;
|
||||
dib9000_get_frontend(state->fe[0]);
|
||||
dib9000_get_frontend(state->fe[0], &state->fe[0]->dtv_property_cache);
|
||||
state->get_frontend_internal = 0;
|
||||
|
||||
/* retune the other frontends with the found channel */
|
||||
|
@ -2589,7 +2590,7 @@ static struct dvb_frontend_ops dib9000_ops = {
|
|||
.read_ucblocks = dib9000_read_unc_blocks,
|
||||
};
|
||||
|
||||
MODULE_AUTHOR("Patrick Boettcher <pboettcher@dibcom.fr>");
|
||||
MODULE_AUTHOR("Olivier Grenie <ogrenie@dibcom.fr>");
|
||||
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@posteo.de>");
|
||||
MODULE_AUTHOR("Olivier Grenie <olivier.grenie@parrot.com>");
|
||||
MODULE_DESCRIPTION("Driver for the DiBcom 9000 COFDM demodulator");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -510,6 +510,6 @@ u32 systime(void)
|
|||
}
|
||||
EXPORT_SYMBOL(systime);
|
||||
|
||||
MODULE_AUTHOR("Patrick Boettcher <pboettcher@dibcom.fr>");
|
||||
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@posteo.de>");
|
||||
MODULE_DESCRIPTION("Common function the DiBcom demodulator family");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -70,9 +70,12 @@ static int dvb_dummy_fe_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
|
|||
}
|
||||
|
||||
/*
|
||||
* Only needed if it actually reads something from the hardware
|
||||
* Should only be implemented if it actually reads something from the hardware.
|
||||
* Also, it should check for the locks, in order to avoid report wrong data
|
||||
* to userspace.
|
||||
*/
|
||||
static int dvb_dummy_fe_get_frontend(struct dvb_frontend *fe)
|
||||
static int dvb_dummy_fe_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -560,11 +560,11 @@ static int hd29l2_get_frontend_algo(struct dvb_frontend *fe)
|
|||
return DVBFE_ALGO_CUSTOM;
|
||||
}
|
||||
|
||||
static int hd29l2_get_frontend(struct dvb_frontend *fe)
|
||||
static int hd29l2_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
int ret;
|
||||
struct hd29l2_priv *priv = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
u8 buf[3];
|
||||
u32 if_ctl;
|
||||
char *str_constellation, *str_code_rate, *str_constellation_code_rate,
|
||||
|
|
|
@ -243,9 +243,9 @@ static int apply_frontend_param(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int get_frontend(struct dvb_frontend *fe)
|
||||
static int get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct l64781_state* state = fe->demodulator_priv;
|
||||
int tmp;
|
||||
|
||||
|
|
|
@ -942,101 +942,102 @@ static int lg216x_read_rs_err_count(struct lg216x_state *state, u16 *err)
|
|||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
static int lg216x_get_frontend(struct dvb_frontend *fe)
|
||||
static int lg216x_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct lg216x_state *state = fe->demodulator_priv;
|
||||
int ret;
|
||||
|
||||
lg_dbg("\n");
|
||||
|
||||
fe->dtv_property_cache.modulation = VSB_8;
|
||||
fe->dtv_property_cache.frequency = state->current_frequency;
|
||||
fe->dtv_property_cache.delivery_system = SYS_ATSCMH;
|
||||
c->modulation = VSB_8;
|
||||
c->frequency = state->current_frequency;
|
||||
c->delivery_system = SYS_ATSCMH;
|
||||
|
||||
ret = lg216x_get_fic_version(state,
|
||||
&fe->dtv_property_cache.atscmh_fic_ver);
|
||||
&c->atscmh_fic_ver);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
if (state->fic_ver != fe->dtv_property_cache.atscmh_fic_ver) {
|
||||
state->fic_ver = fe->dtv_property_cache.atscmh_fic_ver;
|
||||
if (state->fic_ver != c->atscmh_fic_ver) {
|
||||
state->fic_ver = c->atscmh_fic_ver;
|
||||
|
||||
#if 0
|
||||
ret = lg2160_get_parade_id(state,
|
||||
&fe->dtv_property_cache.atscmh_parade_id);
|
||||
&c->atscmh_parade_id);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
/* #else */
|
||||
fe->dtv_property_cache.atscmh_parade_id = state->parade_id;
|
||||
c->atscmh_parade_id = state->parade_id;
|
||||
#endif
|
||||
ret = lg216x_get_nog(state,
|
||||
&fe->dtv_property_cache.atscmh_nog);
|
||||
&c->atscmh_nog);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_get_tnog(state,
|
||||
&fe->dtv_property_cache.atscmh_tnog);
|
||||
&c->atscmh_tnog);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_get_sgn(state,
|
||||
&fe->dtv_property_cache.atscmh_sgn);
|
||||
&c->atscmh_sgn);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_get_prc(state,
|
||||
&fe->dtv_property_cache.atscmh_prc);
|
||||
&c->atscmh_prc);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
|
||||
ret = lg216x_get_rs_frame_mode(state,
|
||||
(enum atscmh_rs_frame_mode *)
|
||||
&fe->dtv_property_cache.atscmh_rs_frame_mode);
|
||||
&c->atscmh_rs_frame_mode);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_get_rs_frame_ensemble(state,
|
||||
(enum atscmh_rs_frame_ensemble *)
|
||||
&fe->dtv_property_cache.atscmh_rs_frame_ensemble);
|
||||
&c->atscmh_rs_frame_ensemble);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_get_rs_code_mode(state,
|
||||
(enum atscmh_rs_code_mode *)
|
||||
&fe->dtv_property_cache.atscmh_rs_code_mode_pri,
|
||||
&c->atscmh_rs_code_mode_pri,
|
||||
(enum atscmh_rs_code_mode *)
|
||||
&fe->dtv_property_cache.atscmh_rs_code_mode_sec);
|
||||
&c->atscmh_rs_code_mode_sec);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_get_sccc_block_mode(state,
|
||||
(enum atscmh_sccc_block_mode *)
|
||||
&fe->dtv_property_cache.atscmh_sccc_block_mode);
|
||||
&c->atscmh_sccc_block_mode);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_get_sccc_code_mode(state,
|
||||
(enum atscmh_sccc_code_mode *)
|
||||
&fe->dtv_property_cache.atscmh_sccc_code_mode_a,
|
||||
&c->atscmh_sccc_code_mode_a,
|
||||
(enum atscmh_sccc_code_mode *)
|
||||
&fe->dtv_property_cache.atscmh_sccc_code_mode_b,
|
||||
&c->atscmh_sccc_code_mode_b,
|
||||
(enum atscmh_sccc_code_mode *)
|
||||
&fe->dtv_property_cache.atscmh_sccc_code_mode_c,
|
||||
&c->atscmh_sccc_code_mode_c,
|
||||
(enum atscmh_sccc_code_mode *)
|
||||
&fe->dtv_property_cache.atscmh_sccc_code_mode_d);
|
||||
&c->atscmh_sccc_code_mode_d);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
}
|
||||
#if 0
|
||||
ret = lg216x_read_fic_err_count(state,
|
||||
(u8 *)&fe->dtv_property_cache.atscmh_fic_err);
|
||||
(u8 *)&c->atscmh_fic_err);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_read_crc_err_count(state,
|
||||
&fe->dtv_property_cache.atscmh_crc_err);
|
||||
&c->atscmh_crc_err);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
ret = lg216x_read_rs_err_count(state,
|
||||
&fe->dtv_property_cache.atscmh_rs_err);
|
||||
&c->atscmh_rs_err);
|
||||
if (lg_fail(ret))
|
||||
goto fail;
|
||||
|
||||
switch (state->cfg->lg_chip) {
|
||||
case LG2160:
|
||||
if (((fe->dtv_property_cache.atscmh_rs_err >= 240) &&
|
||||
(fe->dtv_property_cache.atscmh_crc_err >= 240)) &&
|
||||
if (((c->atscmh_rs_err >= 240) &&
|
||||
(c->atscmh_crc_err >= 240)) &&
|
||||
((jiffies_to_msecs(jiffies) - state->last_reset) > 6000))
|
||||
ret = lg216x_soft_reset(state);
|
||||
break;
|
||||
|
@ -1054,14 +1055,17 @@ fail:
|
|||
static int lg216x_get_property(struct dvb_frontend *fe,
|
||||
struct dtv_property *tvp)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
|
||||
return (DTV_ATSCMH_FIC_VER == tvp->cmd) ?
|
||||
lg216x_get_frontend(fe) : 0;
|
||||
lg216x_get_frontend(fe, c) : 0;
|
||||
}
|
||||
|
||||
|
||||
static int lg2160_set_frontend(struct dvb_frontend *fe)
|
||||
{
|
||||
struct lg216x_state *state = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
|
||||
lg_dbg("(%d)\n", fe->dtv_property_cache.frequency);
|
||||
|
@ -1129,7 +1133,7 @@ static int lg2160_set_frontend(struct dvb_frontend *fe)
|
|||
ret = lg216x_enable_fic(state, 1);
|
||||
lg_fail(ret);
|
||||
|
||||
lg216x_get_frontend(fe);
|
||||
lg216x_get_frontend(fe, c);
|
||||
fail:
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -812,9 +812,9 @@ fail:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int lgdt3305_get_frontend(struct dvb_frontend *fe)
|
||||
static int lgdt3305_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct lgdt3305_state *state = fe->demodulator_priv;
|
||||
|
||||
lg_dbg("\n");
|
||||
|
|
|
@ -1040,10 +1040,10 @@ fail:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int lgdt3306a_get_frontend(struct dvb_frontend *fe)
|
||||
static int lgdt3306a_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct lgdt3306a_state *state = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
|
||||
dbg_info("(%u, %d)\n",
|
||||
state->current_frequency, state->current_modulation);
|
||||
|
|
|
@ -439,10 +439,11 @@ static int lgdt330x_set_parameters(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int lgdt330x_get_frontend(struct dvb_frontend *fe)
|
||||
static int lgdt330x_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct lgdt330x_state *state = fe->demodulator_priv;
|
||||
|
||||
p->frequency = state->current_frequency;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -336,10 +336,11 @@ lgs8gl5_set_frontend(struct dvb_frontend *fe)
|
|||
|
||||
|
||||
static int
|
||||
lgs8gl5_get_frontend(struct dvb_frontend *fe)
|
||||
lgs8gl5_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct lgs8gl5_state *state = fe->demodulator_priv;
|
||||
|
||||
u8 inv = lgs8gl5_read_reg(state, REG_INVERSION);
|
||||
|
||||
p->inversion = (inv & REG_INVERSION_ON) ? INVERSION_ON : INVERSION_OFF;
|
||||
|
|
|
@ -672,7 +672,7 @@ static int lgs8gxx_write(struct dvb_frontend *fe, const u8 buf[], int len)
|
|||
|
||||
static int lgs8gxx_set_fe(struct dvb_frontend *fe)
|
||||
{
|
||||
|
||||
struct dtv_frontend_properties *fe_params = &fe->dtv_property_cache;
|
||||
struct lgs8gxx_state *priv = fe->demodulator_priv;
|
||||
|
||||
dprintk("%s\n", __func__);
|
||||
|
@ -689,17 +689,7 @@ static int lgs8gxx_set_fe(struct dvb_frontend *fe)
|
|||
|
||||
msleep(10);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lgs8gxx_get_fe(struct dvb_frontend *fe)
|
||||
{
|
||||
struct dtv_frontend_properties *fe_params = &fe->dtv_property_cache;
|
||||
dprintk("%s\n", __func__);
|
||||
|
||||
/* TODO: get real readings from device */
|
||||
/* inversion status */
|
||||
fe_params->inversion = INVERSION_OFF;
|
||||
|
||||
/* bandwidth */
|
||||
fe_params->bandwidth_hz = 8000000;
|
||||
|
@ -1016,7 +1006,6 @@ static struct dvb_frontend_ops lgs8gxx_ops = {
|
|||
.i2c_gate_ctrl = lgs8gxx_i2c_gate_ctrl,
|
||||
|
||||
.set_frontend = lgs8gxx_set_fe,
|
||||
.get_frontend = lgs8gxx_get_fe,
|
||||
.get_tune_settings = lgs8gxx_get_tune_settings,
|
||||
|
||||
.read_status = lgs8gxx_read_status,
|
||||
|
|
|
@ -791,11 +791,11 @@ err:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int m88ds3103_get_frontend(struct dvb_frontend *fe)
|
||||
static int m88ds3103_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct m88ds3103_dev *dev = fe->demodulator_priv;
|
||||
struct i2c_client *client = dev->client;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
u8 buf[3];
|
||||
|
||||
|
|
|
@ -708,10 +708,11 @@ static int m88rs2000_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int m88rs2000_get_frontend(struct dvb_frontend *fe)
|
||||
static int m88rs2000_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct m88rs2000_state *state = fe->demodulator_priv;
|
||||
|
||||
c->fec_inner = state->fec_inner;
|
||||
c->frequency = state->tuner_frequency;
|
||||
c->symbol_rate = state->symbol_rate;
|
||||
|
|
|
@ -2028,16 +2028,6 @@ static int mb86a20s_read_signal_strength_from_cache(struct dvb_frontend *fe,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mb86a20s_get_frontend_dummy(struct dvb_frontend *fe)
|
||||
{
|
||||
/*
|
||||
* get_frontend is now handled together with other stats
|
||||
* retrival, when read_status() is called, as some statistics
|
||||
* will depend on the layers detection.
|
||||
*/
|
||||
return 0;
|
||||
};
|
||||
|
||||
static int mb86a20s_tune(struct dvb_frontend *fe,
|
||||
bool re_tune,
|
||||
unsigned int mode_flags,
|
||||
|
@ -2136,7 +2126,6 @@ static struct dvb_frontend_ops mb86a20s_ops = {
|
|||
|
||||
.init = mb86a20s_initfe,
|
||||
.set_frontend = mb86a20s_set_frontend,
|
||||
.get_frontend = mb86a20s_get_frontend_dummy,
|
||||
.read_status = mb86a20s_read_status_and_stats,
|
||||
.read_signal_strength = mb86a20s_read_signal_strength_from_cache,
|
||||
.tune = mb86a20s_tune,
|
||||
|
|
|
@ -647,9 +647,9 @@ static int mt312_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mt312_get_frontend(struct dvb_frontend *fe)
|
||||
static int mt312_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct mt312_state *state = fe->demodulator_priv;
|
||||
int ret;
|
||||
|
||||
|
|
|
@ -311,9 +311,9 @@ static int mt352_set_parameters(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mt352_get_parameters(struct dvb_frontend* fe)
|
||||
static int mt352_get_parameters(struct dvb_frontend* fe,
|
||||
struct dtv_frontend_properties *op)
|
||||
{
|
||||
struct dtv_frontend_properties *op = &fe->dtv_property_cache;
|
||||
struct mt352_state* state = fe->demodulator_priv;
|
||||
u16 tps;
|
||||
u16 div;
|
||||
|
|
|
@ -375,9 +375,9 @@ static int or51132_set_parameters(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int or51132_get_parameters(struct dvb_frontend* fe)
|
||||
static int or51132_get_parameters(struct dvb_frontend* fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct or51132_state* state = fe->demodulator_priv;
|
||||
int status;
|
||||
int retry = 1;
|
||||
|
|
|
@ -279,11 +279,11 @@ err:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int rtl2830_get_frontend(struct dvb_frontend *fe)
|
||||
static int rtl2830_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct i2c_client *client = fe->demodulator_priv;
|
||||
struct rtl2830_dev *dev = i2c_get_clientdata(client);
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
u8 buf[3];
|
||||
|
||||
|
@ -900,6 +900,9 @@ static int rtl2830_remove(struct i2c_client *client)
|
|||
|
||||
dev_dbg(&client->dev, "\n");
|
||||
|
||||
/* stop statistics polling */
|
||||
cancel_delayed_work_sync(&dev->stat_work);
|
||||
|
||||
i2c_del_mux_adapter(dev->adapter);
|
||||
regmap_exit(dev->regmap);
|
||||
kfree(dev);
|
||||
|
|
|
@ -575,11 +575,11 @@ err:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int rtl2832_get_frontend(struct dvb_frontend *fe)
|
||||
static int rtl2832_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct rtl2832_dev *dev = fe->demodulator_priv;
|
||||
struct i2c_client *client = dev->client;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
u8 buf[3];
|
||||
|
||||
|
|
|
@ -925,9 +925,9 @@ static int s5h1409_read_ber(struct dvb_frontend *fe, u32 *ber)
|
|||
return s5h1409_read_ucblocks(fe, ber);
|
||||
}
|
||||
|
||||
static int s5h1409_get_frontend(struct dvb_frontend *fe)
|
||||
static int s5h1409_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct s5h1409_state *state = fe->demodulator_priv;
|
||||
|
||||
p->frequency = state->current_frequency;
|
||||
|
|
|
@ -840,9 +840,9 @@ static int s5h1411_read_ber(struct dvb_frontend *fe, u32 *ber)
|
|||
return s5h1411_read_ucblocks(fe, ber);
|
||||
}
|
||||
|
||||
static int s5h1411_get_frontend(struct dvb_frontend *fe)
|
||||
static int s5h1411_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct s5h1411_state *state = fe->demodulator_priv;
|
||||
|
||||
p->frequency = state->current_frequency;
|
||||
|
|
|
@ -756,9 +756,9 @@ static int s5h1420_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int s5h1420_get_frontend(struct dvb_frontend* fe)
|
||||
static int s5h1420_get_frontend(struct dvb_frontend* fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct s5h1420_state* state = fe->demodulator_priv;
|
||||
|
||||
p->frequency = state->tunedfreq + s5h1420_getfreqoffset(state);
|
||||
|
|
|
@ -433,9 +433,9 @@ static int s921_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int s921_get_frontend(struct dvb_frontend *fe)
|
||||
static int s921_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct s921_state *state = fe->demodulator_priv;
|
||||
|
||||
/* FIXME: Probably it is possible to get it from regs f1 and f2 */
|
||||
|
|
|
@ -225,22 +225,18 @@ static int si2165_writereg32(struct si2165_state *state, const u16 reg, u32 val)
|
|||
static int si2165_writereg_mask8(struct si2165_state *state, const u16 reg,
|
||||
u8 val, u8 mask)
|
||||
{
|
||||
int ret;
|
||||
u8 tmp;
|
||||
|
||||
if (mask != 0xff) {
|
||||
ret = si2165_readreg8(state, reg, &tmp);
|
||||
u8 tmp;
|
||||
int ret = si2165_readreg8(state, reg, &tmp);
|
||||
|
||||
if (ret < 0)
|
||||
goto err;
|
||||
return ret;
|
||||
|
||||
val &= mask;
|
||||
tmp &= ~mask;
|
||||
val |= tmp;
|
||||
}
|
||||
|
||||
ret = si2165_writereg8(state, reg, val);
|
||||
err:
|
||||
return ret;
|
||||
return si2165_writereg8(state, reg, val);
|
||||
}
|
||||
|
||||
#define REG16(reg, val) { (reg), (val) & 0xff }, { (reg)+1, (val)>>8 & 0xff }
|
||||
|
@ -825,19 +821,19 @@ static int si2165_set_frontend_dvbt(struct dvb_frontend *fe)
|
|||
struct si2165_state *state = fe->demodulator_priv;
|
||||
u32 dvb_rate = 0;
|
||||
u16 bw10k;
|
||||
u32 bw_hz = p->bandwidth_hz;
|
||||
|
||||
dprintk("%s: called\n", __func__);
|
||||
|
||||
if (!state->has_dvbt)
|
||||
return -EINVAL;
|
||||
|
||||
if (p->bandwidth_hz > 0) {
|
||||
dvb_rate = p->bandwidth_hz * 8 / 7;
|
||||
bw10k = p->bandwidth_hz / 10000;
|
||||
} else {
|
||||
dvb_rate = 8 * 8 / 7;
|
||||
bw10k = 800;
|
||||
}
|
||||
/* no bandwidth auto-detection */
|
||||
if (bw_hz == 0)
|
||||
return -EINVAL;
|
||||
|
||||
dvb_rate = bw_hz * 8 / 7;
|
||||
bw10k = bw_hz / 10000;
|
||||
|
||||
ret = si2165_adjust_pll_divl(state, 12);
|
||||
if (ret < 0)
|
||||
|
|
|
@ -1568,9 +1568,9 @@ static enum dvbfe_search stb0899_search(struct dvb_frontend *fe)
|
|||
return DVBFE_ALGO_SEARCH_ERROR;
|
||||
}
|
||||
|
||||
static int stb0899_get_frontend(struct dvb_frontend *fe)
|
||||
static int stb0899_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct stb0899_state *state = fe->demodulator_priv;
|
||||
struct stb0899_internal *internal = &state->internal;
|
||||
|
||||
|
|
|
@ -346,7 +346,7 @@ static int stb6100_set_frequency(struct dvb_frontend *fe, u32 frequency)
|
|||
|
||||
if (fe->ops.get_frontend) {
|
||||
dprintk(verbose, FE_DEBUG, 1, "Get frontend parameters");
|
||||
fe->ops.get_frontend(fe);
|
||||
fe->ops.get_frontend(fe, p);
|
||||
}
|
||||
srate = p->symbol_rate;
|
||||
|
||||
|
|
|
@ -615,9 +615,9 @@ timeout:
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int stv0297_get_frontend(struct dvb_frontend *fe)
|
||||
static int stv0297_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct stv0297_state *state = fe->demodulator_priv;
|
||||
int reg_00, reg_83;
|
||||
|
||||
|
|
|
@ -422,7 +422,7 @@ static int stv0299_send_legacy_dish_cmd (struct dvb_frontend* fe, unsigned long
|
|||
if (debug_legacy_dish_switch)
|
||||
printk ("%s switch command: 0x%04lx\n",__func__, cmd);
|
||||
|
||||
nexttime = ktime_get_real();
|
||||
nexttime = ktime_get_boottime();
|
||||
if (debug_legacy_dish_switch)
|
||||
tv[0] = nexttime;
|
||||
stv0299_writeregI (state, 0x0c, reg0x0c | 0x50); /* set LNB to 18V */
|
||||
|
@ -431,7 +431,7 @@ static int stv0299_send_legacy_dish_cmd (struct dvb_frontend* fe, unsigned long
|
|||
|
||||
for (i=0; i<9; i++) {
|
||||
if (debug_legacy_dish_switch)
|
||||
tv[i+1] = ktime_get_real();
|
||||
tv[i+1] = ktime_get_boottime();
|
||||
if((cmd & 0x01) != last) {
|
||||
/* set voltage to (last ? 13V : 18V) */
|
||||
stv0299_writeregI (state, 0x0c, reg0x0c | (last ? lv_mask : 0x50));
|
||||
|
@ -602,9 +602,9 @@ static int stv0299_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int stv0299_get_frontend(struct dvb_frontend *fe)
|
||||
static int stv0299_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct stv0299_state* state = fe->demodulator_priv;
|
||||
s32 derot_freq;
|
||||
int invval;
|
||||
|
|
|
@ -1938,9 +1938,9 @@ static int stv0367ter_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int stv0367ter_get_frontend(struct dvb_frontend *fe)
|
||||
static int stv0367ter_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct stv0367_state *state = fe->demodulator_priv;
|
||||
struct stv0367ter_state *ter_state = state->ter_state;
|
||||
enum stv0367_ter_mode mode;
|
||||
|
@ -3146,9 +3146,9 @@ static int stv0367cab_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int stv0367cab_get_frontend(struct dvb_frontend *fe)
|
||||
static int stv0367cab_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct stv0367_state *state = fe->demodulator_priv;
|
||||
struct stv0367cab_state *cab_state = state->cab_state;
|
||||
|
||||
|
|
|
@ -1859,9 +1859,9 @@ static int stv0900_sleep(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int stv0900_get_frontend(struct dvb_frontend *fe)
|
||||
static int stv0900_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct stv0900_state *state = fe->demodulator_priv;
|
||||
struct stv0900_internal *intp = state->internal;
|
||||
enum fe_stv0900_demod_num demod = state->demod;
|
||||
|
|
|
@ -355,7 +355,7 @@ static struct dvb_tuner_ops stv6110x_ops = {
|
|||
.release = stv6110x_release
|
||||
};
|
||||
|
||||
static struct stv6110x_devctl stv6110x_ctl = {
|
||||
static const struct stv6110x_devctl stv6110x_ctl = {
|
||||
.tuner_init = stv6110x_init,
|
||||
.tuner_sleep = stv6110x_sleep,
|
||||
.tuner_set_mode = stv6110x_set_mode,
|
||||
|
@ -369,7 +369,7 @@ static struct stv6110x_devctl stv6110x_ctl = {
|
|||
.tuner_get_status = stv6110x_get_status,
|
||||
};
|
||||
|
||||
struct stv6110x_devctl *stv6110x_attach(struct dvb_frontend *fe,
|
||||
const struct stv6110x_devctl *stv6110x_attach(struct dvb_frontend *fe,
|
||||
const struct stv6110x_config *config,
|
||||
struct i2c_adapter *i2c)
|
||||
{
|
||||
|
|
|
@ -55,12 +55,12 @@ struct stv6110x_devctl {
|
|||
|
||||
#if IS_REACHABLE(CONFIG_DVB_STV6110x)
|
||||
|
||||
extern struct stv6110x_devctl *stv6110x_attach(struct dvb_frontend *fe,
|
||||
extern const struct stv6110x_devctl *stv6110x_attach(struct dvb_frontend *fe,
|
||||
const struct stv6110x_config *config,
|
||||
struct i2c_adapter *i2c);
|
||||
|
||||
#else
|
||||
static inline struct stv6110x_devctl *stv6110x_attach(struct dvb_frontend *fe,
|
||||
static inline const struct stv6110x_devctl *stv6110x_attach(struct dvb_frontend *fe,
|
||||
const struct stv6110x_config *config,
|
||||
struct i2c_adapter *i2c)
|
||||
{
|
||||
|
|
|
@ -70,7 +70,7 @@ struct stv6110x_state {
|
|||
const struct stv6110x_config *config;
|
||||
u8 regs[8];
|
||||
|
||||
struct stv6110x_devctl *devctl;
|
||||
const struct stv6110x_devctl *devctl;
|
||||
};
|
||||
|
||||
#endif /* __STV6110x_PRIV_H */
|
||||
|
|
|
@ -201,10 +201,10 @@ static const enum fe_code_rate fec_conv_sat[] = {
|
|||
FEC_2_3, /* for 8PSK. (trellis code) */
|
||||
};
|
||||
|
||||
static int tc90522s_get_frontend(struct dvb_frontend *fe)
|
||||
static int tc90522s_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct tc90522_state *state;
|
||||
struct dtv_frontend_properties *c;
|
||||
struct dtv_fe_stats *stats;
|
||||
int ret, i;
|
||||
int layers;
|
||||
|
@ -212,7 +212,6 @@ static int tc90522s_get_frontend(struct dvb_frontend *fe)
|
|||
u32 cndat;
|
||||
|
||||
state = fe->demodulator_priv;
|
||||
c = &fe->dtv_property_cache;
|
||||
c->delivery_system = SYS_ISDBS;
|
||||
c->symbol_rate = 28860000;
|
||||
|
||||
|
@ -337,10 +336,10 @@ static const enum fe_modulation mod_conv[] = {
|
|||
DQPSK, QPSK, QAM_16, QAM_64, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
static int tc90522t_get_frontend(struct dvb_frontend *fe)
|
||||
static int tc90522t_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct tc90522_state *state;
|
||||
struct dtv_frontend_properties *c;
|
||||
struct dtv_fe_stats *stats;
|
||||
int ret, i;
|
||||
int layers;
|
||||
|
@ -348,7 +347,6 @@ static int tc90522t_get_frontend(struct dvb_frontend *fe)
|
|||
u32 cndat;
|
||||
|
||||
state = fe->demodulator_priv;
|
||||
c = &fe->dtv_property_cache;
|
||||
c->delivery_system = SYS_ISDBT;
|
||||
c->bandwidth_hz = 6000000;
|
||||
mode = 1;
|
||||
|
|
|
@ -387,9 +387,9 @@ static int tda10021_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tda10021_get_frontend(struct dvb_frontend *fe)
|
||||
static int tda10021_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct tda10021_state* state = fe->demodulator_priv;
|
||||
int sync;
|
||||
s8 afc = 0;
|
||||
|
|
|
@ -457,9 +457,9 @@ static int tda10023_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tda10023_get_frontend(struct dvb_frontend *fe)
|
||||
static int tda10023_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct tda10023_state* state = fe->demodulator_priv;
|
||||
int sync,inv;
|
||||
s8 afc = 0;
|
||||
|
|
|
@ -1028,9 +1028,9 @@ static int tda10048_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tda10048_get_frontend(struct dvb_frontend *fe)
|
||||
static int tda10048_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct tda10048_state *state = fe->demodulator_priv;
|
||||
|
||||
dprintk(1, "%s()\n", __func__);
|
||||
|
|
|
@ -899,9 +899,9 @@ static int tda1004x_set_fe(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tda1004x_get_fe(struct dvb_frontend *fe)
|
||||
static int tda1004x_get_fe(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *fe_params)
|
||||
{
|
||||
struct dtv_frontend_properties *fe_params = &fe->dtv_property_cache;
|
||||
struct tda1004x_state* state = fe->demodulator_priv;
|
||||
int status;
|
||||
|
||||
|
|
|
@ -701,11 +701,11 @@ error:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int tda10071_get_frontend(struct dvb_frontend *fe)
|
||||
static int tda10071_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *c)
|
||||
{
|
||||
struct tda10071_dev *dev = fe->demodulator_priv;
|
||||
struct i2c_client *client = dev->client;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret, i;
|
||||
u8 buf[5], tmp;
|
||||
|
||||
|
|
|
@ -459,9 +459,9 @@ static int tda10086_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tda10086_get_frontend(struct dvb_frontend *fe)
|
||||
static int tda10086_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *fe_params)
|
||||
{
|
||||
struct dtv_frontend_properties *fe_params = &fe->dtv_property_cache;
|
||||
struct tda10086_state* state = fe->demodulator_priv;
|
||||
u8 val;
|
||||
int tmp;
|
||||
|
|
|
@ -342,9 +342,9 @@ static int tda8083_set_frontend(struct dvb_frontend *fe)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tda8083_get_frontend(struct dvb_frontend *fe)
|
||||
static int tda8083_get_frontend(struct dvb_frontend *fe,
|
||||
struct dtv_frontend_properties *p)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct tda8083_state* state = fe->demodulator_priv;
|
||||
|
||||
/* FIXME: get symbolrate & frequency offset...*/
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue