Merge branch 'patchwork' into v4l_for_linus

* patchwork: (204 commits)
  [media] rc: sunxi-cir: Initialize the spinlock properly
  [media] rtl2832: do not filter out slave TS null packets
  [media] rtl2832: print reg number on error case
  [media] rtl28xxu: return demod reg page from driver cache
  [media] coda: enable MPEG-2 ES decoding
  [media] coda: don't start streaming without queued buffers
  [media] coda: hook up vidioc_prepare_buf
  [media] coda: relax coda_jpeg_check_buffer for trailing bytes
  [media] coda: make to_coda_video_device static
  [media] s5p-mfc: remove volatile attribute from MFC register addresses
  [media] s5p-mfc: merge together s5p_mfc_hw_call and s5p_mfc_hw_call_void
  [media] s5p-mfc: use spinlock to protect MFC context
  [media] s5p-mfc: remove unnecessary callbacks
  [media] s5p-mfc: make queue cleanup code common
  [media] s5p-mfc: use one implementation of s5p_mfc_get_new_ctx
  [media] s5p-mfc: constify s5p_mfc_codec_ops structures
  [media] au8522: Avoid memory leak for device config data
  [media] ir-lirc-codec.c: don't leak lirc->drv-rbuf
  [media] uvcvideo: small cleanup in uvc_video_clock_update()
  [media] uvcvideo: Fix reading the current exposure value of UVC
  ...
This commit is contained in:
Mauro Carvalho Chehab 2016-01-11 11:13:27 -02:00
Родитель afd2ff9b7e 768acf46e1
Коммит c3152592e7
528 изменённых файлов: 4546 добавлений и 4102 удалений

Просмотреть файл

@ -238,78 +238,26 @@ X!Isound/sound_firmware.c
!Iinclude/media/videobuf2-memops.h !Iinclude/media/videobuf2-memops.h
</sect1> </sect1>
<sect1><title>Digital TV (DVB) devices</title> <sect1><title>Digital TV (DVB) devices</title>
!Idrivers/media/dvb-core/dvb_ca_en50221.h <sect1><title>Digital TV Common functions</title>
!Idrivers/media/dvb-core/dvb_frontend.h
!Idrivers/media/dvb-core/dvb_math.h !Idrivers/media/dvb-core/dvb_math.h
!Idrivers/media/dvb-core/dvb_ringbuffer.h !Idrivers/media/dvb-core/dvb_ringbuffer.h
!Idrivers/media/dvb-core/dvbdev.h !Idrivers/media/dvb-core/dvbdev.h
<sect1><title>Digital TV Demux API</title> </sect1>
<para>The kernel demux API defines a driver-internal interface for <sect1><title>Digital TV Frontend kABI</title>
registering low-level, hardware specific driver to a hardware !Pdrivers/media/dvb-core/dvb_frontend.h Digital TV Frontend
independent demux layer. It is only of interest for Digital TV !Idrivers/media/dvb-core/dvb_frontend.h
device driver writers. The header file for this API is named </sect1>
<constant>demux.h</constant> and located in <sect1><title>Digital TV Demux kABI</title>
<constant>drivers/media/dvb-core</constant>.</para> !Pdrivers/media/dvb-core/demux.h Digital TV Demux
<sect1><title>Demux Callback API</title>
<para>The demux API should be implemented for each demux in the !Pdrivers/media/dvb-core/demux.h Demux Callback
system. It is used to select the TS source of a demux and to manage </sect1>
the demux resources. When the demux client allocates a resource via
the demux API, it receives a pointer to the API of that
resource.</para>
<para>Each demux receives its TS input from a DVB front-end or from
memory, as set via this demux API. In a system with more than one
front-end, the API can be used to select one of the DVB front-ends
as a TS source for a demux, unless this is fixed in the HW platform.
The demux API only controls front-ends regarding to their connections
with demuxes; the APIs used to set the other front-end parameters,
such as tuning, are not defined in this document.</para>
<para>The functions that implement the abstract interface demux should
be defined static or module private and registered to the Demux
core for external access. It is not necessary to implement every
function in the struct <constant>dmx_demux</constant>. For example,
a demux interface might support Section filtering, but not PES
filtering. The API client is expected to check the value of any
function pointer before calling the function: the value of NULL means
that the &#8220;function is not available&#8221;.</para>
<para>Whenever the functions of the demux API modify shared data,
the possibilities of lost update and race condition problems should
be addressed, e.g. by protecting parts of code with mutexes.</para>
<para>Note that functions called from a bottom half context must not
sleep. Even a simple memory allocation without using GFP_ATOMIC can
result in a kernel thread being put to sleep if swapping is needed.
For example, the Linux kernel calls the functions of a network device
interface from a bottom half context. Thus, if a demux API function
is called from network device code, the function must not sleep.
</para>
</sect1>
<section id="demux_callback_api">
<title>Demux Callback API</title>
<para>This kernel-space API comprises the callback functions that
deliver filtered data to the demux client. Unlike the other DVB
kABIs, these functions are provided by the client and called from
the demux code.</para>
<para>The function pointers of this abstract interface are not
packed into a structure as in the other demux APIs, because the
callback functions are registered and used independent of each
other. As an example, it is possible for the API client to provide
several callback functions for receiving TS packets and no
callbacks for PES packets or sections.</para>
<para>The functions that implement the callback API need not be
re-entrant: when a demux driver calls one of these functions,
the driver is not allowed to call the function again before
the original call returns. If a callback is triggered by a
hardware interrupt, it is recommended to use the Linux
&#8220;bottom half&#8221; mechanism or start a tasklet instead of
making the callback function call directly from a hardware
interrupt.</para>
<para>This mechanism is implemented by
<link linkend='API-dmx-ts-cb'>dmx_ts_cb()</link> and
<link linkend='API-dmx-section-cb'>dmx_section_cb()</link>.</para>
</section>
!Idrivers/media/dvb-core/demux.h !Idrivers/media/dvb-core/demux.h
</sect1> </sect1>
<sect1><title>Digital TV Conditional Access kABI</title>
!Idrivers/media/dvb-core/dvb_ca_en50221.h
</sect1>
</sect1>
<sect1><title>Remote Controller devices</title> <sect1><title>Remote Controller devices</title>
!Iinclude/media/rc-core.h !Iinclude/media/rc-core.h
!Iinclude/media/lirc_dev.h !Iinclude/media/lirc_dev.h

Просмотреть файл

@ -199,8 +199,10 @@ DVB_DOCUMENTED = \
# #
install_media_images = \ install_media_images = \
$(Q)-mkdir $(MEDIA_OBJ_DIR)/media_api; \ $(Q)if [ "x$(findstring media_api.xml,$(DOCBOOKS))" != "x" ]; then \
cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/*.svg $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api mkdir -p $(MEDIA_OBJ_DIR)/media_api; \
cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/*.svg $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api; \
fi
$(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64 $(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64
$(Q)base64 -d $< >$@ $(Q)base64 -d $< >$@

Просмотреть файл

@ -76,7 +76,7 @@ int main(void)
<para>NOTE: While it is possible to directly call the Kernel code like the <para>NOTE: While it is possible to directly call the Kernel code like the
above example, it is strongly recommended to use above example, it is strongly recommended to use
<ulink url="http://linuxtv.org/docs/libdvbv5/index.html">libdvbv5</ulink>, <ulink url="https://linuxtv.org/docs/libdvbv5/index.html">libdvbv5</ulink>,
as it provides abstraction to work with the supported digital TV standards as it provides abstraction to work with the supported digital TV standards
and provides methods for usual operations like program scanning and to and provides methods for usual operations like program scanning and to
read/write channel descriptor files.</para> read/write channel descriptor files.</para>

Просмотреть файл

@ -3,7 +3,7 @@
</para> </para>
<para>NOTE: This section is out of date, and the code below won't even <para>NOTE: This section is out of date, and the code below won't even
compile. Please refer to the compile. Please refer to the
<ulink url="http://linuxtv.org/docs/libdvbv5/index.html">libdvbv5</ulink> <ulink url="https://linuxtv.org/docs/libdvbv5/index.html">libdvbv5</ulink>
for updated/recommended examples. for updated/recommended examples.
</para> </para>

Просмотреть файл

@ -32,7 +32,7 @@ and filtering several section and PES data streams at the same time.
new standard Linux DVB API. As a commitment to the development of new standard Linux DVB API. As a commitment to the development of
terminals based on open standards, Nokia and Convergence made it terminals based on open standards, Nokia and Convergence made it
available to all Linux developers and published it on available to all Linux developers and published it on
<ulink url="http://www.linuxtv.org/" /> in September 2000. <ulink url="https://linuxtv.org" /> in September 2000.
Convergence is the maintainer of the Linux DVB API. Together with the Convergence is the maintainer of the Linux DVB API. Together with the
LinuxTV community (i.e. you, the reader of this document), the Linux DVB LinuxTV community (i.e. you, the reader of this document), the Linux DVB
API will be constantly reviewed and improved. With the Linux driver for API will be constantly reviewed and improved. With the Linux driver for

Просмотреть файл

@ -5,7 +5,7 @@
* This program can be used and distributed without restrictions. * This program can be used and distributed without restrictions.
* *
* This program is provided with the V4L2 API * This program is provided with the V4L2 API
* see http://linuxtv.org/docs.php for more information * see https://linuxtv.org/docs.php for more information
*/ */
#include &lt;stdio.h&gt; #include &lt;stdio.h&gt;

Просмотреть файл

@ -2666,7 +2666,7 @@ is useful to display images captured with V4L2 devices.</para>
<para>V4L2 does not support digital terrestrial, cable or <para>V4L2 does not support digital terrestrial, cable or
satellite broadcast. A separate project aiming at digital receivers satellite broadcast. A separate project aiming at digital receivers
exists. You can find its homepage at <ulink exists. You can find its homepage at <ulink
url="http://linuxtv.org">http://linuxtv.org</ulink>. The Linux DVB API url="https://linuxtv.org">https://linuxtv.org</ulink>. The Linux DVB API
has no connection to the V4L2 API except that drivers for hybrid has no connection to the V4L2 API except that drivers for hybrid
hardware may support both.</para> hardware may support both.</para>
</section> </section>

Просмотреть файл

@ -699,7 +699,7 @@ linkend="v4l2-buf-type" /></entry>
buffer. It depends on the negotiated data format and may change with buffer. It depends on the negotiated data format and may change with
each buffer for compressed variable size data like JPEG images. each buffer for compressed variable size data like JPEG images.
Drivers must set this field when <structfield>type</structfield> Drivers must set this field when <structfield>type</structfield>
refers to an input stream, applications when it refers to an output stream. refers to a capture stream, applications when it refers to an output stream.
If the application sets this to 0 for an output stream, then If the application sets this to 0 for an output stream, then
<structfield>bytesused</structfield> will be set to the size of the <structfield>bytesused</structfield> will be set to the size of the
buffer (see the <structfield>length</structfield> field of this struct) by buffer (see the <structfield>length</structfield> field of this struct) by
@ -720,14 +720,14 @@ linkend="buffer-flags" />.</entry>
<entry>Indicates the field order of the image in the <entry>Indicates the field order of the image in the
buffer, see <xref linkend="v4l2-field" />. This field is not used when buffer, see <xref linkend="v4l2-field" />. This field is not used when
the buffer contains VBI data. Drivers must set it when the buffer contains VBI data. Drivers must set it when
<structfield>type</structfield> refers to an input stream, <structfield>type</structfield> refers to a capture stream,
applications when it refers to an output stream.</entry> applications when it refers to an output stream.</entry>
</row> </row>
<row> <row>
<entry>struct timeval</entry> <entry>struct timeval</entry>
<entry><structfield>timestamp</structfield></entry> <entry><structfield>timestamp</structfield></entry>
<entry></entry> <entry></entry>
<entry><para>For input streams this is time when the first data <entry><para>For capture streams this is time when the first data
byte was captured, as returned by the byte was captured, as returned by the
<function>clock_gettime()</function> function for the relevant <function>clock_gettime()</function> function for the relevant
clock id; see <constant>V4L2_BUF_FLAG_TIMESTAMP_*</constant> in clock id; see <constant>V4L2_BUF_FLAG_TIMESTAMP_*</constant> in
@ -866,7 +866,7 @@ must set this to 0.</entry>
<entry></entry> <entry></entry>
<entry>The number of bytes occupied by data in the plane <entry>The number of bytes occupied by data in the plane
(its payload). Drivers must set this field when <structfield>type</structfield> (its payload). Drivers must set this field when <structfield>type</structfield>
refers to an input stream, applications when it refers to an output stream. refers to a capture stream, applications when it refers to an output stream.
If the application sets this to 0 for an output stream, then If the application sets this to 0 for an output stream, then
<structfield>bytesused</structfield> will be set to the size of the <structfield>bytesused</structfield> will be set to the size of the
plane (see the <structfield>length</structfield> field of this struct) plane (see the <structfield>length</structfield> field of this struct)
@ -919,7 +919,7 @@ must set this to 0.</entry>
<entry></entry> <entry></entry>
<entry>Offset in bytes to video data in the plane. <entry>Offset in bytes to video data in the plane.
Drivers must set this field when <structfield>type</structfield> Drivers must set this field when <structfield>type</structfield>
refers to an input stream, applications when it refers to an output stream. refers to a capture stream, applications when it refers to an output stream.
Note that data_offset is included in <structfield>bytesused</structfield>. Note that data_offset is included in <structfield>bytesused</structfield>.
So the size of the image in the plane is So the size of the image in the plane is
<structfield>bytesused</structfield>-<structfield>data_offset</structfield> at <structfield>bytesused</structfield>-<structfield>data_offset</structfield> at

Просмотреть файл

@ -151,6 +151,16 @@ Rubli, Andy Walls, Muralidharan Karicheri, Mauro Carvalho Chehab,
structs, ioctls) must be noted in more detail in the history chapter structs, ioctls) must be noted in more detail in the history chapter
(compat.xml), along with the possible impact on existing drivers and (compat.xml), along with the possible impact on existing drivers and
applications. --> applications. -->
<revision>
<revnumber>4.5</revnumber>
<date>2015-10-29</date>
<authorinitials>rr</authorinitials>
<revremark>Extend vidioc-g-ext-ctrls;. Replace ctrl_class with a new
union with ctrl_class and which. Which is used to select the current value of
the control or the default value.
</revremark>
</revision>
<revision> <revision>
<revnumber>4.4</revnumber> <revnumber>4.4</revnumber>
<date>2015-05-26</date> <date>2015-05-26</date>

Просмотреть файл

@ -58,7 +58,7 @@
<para>This ioctl is used to create buffers for <link linkend="mmap">memory <para>This ioctl is used to create buffers for <link linkend="mmap">memory
mapped</link> or <link linkend="userp">user pointer</link> or <link mapped</link> or <link linkend="userp">user pointer</link> or <link
linkend="dmabuf">DMA buffer</link> I/O. It can be used as an alternative or in linkend="dmabuf">DMA buffer</link> I/O. It can be used as an alternative or in
addition to the <constant>VIDIOC_REQBUFS</constant> ioctl, when a tighter addition to the &VIDIOC-REQBUFS; ioctl, when a tighter
control over buffers is required. This ioctl can be called multiple times to control over buffers is required. This ioctl can be called multiple times to
create buffers of different sizes.</para> create buffers of different sizes.</para>
@ -71,30 +71,28 @@ zeroed.</para>
<para>The <structfield>format</structfield> field specifies the image format <para>The <structfield>format</structfield> field specifies the image format
that the buffers must be able to handle. The application has to fill in this that the buffers must be able to handle. The application has to fill in this
&v4l2-format;. Usually this will be done using the &v4l2-format;. Usually this will be done using the &VIDIOC-TRY-FMT; or &VIDIOC-G-FMT; ioctls
<constant>VIDIOC_TRY_FMT</constant> or <constant>VIDIOC_G_FMT</constant> ioctl() to ensure that the requested format is supported by the driver.
to ensure that the requested format is supported by the driver. Unsupported Based on the format's <structfield>type</structfield> field the requested buffer
formats will result in an error.</para> size (for single-planar) or plane sizes (for multi-planar formats) will be
used for the allocated buffers. The driver may return an error if the size(s)
are not supported by the hardware (usually because they are too small).</para>
<para>The buffers created by this ioctl will have as minimum size the size <para>The buffers created by this ioctl will have as minimum size the size
defined by the <structfield>format.pix.sizeimage</structfield> field. If the defined by the <structfield>format.pix.sizeimage</structfield> field (or the
corresponding fields for other format types). Usually if the
<structfield>format.pix.sizeimage</structfield> field is less than the minimum <structfield>format.pix.sizeimage</structfield> field is less than the minimum
required for the given format, then <structfield>sizeimage</structfield> will be required for the given format, then an error will be returned since drivers will
increased by the driver to that minimum to allocate the buffers. If it is typically not allow this. If it is larger, then the value will be used as-is.
larger, then the value will be used as-is. The same applies to the In other words, the driver may reject the requested size, but if it is accepted
<structfield>sizeimage</structfield> field of the the driver will use it unchanged.</para>
<structname>v4l2_plane_pix_format</structname> structure in the case of
multiplanar formats.</para>
<para>When the ioctl is called with a pointer to this structure the driver <para>When the ioctl is called with a pointer to this structure the driver
will attempt to allocate up to the requested number of buffers and store the will attempt to allocate up to the requested number of buffers and store the
actual number allocated and the starting index in the actual number allocated and the starting index in the
<structfield>count</structfield> and the <structfield>index</structfield> fields <structfield>count</structfield> and the <structfield>index</structfield> fields
respectively. On return <structfield>count</structfield> can be smaller than respectively. On return <structfield>count</structfield> can be smaller than
the number requested. The driver may also increase buffer sizes if required, the number requested.</para>
however, it will not update <structfield>sizeimage</structfield> field values.
The user has to use <constant>VIDIOC_QUERYBUF</constant> to retrieve that
information.</para>
<table pgwide="1" frame="none" id="v4l2-create-buffers"> <table pgwide="1" frame="none" id="v4l2-create-buffers">
<title>struct <structname>v4l2_create_buffers</structname></title> <title>struct <structname>v4l2_create_buffers</structname></title>

Просмотреть файл

@ -99,7 +99,7 @@ if the driver supports writing registers to the device.</para>
<para>We recommended the <application>v4l2-dbg</application> <para>We recommended the <application>v4l2-dbg</application>
utility over calling this ioctl directly. It is available from the utility over calling this ioctl directly. It is available from the
LinuxTV v4l-dvb repository; see <ulink LinuxTV v4l-dvb repository; see <ulink
url="http://linuxtv.org/repo/">http://linuxtv.org/repo/</ulink> for url="https://linuxtv.org/repo/">https://linuxtv.org/repo/</ulink> for
access instructions.</para> access instructions.</para>
<!-- Note for convenience vidioc-dbg-g-register.sgml <!-- Note for convenience vidioc-dbg-g-register.sgml

Просмотреть файл

@ -117,7 +117,7 @@ However when a driver supports these ioctls it must also support
<para>We recommended the <application>v4l2-dbg</application> <para>We recommended the <application>v4l2-dbg</application>
utility over calling these ioctls directly. It is available from the utility over calling these ioctls directly. It is available from the
LinuxTV v4l-dvb repository; see <ulink LinuxTV v4l-dvb repository; see <ulink
url="http://linuxtv.org/repo/">http://linuxtv.org/repo/</ulink> for url="https://linuxtv.org/repo/">https://linuxtv.org/repo/</ulink> for
access instructions.</para> access instructions.</para>
<!-- Note for convenience vidioc-dbg-g-chip-info.sgml <!-- Note for convenience vidioc-dbg-g-chip-info.sgml

Просмотреть файл

@ -198,7 +198,7 @@ video4linux-list@redhat.com on 17 Oct 2002
<constant>V4L2_STD_ATSC_16_VSB</constant> are U.S. terrestrial digital <constant>V4L2_STD_ATSC_16_VSB</constant> are U.S. terrestrial digital
TV standards. Presently the V4L2 API does not support digital TV. See TV standards. Presently the V4L2 API does not support digital TV. See
also the Linux DVB API at <ulink also the Linux DVB API at <ulink
url="http://linuxtv.org">http://linuxtv.org</ulink>.</para> url="https://linuxtv.org">https://linuxtv.org</ulink>.</para>
<para><programlisting> <para><programlisting>
#define V4L2_STD_PAL_BG (V4L2_STD_PAL_B |\ #define V4L2_STD_PAL_BG (V4L2_STD_PAL_B |\
V4L2_STD_PAL_B1 |\ V4L2_STD_PAL_B1 |\

Просмотреть файл

@ -61,7 +61,7 @@ must belong to the same control class.</para>
<para>Applications must always fill in the <para>Applications must always fill in the
<structfield>count</structfield>, <structfield>count</structfield>,
<structfield>ctrl_class</structfield>, <structfield>which</structfield>,
<structfield>controls</structfield> and <structfield>controls</structfield> and
<structfield>reserved</structfield> fields of &v4l2-ext-controls;, and <structfield>reserved</structfield> fields of &v4l2-ext-controls;, and
initialize the &v4l2-ext-control; array pointed to by the initialize the &v4l2-ext-control; array pointed to by the
@ -109,7 +109,7 @@ the driver whether wrong values are automatically adjusted to a valid
value or if an error is returned.</para> value or if an error is returned.</para>
<para>When the <structfield>id</structfield> or <para>When the <structfield>id</structfield> or
<structfield>ctrl_class</structfield> is invalid drivers return an <structfield>which</structfield> is invalid drivers return an
&EINVAL;. When the value is out of bounds drivers can choose to take &EINVAL;. When the value is out of bounds drivers can choose to take
the closest valid value or return an &ERANGE;, whatever seems more the closest valid value or return an &ERANGE;, whatever seems more
appropriate. In the first case the new value is set in appropriate. In the first case the new value is set in
@ -223,7 +223,12 @@ Valid if <constant>V4L2_CTRL_FLAG_HAS_PAYLOAD</constant> is set for this control
<tgroup cols="3"> <tgroup cols="3">
&cs-str; &cs-str;
<tbody valign="top"> <tbody valign="top">
<row>
<entry>union</entry>
<entry>(anonymous)</entry>
</row>
<row> <row>
<entry></entry>
<entry>__u32</entry> <entry>__u32</entry>
<entry><structfield>ctrl_class</structfield></entry> <entry><structfield>ctrl_class</structfield></entry>
<entry>The control class to which all controls belong, see <entry>The control class to which all controls belong, see
@ -233,6 +238,23 @@ belong to any control class. Whether drivers support this can be tested by setti
<structfield>ctrl_class</structfield> to 0 and calling <constant>VIDIOC_TRY_EXT_CTRLS</constant> <structfield>ctrl_class</structfield> to 0 and calling <constant>VIDIOC_TRY_EXT_CTRLS</constant>
with a <structfield>count</structfield> of 0. If that succeeds, then the driver with a <structfield>count</structfield> of 0. If that succeeds, then the driver
supports this feature.</entry> supports this feature.</entry>
</row>
<row>
<entry></entry>
<entry>__u32</entry>
<entry><structfield>which</structfield></entry>
<entry><para>Which value of the control to get/set/try. <constant>V4L2_CTRL_WHICH_CUR_VAL</constant>
will return the current value of the control and <constant>V4L2_CTRL_WHICH_DEF_VAL</constant> will
return the default value of the control. Please note that you can only get the default value of the
control, you cannot set or try it.</para>
<para>For backwards compatibility you can also use a control class here (see
<xref linkend="ctrl-class" />). In that case all controls have to belong to that
control class. This usage is deprecated, instead just use <constant>V4L2_CTRL_WHICH_CUR_VAL</constant>.
There are some very old drivers that do not yet support <constant>V4L2_CTRL_WHICH_CUR_VAL</constant>
and that require a control class here. You can test for such drivers by setting ctrl_class to
<constant>V4L2_CTRL_WHICH_CUR_VAL</constant> and calling VIDIOC_TRY_EXT_CTRLS with a count of 0.
If that fails, then the driver does not support <constant>V4L2_CTRL_WHICH_CUR_VAL</constant>.</para>
</entry>
</row> </row>
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
@ -390,7 +412,7 @@ These controls are described in <xref linkend="rf-tuner-controls" />.</entry>
<listitem> <listitem>
<para>The &v4l2-ext-control; <structfield>id</structfield> <para>The &v4l2-ext-control; <structfield>id</structfield>
is invalid, the &v4l2-ext-controls; is invalid, the &v4l2-ext-controls;
<structfield>ctrl_class</structfield> is invalid, or the &v4l2-ext-control; <structfield>which</structfield> is invalid, or the &v4l2-ext-control;
<structfield>value</structfield> was inappropriate (e.g. the given menu <structfield>value</structfield> was inappropriate (e.g. the given menu
index is not supported by the driver). This error code is index is not supported by the driver). This error code is
also returned by the <constant>VIDIOC_S_EXT_CTRLS</constant> and also returned by the <constant>VIDIOC_S_EXT_CTRLS</constant> and

Просмотреть файл

@ -19,10 +19,10 @@
<!ENTITY cs-def "<colspec colname='c1' colwidth='3*' /><colspec colname='c2' colwidth='1*' /><colspec colname='c3' colwidth='4*' /><spanspec spanname='hspan' namest='c1' nameend='c3' />"> <!ENTITY cs-def "<colspec colname='c1' colwidth='3*' /><colspec colname='c2' colwidth='1*' /><colspec colname='c3' colwidth='4*' /><spanspec spanname='hspan' namest='c1' nameend='c3' />">
<!-- Video for Linux mailing list address. --> <!-- Video for Linux mailing list address. -->
<!ENTITY v4l-ml "<ulink url='http://www.linuxtv.org/lists.php'>http://www.linuxtv.org/lists.php</ulink>"> <!ENTITY v4l-ml "<ulink url='https://linuxtv.org/lists.php'>https://linuxtv.org/lists.php</ulink>">
<!-- LinuxTV v4l-dvb repository. --> <!-- LinuxTV v4l-dvb repository. -->
<!ENTITY v4l-dvb "<ulink url='http://linuxtv.org/repo/'>http://linuxtv.org/repo/</ulink>"> <!ENTITY v4l-dvb "<ulink url='https://linuxtv.org/repo/'>https://linuxtv.org/repo/</ulink>">
<!ENTITY dash-ent-8 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>"> <!ENTITY dash-ent-8 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>">
<!ENTITY dash-ent-10 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>"> <!ENTITY dash-ent-10 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>">
<!ENTITY dash-ent-12 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>"> <!ENTITY dash-ent-12 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>">
@ -91,7 +91,7 @@
components, like mixers, PCM capture, PCM playback, etc, which components, like mixers, PCM capture, PCM playback, etc, which
are controlled via ALSA API.</para> are controlled via ALSA API.</para>
<para>For additional information and for the latest development code, <para>For additional information and for the latest development code,
see: <ulink url="http://linuxtv.org">http://linuxtv.org</ulink>.</para> see: <ulink url="https://linuxtv.org">https://linuxtv.org</ulink>.</para>
<para>For discussing improvements, reporting troubles, sending new drivers, etc, please mail to: <ulink url="http://vger.kernel.org/vger-lists.html#linux-media">Linux Media Mailing List (LMML).</ulink>.</para> <para>For discussing improvements, reporting troubles, sending new drivers, etc, please mail to: <ulink url="http://vger.kernel.org/vger-lists.html#linux-media">Linux Media Mailing List (LMML).</ulink>.</para>
</preface> </preface>

Просмотреть файл

@ -35,7 +35,7 @@ Required properties (tsin (child) node):
- tsin-num : tsin id of the InputBlock (must be between 0 to 6) - tsin-num : tsin id of the InputBlock (must be between 0 to 6)
- i2c-bus : phandle to the I2C bus DT node which the demodulators & tuners on this tsin channel are connected. - i2c-bus : phandle to the I2C bus DT node which the demodulators & tuners on this tsin channel are connected.
- rst-gpio : reset gpio for this tsin channel. - reset-gpios : reset gpio for this tsin channel.
Optional properties (tsin (child) node): Optional properties (tsin (child) node):
@ -55,27 +55,27 @@ Example:
status = "okay"; status = "okay";
reg = <0x08a20000 0x10000>, <0x08a00000 0x4000>; reg = <0x08a20000 0x10000>, <0x08a00000 0x4000>;
reg-names = "stfe", "stfe-ram"; reg-names = "stfe", "stfe-ram";
interrupts = <0 34 0>, <0 35 0>; interrupts = <GIC_SPI 34 IRQ_TYPE_NONE>, <GIC_SPI 35 IRQ_TYPE_NONE>;
interrupt-names = "stfe-error-irq", "stfe-idle-irq"; interrupt-names = "stfe-error-irq", "stfe-idle-irq";
pinctrl-names = "tsin0-serial", "tsin0-parallel", "tsin3-serial",
"tsin4-serial", "tsin5-serial";
pinctrl-0 = <&pinctrl_tsin0_serial>; pinctrl-0 = <&pinctrl_tsin0_serial>;
pinctrl-1 = <&pinctrl_tsin0_parallel>; pinctrl-1 = <&pinctrl_tsin0_parallel>;
pinctrl-2 = <&pinctrl_tsin3_serial>; pinctrl-2 = <&pinctrl_tsin3_serial>;
pinctrl-3 = <&pinctrl_tsin4_serial_alt3>; pinctrl-3 = <&pinctrl_tsin4_serial_alt3>;
pinctrl-4 = <&pinctrl_tsin5_serial_alt1>; pinctrl-4 = <&pinctrl_tsin5_serial_alt1>;
pinctrl-names = "tsin0-serial",
"tsin0-parallel",
"tsin3-serial",
"tsin4-serial",
"tsin5-serial";
clocks = <&clk_s_c0_flexgen CLK_PROC_STFE>; clocks = <&clk_s_c0_flexgen CLK_PROC_STFE>;
clock-names = "stfe"; clock-names = "c8sectpfe";
/* tsin0 is TSA on NIMA */ /* tsin0 is TSA on NIMA */
tsin0: port@0 { tsin0: port@0 {
tsin-num = <0>; tsin-num = <0>;
serial-not-parallel; serial-not-parallel;
i2c-bus = <&ssc2>; i2c-bus = <&ssc2>;
rst-gpio = <&pio15 4 0>; reset-gpios = <&pio15 4 GPIO_ACTIVE_HIGH>;
dvb-card = <STV0367_TDA18212_NIMA_1>; dvb-card = <STV0367_TDA18212_NIMA_1>;
}; };
@ -83,7 +83,7 @@ Example:
tsin-num = <3>; tsin-num = <3>;
serial-not-parallel; serial-not-parallel;
i2c-bus = <&ssc3>; i2c-bus = <&ssc3>;
rst-gpio = <&pio15 7 0>; reset-gpios = <&pio15 7 GPIO_ACTIVE_HIGH>;
dvb-card = <STV0367_TDA18212_NIMB_1>; dvb-card = <STV0367_TDA18212_NIMB_1>;
}; };
}; };

Просмотреть файл

@ -45,7 +45,7 @@ Supported devices
See the LinuxTV DVB Wiki at www.linuxtv.org for a complete list of See the LinuxTV DVB Wiki at www.linuxtv.org for a complete list of
cards/drivers/firmwares: cards/drivers/firmwares:
http://www.linuxtv.org/wiki/index.php/DVB_USB https://linuxtv.org/wiki/index.php/DVB_USB
0. History & News: 0. History & News:
2005-06-30 - added support for WideView WT-220U (Thanks to Steve Chang) 2005-06-30 - added support for WideView WT-220U (Thanks to Steve Chang)
@ -121,7 +121,7 @@ working.
Have a look at the Wikipage for the DVB-USB-drivers to find out, which firmware Have a look at the Wikipage for the DVB-USB-drivers to find out, which firmware
you need for your device: you need for your device:
http://www.linuxtv.org/wiki/index.php/DVB_USB https://linuxtv.org/wiki/index.php/DVB_USB
1.2. Compiling 1.2. Compiling

Просмотреть файл

@ -76,7 +76,7 @@ Some very frequently asked questions about linuxtv-dvb
the TuxBox CVS many interesting DVB applications and the dBox2 the TuxBox CVS many interesting DVB applications and the dBox2
DVB source DVB source
http://www.linuxtv.org/downloads/ https://linuxtv.org/downloads
DVB Swiss Army Knife library and utilities DVB Swiss Army Knife library and utilities
http://www.nenie.org/misc/mpsys/ http://www.nenie.org/misc/mpsys/

Просмотреть файл

@ -152,7 +152,7 @@ sub tda10046lifeview {
sub av7110 { sub av7110 {
my $sourcefile = "dvb-ttpci-01.fw-261d"; my $sourcefile = "dvb-ttpci-01.fw-261d";
my $url = "http://www.linuxtv.org/downloads/firmware/$sourcefile"; my $url = "https://linuxtv.org/downloads/firmware/$sourcefile";
my $hash = "603431b6259715a8e88f376a53b64e2f"; my $hash = "603431b6259715a8e88f376a53b64e2f";
my $outfile = "dvb-ttpci-01.fw"; my $outfile = "dvb-ttpci-01.fw";
@ -303,7 +303,7 @@ sub vp7049 {
} }
sub dibusb { sub dibusb {
my $url = "http://www.linuxtv.org/downloads/firmware/dvb-usb-dibusb-5.0.0.11.fw"; my $url = "https://linuxtv.org/downloads/firmware/dvb-usb-dibusb-5.0.0.11.fw";
my $outfile = "dvb-dibusb-5.0.0.11.fw"; my $outfile = "dvb-dibusb-5.0.0.11.fw";
my $hash = "fa490295a527360ca16dcdf3224ca243"; my $hash = "fa490295a527360ca16dcdf3224ca243";
@ -351,7 +351,7 @@ sub nxt2004 {
sub or51211 { sub or51211 {
my $fwfile = "dvb-fe-or51211.fw"; my $fwfile = "dvb-fe-or51211.fw";
my $url = "http://linuxtv.org/downloads/firmware/$fwfile"; my $url = "https://linuxtv.org/downloads/firmware/$fwfile";
my $hash = "d830949c771a289505bf9eafc225d491"; my $hash = "d830949c771a289505bf9eafc225d491";
checkstandard(); checkstandard();
@ -364,7 +364,7 @@ sub or51211 {
sub cx231xx { sub cx231xx {
my $fwfile = "v4l-cx231xx-avcore-01.fw"; my $fwfile = "v4l-cx231xx-avcore-01.fw";
my $url = "http://linuxtv.org/downloads/firmware/$fwfile"; my $url = "https://linuxtv.org/downloads/firmware/$fwfile";
my $hash = "7d3bb956dc9df0eafded2b56ba57cc42"; my $hash = "7d3bb956dc9df0eafded2b56ba57cc42";
checkstandard(); checkstandard();
@ -376,7 +376,7 @@ sub cx231xx {
} }
sub cx18 { sub cx18 {
my $url = "http://linuxtv.org/downloads/firmware/"; my $url = "https://linuxtv.org/downloads/firmware/";
my %files = ( my %files = (
'v4l-cx23418-apu.fw' => '588f081b562f5c653a3db1ad8f65939a', 'v4l-cx23418-apu.fw' => '588f081b562f5c653a3db1ad8f65939a',
@ -450,7 +450,7 @@ sub mpc718 {
} }
sub cx23885 { sub cx23885 {
my $url = "http://linuxtv.org/downloads/firmware/"; my $url = "https://linuxtv.org/downloads/firmware/";
my %files = ( my %files = (
'v4l-cx23885-avcore-01.fw' => 'a9f8f5d901a7fb42f552e1ee6384f3bb', 'v4l-cx23885-avcore-01.fw' => 'a9f8f5d901a7fb42f552e1ee6384f3bb',
@ -472,7 +472,7 @@ sub cx23885 {
} }
sub pvrusb2 { sub pvrusb2 {
my $url = "http://linuxtv.org/downloads/firmware/"; my $url = "https://linuxtv.org/downloads/firmware/";
my %files = ( my %files = (
'v4l-cx25840.fw' => 'dadb79e9904fc8af96e8111d9cb59320', 'v4l-cx25840.fw' => 'dadb79e9904fc8af96e8111d9cb59320',
@ -494,7 +494,7 @@ sub pvrusb2 {
sub or51132_qam { sub or51132_qam {
my $fwfile = "dvb-fe-or51132-qam.fw"; my $fwfile = "dvb-fe-or51132-qam.fw";
my $url = "http://linuxtv.org/downloads/firmware/$fwfile"; my $url = "https://linuxtv.org/downloads/firmware/$fwfile";
my $hash = "7702e8938612de46ccadfe9b413cb3b5"; my $hash = "7702e8938612de46ccadfe9b413cb3b5";
checkstandard(); checkstandard();
@ -507,7 +507,7 @@ sub or51132_qam {
sub or51132_vsb { sub or51132_vsb {
my $fwfile = "dvb-fe-or51132-vsb.fw"; my $fwfile = "dvb-fe-or51132-vsb.fw";
my $url = "http://linuxtv.org/downloads/firmware/$fwfile"; my $url = "https://linuxtv.org/downloads/firmware/$fwfile";
my $hash = "c16208e02f36fc439a557ad4c613364a"; my $hash = "c16208e02f36fc439a557ad4c613364a";
checkstandard(); checkstandard();
@ -519,7 +519,7 @@ sub or51132_vsb {
} }
sub bluebird { sub bluebird {
my $url = "http://www.linuxtv.org/download/dvb/firmware/dvb-usb-bluebird-01.fw"; my $url = "https://linuxtv.org/download/dvb/firmware/dvb-usb-bluebird-01.fw";
my $outfile = "dvb-usb-bluebird-01.fw"; my $outfile = "dvb-usb-bluebird-01.fw";
my $hash = "658397cb9eba9101af9031302671f49d"; my $hash = "658397cb9eba9101af9031302671f49d";
@ -677,7 +677,7 @@ sub drxk_hauppauge_hvr930c {
} }
sub drxk_terratec_h5 { sub drxk_terratec_h5 {
my $url = "http://www.linuxtv.org/downloads/firmware/"; my $url = "https://linuxtv.org/downloads/firmware/";
my $hash = "19000dada8e2741162ccc50cc91fa7f1"; my $hash = "19000dada8e2741162ccc50cc91fa7f1";
my $fwfile = "dvb-usb-terratec-h5-drxk.fw"; my $fwfile = "dvb-usb-terratec-h5-drxk.fw";

Просмотреть файл

@ -2,12 +2,12 @@ Linux Digital Video Broadcast (DVB) subsystem
============================================= =============================================
The main development site and CVS repository for these The main development site and CVS repository for these
drivers is http://linuxtv.org/. drivers is https://linuxtv.org.
The developer mailing list linux-dvb is also hosted there, The developer mailing list linux-dvb is also hosted there,
see http://linuxtv.org/lists.php. Please check see https://linuxtv.org/lists.php. Please check
the archive http://linuxtv.org/pipermail/linux-dvb/ the archive https://linuxtv.org/pipermail/linux-dvb/
and the Wiki http://linuxtv.org/wiki/ and the Wiki https://linuxtv.org/wiki/
before asking newbie questions on the list. before asking newbie questions on the list.
API documentation, utilities and test/example programs API documentation, utilities and test/example programs
@ -16,7 +16,7 @@ are available as part of the old driver package for Linux 2.4
We plan to split this into separate packages, but it's not We plan to split this into separate packages, but it's not
been done yet. been done yet.
http://linuxtv.org/downloads/ https://linuxtv.org/downloads/
What's inside this directory: What's inside this directory:

Просмотреть файл

@ -9,7 +9,7 @@
<table border="0"> <table border="0">
<tr> <tr>
<td> <td>
<a href="http://linuxtv.org/downloads/legacy/video4linux/API/V4L1_API.html">V4L original API</a> <a href="https://linuxtv.org/downloads/legacy/video4linux/API/V4L1_API.html">V4L original API</a>
</td> </td>
<td> <td>
Obsoleted by V4L2 API Obsoleted by V4L2 API

Просмотреть файл

@ -41,8 +41,8 @@
40 -> Plextor ConvertX PX-TV100U (em2861) [093b:a005] 40 -> Plextor ConvertX PX-TV100U (em2861) [093b:a005]
41 -> Kworld 350 U DVB-T (em2870) [eb1a:e350] 41 -> Kworld 350 U DVB-T (em2870) [eb1a:e350]
42 -> Kworld 355 U DVB-T (em2870) [eb1a:e355,eb1a:e357,eb1a:e359] 42 -> Kworld 355 U DVB-T (em2870) [eb1a:e355,eb1a:e357,eb1a:e359]
43 -> Terratec Cinergy T XS (em2870) [0ccd:0043] 43 -> Terratec Cinergy T XS (em2870)
44 -> Terratec Cinergy T XS (MT2060) (em2870) 44 -> Terratec Cinergy T XS (MT2060) (em2870) [0ccd:0043]
45 -> Pinnacle PCTV DVB-T (em2870) 45 -> Pinnacle PCTV DVB-T (em2870)
46 -> Compro, VideoMate U3 (em2870) [185b:2870] 46 -> Compro, VideoMate U3 (em2870) [185b:2870]
47 -> KWorld DVB-T 305U (em2880) [eb1a:e305] 47 -> KWorld DVB-T 305U (em2880) [eb1a:e305]

Просмотреть файл

@ -58,7 +58,7 @@ Not currently supported:
4.1. Media device interface 4.1. Media device interface
The driver supports Media Controller API as defined at The driver supports Media Controller API as defined at
http://linuxtv.org/downloads/v4l-dvb-apis/media_common.html https://linuxtv.org/downloads/v4l-dvb-apis/media_common.html
The media device driver name is "SAMSUNG S5P FIMC". The media device driver name is "SAMSUNG S5P FIMC".
The purpose of this interface is to allow changing assignment of FIMC instances The purpose of this interface is to allow changing assignment of FIMC instances
@ -83,11 +83,11 @@ undefined behaviour.
4.3. Capture video node 4.3. Capture video node
The driver supports V4L2 Video Capture Interface as defined at: The driver supports V4L2 Video Capture Interface as defined at:
http://linuxtv.org/downloads/v4l-dvb-apis/devices.html https://linuxtv.org/downloads/v4l-dvb-apis/devices.html
At the capture and mem-to-mem video nodes only the multi-planar API is At the capture and mem-to-mem video nodes only the multi-planar API is
supported. For more details see: supported. For more details see:
http://linuxtv.org/downloads/v4l-dvb-apis/planar-apis.html https://linuxtv.org/downloads/v4l-dvb-apis/planar-apis.html
4.4. Camera capture subdevs 4.4. Camera capture subdevs

Просмотреть файл

@ -47,7 +47,7 @@ Tested platforms
File list File list
--------- ---------
drivers/staging/media/omap4iss/ drivers/staging/media/omap4iss/
include/media/omap4iss.h include/linux/platform_data/media/omap4iss.h
References References
---------- ----------

Просмотреть файл

@ -157,7 +157,7 @@ int main (int argc, char *argv[])
} }
The struct si4713_rnl and SI4713_IOC_MEASURE_RNL are defined under The struct si4713_rnl and SI4713_IOC_MEASURE_RNL are defined under
include/media/si4713.h. include/linux/platform_data/media/si4713.h.
Stereo/Mono and RDS subchannels Stereo/Mono and RDS subchannels
=============================== ===============================

Просмотреть файл

@ -163,11 +163,10 @@ static irqreturn_t skeleton_irq(int irq, void *dev_id)
* minimum number: many DMA engines need a minimum of 2 buffers in the * minimum number: many DMA engines need a minimum of 2 buffers in the
* queue and you need to have another available for userspace processing. * queue and you need to have another available for userspace processing.
*/ */
static int queue_setup(struct vb2_queue *vq, const void *parg, static int queue_setup(struct vb2_queue *vq,
unsigned int *nbuffers, unsigned int *nplanes, unsigned int *nbuffers, unsigned int *nplanes,
unsigned int sizes[], void *alloc_ctxs[]) unsigned int sizes[], void *alloc_ctxs[])
{ {
const struct v4l2_format *fmt = parg;
struct skeleton *skel = vb2_get_drv_priv(vq); struct skeleton *skel = vb2_get_drv_priv(vq);
skel->field = skel->format.field; skel->field = skel->format.field;
@ -183,12 +182,12 @@ static int queue_setup(struct vb2_queue *vq, const void *parg,
if (vq->num_buffers + *nbuffers < 3) if (vq->num_buffers + *nbuffers < 3)
*nbuffers = 3 - vq->num_buffers; *nbuffers = 3 - vq->num_buffers;
if (fmt && fmt->fmt.pix.sizeimage < skel->format.sizeimage)
return -EINVAL;
*nplanes = 1;
sizes[0] = fmt ? fmt->fmt.pix.sizeimage : skel->format.sizeimage;
alloc_ctxs[0] = skel->alloc_ctx; alloc_ctxs[0] = skel->alloc_ctx;
if (*nplanes)
return sizes[0] < skel->format.sizeimage ? -EINVAL : 0;
*nplanes = 1;
sizes[0] = skel->format.sizeimage;
return 0; return 0;
} }
@ -509,7 +508,7 @@ static int skeleton_s_dv_timings(struct file *file, void *_fh,
return -EINVAL; return -EINVAL;
/* Return 0 if the new timings are the same as the current timings. */ /* Return 0 if the new timings are the same as the current timings. */
if (v4l2_match_dv_timings(timings, &skel->timings, 0)) if (v4l2_match_dv_timings(timings, &skel->timings, 0, false))
return 0; return 0;
/* /*

Просмотреть файл

@ -206,7 +206,7 @@ F: include/trace/events/9p.h
A8293 MEDIA DRIVER A8293 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -395,7 +395,7 @@ M: Sakari Ailus <sakari.ailus@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
S: Maintained S: Maintained
F: drivers/media/i2c/adp1653.c F: drivers/media/i2c/adp1653.c
F: include/media/adp1653.h F: include/media/i2c/adp1653.h
ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501) ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501)
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
@ -466,7 +466,7 @@ F: sound/oss/aedsp16.c
AF9013 MEDIA DRIVER AF9013 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -476,7 +476,7 @@ F: drivers/media/dvb-frontends/af9013*
AF9033 MEDIA DRIVER AF9033 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -522,7 +522,7 @@ AIMSLAB FM RADIO RECEIVER DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Maintained S: Maintained
F: drivers/media/radio/radio-aimslab* F: drivers/media/radio/radio-aimslab*
@ -536,7 +536,7 @@ F: include/linux/*aio*.h
AIRSPY MEDIA DRIVER AIRSPY MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -1773,7 +1773,7 @@ L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Maintained S: Maintained
F: drivers/media/i2c/as3645a.c F: drivers/media/i2c/as3645a.c
F: include/media/as3645a.h F: include/media/i2c/as3645a.h
ASC7621 HARDWARE MONITOR DRIVER ASC7621 HARDWARE MONITOR DRIVER
M: George Joseph <george.joseph@fairview5.com> M: George Joseph <george.joseph@fairview5.com>
@ -2064,7 +2064,7 @@ F: net/ax25/
AZ6007 DVB DRIVER AZ6007 DVB DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Maintained S: Maintained
F: drivers/media/usb/dvb-usb-v2/az6007.c F: drivers/media/usb/dvb-usb-v2/az6007.c
@ -2073,7 +2073,7 @@ AZTECH FM RADIO RECEIVER DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Maintained S: Maintained
F: drivers/media/radio/radio-aztech* F: drivers/media/radio/radio-aztech*
@ -2126,7 +2126,7 @@ BDISP ST MEDIA DRIVER
M: Fabien Dessenne <fabien.dessenne@st.com> M: Fabien Dessenne <fabien.dessenne@st.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Supported S: Supported
F: drivers/media/platform/sti/bdisp F: drivers/media/platform/sti/bdisp
@ -2519,7 +2519,7 @@ F: fs/btrfs/
BTTV VIDEO4LINUX DRIVER BTTV VIDEO4LINUX DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Odd fixes S: Odd fixes
F: Documentation/video4linux/bttv/ F: Documentation/video4linux/bttv/
@ -2558,7 +2558,7 @@ CADET FM/AM RADIO RECEIVER DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Maintained S: Maintained
F: drivers/media/radio/radio-cadet* F: drivers/media/radio/radio-cadet*
@ -2851,7 +2851,7 @@ COBALT MEDIA DRIVER
M: Hans Verkuil <hans.verkuil@cisco.com> M: Hans Verkuil <hans.verkuil@cisco.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Supported S: Supported
F: drivers/media/pci/cobalt/ F: drivers/media/pci/cobalt/
@ -3096,6 +3096,15 @@ S: Maintained
F: crypto/ansi_cprng.c F: crypto/ansi_cprng.c
F: crypto/rng.c F: crypto/rng.c
CS3308 MEDIA DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org
S: Odd Fixes
F: drivers/media/i2c/cs3308.c
F: drivers/media/i2c/cs3308.h
CS5535 Audio ALSA driver CS5535 Audio ALSA driver
M: Jaya Kumar <jayakumar.alsa@gmail.com> M: Jaya Kumar <jayakumar.alsa@gmail.com>
S: Maintained S: Maintained
@ -3111,7 +3120,7 @@ M: Andy Walls <awalls@md.metrocast.net>
L: ivtv-devel@ivtvdriver.org (subscribers-only) L: ivtv-devel@ivtvdriver.org (subscribers-only)
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
W: http://www.ivtvdriver.org/index.php/Cx18 W: http://www.ivtvdriver.org/index.php/Cx18
S: Maintained S: Maintained
F: Documentation/video4linux/cx18.txt F: Documentation/video4linux/cx18.txt
@ -3122,7 +3131,7 @@ CX2341X MPEG ENCODER HELPER MODULE
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Maintained S: Maintained
F: drivers/media/common/cx2341x* F: drivers/media/common/cx2341x*
F: include/media/cx2341x* F: include/media/cx2341x*
@ -3131,7 +3140,7 @@ CX24120 MEDIA DRIVER
M: Jemma Denson <jdenson@gmail.com> M: Jemma Denson <jdenson@gmail.com>
M: Patrick Boettcher <patrick.boettcher@posteo.de> M: Patrick Boettcher <patrick.boettcher@posteo.de>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
S: Maintained S: Maintained
F: drivers/media/dvb-frontends/cx24120* F: drivers/media/dvb-frontends/cx24120*
@ -3139,7 +3148,7 @@ F: drivers/media/dvb-frontends/cx24120*
CX88 VIDEO4LINUX DRIVER CX88 VIDEO4LINUX DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Odd fixes S: Odd fixes
F: Documentation/video4linux/cx88/ F: Documentation/video4linux/cx88/
@ -3148,7 +3157,7 @@ F: drivers/media/pci/cx88/
CXD2820R MEDIA DRIVER CXD2820R MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -3254,7 +3263,7 @@ F: drivers/net/wan/pc300*
CYPRESS_FIRMWARE MEDIA DRIVER CYPRESS_FIRMWARE MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -3761,14 +3770,14 @@ DT3155 MEDIA DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Odd Fixes S: Odd Fixes
F: drivers/media/pci/dt3155/ F: drivers/media/pci/dt3155/
DVB_USB_AF9015 MEDIA DRIVER DVB_USB_AF9015 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -3778,7 +3787,7 @@ F: drivers/media/usb/dvb-usb-v2/af9015*
DVB_USB_AF9035 MEDIA DRIVER DVB_USB_AF9035 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -3788,7 +3797,7 @@ F: drivers/media/usb/dvb-usb-v2/af9035*
DVB_USB_ANYSEE MEDIA DRIVER DVB_USB_ANYSEE MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -3798,7 +3807,7 @@ F: drivers/media/usb/dvb-usb-v2/anysee*
DVB_USB_AU6610 MEDIA DRIVER DVB_USB_AU6610 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -3808,7 +3817,7 @@ F: drivers/media/usb/dvb-usb-v2/au6610*
DVB_USB_CE6230 MEDIA DRIVER DVB_USB_CE6230 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -3818,7 +3827,7 @@ F: drivers/media/usb/dvb-usb-v2/ce6230*
DVB_USB_CXUSB MEDIA DRIVER DVB_USB_CXUSB MEDIA DRIVER
M: Michael Krufky <mkrufky@linuxtv.org> M: Michael Krufky <mkrufky@linuxtv.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://github.com/mkrufky W: http://github.com/mkrufky
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
@ -3828,7 +3837,7 @@ F: drivers/media/usb/dvb-usb/cxusb*
DVB_USB_EC168 MEDIA DRIVER DVB_USB_EC168 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -3838,7 +3847,7 @@ F: drivers/media/usb/dvb-usb-v2/ec168*
DVB_USB_GL861 MEDIA DRIVER DVB_USB_GL861 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
S: Maintained S: Maintained
@ -3847,7 +3856,7 @@ F: drivers/media/usb/dvb-usb-v2/gl861*
DVB_USB_MXL111SF MEDIA DRIVER DVB_USB_MXL111SF MEDIA DRIVER
M: Michael Krufky <mkrufky@linuxtv.org> M: Michael Krufky <mkrufky@linuxtv.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://github.com/mkrufky W: http://github.com/mkrufky
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/mkrufky/mxl111sf.git T: git git://linuxtv.org/mkrufky/mxl111sf.git
@ -3857,7 +3866,7 @@ F: drivers/media/usb/dvb-usb-v2/mxl111sf*
DVB_USB_RTL28XXU MEDIA DRIVER DVB_USB_RTL28XXU MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -3867,7 +3876,7 @@ F: drivers/media/usb/dvb-usb-v2/rtl28xxu*
DVB_USB_V2 MEDIA DRIVER DVB_USB_V2 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -3897,7 +3906,7 @@ F: Documentation/devicetree/bindings/input/e3x0-button.txt
E4000 MEDIA DRIVER E4000 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -3913,7 +3922,7 @@ F: drivers/scsi/eata.c
EC100 MEDIA DRIVER EC100 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -4137,7 +4146,7 @@ F: drivers/net/ethernet/ibm/ehea/
EM28XX VIDEO4LINUX DRIVER EM28XX VIDEO4LINUX DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Maintained S: Maintained
F: drivers/media/usb/em28xx/ F: drivers/media/usb/em28xx/
@ -4277,7 +4286,7 @@ F: drivers/media/tuners/fc0011.c
FC2580 MEDIA DRIVER FC2580 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -4600,7 +4609,7 @@ M: Heungjun Kim <riverful.kim@samsung.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
S: Maintained S: Maintained
F: drivers/media/i2c/m5mols/ F: drivers/media/i2c/m5mols/
F: include/media/m5mols.h F: include/media/i2c/m5mols.h
FUJITSU TABLET EXTRAS FUJITSU TABLET EXTRAS
M: Robert Gerlach <khnz@gmx.de> M: Robert Gerlach <khnz@gmx.de>
@ -4646,7 +4655,7 @@ GEMTEK FM RADIO RECEIVER DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Maintained S: Maintained
F: drivers/media/radio/radio-gemtek* F: drivers/media/radio/radio-gemtek*
@ -4854,7 +4863,7 @@ HDPVR USB VIDEO ENCODER DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Odd Fixes S: Odd Fixes
F: drivers/media/usb/hdpvr/ F: drivers/media/usb/hdpvr/
@ -4873,7 +4882,7 @@ F: drivers/tty/hvc/
HACKRF MEDIA DRIVER HACKRF MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -4916,7 +4925,7 @@ F: sound/parisc/harmony.*
HD29L2 MEDIA DRIVER HD29L2 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -5822,7 +5831,7 @@ ISA RADIO MODULE
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Maintained S: Maintained
F: drivers/media/radio/radio-isa* F: drivers/media/radio/radio-isa*
@ -5892,7 +5901,7 @@ F: drivers/hwmon/it87.c
IT913X MEDIA DRIVER IT913X MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -5913,7 +5922,7 @@ F: include/uapi/linux/ivtv*
IX2505V MEDIA DRIVER IX2505V MEDIA DRIVER
M: Malcolm Priestley <tvboxspy@gmail.com> M: Malcolm Priestley <tvboxspy@gmail.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
S: Maintained S: Maintained
F: drivers/media/dvb-frontends/ix2505v* F: drivers/media/dvb-frontends/ix2505v*
@ -6002,7 +6011,7 @@ KEENE FM RADIO TRANSMITTER DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Maintained S: Maintained
F: drivers/media/radio/radio-keene* F: drivers/media/radio/radio-keene*
@ -6254,7 +6263,7 @@ F: drivers/usb/misc/legousbtower.c
LG2160 MEDIA DRIVER LG2160 MEDIA DRIVER
M: Michael Krufky <mkrufky@linuxtv.org> M: Michael Krufky <mkrufky@linuxtv.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://github.com/mkrufky W: http://github.com/mkrufky
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/mkrufky/tuners.git T: git git://linuxtv.org/mkrufky/tuners.git
@ -6264,7 +6273,7 @@ F: drivers/media/dvb-frontends/lg2160.*
LGDT3305 MEDIA DRIVER LGDT3305 MEDIA DRIVER
M: Michael Krufky <mkrufky@linuxtv.org> M: Michael Krufky <mkrufky@linuxtv.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://github.com/mkrufky W: http://github.com/mkrufky
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/mkrufky/tuners.git T: git git://linuxtv.org/mkrufky/tuners.git
@ -6521,7 +6530,7 @@ F: drivers/hwmon/lm95234.c
LME2510 MEDIA DRIVER LME2510 MEDIA DRIVER
M: Malcolm Priestley <tvboxspy@gmail.com> M: Malcolm Priestley <tvboxspy@gmail.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
S: Maintained S: Maintained
F: drivers/media/usb/dvb-usb-v2/lmedm04* F: drivers/media/usb/dvb-usb-v2/lmedm04*
@ -6627,7 +6636,7 @@ F: arch/m68k/hp300/
M88DS3103 MEDIA DRIVER M88DS3103 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -6637,7 +6646,7 @@ F: drivers/media/dvb-frontends/m88ds3103*
M88RS2000 MEDIA DRIVER M88RS2000 MEDIA DRIVER
M: Malcolm Priestley <tvboxspy@gmail.com> M: Malcolm Priestley <tvboxspy@gmail.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
S: Maintained S: Maintained
F: drivers/media/dvb-frontends/m88rs2000* F: drivers/media/dvb-frontends/m88rs2000*
@ -6816,7 +6825,7 @@ MAXIRADIO FM RADIO RECEIVER DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Maintained S: Maintained
F: drivers/media/radio/radio-maxiradio* F: drivers/media/radio/radio-maxiradio*
@ -6838,7 +6847,7 @@ F: drivers/media/platform/vsp1/
MEDIA DRIVERS FOR ASCOT2E MEDIA DRIVERS FOR ASCOT2E
M: Sergey Kozlov <serjk@netup.ru> M: Sergey Kozlov <serjk@netup.ru>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org W: https://linuxtv.org
W: http://netup.tv/ W: http://netup.tv/
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Supported S: Supported
@ -6847,7 +6856,7 @@ F: drivers/media/dvb-frontends/ascot2e*
MEDIA DRIVERS FOR CXD2841ER MEDIA DRIVERS FOR CXD2841ER
M: Sergey Kozlov <serjk@netup.ru> M: Sergey Kozlov <serjk@netup.ru>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://netup.tv/ W: http://netup.tv/
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Supported S: Supported
@ -6856,7 +6865,7 @@ F: drivers/media/dvb-frontends/cxd2841er*
MEDIA DRIVERS FOR HORUS3A MEDIA DRIVERS FOR HORUS3A
M: Sergey Kozlov <serjk@netup.ru> M: Sergey Kozlov <serjk@netup.ru>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://netup.tv/ W: http://netup.tv/
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Supported S: Supported
@ -6865,7 +6874,7 @@ F: drivers/media/dvb-frontends/horus3a*
MEDIA DRIVERS FOR LNBH25 MEDIA DRIVERS FOR LNBH25
M: Sergey Kozlov <serjk@netup.ru> M: Sergey Kozlov <serjk@netup.ru>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://netup.tv/ W: http://netup.tv/
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Supported S: Supported
@ -6874,7 +6883,7 @@ F: drivers/media/dvb-frontends/lnbh25*
MEDIA DRIVERS FOR NETUP PCI UNIVERSAL DVB devices MEDIA DRIVERS FOR NETUP PCI UNIVERSAL DVB devices
M: Sergey Kozlov <serjk@netup.ru> M: Sergey Kozlov <serjk@netup.ru>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://netup.tv/ W: http://netup.tv/
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Supported S: Supported
@ -6884,7 +6893,7 @@ MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
P: LinuxTV.org Project P: LinuxTV.org Project
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org W: https://linuxtv.org
Q: http://patchwork.kernel.org/project/linux-media/list/ Q: http://patchwork.kernel.org/project/linux-media/list/
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Maintained S: Maintained
@ -6893,6 +6902,7 @@ F: Documentation/video4linux/
F: Documentation/DocBook/media/ F: Documentation/DocBook/media/
F: drivers/media/ F: drivers/media/
F: drivers/staging/media/ F: drivers/staging/media/
F: include/linux/platform_data/media/
F: include/media/ F: include/media/
F: include/uapi/linux/dvb/ F: include/uapi/linux/dvb/
F: include/uapi/linux/videodev2.h F: include/uapi/linux/videodev2.h
@ -7044,7 +7054,7 @@ MIROSOUND PCM20 FM RADIO RECEIVER DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Odd Fixes S: Odd Fixes
F: drivers/media/radio/radio-miropcm20* F: drivers/media/radio/radio-miropcm20*
@ -7080,7 +7090,7 @@ F: drivers/iio/temperature/mlx90614.c
MN88472 MEDIA DRIVER MN88472 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -7091,7 +7101,7 @@ F: drivers/media/dvb-frontends/mn88472.h
MN88473 MEDIA DRIVER MN88473 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -7146,7 +7156,7 @@ F: drivers/platform/x86/msi-wmi.c
MSI001 MEDIA DRIVER MSI001 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -7156,7 +7166,7 @@ F: drivers/media/tuners/msi001*
MSI2500 MEDIA DRIVER MSI2500 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -7175,7 +7185,7 @@ L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Maintained S: Maintained
F: drivers/media/i2c/mt9m032.c F: drivers/media/i2c/mt9m032.c
F: include/media/mt9m032.h F: include/media/i2c/mt9m032.h
MT9P031 APTINA CAMERA SENSOR MT9P031 APTINA CAMERA SENSOR
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com> M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
@ -7183,7 +7193,7 @@ L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Maintained S: Maintained
F: drivers/media/i2c/mt9p031.c F: drivers/media/i2c/mt9p031.c
F: include/media/mt9p031.h F: include/media/i2c/mt9p031.h
MT9T001 APTINA CAMERA SENSOR MT9T001 APTINA CAMERA SENSOR
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com> M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
@ -7191,7 +7201,7 @@ L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Maintained S: Maintained
F: drivers/media/i2c/mt9t001.c F: drivers/media/i2c/mt9t001.c
F: include/media/mt9t001.h F: include/media/i2c/mt9t001.h
MT9V032 APTINA CAMERA SENSOR MT9V032 APTINA CAMERA SENSOR
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com> M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
@ -7200,7 +7210,7 @@ T: git git://linuxtv.org/media_tree.git
S: Maintained S: Maintained
F: Documentation/devicetree/bindings/media/i2c/mt9v032.txt F: Documentation/devicetree/bindings/media/i2c/mt9v032.txt
F: drivers/media/i2c/mt9v032.c F: drivers/media/i2c/mt9v032.c
F: include/media/mt9v032.h F: include/media/i2c/mt9v032.h
MULTIFUNCTION DEVICES (MFD) MULTIFUNCTION DEVICES (MFD)
M: Lee Jones <lee.jones@linaro.org> M: Lee Jones <lee.jones@linaro.org>
@ -7244,7 +7254,7 @@ F: drivers/usb/musb/
MXL5007T MEDIA DRIVER MXL5007T MEDIA DRIVER
M: Michael Krufky <mkrufky@linuxtv.org> M: Michael Krufky <mkrufky@linuxtv.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://github.com/mkrufky W: http://github.com/mkrufky
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/mkrufky/tuners.git T: git git://linuxtv.org/mkrufky/tuners.git
@ -8745,7 +8755,7 @@ F: include/uapi/linux/qnxtypes.h
QT1010 MEDIA DRIVER QT1010 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -9038,7 +9048,7 @@ F: net/rose/
RTL2830 MEDIA DRIVER RTL2830 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -9048,7 +9058,7 @@ F: drivers/media/dvb-frontends/rtl2830*
RTL2832 MEDIA DRIVER RTL2832 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -9058,7 +9068,7 @@ F: drivers/media/dvb-frontends/rtl2832*
RTL2832_SDR MEDIA DRIVER RTL2832_SDR MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -9189,14 +9199,14 @@ SAA6588 RDS RECEIVER DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Odd Fixes S: Odd Fixes
F: drivers/media/i2c/saa6588* F: drivers/media/i2c/saa6588*
SAA7134 VIDEO4LINUX DRIVER SAA7134 VIDEO4LINUX DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Odd fixes S: Odd fixes
F: Documentation/video4linux/*.saa7134 F: Documentation/video4linux/*.saa7134
@ -9258,7 +9268,7 @@ L: linux-media@vger.kernel.org
L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers) L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
S: Maintained S: Maintained
F: drivers/media/platform/s3c-camif/ F: drivers/media/platform/s3c-camif/
F: include/media/s3c_camif.h F: include/media/drv-intf/s3c_camif.h
SAMSUNG S5C73M3 CAMERA DRIVER SAMSUNG S5C73M3 CAMERA DRIVER
M: Kyungmin Park <kyungmin.park@samsung.com> M: Kyungmin Park <kyungmin.park@samsung.com>
@ -9633,7 +9643,7 @@ F: drivers/misc/sgi-xp/
SI2157 MEDIA DRIVER SI2157 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -9643,7 +9653,7 @@ F: drivers/media/tuners/si2157*
SI2168 MEDIA DRIVER SI2168 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -9654,7 +9664,7 @@ SI470X FM RADIO RECEIVER I2C DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Odd Fixes S: Odd Fixes
F: drivers/media/radio/si470x/radio-si470x-i2c.c F: drivers/media/radio/si470x/radio-si470x-i2c.c
@ -9662,7 +9672,7 @@ SI470X FM RADIO RECEIVER USB DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Maintained S: Maintained
F: drivers/media/radio/si470x/radio-si470x-common.c F: drivers/media/radio/si470x/radio-si470x-common.c
F: drivers/media/radio/si470x/radio-si470x.h F: drivers/media/radio/si470x/radio-si470x.h
@ -9672,7 +9682,7 @@ SI4713 FM RADIO TRANSMITTER I2C DRIVER
M: Eduardo Valentin <edubezval@gmail.com> M: Eduardo Valentin <edubezval@gmail.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Odd Fixes S: Odd Fixes
F: drivers/media/radio/si4713/si4713.? F: drivers/media/radio/si4713/si4713.?
@ -9680,7 +9690,7 @@ SI4713 FM RADIO TRANSMITTER PLATFORM DRIVER
M: Eduardo Valentin <edubezval@gmail.com> M: Eduardo Valentin <edubezval@gmail.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Odd Fixes S: Odd Fixes
F: drivers/media/radio/si4713/radio-platform-si4713.c F: drivers/media/radio/si4713/radio-platform-si4713.c
@ -9688,14 +9698,14 @@ SI4713 FM RADIO TRANSMITTER USB DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Maintained S: Maintained
F: drivers/media/radio/si4713/radio-usb-si4713.c F: drivers/media/radio/si4713/radio-usb-si4713.c
SIANO DVB DRIVER SIANO DVB DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Odd fixes S: Odd fixes
F: drivers/media/common/siano/ F: drivers/media/common/siano/
@ -9720,7 +9730,7 @@ SH_VOU V4L2 OUTPUT DRIVER
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
S: Orphan S: Orphan
F: drivers/media/platform/sh_vou.c F: drivers/media/platform/sh_vou.c
F: include/media/sh_vou.h F: include/media/drv-intf/sh_vou.h
SIMPLE FIRMWARE INTERFACE (SFI) SIMPLE FIRMWARE INTERFACE (SFI)
M: Len Brown <lenb@kernel.org> M: Len Brown <lenb@kernel.org>
@ -9761,7 +9771,7 @@ F: drivers/i2c/busses/i2c-davinci.c
TI DAVINCI SERIES MEDIA DRIVER TI DAVINCI SERIES MEDIA DRIVER
M: "Lad, Prabhakar" <prabhakar.csengg@gmail.com> M: "Lad, Prabhakar" <prabhakar.csengg@gmail.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git T: git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git
S: Maintained S: Maintained
@ -9771,7 +9781,7 @@ F: include/media/davinci/
TI AM437X VPFE DRIVER TI AM437X VPFE DRIVER
M: "Lad, Prabhakar" <prabhakar.csengg@gmail.com> M: "Lad, Prabhakar" <prabhakar.csengg@gmail.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git T: git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git
S: Maintained S: Maintained
@ -9780,12 +9790,12 @@ F: drivers/media/platform/am437x/
OV2659 OMNIVISION SENSOR DRIVER OV2659 OMNIVISION SENSOR DRIVER
M: "Lad, Prabhakar" <prabhakar.csengg@gmail.com> M: "Lad, Prabhakar" <prabhakar.csengg@gmail.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git T: git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git
S: Maintained S: Maintained
F: drivers/media/i2c/ov2659.c F: drivers/media/i2c/ov2659.c
F: include/media/ov2659.h F: include/media/i2c/ov2659.h
SILICON MOTION SM712 FRAME BUFFER DRIVER SILICON MOTION SM712 FRAME BUFFER DRIVER
M: Sudip Mukherjee <sudipm.mukherjee@gmail.com> M: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
@ -9874,7 +9884,7 @@ M: Sakari Ailus <sakari.ailus@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
S: Maintained S: Maintained
F: drivers/media/i2c/smiapp/ F: drivers/media/i2c/smiapp/
F: include/media/smiapp.h F: include/media/i2c/smiapp.h
F: drivers/media/i2c/smiapp-pll.c F: drivers/media/i2c/smiapp-pll.c
F: drivers/media/i2c/smiapp-pll.h F: drivers/media/i2c/smiapp-pll.h
F: include/uapi/linux/smiapp.h F: include/uapi/linux/smiapp.h
@ -10038,7 +10048,7 @@ F: sound/soc/soc-generic-dmaengine-pcm.c
SP2 MEDIA DRIVER SP2 MEDIA DRIVER
M: Olli Salonen <olli.salonen@iki.fi> M: Olli Salonen <olli.salonen@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
S: Maintained S: Maintained
F: drivers/media/dvb-frontends/sp2* F: drivers/media/dvb-frontends/sp2*
@ -10400,7 +10410,7 @@ F: net/ipv4/tcp_lp.c
TDA10071 MEDIA DRIVER TDA10071 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -10410,7 +10420,7 @@ F: drivers/media/dvb-frontends/tda10071*
TDA18212 MEDIA DRIVER TDA18212 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -10420,7 +10430,7 @@ F: drivers/media/tuners/tda18212*
TDA18218 MEDIA DRIVER TDA18218 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -10430,7 +10440,7 @@ F: drivers/media/tuners/tda18218*
TDA18271 MEDIA DRIVER TDA18271 MEDIA DRIVER
M: Michael Krufky <mkrufky@linuxtv.org> M: Michael Krufky <mkrufky@linuxtv.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://github.com/mkrufky W: http://github.com/mkrufky
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/mkrufky/tuners.git T: git git://linuxtv.org/mkrufky/tuners.git
@ -10440,7 +10450,7 @@ F: drivers/media/tuners/tda18271*
TDA827x MEDIA DRIVER TDA827x MEDIA DRIVER
M: Michael Krufky <mkrufky@linuxtv.org> M: Michael Krufky <mkrufky@linuxtv.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://github.com/mkrufky W: http://github.com/mkrufky
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/mkrufky/tuners.git T: git git://linuxtv.org/mkrufky/tuners.git
@ -10450,7 +10460,7 @@ F: drivers/media/tuners/tda8290.*
TDA8290 MEDIA DRIVER TDA8290 MEDIA DRIVER
M: Michael Krufky <mkrufky@linuxtv.org> M: Michael Krufky <mkrufky@linuxtv.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://github.com/mkrufky W: http://github.com/mkrufky
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/mkrufky/tuners.git T: git git://linuxtv.org/mkrufky/tuners.git
@ -10461,14 +10471,14 @@ TDA9840 MEDIA DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Maintained S: Maintained
F: drivers/media/i2c/tda9840* F: drivers/media/i2c/tda9840*
TEA5761 TUNER DRIVER TEA5761 TUNER DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Odd fixes S: Odd fixes
F: drivers/media/tuners/tea5761.* F: drivers/media/tuners/tea5761.*
@ -10476,7 +10486,7 @@ F: drivers/media/tuners/tea5761.*
TEA5767 TUNER DRIVER TEA5767 TUNER DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Maintained S: Maintained
F: drivers/media/tuners/tea5767.* F: drivers/media/tuners/tea5767.*
@ -10485,7 +10495,7 @@ TEA6415C MEDIA DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Maintained S: Maintained
F: drivers/media/i2c/tea6415c* F: drivers/media/i2c/tea6415c*
@ -10493,7 +10503,7 @@ TEA6420 MEDIA DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Maintained S: Maintained
F: drivers/media/i2c/tea6420* F: drivers/media/i2c/tea6420*
@ -10591,7 +10601,7 @@ THANKO'S RAREMONO AM/FM/SW RADIO RECEIVER USB DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Maintained S: Maintained
F: drivers/media/radio/radio-raremono.c F: drivers/media/radio/radio-raremono.c
@ -10815,7 +10825,7 @@ M: Mats Randgaard <matrandg@cisco.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
S: Maintained S: Maintained
F: drivers/media/i2c/tc358743* F: drivers/media/i2c/tc358743*
F: include/media/tc358743.h F: include/media/i2c/tc358743.h
TMIO MMC DRIVER TMIO MMC DRIVER
M: Ian Molton <ian@mnementh.co.uk> M: Ian Molton <ian@mnementh.co.uk>
@ -10843,7 +10853,7 @@ F: mm/shmem.c
TM6000 VIDEO4LINUX DRIVER TM6000 VIDEO4LINUX DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Odd fixes S: Odd fixes
F: drivers/media/usb/tm6000/ F: drivers/media/usb/tm6000/
@ -10852,7 +10862,7 @@ TW68 VIDEO4LINUX DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Odd Fixes S: Odd Fixes
F: drivers/media/pci/tw68/ F: drivers/media/pci/tw68/
@ -10913,7 +10923,7 @@ F: include/uapi/linux/tty.h
TUA9001 MEDIA DRIVER TUA9001 MEDIA DRIVER
M: Antti Palosaari <crope@iki.fi> M: Antti Palosaari <crope@iki.fi>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org/ W: https://linuxtv.org
W: http://palosaari.fi/linux/ W: http://palosaari.fi/linux/
Q: http://patchwork.linuxtv.org/project/linux-media/list/ Q: http://patchwork.linuxtv.org/project/linux-media/list/
T: git git://linuxtv.org/anttip/media_tree.git T: git git://linuxtv.org/anttip/media_tree.git
@ -11260,7 +11270,7 @@ USB VISION DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Odd Fixes S: Odd Fixes
F: drivers/media/usb/usbvision/ F: drivers/media/usb/usbvision/
@ -11474,7 +11484,7 @@ VIVID VIRTUAL VIDEO DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
W: http://linuxtv.org W: https://linuxtv.org
S: Maintained S: Maintained
F: drivers/media/platform/vivid/* F: drivers/media/platform/vivid/*
@ -11763,7 +11773,7 @@ F: arch/x86/entry/vdso/
XC2028/3028 TUNER DRIVER XC2028/3028 TUNER DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
S: Maintained S: Maintained
F: drivers/media/tuners/tuner-xc2028.* F: drivers/media/tuners/tuner-xc2028.*
@ -11932,7 +11942,7 @@ ZR36067 VIDEO FOR LINUX DRIVER
L: mjpeg-users@lists.sourceforge.net L: mjpeg-users@lists.sourceforge.net
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: http://mjpeg.sourceforge.net/driver-zoran/ W: http://mjpeg.sourceforge.net/driver-zoran/
T: hg http://linuxtv.org/hg/v4l-dvb T: hg https://linuxtv.org/hg/v4l-dvb
S: Odd Fixes S: Odd Fixes
F: drivers/media/pci/zoran/ F: drivers/media/pci/zoran/

Просмотреть файл

@ -6,6 +6,9 @@
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <dt-bindings/clock/stih407-clks.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/media/c8sectpfe.h>
/ { / {
soc { soc {
sbc_serial0: serial@9530000 { sbc_serial0: serial@9530000 {
@ -35,12 +38,18 @@
status = "okay"; status = "okay";
}; };
i2c@9842000 { ssc2: i2c@9842000 {
status = "okay"; status = "okay";
clock-frequency = <100000>;
st,i2c-min-scl-pulse-width-us = <0>;
st,i2c-min-sda-pulse-width-us = <5>;
}; };
i2c@9843000 { ssc3: i2c@9843000 {
status = "okay"; status = "okay";
clock-frequency = <100000>;
st,i2c-min-scl-pulse-width-us = <0>;
st,i2c-min-sda-pulse-width-us = <5>;
}; };
i2c@9844000 { i2c@9844000 {
@ -93,5 +102,38 @@
phy-mode = "rgmii"; phy-mode = "rgmii";
fixed-link = <0 1 1000 0 0>; fixed-link = <0 1 1000 0 0>;
}; };
demux@08a20000 {
compatible = "st,stih407-c8sectpfe";
status = "okay";
reg = <0x08a20000 0x10000>,
<0x08a00000 0x4000>;
reg-names = "c8sectpfe", "c8sectpfe-ram";
interrupts = <GIC_SPI 34 IRQ_TYPE_NONE>,
<GIC_SPI 35 IRQ_TYPE_NONE>;
interrupt-names = "c8sectpfe-error-irq",
"c8sectpfe-idle-irq";
pinctrl-0 = <&pinctrl_tsin0_serial>;
pinctrl-1 = <&pinctrl_tsin0_parallel>;
pinctrl-2 = <&pinctrl_tsin3_serial>;
pinctrl-3 = <&pinctrl_tsin4_serial_alt3>;
pinctrl-4 = <&pinctrl_tsin5_serial_alt1>;
pinctrl-names = "tsin0-serial",
"tsin0-parallel",
"tsin3-serial",
"tsin4-serial",
"tsin5-serial";
clocks = <&clk_s_c0_flexgen CLK_PROC_STFE>;
clock-names = "c8sectpfe";
/* tsin0 is TSA on NIMA */
tsin0: port@0 {
tsin-num = <0>;
serial-not-parallel;
i2c-bus = <&ssc2>;
reset-gpios = <&pio15 4 GPIO_ACTIVE_HIGH>;
dvb-card = <STV0367_TDA18212_NIMA_1>;
};
};
}; };
}; };

Просмотреть файл

@ -49,8 +49,8 @@
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/system_info.h> #include <asm/system_info.h>
#include <media/tvp514x.h> #include <media/i2c/tvp514x.h>
#include <media/adv7343.h> #include <media/i2c/adv7343.h>
#define DA850_EVM_PHY_ID "davinci_mdio-0:00" #define DA850_EVM_PHY_ID "davinci_mdio-0:00"
#define DA850_LCD_PWR_PIN GPIO_TO_PIN(2, 8) #define DA850_LCD_PWR_PIN GPIO_TO_PIN(2, 8)

Просмотреть файл

@ -19,7 +19,7 @@
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <media/tvp514x.h> #include <media/i2c/tvp514x.h>
#include <linux/spi/spi.h> #include <linux/spi/spi.h>
#include <linux/spi/eeprom.h> #include <linux/spi/eeprom.h>
#include <linux/platform_data/gpio-davinci.h> #include <linux/platform_data/gpio-davinci.h>

Просмотреть файл

@ -40,8 +40,8 @@
#include <linux/platform_data/mtd-davinci.h> #include <linux/platform_data/mtd-davinci.h>
#include <linux/platform_data/keyscan-davinci.h> #include <linux/platform_data/keyscan-davinci.h>
#include <media/ths7303.h> #include <media/i2c/ths7303.h>
#include <media/tvp514x.h> #include <media/i2c/tvp514x.h>
#include "davinci.h" #include "davinci.h"

Просмотреть файл

@ -26,7 +26,7 @@
#include <linux/v4l2-dv-timings.h> #include <linux/v4l2-dv-timings.h>
#include <linux/export.h> #include <linux/export.h>
#include <media/tvp514x.h> #include <media/i2c/tvp514x.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>

Просмотреть файл

@ -25,8 +25,8 @@
#include <linux/platform_data/at24.h> #include <linux/platform_data/at24.h>
#include <linux/i2c/pcf857x.h> #include <linux/i2c/pcf857x.h>
#include <media/tvp514x.h> #include <media/i2c/tvp514x.h>
#include <media/adv7343.h> #include <media/i2c/adv7343.h>
#include <linux/mtd/mtd.h> #include <linux/mtd/mtd.h>
#include <linux/mtd/nand.h> #include <linux/mtd/nand.h>

Просмотреть файл

@ -177,7 +177,7 @@ struct platform_device *__init imx_add_imx_uart_1irq(
const struct imxuart_platform_data *pdata); const struct imxuart_platform_data *pdata);
#include <linux/platform_data/video-mx3fb.h> #include <linux/platform_data/video-mx3fb.h>
#include <linux/platform_data/camera-mx3.h> #include <linux/platform_data/media/camera-mx3.h>
struct imx_ipu_core_data { struct imx_ipu_core_data {
resource_size_t iobase; resource_size_t iobase;
resource_size_t synirq; resource_size_t synirq;
@ -192,7 +192,7 @@ struct platform_device *__init imx_add_mx3_sdc_fb(
const struct imx_ipu_core_data *data, const struct imx_ipu_core_data *data,
struct mx3fb_platform_data *pdata); struct mx3fb_platform_data *pdata);
#include <linux/platform_data/camera-mx2.h> #include <linux/platform_data/media/camera-mx2.h>
struct imx_mx2_camera_data { struct imx_mx2_camera_data {
const char *devid; const char *devid;
resource_size_t iobasecsi; resource_size_t iobasecsi;

Просмотреть файл

@ -1,7 +1,7 @@
#ifndef __ASM_ARCH_CAMERA_H_ #ifndef __ASM_ARCH_CAMERA_H_
#define __ASM_ARCH_CAMERA_H_ #define __ASM_ARCH_CAMERA_H_
#include <media/omap1_camera.h> #include <linux/platform_data/media/omap1_camera.h>
void omap1_camera_init(void *); void omap1_camera_init(void *);

Просмотреть файл

@ -39,7 +39,7 @@
#include <sound/tlv320aic3x.h> #include <sound/tlv320aic3x.h>
#include <sound/tpa6130a2-plat.h> #include <sound/tpa6130a2-plat.h>
#include <media/si4713.h> #include <linux/platform_data/media/si4713.h>
#include <linux/platform_data/leds-lp55xx.h> #include <linux/platform_data/leds-lp55xx.h>
#include <linux/platform_data/tsl2563.h> #include <linux/platform_data/tsl2563.h>
@ -48,7 +48,7 @@
#include <video/omap-panel-data.h> #include <video/omap-panel-data.h>
#if defined(CONFIG_IR_RX51) || defined(CONFIG_IR_RX51_MODULE) #if defined(CONFIG_IR_RX51) || defined(CONFIG_IR_RX51_MODULE)
#include <media/ir-rx51.h> #include <linux/platform_data/media/ir-rx51.h>
#endif #endif
#include "mux.h" #include "mux.h"

Просмотреть файл

@ -14,7 +14,7 @@
#include <mach/irqs.h> #include <mach/irqs.h>
#include <linux/platform_data/usb-ohci-pxa27x.h> #include <linux/platform_data/usb-ohci-pxa27x.h>
#include <linux/platform_data/keypad-pxa27x.h> #include <linux/platform_data/keypad-pxa27x.h>
#include <linux/platform_data/camera-pxa.h> #include <linux/platform_data/media/camera-pxa.h>
#include <mach/audio.h> #include <mach/audio.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <linux/platform_data/mmp_dma.h> #include <linux/platform_data/mmp_dma.h>

Просмотреть файл

@ -46,7 +46,7 @@
#include <linux/platform_data/usb-ohci-pxa27x.h> #include <linux/platform_data/usb-ohci-pxa27x.h>
#include <linux/platform_data/mmc-pxamci.h> #include <linux/platform_data/mmc-pxamci.h>
#include <linux/platform_data/keypad-pxa27x.h> #include <linux/platform_data/keypad-pxa27x.h>
#include <linux/platform_data/camera-pxa.h> #include <linux/platform_data/media/camera-pxa.h>
#include "generic.h" #include "generic.h"
#include "devices.h" #include "devices.h"

Просмотреть файл

@ -34,7 +34,7 @@
#include <linux/platform_data/usb-ohci-pxa27x.h> #include <linux/platform_data/usb-ohci-pxa27x.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <linux/platform_data/keypad-pxa27x.h> #include <linux/platform_data/keypad-pxa27x.h>
#include <linux/platform_data/camera-pxa.h> #include <linux/platform_data/media/camera-pxa.h>
#include "devices.h" #include "devices.h"
#include "generic.h" #include "generic.h"

Просмотреть файл

@ -54,7 +54,7 @@
#include <linux/platform_data/mmc-pxamci.h> #include <linux/platform_data/mmc-pxamci.h>
#include <mach/udc.h> #include <mach/udc.h>
#include <mach/pxa27x-udc.h> #include <mach/pxa27x-udc.h>
#include <linux/platform_data/camera-pxa.h> #include <linux/platform_data/media/camera-pxa.h>
#include <mach/audio.h> #include <mach/audio.h>
#include <mach/smemc.h> #include <mach/smemc.h>
#include <media/soc_camera.h> #include <media/soc_camera.h>

Просмотреть файл

@ -43,7 +43,7 @@
#include <linux/platform_data/usb-ohci-pxa27x.h> #include <linux/platform_data/usb-ohci-pxa27x.h>
#include <mach/pxa2xx-regs.h> #include <mach/pxa2xx-regs.h>
#include <linux/platform_data/asoc-palm27x.h> #include <linux/platform_data/asoc-palm27x.h>
#include <linux/platform_data/camera-pxa.h> #include <linux/platform_data/media/camera-pxa.h>
#include <mach/palm27x.h> #include <mach/palm27x.h>
#include <sound/pxa2xx-lib.h> #include <sound/pxa2xx-lib.h>

Просмотреть файл

@ -49,7 +49,7 @@
#include <mach/palm27x.h> #include <mach/palm27x.h>
#include <mach/pm.h> #include <mach/pm.h>
#include <linux/platform_data/camera-pxa.h> #include <linux/platform_data/media/camera-pxa.h>
#include <media/soc_camera.h> #include <media/soc_camera.h>

Просмотреть файл

@ -27,10 +27,10 @@
#include <linux/pwm.h> #include <linux/pwm.h>
#include <linux/pwm_backlight.h> #include <linux/pwm_backlight.h>
#include <media/mt9v022.h> #include <media/i2c/mt9v022.h>
#include <media/soc_camera.h> #include <media/soc_camera.h>
#include <linux/platform_data/camera-pxa.h> #include <linux/platform_data/media/camera-pxa.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <mach/pxa27x.h> #include <mach/pxa27x.h>
#include <mach/audio.h> #include <mach/audio.h>

Просмотреть файл

@ -36,7 +36,7 @@
#include <linux/platform_data/s3c-hsotg.h> #include <linux/platform_data/s3c-hsotg.h>
#include <linux/platform_data/dma-s3c24xx.h> #include <linux/platform_data/dma-s3c24xx.h>
#include <media/s5p_hdmi.h> #include <linux/platform_data/media/s5p_hdmi.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>

Просмотреть файл

@ -443,7 +443,7 @@ static const struct ppi_info ppi_info = {
}; };
#if IS_ENABLED(CONFIG_VIDEO_ADV7183) #if IS_ENABLED(CONFIG_VIDEO_ADV7183)
#include <media/adv7183.h> #include <media/i2c/adv7183.h>
static struct v4l2_input adv7183_inputs[] = { static struct v4l2_input adv7183_inputs[] = {
{ {
.index = 0, .index = 0,

Просмотреть файл

@ -933,7 +933,7 @@ static struct bfin_capture_config bfin_capture_data = {
#endif #endif
#if IS_ENABLED(CONFIG_VIDEO_ADV7842) #if IS_ENABLED(CONFIG_VIDEO_ADV7842)
#include <media/adv7842.h> #include <media/i2c/adv7842.h>
static struct v4l2_input adv7842_inputs[] = { static struct v4l2_input adv7842_inputs[] = {
{ {
@ -1084,7 +1084,7 @@ static const struct ppi_info ppi_info = {
}; };
#if IS_ENABLED(CONFIG_VIDEO_ADV7511) #if IS_ENABLED(CONFIG_VIDEO_ADV7511)
#include <media/adv7511.h> #include <media/i2c/adv7511.h>
static struct v4l2_output adv7511_outputs[] = { static struct v4l2_output adv7511_outputs[] = {
{ {
@ -1125,7 +1125,7 @@ static struct bfin_display_config bfin_display_data = {
#endif #endif
#if IS_ENABLED(CONFIG_VIDEO_ADV7343) #if IS_ENABLED(CONFIG_VIDEO_ADV7343)
#include <media/adv7343.h> #include <media/i2c/adv7343.h>
static struct v4l2_output adv7343_outputs[] = { static struct v4l2_output adv7343_outputs[] = {
{ {

Просмотреть файл

@ -27,10 +27,10 @@
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <linux/sh_intc.h> #include <linux/sh_intc.h>
#include <media/ov772x.h> #include <media/i2c/ov772x.h>
#include <media/soc_camera.h> #include <media/soc_camera.h>
#include <media/soc_camera_platform.h> #include <linux/platform_data/media/soc_camera_platform.h>
#include <media/sh_mobile_ceu.h> #include <media/drv-intf/sh_mobile_ceu.h>
#include <video/sh_mobile_lcdc.h> #include <video/sh_mobile_lcdc.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/clock.h> #include <asm/clock.h>

Просмотреть файл

@ -38,10 +38,10 @@
#include <video/sh_mobile_lcdc.h> #include <video/sh_mobile_lcdc.h>
#include <sound/sh_fsi.h> #include <sound/sh_fsi.h>
#include <sound/simple_card.h> #include <sound/simple_card.h>
#include <media/sh_mobile_ceu.h> #include <media/drv-intf/sh_mobile_ceu.h>
#include <media/soc_camera.h> #include <media/soc_camera.h>
#include <media/tw9910.h> #include <media/i2c/tw9910.h>
#include <media/mt9t112.h> #include <media/i2c/mt9t112.h>
#include <asm/heartbeat.h> #include <asm/heartbeat.h>
#include <asm/clock.h> #include <asm/clock.h>
#include <asm/suspend.h> #include <asm/suspend.h>
@ -900,8 +900,8 @@ static struct platform_device irda_device = {
.resource = irda_resources, .resource = irda_resources,
}; };
#include <media/ak881x.h> #include <media/i2c/ak881x.h>
#include <media/sh_vou.h> #include <media/drv-intf/sh_vou.h>
static struct ak881x_pdata ak881x_pdata = { static struct ak881x_pdata ak881x_pdata = {
.flags = AK881X_IF_MODE_SLAVE, .flags = AK881X_IF_MODE_SLAVE,

Просмотреть файл

@ -27,9 +27,9 @@
#include <linux/usb/r8a66597.h> #include <linux/usb/r8a66597.h>
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <linux/sh_intc.h> #include <linux/sh_intc.h>
#include <media/rj54n1cb0c.h> #include <media/i2c/rj54n1cb0c.h>
#include <media/soc_camera.h> #include <media/soc_camera.h>
#include <media/sh_mobile_ceu.h> #include <media/drv-intf/sh_mobile_ceu.h>
#include <video/sh_mobile_lcdc.h> #include <video/sh_mobile_lcdc.h>
#include <asm/suspend.h> #include <asm/suspend.h>
#include <asm/clock.h> #include <asm/clock.h>

Просмотреть файл

@ -27,10 +27,10 @@
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <linux/sh_intc.h> #include <linux/sh_intc.h>
#include <video/sh_mobile_lcdc.h> #include <video/sh_mobile_lcdc.h>
#include <media/sh_mobile_ceu.h> #include <media/drv-intf/sh_mobile_ceu.h>
#include <media/ov772x.h> #include <media/i2c/ov772x.h>
#include <media/soc_camera.h> #include <media/soc_camera.h>
#include <media/tw9910.h> #include <media/i2c/tw9910.h>
#include <asm/clock.h> #include <asm/clock.h>
#include <asm/machvec.h> #include <asm/machvec.h>
#include <asm/io.h> #include <asm/io.h>

Просмотреть файл

@ -30,7 +30,7 @@
#include <linux/sh_intc.h> #include <linux/sh_intc.h>
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <video/sh_mobile_lcdc.h> #include <video/sh_mobile_lcdc.h>
#include <media/sh_mobile_ceu.h> #include <media/drv-intf/sh_mobile_ceu.h>
#include <sound/sh_fsi.h> #include <sound/sh_fsi.h>
#include <sound/simple_card.h> #include <sound/simple_card.h>
#include <asm/io.h> #include <asm/io.h>
@ -534,8 +534,8 @@ static struct platform_device irda_device = {
.resource = irda_resources, .resource = irda_resources,
}; };
#include <media/ak881x.h> #include <media/i2c/ak881x.h>
#include <media/sh_vou.h> #include <media/drv-intf/sh_vou.h>
static struct ak881x_pdata ak881x_pdata = { static struct ak881x_pdata ak881x_pdata = {
.flags = AK881X_IF_MODE_SLAVE, .flags = AK881X_IF_MODE_SLAVE,

Просмотреть файл

@ -161,7 +161,7 @@ static u32 ipu_ch_param_read_field(struct ipuv3_channel *ch, u32 wbs)
* The DRM pixel formats and IPU internal representation are ordered the other * The DRM pixel formats and IPU internal representation are ordered the other
* way around, with the first named component ordered at the most significant * way around, with the first named component ordered at the most significant
* bits. Further, V4L2 formats are not well defined: * bits. Further, V4L2 formats are not well defined:
* http://linuxtv.org/downloads/v4l-dvb-apis/packed-rgb.html * https://linuxtv.org/downloads/v4l-dvb-apis/packed-rgb.html
* We choose the interpretation which matches GStreamer behavior. * We choose the interpretation which matches GStreamer behavior.
*/ */
static int v4l2_pix_fmt_to_drm_fourcc(u32 pixelformat) static int v4l2_pix_fmt_to_drm_fourcc(u32 pixelformat)

Просмотреть файл

@ -444,7 +444,7 @@ static void sur40_process_video(struct sur40_state *sur40)
goto err_poll; goto err_poll;
/* mark as finished */ /* mark as finished */
v4l2_get_timestamp(&new_buf->vb.timestamp); new_buf->vb.vb2_buf.timestamp = ktime_get_ns();
new_buf->vb.sequence = sur40->sequence++; new_buf->vb.sequence = sur40->sequence++;
new_buf->vb.field = V4L2_FIELD_NONE; new_buf->vb.field = V4L2_FIELD_NONE;
vb2_buffer_done(&new_buf->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&new_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
@ -644,22 +644,21 @@ static void sur40_disconnect(struct usb_interface *interface)
* minimum number: many DMA engines need a minimum of 2 buffers in the * minimum number: many DMA engines need a minimum of 2 buffers in the
* queue and you need to have another available for userspace processing. * queue and you need to have another available for userspace processing.
*/ */
static int sur40_queue_setup(struct vb2_queue *q, const void *parg, static int sur40_queue_setup(struct vb2_queue *q,
unsigned int *nbuffers, unsigned int *nplanes, unsigned int *nbuffers, unsigned int *nplanes,
unsigned int sizes[], void *alloc_ctxs[]) unsigned int sizes[], void *alloc_ctxs[])
{ {
const struct v4l2_format *fmt = parg;
struct sur40_state *sur40 = vb2_get_drv_priv(q); struct sur40_state *sur40 = vb2_get_drv_priv(q);
if (q->num_buffers + *nbuffers < 3) if (q->num_buffers + *nbuffers < 3)
*nbuffers = 3 - q->num_buffers; *nbuffers = 3 - q->num_buffers;
alloc_ctxs[0] = sur40->alloc_ctx;
if (fmt && fmt->fmt.pix.sizeimage < sur40_video_format.sizeimage) if (*nplanes)
return -EINVAL; return sizes[0] < sur40_video_format.sizeimage ? -EINVAL : 0;
*nplanes = 1; *nplanes = 1;
sizes[0] = fmt ? fmt->fmt.pix.sizeimage : sur40_video_format.sizeimage; sizes[0] = sur40_video_format.sizeimage;
alloc_ctxs[0] = sur40->alloc_ctx;
return 0; return 0;
} }

Просмотреть файл

@ -9,7 +9,7 @@ menuconfig MEDIA_SUPPORT
If you want to use Webcams, Video grabber devices and/or TV devices If you want to use Webcams, Video grabber devices and/or TV devices
enable this option and other options below. enable this option and other options below.
Additional info and docs are available on the web at Additional info and docs are available on the web at
<http://linuxtv.org> <https://linuxtv.org>
if MEDIA_SUPPORT if MEDIA_SUPPORT
@ -51,7 +51,7 @@ config MEDIA_RADIO_SUPPORT
Enable AM/FM radio support. Enable AM/FM radio support.
Additional info and docs are available on the web at Additional info and docs are available on the web at
<http://linuxtv.org> <https://linuxtv.org>
Say Y when you have a board with radio support. Say Y when you have a board with radio support.

Просмотреть файл

@ -27,7 +27,7 @@
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <media/tuner.h> #include <media/tuner.h>
#include <media/cx2341x.h> #include <media/drv-intf/cx2341x.h>
#include <media/v4l2-common.h> #include <media/v4l2-common.h>
MODULE_DESCRIPTION("cx23415/6/8 driver"); MODULE_DESCRIPTION("cx23415/6/8 driver");

Просмотреть файл

@ -20,7 +20,7 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <media/saa7146.h> #include <media/drv-intf/saa7146.h>
#include <linux/module.h> #include <linux/module.h>
static int saa7146_num; static int saa7146_num;

Просмотреть файл

@ -1,6 +1,6 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <media/saa7146_vv.h> #include <media/drv-intf/saa7146_vv.h>
#include <linux/module.h> #include <linux/module.h>
/****************************************************************************/ /****************************************************************************/

Просмотреть файл

@ -2,7 +2,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/export.h> #include <linux/export.h>
#include <media/saa7146_vv.h> #include <media/drv-intf/saa7146_vv.h>
static void calculate_output_format_register(struct saa7146_dev* saa, u32 palette, u32* clip_format) static void calculate_output_format_register(struct saa7146_dev* saa, u32 palette, u32* clip_format)
{ {

Просмотреть файл

@ -1,6 +1,6 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <media/saa7146_vv.h> #include <media/drv-intf/saa7146_vv.h>
static u32 saa7146_i2c_func(struct i2c_adapter *adapter) static u32 saa7146_i2c_func(struct i2c_adapter *adapter)
{ {

Просмотреть файл

@ -1,4 +1,4 @@
#include <media/saa7146_vv.h> #include <media/drv-intf/saa7146_vv.h>
static int vbi_pixel_to_capture = 720 * 2; static int vbi_pixel_to_capture = 720 * 2;

Просмотреть файл

@ -1,6 +1,6 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <media/saa7146_vv.h> #include <media/drv-intf/saa7146_vv.h>
#include <media/v4l2-event.h> #include <media/v4l2-event.h>
#include <media/v4l2-ctrls.h> #include <media/v4l2-ctrls.h>
#include <linux/module.h> #include <linux/module.h>

Просмотреть файл

@ -30,8 +30,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <linux/input.h> #include <linux/input.h>
#include <media/rc-core.h> #include <media/rc-core.h>
#define IR_DEFAULT_TIMEOUT 100
struct smscore_device_t; struct smscore_device_t;
struct ir_t { struct ir_t {

Просмотреть файл

@ -32,6 +32,49 @@
#include <linux/time.h> #include <linux/time.h>
#include <linux/dvb/dmx.h> #include <linux/dvb/dmx.h>
/**
* DOC: Digital TV Demux
*
* The Kernel Digital TV Demux kABI defines a driver-internal interface for
* registering low-level, hardware specific driver to a hardware independent
* demux layer. It is only of interest for Digital TV device driver writers.
* The header file for this kABI is named demux.h and located in
* drivers/media/dvb-core.
*
* The demux kABI should be implemented for each demux in the system. It is
* used to select the TS source of a demux and to manage the demux resources.
* When the demux client allocates a resource via the demux kABI, it receives
* a pointer to the kABI of that resource.
*
* Each demux receives its TS input from a DVB front-end or from memory, as
* set via this demux kABI. In a system with more than one front-end, the kABI
* can be used to select one of the DVB front-ends as a TS source for a demux,
* unless this is fixed in the HW platform.
*
* The demux kABI only controls front-ends regarding to their connections with
* demuxes; the kABI used to set the other front-end parameters, such as
* tuning, are devined via the Digital TV Frontend kABI.
*
* The functions that implement the abstract interface demux should be defined
* static or module private and registered to the Demux core for external
* access. It is not necessary to implement every function in the struct
* &dmx_demux. For example, a demux interface might support Section filtering,
* but not PES filtering. The kABI client is expected to check the value of any
* function pointer before calling the function: the value of NULL means
* that the function is not available.
*
* Whenever the functions of the demux API modify shared data, the
* possibilities of lost update and race condition problems should be
* addressed, e.g. by protecting parts of code with mutexes.
*
* Note that functions called from a bottom half context must not sleep.
* Even a simple memory allocation without using %GFP_ATOMIC can result in a
* kernel thread being put to sleep if swapping is needed. For example, the
* Linux Kernel calls the functions of a network device interface from a
* bottom half context. Thus, if a demux kABI function is called from network
* device code, the function must not sleep.
*/
/* /*
* Common definitions * Common definitions
*/ */
@ -187,8 +230,28 @@ struct dmx_section_feed {
int (*stop_filtering)(struct dmx_section_feed *feed); int (*stop_filtering)(struct dmx_section_feed *feed);
}; };
/* /**
* Callback functions * DOC: Demux Callback
*
* This kernel-space API comprises the callback functions that deliver filtered
* data to the demux client. Unlike the other DVB kABIs, these functions are
* provided by the client and called from the demux code.
*
* The function pointers of this abstract interface are not packed into a
* structure as in the other demux APIs, because the callback functions are
* registered and used independent of each other. As an example, it is possible
* for the API client to provide several callback functions for receiving TS
* packets and no callbacks for PES packets or sections.
*
* The functions that implement the callback API need not be re-entrant: when
* a demux driver calls one of these functions, the driver is not allowed to
* call the function again before the original call returns. If a callback is
* triggered by a hardware interrupt, it is recommended to use the Linux
* bottom half mechanism or start a tasklet instead of making the callback
* function call directly from a hardware interrupt.
*
* This mechanism is implemented by dmx_ts_cb() and dmx_section_cb()
* callbacks.
*/ */
/** /**

Просмотреть файл

@ -389,4 +389,5 @@
#define USB_PID_PCTV_2002E_SE 0x025d #define USB_PID_PCTV_2002E_SE 0x025d
#define USB_PID_SVEON_STV27 0xd3af #define USB_PID_SVEON_STV27 0xd3af
#define USB_PID_TURBOX_DTT_2000 0xd3a4 #define USB_PID_TURBOX_DTT_2000 0xd3a4
#define USB_PID_WINTV_SOLOHD 0x0264
#endif #endif

Просмотреть файл

@ -891,21 +891,21 @@ static void dvb_frontend_stop(struct dvb_frontend *fe)
} }
/* /*
* Sleep until gettimeofday() > waketime + add_usec * Sleep for the amount of time given by add_usec parameter
* This needs to be as precise as possible, but as the delay is *
* usually between 2ms and 32ms, it is done using a scheduled msleep * This needs to be as precise as possible, as it affects the detection of
* followed by usleep (normally a busy-wait loop) for the remainder * the dish tone command at the satellite subsystem. The precision is improved
* by using a scheduled msleep followed by udelay for the remainder.
*/ */
void dvb_frontend_sleep_until(ktime_t *waketime, u32 add_usec) void dvb_frontend_sleep_until(ktime_t *waketime, u32 add_usec)
{ {
s32 delta, newdelta; s32 delta;
ktime_add_us(*waketime, add_usec); *waketime = ktime_add_us(*waketime, add_usec);
delta = ktime_us_delta(ktime_get_real(), *waketime); delta = ktime_us_delta(ktime_get_real(), *waketime);
if (delta > 2500) { if (delta > 2500) {
msleep((delta - 1500) / 1000); msleep((delta - 1500) / 1000);
newdelta = ktime_us_delta(ktime_get_real(), *waketime); delta = ktime_us_delta(ktime_get_real(), *waketime);
delta = (newdelta > delta) ? 0 : newdelta;
} }
if (delta > 0) if (delta > 0)
udelay(delta); udelay(delta);
@ -2313,9 +2313,9 @@ static int dvb_frontend_ioctl_legacy(struct file *file,
dev_dbg(fe->dvb->device, "%s: current delivery system on cache: %d, V3 type: %d\n", dev_dbg(fe->dvb->device, "%s: current delivery system on cache: %d, V3 type: %d\n",
__func__, c->delivery_system, fe->ops.info.type); __func__, c->delivery_system, fe->ops.info.type);
/* Force the CAN_INVERSION_AUTO bit on. If the frontend doesn't /* Set CAN_INVERSION_AUTO bit on in other than oneshot mode */
* do it, it is done for it. */ if (!(fepriv->tune_mode_flags & FE_TUNE_MODE_ONESHOT))
info->caps |= FE_CAN_INVERSION_AUTO; info->caps |= FE_CAN_INVERSION_AUTO;
err = 0; err = 0;
break; break;
} }
@ -2710,6 +2710,11 @@ int dvb_frontend_resume(struct dvb_frontend *fe)
else if (fe->ops.tuner_ops.init) else if (fe->ops.tuner_ops.init)
ret = fe->ops.tuner_ops.init(fe); ret = fe->ops.tuner_ops.init(fe);
if (fe->ops.set_tone && fepriv->tone != -1)
fe->ops.set_tone(fe, fepriv->tone);
if (fe->ops.set_voltage && fepriv->voltage != -1)
fe->ops.set_voltage(fe, fepriv->voltage);
fe->exit = DVB_FE_NO_EXIT; fe->exit = DVB_FE_NO_EXIT;
fepriv->state = FESTATE_RETUNE; fepriv->state = FESTATE_RETUNE;
dvb_frontend_wakeup(fe); dvb_frontend_wakeup(fe);

Просмотреть файл

@ -42,6 +42,29 @@
#include "dvbdev.h" #include "dvbdev.h"
/**
* DOC: Digital TV Frontend
*
* The Digital TV Frontend kABI defines a driver-internal interface for
* registering low-level, hardware specific driver to a hardware independent
* frontend layer. It is only of interest for Digital TV device driver writers.
* The header file for this API is named dvb_frontend.h and located in
* drivers/media/dvb-core.
*
* Before using the Digital TV frontend core, the bridge driver should attach
* the frontend demod, tuner and SEC devices and call dvb_register_frontend(),
* in order to register the new frontend at the subsystem. At device
* detach/removal, the bridge driver should call dvb_unregister_frontend() to
* remove the frontend from the core and then dvb_frontend_detach() to free the
* memory allocated by the frontend drivers.
*
* The drivers should also call dvb_frontend_suspend() as part of their
* handler for the &device_driver.suspend(), and dvb_frontend_resume() as
* part of their handler for &device_driver.resume().
*
* A few other optional functions are provided to handle some special cases.
*/
/* /*
* Maximum number of Delivery systems per frontend. It * Maximum number of Delivery systems per frontend. It
* should be smaller or equal to 32 * should be smaller or equal to 32
@ -112,16 +135,6 @@ struct analog_parameters {
u64 std; u64 std;
}; };
enum tuner_param {
DVBFE_TUNER_FREQUENCY = (1 << 0),
DVBFE_TUNER_TUNERSTEP = (1 << 1),
DVBFE_TUNER_IFFREQ = (1 << 2),
DVBFE_TUNER_BANDWIDTH = (1 << 3),
DVBFE_TUNER_REFCLOCK = (1 << 4),
DVBFE_TUNER_IQSENSE = (1 << 5),
DVBFE_TUNER_DUMMY = (1 << 31)
};
/** /**
* enum dvbfe_algo - defines the algorithm used to tune into a channel * enum dvbfe_algo - defines the algorithm used to tune into a channel
* *
@ -152,15 +165,6 @@ enum dvbfe_algo {
DVBFE_ALGO_RECOVERY = (1 << 31) DVBFE_ALGO_RECOVERY = (1 << 31)
}; };
struct tuner_state {
u32 frequency;
u32 tunerstep;
u32 ifreq;
u32 bandwidth;
u32 iqsense;
u32 refclock;
};
/** /**
* enum dvbfe_search - search callback possible return status * enum dvbfe_search - search callback possible return status
* *
@ -209,12 +213,12 @@ enum dvbfe_search {
* are stored at @dvb_frontend.dtv_property_cache;. The * are stored at @dvb_frontend.dtv_property_cache;. The
* tuner demod can change the parameters to reflect the * tuner demod can change the parameters to reflect the
* changes needed for the channel to be tuned, and * changes needed for the channel to be tuned, and
* update statistics. * update statistics. This is the recommended way to set
* the tuner parameters and should be used on newer
* drivers.
* @set_analog_params: callback function used to tune into an analog TV * @set_analog_params: callback function used to tune into an analog TV
* channel on hybrid tuners. It passes @analog_parameters; * channel on hybrid tuners. It passes @analog_parameters;
* to the driver. * to the driver.
* @calc_regs: callback function used to pass register data settings
* for simple tuners.
* @set_config: callback function used to send some tuner-specific * @set_config: callback function used to send some tuner-specific
* parameters. * parameters.
* @get_frequency: get the actual tuned frequency * @get_frequency: get the actual tuned frequency
@ -227,16 +231,10 @@ enum dvbfe_search {
* via DVBv5 API (@dvb_frontend.dtv_property_cache;). * via DVBv5 API (@dvb_frontend.dtv_property_cache;).
* @get_afc: Used only by analog TV core. Reports the frequency * @get_afc: Used only by analog TV core. Reports the frequency
* drift due to AFC. * drift due to AFC.
* @set_frequency: Set a new frequency. Please notice that using * @calc_regs: callback function used to pass register data settings
* set_params is preferred. * for simple tuners. Shouldn't be used on newer drivers.
* @set_bandwidth: Set a new frequency. Please notice that using * @set_frequency: Set a new frequency. Shouldn't be used on newer drivers.
* set_params is preferred. * @set_bandwidth: Set a new frequency. Shouldn't be used on newer drivers.
* @set_state: callback function used on some legacy drivers that
* don't implement set_params in order to set properties.
* Shouldn't be used on new drivers.
* @get_state: callback function used to get properties by some
* legacy drivers that don't implement set_params.
* Shouldn't be used on new drivers.
* *
* NOTE: frequencies used on get_frequency and set_frequency are in Hz for * NOTE: frequencies used on get_frequency and set_frequency are in Hz for
* terrestrial/cable or kHz for satellite. * terrestrial/cable or kHz for satellite.
@ -252,14 +250,10 @@ struct dvb_tuner_ops {
int (*suspend)(struct dvb_frontend *fe); int (*suspend)(struct dvb_frontend *fe);
int (*resume)(struct dvb_frontend *fe); int (*resume)(struct dvb_frontend *fe);
/** This is for simple PLLs - set all parameters in one go. */ /* This is the recomended way to set the tuner */
int (*set_params)(struct dvb_frontend *fe); int (*set_params)(struct dvb_frontend *fe);
int (*set_analog_params)(struct dvb_frontend *fe, struct analog_parameters *p); int (*set_analog_params)(struct dvb_frontend *fe, struct analog_parameters *p);
/** This is support for demods like the mt352 - fills out the supplied buffer with what to write. */
int (*calc_regs)(struct dvb_frontend *fe, u8 *buf, int buf_len);
/** This is to allow setting tuner-specific configs */
int (*set_config)(struct dvb_frontend *fe, void *priv_cfg); int (*set_config)(struct dvb_frontend *fe, void *priv_cfg);
int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency); int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency);
@ -272,17 +266,23 @@ struct dvb_tuner_ops {
int (*get_rf_strength)(struct dvb_frontend *fe, u16 *strength); int (*get_rf_strength)(struct dvb_frontend *fe, u16 *strength);
int (*get_afc)(struct dvb_frontend *fe, s32 *afc); int (*get_afc)(struct dvb_frontend *fe, s32 *afc);
/** These are provided separately from set_params in order to facilitate silicon /*
* tuners which require sophisticated tuning loops, controlling each parameter separately. */ * This is support for demods like the mt352 - fills out the supplied
int (*set_frequency)(struct dvb_frontend *fe, u32 frequency); * buffer with what to write.
int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth); *
* Don't use on newer drivers.
*/
int (*calc_regs)(struct dvb_frontend *fe, u8 *buf, int buf_len);
/* /*
* These are provided separately from set_params in order to facilitate silicon * These are provided separately from set_params in order to
* tuners which require sophisticated tuning loops, controlling each parameter separately. * facilitate silicon tuners which require sophisticated tuning loops,
* controlling each parameter separately.
*
* Don't use on newer drivers.
*/ */
int (*set_state)(struct dvb_frontend *fe, enum tuner_param param, struct tuner_state *state); int (*set_frequency)(struct dvb_frontend *fe, u32 frequency);
int (*get_state)(struct dvb_frontend *fe, enum tuner_param param, struct tuner_state *state); int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
}; };
/** /**
@ -404,6 +404,11 @@ struct dtv_frontend_properties;
* FE_ENABLE_HIGH_LNB_VOLTAGE ioctl (only Satellite). * FE_ENABLE_HIGH_LNB_VOLTAGE ioctl (only Satellite).
* @dishnetwork_send_legacy_command: callback function to implement the * @dishnetwork_send_legacy_command: callback function to implement the
* FE_DISHNETWORK_SEND_LEGACY_CMD ioctl (only Satellite). * FE_DISHNETWORK_SEND_LEGACY_CMD ioctl (only Satellite).
* Drivers should not use this, except when the DVB
* core emulation fails to provide proper support (e.g.
* if set_voltage() takes more than 8ms to work), and
* when backward compatibility with this legacy API is
* required.
* @i2c_gate_ctrl: controls the I2C gate. Newer drivers should use I2C * @i2c_gate_ctrl: controls the I2C gate. Newer drivers should use I2C
* mux support instead. * mux support instead.
* @ts_bus_ctrl: callback function used to take control of the TS bus. * @ts_bus_ctrl: callback function used to take control of the TS bus.
@ -466,7 +471,8 @@ struct dvb_frontend_ops {
int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire); int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
int (*set_lna)(struct dvb_frontend *); int (*set_lna)(struct dvb_frontend *);
/* These callbacks are for devices that implement their own /*
* These callbacks are for devices that implement their own
* tuning algorithms, rather than a simple swzigzag * tuning algorithms, rather than a simple swzigzag
*/ */
enum dvbfe_search (*search)(struct dvb_frontend *fe); enum dvbfe_search (*search)(struct dvb_frontend *fe);
@ -682,17 +688,126 @@ struct dvb_frontend {
unsigned int exit; unsigned int exit;
}; };
extern int dvb_register_frontend(struct dvb_adapter *dvb, /**
* dvb_register_frontend() - Registers a DVB frontend at the adapter
*
* @dvb: pointer to the dvb adapter
* @fe: pointer to the frontend struct
*
* Allocate and initialize the private data needed by the frontend core to
* manage the frontend and calls dvb_register_device() to register a new
* frontend. It also cleans the property cache that stores the frontend
* parameters and selects the first available delivery system.
*/
int dvb_register_frontend(struct dvb_adapter *dvb,
struct dvb_frontend *fe); struct dvb_frontend *fe);
extern int dvb_unregister_frontend(struct dvb_frontend *fe); /**
* dvb_unregister_frontend() - Unregisters a DVB frontend
*
* @fe: pointer to the frontend struct
*
* Stops the frontend kthread, calls dvb_unregister_device() and frees the
* private frontend data allocated by dvb_register_frontend().
*
* NOTE: This function doesn't frees the memory allocated by the demod,
* by the SEC driver and by the tuner. In order to free it, an explicit call to
* dvb_frontend_detach() is needed, after calling this function.
*/
int dvb_unregister_frontend(struct dvb_frontend *fe);
extern void dvb_frontend_detach(struct dvb_frontend *fe); /**
* dvb_frontend_detach() - Detaches and frees frontend specific data
*
* @fe: pointer to the frontend struct
*
* This function should be called after dvb_unregister_frontend(). It
* calls the SEC, tuner and demod release functions:
* &dvb_frontend_ops.release_sec, &dvb_frontend_ops.tuner_ops.release,
* &dvb_frontend_ops.analog_ops.release and &dvb_frontend_ops.release.
*
* If the driver is compiled with CONFIG_MEDIA_ATTACH, it also decreases
* the module reference count, needed to allow userspace to remove the
* previously used DVB frontend modules.
*/
void dvb_frontend_detach(struct dvb_frontend *fe);
extern void dvb_frontend_reinitialise(struct dvb_frontend *fe); /**
extern int dvb_frontend_suspend(struct dvb_frontend *fe); * dvb_frontend_suspend() - Suspends a Digital TV frontend
extern int dvb_frontend_resume(struct dvb_frontend *fe); *
* @fe: pointer to the frontend struct
*
* This function prepares a Digital TV frontend to suspend.
*
* In order to prepare the tuner to suspend, if
* &dvb_frontend_ops.tuner_ops.suspend() is available, it calls it. Otherwise,
* it will call &dvb_frontend_ops.tuner_ops.sleep(), if available.
*
* It will also call &dvb_frontend_ops.sleep() to put the demod to suspend.
*
* The drivers should also call dvb_frontend_suspend() as part of their
* handler for the &device_driver.suspend().
*/
int dvb_frontend_suspend(struct dvb_frontend *fe);
extern void dvb_frontend_sleep_until(ktime_t *waketime, u32 add_usec); /**
* dvb_frontend_resume() - Resumes a Digital TV frontend
*
* @fe: pointer to the frontend struct
*
* This function resumes the usual operation of the tuner after resume.
*
* In order to resume the frontend, it calls the demod &dvb_frontend_ops.init().
*
* If &dvb_frontend_ops.tuner_ops.resume() is available, It, it calls it.
* Otherwise,t will call &dvb_frontend_ops.tuner_ops.init(), if available.
*
* Once tuner and demods are resumed, it will enforce that the SEC voltage and
* tone are restored to their previous values and wake up the frontend's
* kthread in order to retune the frontend.
*
* The drivers should also call dvb_frontend_resume() as part of their
* handler for the &device_driver.resume().
*/
int dvb_frontend_resume(struct dvb_frontend *fe);
/**
* dvb_frontend_reinitialise() - forces a reinitialisation at the frontend
*
* @fe: pointer to the frontend struct
*
* Calls &dvb_frontend_ops.init() and &dvb_frontend_ops.tuner_ops.init(),
* and resets SEC tone and voltage (for Satellite systems).
*
* NOTE: Currently, this function is used only by one driver (budget-av).
* It seems to be due to address some special issue with that specific
* frontend.
*/
void dvb_frontend_reinitialise(struct dvb_frontend *fe);
/**
* dvb_frontend_sleep_until() - Sleep for the amount of time given by
* add_usec parameter
*
* @waketime: pointer to a struct ktime_t
* @add_usec: time to sleep, in microseconds
*
* This function is used to measure the time required for the
* %FE_DISHNETWORK_SEND_LEGACY_CMD ioctl to work. It needs to be as precise
* as possible, as it affects the detection of the dish tone command at the
* satellite subsystem.
*
* Its used internally by the DVB frontend core, in order to emulate
* %FE_DISHNETWORK_SEND_LEGACY_CMD using the &dvb_frontend_ops.set_voltage()
* callback.
*
* NOTE: it should not be used at the drivers, as the emulation for the
* legacy callback is provided by the Kernel. The only situation where this
* should be at the drivers is when there are some bugs at the hardware that
* would prevent the core emulation to work. On such cases, the driver would
* be writing a &dvb_frontend_ops.dishnetwork_send_legacy_command() and
* calling this function directly.
*/
void dvb_frontend_sleep_until(ktime_t *waketime, u32 add_usec);
#endif #endif

Просмотреть файл

@ -264,7 +264,7 @@ config DVB_MB86A16
config DVB_TDA10071 config DVB_TDA10071
tristate "NXP TDA10071" tristate "NXP TDA10071"
depends on DVB_CORE && I2C depends on DVB_CORE && I2C
select REGMAP select REGMAP_I2C
default m if !MEDIA_SUBDRV_AUTOSELECT default m if !MEDIA_SUBDRV_AUTOSELECT
help help
Say Y when you want to support this frontend. Say Y when you want to support this frontend.

Просмотреть файл

@ -44,7 +44,7 @@ int au8522_writereg(struct au8522_state *state, u16 reg, u8 data)
int ret; int ret;
u8 buf[] = { (reg >> 8) | 0x80, reg & 0xff, data }; u8 buf[] = { (reg >> 8) | 0x80, reg & 0xff, data };
struct i2c_msg msg = { .addr = state->config->demod_address, struct i2c_msg msg = { .addr = state->config.demod_address,
.flags = 0, .buf = buf, .len = 3 }; .flags = 0, .buf = buf, .len = 3 };
ret = i2c_transfer(state->i2c, &msg, 1); ret = i2c_transfer(state->i2c, &msg, 1);
@ -64,9 +64,9 @@ u8 au8522_readreg(struct au8522_state *state, u16 reg)
u8 b1[] = { 0 }; u8 b1[] = { 0 };
struct i2c_msg msg[] = { struct i2c_msg msg[] = {
{ .addr = state->config->demod_address, .flags = 0, { .addr = state->config.demod_address, .flags = 0,
.buf = b0, .len = 2 }, .buf = b0, .len = 2 },
{ .addr = state->config->demod_address, .flags = I2C_M_RD, { .addr = state->config.demod_address, .flags = I2C_M_RD,
.buf = b1, .len = 1 } }; .buf = b1, .len = 1 } };
ret = i2c_transfer(state->i2c, msg, 2); ret = i2c_transfer(state->i2c, msg, 2);
@ -140,7 +140,7 @@ EXPORT_SYMBOL(au8522_release_state);
static int au8522_led_gpio_enable(struct au8522_state *state, int onoff) static int au8522_led_gpio_enable(struct au8522_state *state, int onoff)
{ {
struct au8522_led_config *led_config = state->config->led_cfg; struct au8522_led_config *led_config = state->config.led_cfg;
u8 val; u8 val;
/* bail out if we can't control an LED */ /* bail out if we can't control an LED */
@ -170,7 +170,7 @@ static int au8522_led_gpio_enable(struct au8522_state *state, int onoff)
*/ */
int au8522_led_ctrl(struct au8522_state *state, int led) int au8522_led_ctrl(struct au8522_state *state, int led)
{ {
struct au8522_led_config *led_config = state->config->led_cfg; struct au8522_led_config *led_config = state->config.led_cfg;
int i, ret = 0; int i, ret = 0;
/* bail out if we can't control an LED */ /* bail out if we can't control an LED */

Просмотреть файл

@ -730,7 +730,6 @@ static int au8522_probe(struct i2c_client *client,
struct v4l2_ctrl_handler *hdl; struct v4l2_ctrl_handler *hdl;
struct v4l2_subdev *sd; struct v4l2_subdev *sd;
int instance; int instance;
struct au8522_config *demod_config;
/* Check if the adapter supports the needed features */ /* Check if the adapter supports the needed features */
if (!i2c_check_functionality(client->adapter, if (!i2c_check_functionality(client->adapter,
@ -754,15 +753,7 @@ static int au8522_probe(struct i2c_client *client,
break; break;
} }
demod_config = kzalloc(sizeof(struct au8522_config), GFP_KERNEL); state->config.demod_address = 0x8e >> 1;
if (demod_config == NULL) {
if (instance == 1)
kfree(state);
return -ENOMEM;
}
demod_config->demod_address = 0x8e >> 1;
state->config = demod_config;
state->i2c = client->adapter; state->i2c = client->adapter;
sd = &state->sd; sd = &state->sd;
@ -784,8 +775,7 @@ static int au8522_probe(struct i2c_client *client,
int err = hdl->error; int err = hdl->error;
v4l2_ctrl_handler_free(hdl); v4l2_ctrl_handler_free(hdl);
kfree(demod_config); au8522_release_state(state);
kfree(state);
return err; return err;
} }

Просмотреть файл

@ -566,7 +566,7 @@ static int au8522_enable_modulation(struct dvb_frontend *fe,
au8522_writereg(state, au8522_writereg(state,
VSB_mod_tab[i].reg, VSB_mod_tab[i].reg,
VSB_mod_tab[i].data); VSB_mod_tab[i].data);
au8522_set_if(fe, state->config->vsb_if); au8522_set_if(fe, state->config.vsb_if);
break; break;
case QAM_64: case QAM_64:
dprintk("%s() QAM 64\n", __func__); dprintk("%s() QAM 64\n", __func__);
@ -574,7 +574,7 @@ static int au8522_enable_modulation(struct dvb_frontend *fe,
au8522_writereg(state, au8522_writereg(state,
QAM64_mod_tab[i].reg, QAM64_mod_tab[i].reg,
QAM64_mod_tab[i].data); QAM64_mod_tab[i].data);
au8522_set_if(fe, state->config->qam_if); au8522_set_if(fe, state->config.qam_if);
break; break;
case QAM_256: case QAM_256:
if (zv_mode) { if (zv_mode) {
@ -583,7 +583,7 @@ static int au8522_enable_modulation(struct dvb_frontend *fe,
au8522_writereg(state, au8522_writereg(state,
QAM256_mod_tab_zv_mode[i].reg, QAM256_mod_tab_zv_mode[i].reg,
QAM256_mod_tab_zv_mode[i].data); QAM256_mod_tab_zv_mode[i].data);
au8522_set_if(fe, state->config->qam_if); au8522_set_if(fe, state->config.qam_if);
msleep(100); msleep(100);
au8522_writereg(state, 0x821a, 0x00); au8522_writereg(state, 0x821a, 0x00);
} else { } else {
@ -592,7 +592,7 @@ static int au8522_enable_modulation(struct dvb_frontend *fe,
au8522_writereg(state, au8522_writereg(state,
QAM256_mod_tab[i].reg, QAM256_mod_tab[i].reg,
QAM256_mod_tab[i].data); QAM256_mod_tab[i].data);
au8522_set_if(fe, state->config->qam_if); au8522_set_if(fe, state->config.qam_if);
} }
break; break;
default: default:
@ -666,7 +666,7 @@ static int au8522_read_status(struct dvb_frontend *fe, enum fe_status *status)
*status |= FE_HAS_LOCK | FE_HAS_SYNC; *status |= FE_HAS_LOCK | FE_HAS_SYNC;
} }
switch (state->config->status_mode) { switch (state->config.status_mode) {
case AU8522_DEMODLOCKING: case AU8522_DEMODLOCKING:
dprintk("%s() DEMODLOCKING\n", __func__); dprintk("%s() DEMODLOCKING\n", __func__);
if (*status & FE_HAS_VITERBI) if (*status & FE_HAS_VITERBI)
@ -704,7 +704,7 @@ static int au8522_read_status(struct dvb_frontend *fe, enum fe_status *status)
static int au8522_led_status(struct au8522_state *state, const u16 *snr) static int au8522_led_status(struct au8522_state *state, const u16 *snr)
{ {
struct au8522_led_config *led_config = state->config->led_cfg; struct au8522_led_config *led_config = state->config.led_cfg;
int led; int led;
u16 strong; u16 strong;
@ -758,7 +758,7 @@ static int au8522_read_snr(struct dvb_frontend *fe, u16 *snr)
au8522_readreg(state, 0x4311), au8522_readreg(state, 0x4311),
snr); snr);
if (state->config->led_cfg) if (state->config.led_cfg)
au8522_led_status(state, snr); au8522_led_status(state, snr);
return ret; return ret;
@ -866,7 +866,7 @@ struct dvb_frontend *au8522_attach(const struct au8522_config *config,
} }
/* setup the state */ /* setup the state */
state->config = config; state->config = *config;
state->i2c = i2c; state->i2c = i2c;
state->operational_mode = AU8522_DIGITAL_MODE; state->operational_mode = AU8522_DIGITAL_MODE;

Просмотреть файл

@ -50,7 +50,7 @@ struct au8522_state {
struct list_head hybrid_tuner_instance_list; struct list_head hybrid_tuner_instance_list;
/* configuration settings */ /* configuration settings */
const struct au8522_config *config; struct au8522_config config;
struct dvb_frontend frontend; struct dvb_frontend frontend;

Просмотреть файл

@ -21,7 +21,7 @@
* Or, point your browser to http://www.gnu.org/copyleft/gpl.html * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
* *
* *
* the project's page is at http://www.linuxtv.org * the project's page is at https://linuxtv.org
*/ */
#ifndef BSBE1_D01A_H #ifndef BSBE1_D01A_H

Просмотреть файл

@ -19,7 +19,7 @@
* Or, point your browser to http://www.gnu.org/copyleft/gpl.html * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
* *
* *
* the project's page is at http://www.linuxtv.org * the project's page is at https://linuxtv.org
*/ */
#ifndef BSBE1_H #ifndef BSBE1_H

Просмотреть файл

@ -19,7 +19,7 @@
* Or, point your browser to http://www.gnu.org/copyleft/gpl.html * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
* *
* *
* the project's page is at http://www.linuxtv.org * the project's page is at https://linuxtv.org
*/ */
#ifndef BSRU6_H #ifndef BSRU6_H

Просмотреть файл

@ -22,7 +22,7 @@
* Or, point your browser to http://www.gnu.org/copyleft/gpl.html * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
* *
* *
* the project's page is at http://www.linuxtv.org * the project's page is at https://linuxtv.org
*/ */
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/errno.h> #include <linux/errno.h>

Просмотреть файл

@ -22,7 +22,7 @@
* Or, point your browser to http://www.gnu.org/copyleft/gpl.html * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
* *
* *
* the project's page is at http://www.linuxtv.org * the project's page is at https://linuxtv.org
*/ */
#ifndef _ISL6405_H #ifndef _ISL6405_H

Просмотреть файл

@ -22,7 +22,7 @@
* Or, point your browser to http://www.gnu.org/copyleft/gpl.html * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
* *
* *
* the project's page is at http://www.linuxtv.org * the project's page is at https://linuxtv.org
*/ */
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/errno.h> #include <linux/errno.h>

Просмотреть файл

@ -22,7 +22,7 @@
* Or, point your browser to http://www.gnu.org/copyleft/gpl.html * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
* *
* *
* the project's page is at http://www.linuxtv.org * the project's page is at https://linuxtv.org
*/ */
#ifndef _ISL6421_H #ifndef _ISL6421_H

Просмотреть файл

@ -22,7 +22,7 @@
* Or, point your browser to http://www.gnu.org/copyleft/gpl.html * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
* *
* *
* the project's page is at http://www.linuxtv.org * the project's page is at https://linuxtv.org
*/ */
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/errno.h> #include <linux/errno.h>

Просмотреть файл

@ -21,7 +21,7 @@
* Or, point your browser to http://www.gnu.org/copyleft/gpl.html * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
* *
* *
* the project's page is at http://www.linuxtv.org * the project's page is at https://linuxtv.org
*/ */
#ifndef _LNBP21_H #ifndef _LNBP21_H

Просмотреть файл

@ -22,7 +22,7 @@
* Or, point your browser to http://www.gnu.org/copyleft/gpl.html * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
* *
* *
* the project's page is at http://www.linuxtv.org * the project's page is at https://linuxtv.org
*/ */
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/errno.h> #include <linux/errno.h>

Просмотреть файл

@ -22,7 +22,7 @@
* Or, point your browser to http://www.gnu.org/copyleft/gpl.html * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
* *
* *
* the project's page is at http://www.linuxtv.org * the project's page is at https://linuxtv.org
*/ */
#ifndef _LNBP22_H #ifndef _LNBP22_H

Просмотреть файл

@ -976,7 +976,8 @@ static int rtl2832_regmap_read(void *context, const void *reg_buf,
ret = __i2c_transfer(client->adapter, msg, 2); ret = __i2c_transfer(client->adapter, msg, 2);
if (ret != 2) { if (ret != 2) {
dev_warn(&client->dev, "i2c reg read failed %d\n", ret); dev_warn(&client->dev, "i2c reg read failed %d reg %02x\n",
ret, *(u8 *)reg_buf);
if (ret >= 0) if (ret >= 0)
ret = -EREMOTEIO; ret = -EREMOTEIO;
return ret; return ret;
@ -999,7 +1000,8 @@ static int rtl2832_regmap_write(void *context, const void *data, size_t count)
ret = __i2c_transfer(client->adapter, msg, 1); ret = __i2c_transfer(client->adapter, msg, 1);
if (ret != 1) { if (ret != 1) {
dev_warn(&client->dev, "i2c reg write failed %d\n", ret); dev_warn(&client->dev, "i2c reg write failed %d reg %02x\n",
ret, *(u8 *)data);
if (ret >= 0) if (ret >= 0)
ret = -EREMOTEIO; ret = -EREMOTEIO;
return ret; return ret;
@ -1028,7 +1030,8 @@ static int rtl2832_regmap_gather_write(void *context, const void *reg,
ret = __i2c_transfer(client->adapter, msg, 1); ret = __i2c_transfer(client->adapter, msg, 1);
if (ret != 1) { if (ret != 1) {
dev_warn(&client->dev, "i2c reg write failed %d\n", ret); dev_warn(&client->dev, "i2c reg write failed %d reg %02x\n",
ret, *(u8 const *)reg);
if (ret >= 0) if (ret >= 0)
ret = -EREMOTEIO; ret = -EREMOTEIO;
return ret; return ret;
@ -1097,18 +1100,6 @@ static int rtl2832_enable_slave_ts(struct i2c_client *client)
if (ret) if (ret)
goto err; goto err;
ret = rtl2832_bulk_write(client, 0x022, "\x01", 1);
if (ret)
goto err;
ret = rtl2832_bulk_write(client, 0x026, "\x1f", 1);
if (ret)
goto err;
ret = rtl2832_bulk_write(client, 0x027, "\xff", 1);
if (ret)
goto err;
ret = rtl2832_bulk_write(client, 0x192, "\x7f\xf7\xff", 3); ret = rtl2832_bulk_write(client, 0x192, "\x7f\xf7\xff", 3);
if (ret) if (ret)
goto err; goto err;

Просмотреть файл

@ -310,7 +310,7 @@ static void rtl2832_sdr_urb_complete(struct urb *urb)
len = rtl2832_sdr_convert_stream(dev, ptr, urb->transfer_buffer, len = rtl2832_sdr_convert_stream(dev, ptr, urb->transfer_buffer,
urb->actual_length); urb->actual_length);
vb2_set_plane_payload(&fbuf->vb.vb2_buf, 0, len); vb2_set_plane_payload(&fbuf->vb.vb2_buf, 0, len);
v4l2_get_timestamp(&fbuf->vb.timestamp); fbuf->vb.vb2_buf.timestamp = ktime_get_ns();
fbuf->vb.sequence = dev->sequence++; fbuf->vb.sequence = dev->sequence++;
vb2_buffer_done(&fbuf->vb.vb2_buf, VB2_BUF_STATE_DONE); vb2_buffer_done(&fbuf->vb.vb2_buf, VB2_BUF_STATE_DONE);
} }
@ -490,7 +490,7 @@ static int rtl2832_sdr_querycap(struct file *file, void *fh,
/* Videobuf2 operations */ /* Videobuf2 operations */
static int rtl2832_sdr_queue_setup(struct vb2_queue *vq, static int rtl2832_sdr_queue_setup(struct vb2_queue *vq,
const void *parg, unsigned int *nbuffers, unsigned int *nbuffers,
unsigned int *nplanes, unsigned int sizes[], void *alloc_ctxs[]) unsigned int *nplanes, unsigned int sizes[], void *alloc_ctxs[])
{ {
struct rtl2832_sdr_dev *dev = vb2_get_drv_priv(vq); struct rtl2832_sdr_dev *dev = vb2_get_drv_priv(vq);

Просмотреть файл

@ -1,21 +1,21 @@
/* /*
Driver for Silicon Labs Si2161 DVB-T and Si2165 DVB-C/-T Demodulator * Driver for Silicon Labs Si2161 DVB-T and Si2165 DVB-C/-T Demodulator
*
Copyright (C) 2013-2014 Matthias Schwarzott <zzam@gentoo.org> * Copyright (C) 2013-2014 Matthias Schwarzott <zzam@gentoo.org>
*
This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
(at your option) any later version. * (at your option) any later version.
*
This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. * GNU General Public License for more details.
*
References: * References:
http://www.silabs.com/Support%20Documents/TechnicalDocs/Si2165-short.pdf * http://www.silabs.com/Support%20Documents/TechnicalDocs/Si2165-short.pdf
*/ */
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/errno.h> #include <linux/errno.h>
@ -31,16 +31,18 @@
#include "si2165_priv.h" #include "si2165_priv.h"
#include "si2165.h" #include "si2165.h"
/* Hauppauge WinTV-HVR-930C-HD B130 / PCTV QuatroStick 521e 1113xx /*
* uses 16 MHz xtal */ * Hauppauge WinTV-HVR-930C-HD B130 / PCTV QuatroStick 521e 1113xx
* uses 16 MHz xtal
/* Hauppauge WinTV-HVR-930C-HD B131 / PCTV QuatroStick 522e 1114xx *
* uses 24 MHz clock provided by tuner */ * Hauppauge WinTV-HVR-930C-HD B131 / PCTV QuatroStick 522e 1114xx
* uses 24 MHz clock provided by tuner
*/
struct si2165_state { struct si2165_state {
struct i2c_adapter *i2c; struct i2c_adapter *i2c;
struct dvb_frontend frontend; struct dvb_frontend fe;
struct si2165_config config; struct si2165_config config;
@ -241,6 +243,27 @@ err:
return ret; return ret;
} }
#define REG16(reg, val) { (reg), (val) & 0xff }, { (reg)+1, (val)>>8 & 0xff }
struct si2165_reg_value_pair {
u16 reg;
u8 val;
};
static int si2165_write_reg_list(struct si2165_state *state,
const struct si2165_reg_value_pair *regs,
int count)
{
int i;
int ret;
for (i = 0; i < count; i++) {
ret = si2165_writereg8(state, regs[i].reg, regs[i].val);
if (ret < 0)
return ret;
}
return 0;
}
static int si2165_get_tune_settings(struct dvb_frontend *fe, static int si2165_get_tune_settings(struct dvb_frontend *fe,
struct dvb_frontend_tune_settings *s) struct dvb_frontend_tune_settings *s)
{ {
@ -258,8 +281,10 @@ static int si2165_init_pll(struct si2165_state *state)
u8 divl = 12; u8 divl = 12;
u8 buf[4]; u8 buf[4];
/* hardcoded values can be deleted if calculation is verified /*
* or it yields the same values as the windows driver */ * hardcoded values can be deleted if calculation is verified
* or it yields the same values as the windows driver
*/
switch (ref_freq_Hz) { switch (ref_freq_Hz) {
case 16000000u: case 16000000u:
divn = 56; divn = 56;
@ -274,8 +299,10 @@ static int si2165_init_pll(struct si2165_state *state)
if (ref_freq_Hz > 16000000u) if (ref_freq_Hz > 16000000u)
divr = 2; divr = 2;
/* now select divn and divp such that /*
* fvco is in 1624..1824 MHz */ * now select divn and divp such that
* fvco is in 1624..1824 MHz
*/
if (1624000000u * divr > ref_freq_Hz * 2u * 63u) if (1624000000u * divr > ref_freq_Hz * 2u * 63u)
divp = 4; divp = 4;
@ -341,10 +368,12 @@ static int si2165_upload_firmware_block(struct si2165_state *state,
if (len % 4 != 0) if (len % 4 != 0)
return -EINVAL; return -EINVAL;
deb_fw_load("si2165_upload_firmware_block called with len=0x%x offset=0x%x blockcount=0x%x\n", deb_fw_load(
"si2165_upload_firmware_block called with len=0x%x offset=0x%x blockcount=0x%x\n",
len, offset, block_count); len, offset, block_count);
while (offset+12 <= len && cur_block < block_count) { while (offset+12 <= len && cur_block < block_count) {
deb_fw_load("si2165_upload_firmware_block in while len=0x%x offset=0x%x cur_block=0x%x blockcount=0x%x\n", deb_fw_load(
"si2165_upload_firmware_block in while len=0x%x offset=0x%x cur_block=0x%x blockcount=0x%x\n",
len, offset, cur_block, block_count); len, offset, cur_block, block_count);
wordcount = data[offset]; wordcount = data[offset];
if (wordcount < 1 || data[offset+1] || if (wordcount < 1 || data[offset+1] ||
@ -383,7 +412,8 @@ static int si2165_upload_firmware_block(struct si2165_state *state,
cur_block++; cur_block++;
} }
deb_fw_load("si2165_upload_firmware_block after while len=0x%x offset=0x%x cur_block=0x%x blockcount=0x%x\n", deb_fw_load(
"si2165_upload_firmware_block after while len=0x%x offset=0x%x cur_block=0x%x blockcount=0x%x\n",
len, offset, cur_block, block_count); len, offset, cur_block, block_count);
if (poffset) if (poffset)
@ -633,7 +663,7 @@ static int si2165_init(struct dvb_frontend *fe)
goto error; goto error;
/* ber_pkt */ /* ber_pkt */
ret = si2165_writereg16(state, 0x0470 , 0x7530); ret = si2165_writereg16(state, 0x0470, 0x7530);
if (ret < 0) if (ret < 0)
goto error; goto error;
@ -660,22 +690,19 @@ static int si2165_init(struct dvb_frontend *fe)
goto error; goto error;
} }
/* write adc values after each reset*/ /* ts output config */
ret = si2165_writereg8(state, 0x012a, 0x46); ret = si2165_writereg8(state, 0x04e4, 0x20);
if (ret < 0) if (ret < 0)
goto error; return ret;
ret = si2165_writereg8(state, 0x012c, 0x00); ret = si2165_writereg16(state, 0x04ef, 0x00fe);
if (ret < 0) if (ret < 0)
goto error; return ret;
ret = si2165_writereg8(state, 0x012e, 0x0a); ret = si2165_writereg24(state, 0x04f4, 0x555555);
if (ret < 0) if (ret < 0)
goto error; return ret;
ret = si2165_writereg8(state, 0x012f, 0xff); ret = si2165_writereg8(state, 0x04e5, 0x01);
if (ret < 0) if (ret < 0)
goto error; return ret;
ret = si2165_writereg8(state, 0x0123, 0x70);
if (ret < 0)
goto error;
return 0; return 0;
error: error:
@ -733,16 +760,26 @@ static int si2165_set_oversamp(struct si2165_state *state, u32 dvb_rate)
do_div(oversamp, dvb_rate); do_div(oversamp, dvb_rate);
reg_value = oversamp & 0x3fffffff; reg_value = oversamp & 0x3fffffff;
/* oversamp, usbdump contained 0x03100000; */ dprintk("%s: Write oversamp=%#x\n", __func__, reg_value);
return si2165_writereg32(state, 0x00e4, reg_value); return si2165_writereg32(state, 0x00e4, reg_value);
} }
static int si2165_set_if_freq_shift(struct si2165_state *state, u32 IF) static int si2165_set_if_freq_shift(struct si2165_state *state)
{ {
struct dvb_frontend *fe = &state->fe;
u64 if_freq_shift; u64 if_freq_shift;
s32 reg_value = 0; s32 reg_value = 0;
u32 fe_clk = si2165_get_fe_clk(state); u32 fe_clk = si2165_get_fe_clk(state);
u32 IF = 0;
if (!fe->ops.tuner_ops.get_if_frequency) {
dev_err(&state->i2c->dev,
"%s: Error: get_if_frequency() not defined at tuner. Can't work without it!\n",
KBUILD_MODNAME);
return -EINVAL;
}
fe->ops.tuner_ops.get_if_frequency(fe, &IF);
if_freq_shift = IF; if_freq_shift = IF;
if_freq_shift <<= 29; if_freq_shift <<= 29;
@ -758,25 +795,39 @@ static int si2165_set_if_freq_shift(struct si2165_state *state, u32 IF)
return si2165_writereg32(state, 0x00e8, reg_value); return si2165_writereg32(state, 0x00e8, reg_value);
} }
static int si2165_set_parameters(struct dvb_frontend *fe) static const struct si2165_reg_value_pair dvbt_regs[] = {
/* standard = DVB-T */
{ 0x00ec, 0x01 },
{ 0x08f8, 0x00 },
/* impulsive_noise_remover */
{ 0x031c, 0x01 },
{ 0x00cb, 0x00 },
/* agc2 */
{ 0x016e, 0x41 },
{ 0x016c, 0x0e },
{ 0x016d, 0x10 },
/* agc */
{ 0x015b, 0x03 },
{ 0x0150, 0x78 },
/* agc */
{ 0x01a0, 0x78 },
{ 0x01c8, 0x68 },
/* freq_sync_range */
REG16(0x030c, 0x0064),
/* gp_reg0 */
{ 0x0387, 0x00 }
};
static int si2165_set_frontend_dvbt(struct dvb_frontend *fe)
{ {
int ret; int ret;
struct dtv_frontend_properties *p = &fe->dtv_property_cache; struct dtv_frontend_properties *p = &fe->dtv_property_cache;
struct si2165_state *state = fe->demodulator_priv; struct si2165_state *state = fe->demodulator_priv;
u8 val[3];
u32 IF;
u32 dvb_rate = 0; u32 dvb_rate = 0;
u16 bw10k; u16 bw10k;
dprintk("%s: called\n", __func__); dprintk("%s: called\n", __func__);
if (!fe->ops.tuner_ops.get_if_frequency) {
dev_err(&state->i2c->dev,
"%s: Error: get_if_frequency() not defined at tuner. Can't work without it!\n",
KBUILD_MODNAME);
return -EINVAL;
}
if (!state->has_dvbt) if (!state->has_dvbt)
return -EINVAL; return -EINVAL;
@ -788,34 +839,10 @@ static int si2165_set_parameters(struct dvb_frontend *fe)
bw10k = 800; bw10k = 800;
} }
/* standard = DVB-T */
ret = si2165_writereg8(state, 0x00ec, 0x01);
if (ret < 0)
return ret;
ret = si2165_adjust_pll_divl(state, 12); ret = si2165_adjust_pll_divl(state, 12);
if (ret < 0) if (ret < 0)
return ret; return ret;
fe->ops.tuner_ops.get_if_frequency(fe, &IF);
ret = si2165_set_if_freq_shift(state, IF);
if (ret < 0)
return ret;
ret = si2165_writereg8(state, 0x08f8, 0x00);
if (ret < 0)
return ret;
/* ts output config */
ret = si2165_writereg8(state, 0x04e4, 0x20);
if (ret < 0)
return ret;
ret = si2165_writereg16(state, 0x04ef, 0x00fe);
if (ret < 0)
return ret;
ret = si2165_writereg24(state, 0x04f4, 0x555555);
if (ret < 0)
return ret;
ret = si2165_writereg8(state, 0x04e5, 0x01);
if (ret < 0)
return ret;
/* bandwidth in 10KHz steps */ /* bandwidth in 10KHz steps */
ret = si2165_writereg16(state, 0x0308, bw10k); ret = si2165_writereg16(state, 0x0308, bw10k);
if (ret < 0) if (ret < 0)
@ -823,48 +850,115 @@ static int si2165_set_parameters(struct dvb_frontend *fe)
ret = si2165_set_oversamp(state, dvb_rate); ret = si2165_set_oversamp(state, dvb_rate);
if (ret < 0) if (ret < 0)
return ret; return ret;
/* impulsive_noise_remover */
ret = si2165_writereg8(state, 0x031c, 0x01); ret = si2165_write_reg_list(state, dvbt_regs, ARRAY_SIZE(dvbt_regs));
if (ret < 0)
return ret;
ret = si2165_writereg8(state, 0x00cb, 0x00);
if (ret < 0) if (ret < 0)
return ret; return ret;
return 0;
}
static const struct si2165_reg_value_pair dvbc_regs[] = {
/* standard = DVB-C */
{ 0x00ec, 0x05 },
{ 0x08f8, 0x00 },
/* agc2 */ /* agc2 */
ret = si2165_writereg8(state, 0x016e, 0x41); { 0x016e, 0x50 },
if (ret < 0) { 0x016c, 0x0e },
return ret; { 0x016d, 0x10 },
ret = si2165_writereg8(state, 0x016c, 0x0e);
if (ret < 0)
return ret;
ret = si2165_writereg8(state, 0x016d, 0x10);
if (ret < 0)
return ret;
/* agc */ /* agc */
ret = si2165_writereg8(state, 0x015b, 0x03); { 0x015b, 0x03 },
if (ret < 0) { 0x0150, 0x68 },
return ret;
ret = si2165_writereg8(state, 0x0150, 0x78);
if (ret < 0)
return ret;
/* agc */ /* agc */
ret = si2165_writereg8(state, 0x01a0, 0x78); { 0x01a0, 0x68 },
{ 0x01c8, 0x50 },
{ 0x0278, 0x0d },
{ 0x023a, 0x05 },
{ 0x0261, 0x09 },
REG16(0x0350, 0x3e80),
{ 0x02f4, 0x00 },
{ 0x00cb, 0x01 },
REG16(0x024c, 0x0000),
REG16(0x027c, 0x0000),
{ 0x0232, 0x03 },
{ 0x02f4, 0x0b },
{ 0x018b, 0x00 },
};
static int si2165_set_frontend_dvbc(struct dvb_frontend *fe)
{
struct si2165_state *state = fe->demodulator_priv;
int ret;
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
const u32 dvb_rate = p->symbol_rate;
const u32 bw_hz = p->bandwidth_hz;
if (!state->has_dvbc)
return -EINVAL;
if (dvb_rate == 0)
return -EINVAL;
ret = si2165_adjust_pll_divl(state, 14);
if (ret < 0) if (ret < 0)
return ret; return ret;
ret = si2165_writereg8(state, 0x01c8, 0x68);
/* Oversampling */
ret = si2165_set_oversamp(state, dvb_rate);
if (ret < 0) if (ret < 0)
return ret; return ret;
/* freq_sync_range */
ret = si2165_writereg16(state, 0x030c, 0x0064); ret = si2165_writereg32(state, 0x00c4, bw_hz);
if (ret < 0) if (ret < 0)
return ret; return ret;
/* gp_reg0 */
ret = si2165_readreg8(state, 0x0387, val); ret = si2165_write_reg_list(state, dvbc_regs, ARRAY_SIZE(dvbc_regs));
if (ret < 0) if (ret < 0)
return ret; return ret;
ret = si2165_writereg8(state, 0x0387, 0x00);
return 0;
}
static const struct si2165_reg_value_pair agc_rewrite[] = {
{ 0x012a, 0x46 },
{ 0x012c, 0x00 },
{ 0x012e, 0x0a },
{ 0x012f, 0xff },
{ 0x0123, 0x70 }
};
static int si2165_set_frontend(struct dvb_frontend *fe)
{
struct si2165_state *state = fe->demodulator_priv;
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
u32 delsys = p->delivery_system;
int ret;
u8 val[3];
/* initial setting of if freq shift */
ret = si2165_set_if_freq_shift(state);
if (ret < 0) if (ret < 0)
return ret; return ret;
switch (delsys) {
case SYS_DVBT:
ret = si2165_set_frontend_dvbt(fe);
if (ret < 0)
return ret;
break;
case SYS_DVBC_ANNEX_A:
ret = si2165_set_frontend_dvbc(fe);
if (ret < 0)
return ret;
break;
default:
return -EINVAL;
}
/* dsp_addr_jump */ /* dsp_addr_jump */
ret = si2165_writereg32(state, 0x0348, 0xf4000000); ret = si2165_writereg32(state, 0x0348, 0xf4000000);
if (ret < 0) if (ret < 0)
@ -874,8 +968,7 @@ static int si2165_set_parameters(struct dvb_frontend *fe)
fe->ops.tuner_ops.set_params(fe); fe->ops.tuner_ops.set_params(fe);
/* recalc if_freq_shift if IF might has changed */ /* recalc if_freq_shift if IF might has changed */
fe->ops.tuner_ops.get_if_frequency(fe, &IF); ret = si2165_set_if_freq_shift(state);
ret = si2165_set_if_freq_shift(state, IF);
if (ret < 0) if (ret < 0)
return ret; return ret;
@ -886,6 +979,7 @@ static int si2165_set_parameters(struct dvb_frontend *fe)
ret = si2165_writereg8(state, 0x0341, 0x00); ret = si2165_writereg8(state, 0x0341, 0x00);
if (ret < 0) if (ret < 0)
return ret; return ret;
/* reset all */ /* reset all */
ret = si2165_writereg8(state, 0x00c0, 0x00); ret = si2165_writereg8(state, 0x00c0, 0x00);
if (ret < 0) if (ret < 0)
@ -894,6 +988,13 @@ static int si2165_set_parameters(struct dvb_frontend *fe)
ret = si2165_writereg32(state, 0x0384, 0x00000000); ret = si2165_writereg32(state, 0x0384, 0x00000000);
if (ret < 0) if (ret < 0)
return ret; return ret;
/* write adc values after each reset*/
ret = si2165_write_reg_list(state, agc_rewrite,
ARRAY_SIZE(agc_rewrite));
if (ret < 0)
return ret;
/* start_synchro */ /* start_synchro */
ret = si2165_writereg8(state, 0x02e0, 0x01); ret = si2165_writereg8(state, 0x02e0, 0x01);
if (ret < 0) if (ret < 0)
@ -917,7 +1018,12 @@ static void si2165_release(struct dvb_frontend *fe)
static struct dvb_frontend_ops si2165_ops = { static struct dvb_frontend_ops si2165_ops = {
.info = { .info = {
.name = "Silicon Labs ", .name = "Silicon Labs ",
.caps = FE_CAN_FEC_1_2 | /* For DVB-C */
.symbol_rate_min = 1000000,
.symbol_rate_max = 7200000,
/* For DVB-T */
.frequency_stepsize = 166667,
.caps = FE_CAN_FEC_1_2 |
FE_CAN_FEC_2_3 | FE_CAN_FEC_2_3 |
FE_CAN_FEC_3_4 | FE_CAN_FEC_3_4 |
FE_CAN_FEC_5_6 | FE_CAN_FEC_5_6 |
@ -930,7 +1036,6 @@ static struct dvb_frontend_ops si2165_ops = {
FE_CAN_QAM_128 | FE_CAN_QAM_128 |
FE_CAN_QAM_256 | FE_CAN_QAM_256 |
FE_CAN_QAM_AUTO | FE_CAN_QAM_AUTO |
FE_CAN_TRANSMISSION_MODE_AUTO |
FE_CAN_GUARD_INTERVAL_AUTO | FE_CAN_GUARD_INTERVAL_AUTO |
FE_CAN_HIERARCHY_AUTO | FE_CAN_HIERARCHY_AUTO |
FE_CAN_MUTE_TS | FE_CAN_MUTE_TS |
@ -943,7 +1048,7 @@ static struct dvb_frontend_ops si2165_ops = {
.init = si2165_init, .init = si2165_init,
.sleep = si2165_sleep, .sleep = si2165_sleep,
.set_frontend = si2165_set_parameters, .set_frontend = si2165_set_frontend,
.read_status = si2165_read_status, .read_status = si2165_read_status,
.release = si2165_release, .release = si2165_release,
@ -979,9 +1084,9 @@ struct dvb_frontend *si2165_attach(const struct si2165_config *config,
} }
/* create dvb_frontend */ /* create dvb_frontend */
memcpy(&state->frontend.ops, &si2165_ops, memcpy(&state->fe.ops, &si2165_ops,
sizeof(struct dvb_frontend_ops)); sizeof(struct dvb_frontend_ops));
state->frontend.demodulator_priv = state; state->fe.demodulator_priv = state;
/* powerup */ /* powerup */
io_ret = si2165_writereg8(state, 0x0000, state->config.chip_mode); io_ret = si2165_writereg8(state, 0x0000, state->config.chip_mode);
@ -1033,20 +1138,22 @@ struct dvb_frontend *si2165_attach(const struct si2165_config *config,
KBUILD_MODNAME, chip_name, rev_char, state->chip_type, KBUILD_MODNAME, chip_name, rev_char, state->chip_type,
state->chip_revcode); state->chip_revcode);
strlcat(state->frontend.ops.info.name, chip_name, strlcat(state->fe.ops.info.name, chip_name,
sizeof(state->frontend.ops.info.name)); sizeof(state->fe.ops.info.name));
n = 0; n = 0;
if (state->has_dvbt) { if (state->has_dvbt) {
state->frontend.ops.delsys[n++] = SYS_DVBT; state->fe.ops.delsys[n++] = SYS_DVBT;
strlcat(state->frontend.ops.info.name, " DVB-T", strlcat(state->fe.ops.info.name, " DVB-T",
sizeof(state->frontend.ops.info.name)); sizeof(state->fe.ops.info.name));
}
if (state->has_dvbc) {
state->fe.ops.delsys[n++] = SYS_DVBC_ANNEX_A;
strlcat(state->fe.ops.info.name, " DVB-C",
sizeof(state->fe.ops.info.name));
} }
if (state->has_dvbc)
dev_warn(&state->i2c->dev, "%s: DVB-C is not yet supported.\n",
KBUILD_MODNAME);
return &state->frontend; return &state->fe;
error: error:
kfree(state); kfree(state);

Просмотреть файл

@ -252,6 +252,7 @@ static int stb6100_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth)
{ {
int rc; int rc;
u8 f; u8 f;
u32 bw;
struct stb6100_state *state = fe->tuner_priv; struct stb6100_state *state = fe->tuner_priv;
rc = stb6100_read_reg(state, STB6100_F); rc = stb6100_read_reg(state, STB6100_F);
@ -259,9 +260,9 @@ static int stb6100_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth)
return rc; return rc;
f = rc & STB6100_F_F; f = rc & STB6100_F_F;
state->status.bandwidth = (f + 5) * 2000; /* x2 for ZIF */ bw = (f + 5) * 2000; /* x2 for ZIF */
*bandwidth = state->bandwidth = state->status.bandwidth * 1000; *bandwidth = state->bandwidth = bw * 1000;
dprintk(verbose, FE_DEBUG, 1, "bandwidth = %u Hz", state->bandwidth); dprintk(verbose, FE_DEBUG, 1, "bandwidth = %u Hz", state->bandwidth);
return 0; return 0;
} }
@ -495,68 +496,28 @@ static int stb6100_sleep(struct dvb_frontend *fe)
static int stb6100_init(struct dvb_frontend *fe) static int stb6100_init(struct dvb_frontend *fe)
{ {
struct stb6100_state *state = fe->tuner_priv; struct stb6100_state *state = fe->tuner_priv;
struct tuner_state *status = &state->status; int refclk = 27000000; /* Hz */
status->tunerstep = 125000; /*
status->ifreq = 0; * iqsense = 1
status->refclock = 27000000; /* Hz */ * tunerstep = 125000
status->iqsense = 1; */
status->bandwidth = 36000; /* kHz */ state->bandwidth = 36000000; /* Hz */
state->bandwidth = status->bandwidth * 1000; /* Hz */ state->reference = refclk / 1000; /* kHz */
state->reference = status->refclock / 1000; /* kHz */
/* Set default bandwidth. Modified, PN 13-May-10 */ /* Set default bandwidth. Modified, PN 13-May-10 */
return 0; return 0;
} }
static int stb6100_get_state(struct dvb_frontend *fe, static int stb6100_set_params(struct dvb_frontend *fe)
enum tuner_param param,
struct tuner_state *state)
{ {
switch (param) { struct dtv_frontend_properties *c = &fe->dtv_property_cache;
case DVBFE_TUNER_FREQUENCY:
stb6100_get_frequency(fe, &state->frequency);
break;
case DVBFE_TUNER_TUNERSTEP:
break;
case DVBFE_TUNER_IFFREQ:
break;
case DVBFE_TUNER_BANDWIDTH:
stb6100_get_bandwidth(fe, &state->bandwidth);
break;
case DVBFE_TUNER_REFCLOCK:
break;
default:
break;
}
return 0; if (c->frequency > 0)
} stb6100_set_frequency(fe, c->frequency);
static int stb6100_set_state(struct dvb_frontend *fe, if (c->bandwidth_hz > 0)
enum tuner_param param, stb6100_set_bandwidth(fe, c->bandwidth_hz);
struct tuner_state *state)
{
struct stb6100_state *tstate = fe->tuner_priv;
switch (param) {
case DVBFE_TUNER_FREQUENCY:
stb6100_set_frequency(fe, state->frequency);
tstate->frequency = state->frequency;
break;
case DVBFE_TUNER_TUNERSTEP:
break;
case DVBFE_TUNER_IFFREQ:
break;
case DVBFE_TUNER_BANDWIDTH:
stb6100_set_bandwidth(fe, state->bandwidth);
tstate->bandwidth = state->bandwidth;
break;
case DVBFE_TUNER_REFCLOCK:
break;
default:
break;
}
return 0; return 0;
} }
@ -572,8 +533,9 @@ static struct dvb_tuner_ops stb6100_ops = {
.init = stb6100_init, .init = stb6100_init,
.sleep = stb6100_sleep, .sleep = stb6100_sleep,
.get_status = stb6100_get_status, .get_status = stb6100_get_status,
.get_state = stb6100_get_state, .set_params = stb6100_set_params,
.set_state = stb6100_set_state, .get_frequency = stb6100_get_frequency,
.get_bandwidth = stb6100_get_bandwidth,
.release = stb6100_release .release = stb6100_release
}; };

Просмотреть файл

@ -86,7 +86,6 @@ struct stb6100_state {
const struct stb6100_config *config; const struct stb6100_config *config;
struct dvb_tuner_ops ops; struct dvb_tuner_ops ops;
struct dvb_frontend *frontend; struct dvb_frontend *frontend;
struct tuner_state status;
u32 frequency; u32 frequency;
u32 srate; u32 srate;

Просмотреть файл

@ -19,20 +19,21 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <linux/dvb/frontend.h>
#include "dvb_frontend.h"
static int stb6100_get_frequency(struct dvb_frontend *fe, u32 *frequency) static int stb6100_get_frequency(struct dvb_frontend *fe, u32 *frequency)
{ {
struct dvb_frontend_ops *frontend_ops = &fe->ops; struct dvb_frontend_ops *frontend_ops = &fe->ops;
struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops;
struct tuner_state t_state;
int err = 0; int err = 0;
if (tuner_ops->get_state) { if (tuner_ops->get_frequency) {
err = tuner_ops->get_state(fe, DVBFE_TUNER_FREQUENCY, &t_state); err = tuner_ops->get_frequency(fe, frequency);
if (err < 0) { if (err < 0) {
printk("%s: Invalid parameter\n", __func__); printk("%s: Invalid parameter\n", __func__);
return err; return err;
} }
*frequency = t_state.frequency;
} }
return 0; return 0;
} }
@ -41,13 +42,16 @@ static int stb6100_set_frequency(struct dvb_frontend *fe, u32 frequency)
{ {
struct dvb_frontend_ops *frontend_ops = &fe->ops; struct dvb_frontend_ops *frontend_ops = &fe->ops;
struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops;
struct tuner_state t_state; struct dtv_frontend_properties *c = &fe->dtv_property_cache;
u32 bw = c->bandwidth_hz;
int err = 0; int err = 0;
t_state.frequency = frequency; c->frequency = frequency;
c->bandwidth_hz = 0; /* Don't adjust the bandwidth */
if (tuner_ops->set_state) { if (tuner_ops->set_params) {
err = tuner_ops->set_state(fe, DVBFE_TUNER_FREQUENCY, &t_state); err = tuner_ops->set_params(fe);
c->bandwidth_hz = bw;
if (err < 0) { if (err < 0) {
printk("%s: Invalid parameter\n", __func__); printk("%s: Invalid parameter\n", __func__);
return err; return err;
@ -60,16 +64,14 @@ static int stb6100_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth)
{ {
struct dvb_frontend_ops *frontend_ops = &fe->ops; struct dvb_frontend_ops *frontend_ops = &fe->ops;
struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops;
struct tuner_state t_state;
int err = 0; int err = 0;
if (tuner_ops->get_state) { if (tuner_ops->get_bandwidth) {
err = tuner_ops->get_state(fe, DVBFE_TUNER_BANDWIDTH, &t_state); err = tuner_ops->get_bandwidth(fe, bandwidth);
if (err < 0) { if (err < 0) {
printk("%s: Invalid parameter\n", __func__); printk("%s: Invalid parameter\n", __func__);
return err; return err;
} }
*bandwidth = t_state.bandwidth;
} }
return 0; return 0;
} }
@ -78,13 +80,16 @@ static int stb6100_set_bandwidth(struct dvb_frontend *fe, u32 bandwidth)
{ {
struct dvb_frontend_ops *frontend_ops = &fe->ops; struct dvb_frontend_ops *frontend_ops = &fe->ops;
struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops;
struct tuner_state t_state; struct dtv_frontend_properties *c = &fe->dtv_property_cache;
u32 freq = c->frequency;
int err = 0; int err = 0;
t_state.bandwidth = bandwidth; c->bandwidth_hz = bandwidth;
c->frequency = 0; /* Don't adjust the frequency */
if (tuner_ops->set_state) { if (tuner_ops->set_params) {
err = tuner_ops->set_state(fe, DVBFE_TUNER_BANDWIDTH, &t_state); err = tuner_ops->set_params(fe);
c->frequency = freq;
if (err < 0) { if (err < 0) {
printk("%s: Invalid parameter\n", __func__); printk("%s: Invalid parameter\n", __func__);
return err; return err;

Просмотреть файл

@ -17,27 +17,27 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <linux/dvb/frontend.h>
#include "dvb_frontend.h"
static int stb6100_get_freq(struct dvb_frontend *fe, u32 *frequency) static int stb6100_get_freq(struct dvb_frontend *fe, u32 *frequency)
{ {
struct dvb_frontend_ops *frontend_ops = &fe->ops; struct dvb_frontend_ops *frontend_ops = &fe->ops;
struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops;
struct tuner_state state;
int err = 0; int err = 0;
if (tuner_ops->get_state) { if (tuner_ops->get_frequency) {
if (frontend_ops->i2c_gate_ctrl) if (frontend_ops->i2c_gate_ctrl)
frontend_ops->i2c_gate_ctrl(fe, 1); frontend_ops->i2c_gate_ctrl(fe, 1);
err = tuner_ops->get_state(fe, DVBFE_TUNER_FREQUENCY, &state); err = tuner_ops->get_frequency(fe, frequency);
if (err < 0) { if (err < 0) {
printk(KERN_ERR "%s: Invalid parameter\n", __func__); printk("%s: Invalid parameter\n", __func__);
return err; return err;
} }
if (frontend_ops->i2c_gate_ctrl) if (frontend_ops->i2c_gate_ctrl)
frontend_ops->i2c_gate_ctrl(fe, 0); frontend_ops->i2c_gate_ctrl(fe, 0);
*frequency = state.frequency;
} }
return 0; return 0;
@ -47,18 +47,21 @@ static int stb6100_set_freq(struct dvb_frontend *fe, u32 frequency)
{ {
struct dvb_frontend_ops *frontend_ops = &fe->ops; struct dvb_frontend_ops *frontend_ops = &fe->ops;
struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops;
struct tuner_state state; struct dtv_frontend_properties *c = &fe->dtv_property_cache;
u32 bw = c->bandwidth_hz;
int err = 0; int err = 0;
state.frequency = frequency; c->frequency = frequency;
c->bandwidth_hz = 0; /* Don't adjust the bandwidth */
if (tuner_ops->set_state) { if (tuner_ops->set_params) {
if (frontend_ops->i2c_gate_ctrl) if (frontend_ops->i2c_gate_ctrl)
frontend_ops->i2c_gate_ctrl(fe, 1); frontend_ops->i2c_gate_ctrl(fe, 1);
err = tuner_ops->set_state(fe, DVBFE_TUNER_FREQUENCY, &state); err = tuner_ops->set_params(fe);
c->bandwidth_hz = bw;
if (err < 0) { if (err < 0) {
printk(KERN_ERR "%s: Invalid parameter\n", __func__); printk("%s: Invalid parameter\n", __func__);
return err; return err;
} }
@ -74,14 +77,13 @@ static int stb6100_get_bandw(struct dvb_frontend *fe, u32 *bandwidth)
{ {
struct dvb_frontend_ops *frontend_ops = &fe->ops; struct dvb_frontend_ops *frontend_ops = &fe->ops;
struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops;
struct tuner_state state;
int err = 0; int err = 0;
if (tuner_ops->get_state) { if (tuner_ops->get_bandwidth) {
if (frontend_ops->i2c_gate_ctrl) if (frontend_ops->i2c_gate_ctrl)
frontend_ops->i2c_gate_ctrl(fe, 1); frontend_ops->i2c_gate_ctrl(fe, 1);
err = tuner_ops->get_state(fe, DVBFE_TUNER_BANDWIDTH, &state); err = tuner_ops->get_bandwidth(fe, bandwidth);
if (err < 0) { if (err < 0) {
printk(KERN_ERR "%s: Invalid parameter\n", __func__); printk(KERN_ERR "%s: Invalid parameter\n", __func__);
return err; return err;
@ -89,8 +91,6 @@ static int stb6100_get_bandw(struct dvb_frontend *fe, u32 *bandwidth)
if (frontend_ops->i2c_gate_ctrl) if (frontend_ops->i2c_gate_ctrl)
frontend_ops->i2c_gate_ctrl(fe, 0); frontend_ops->i2c_gate_ctrl(fe, 0);
*bandwidth = state.bandwidth;
} }
return 0; return 0;
@ -100,16 +100,19 @@ static int stb6100_set_bandw(struct dvb_frontend *fe, u32 bandwidth)
{ {
struct dvb_frontend_ops *frontend_ops = &fe->ops; struct dvb_frontend_ops *frontend_ops = &fe->ops;
struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops;
struct tuner_state state; struct dtv_frontend_properties *c = &fe->dtv_property_cache;
u32 freq = c->frequency;
int err = 0; int err = 0;
state.bandwidth = bandwidth; c->bandwidth_hz = bandwidth;
c->frequency = 0; /* Don't adjust the frequency */
if (tuner_ops->set_state) { if (tuner_ops->set_params) {
if (frontend_ops->i2c_gate_ctrl) if (frontend_ops->i2c_gate_ctrl)
frontend_ops->i2c_gate_ctrl(fe, 1); frontend_ops->i2c_gate_ctrl(fe, 1);
err = tuner_ops->set_state(fe, DVBFE_TUNER_BANDWIDTH, &state); err = tuner_ops->set_params(fe);
c->frequency = freq;
if (err < 0) { if (err < 0) {
printk(KERN_ERR "%s: Invalid parameter\n", __func__); printk(KERN_ERR "%s: Invalid parameter\n", __func__);
return err; return err;

Просмотреть файл

@ -66,26 +66,13 @@ exit:
return err; return err;
} }
static int tda665x_get_state(struct dvb_frontend *fe, static int tda665x_get_frequency(struct dvb_frontend *fe, u32 *frequency)
enum tuner_param param,
struct tuner_state *tstate)
{ {
struct tda665x_state *state = fe->tuner_priv; struct tda665x_state *state = fe->tuner_priv;
int err = 0;
switch (param) { *frequency = state->frequency;
case DVBFE_TUNER_FREQUENCY:
tstate->frequency = state->frequency;
break;
case DVBFE_TUNER_BANDWIDTH:
break;
default:
printk(KERN_ERR "%s: Unknown parameter (param=%d)\n", __func__, param);
err = -EINVAL;
break;
}
return err; return 0;
} }
static int tda665x_get_status(struct dvb_frontend *fe, u32 *status) static int tda665x_get_status(struct dvb_frontend *fe, u32 *status)
@ -111,9 +98,8 @@ exit:
return err; return err;
} }
static int tda665x_set_state(struct dvb_frontend *fe, static int tda665x_set_frequency(struct dvb_frontend *fe,
enum tuner_param param, u32 new_frequency)
struct tuner_state *tstate)
{ {
struct tda665x_state *state = fe->tuner_priv; struct tda665x_state *state = fe->tuner_priv;
const struct tda665x_config *config = state->config; const struct tda665x_config *config = state->config;
@ -121,88 +107,96 @@ static int tda665x_set_state(struct dvb_frontend *fe,
u8 buf[4]; u8 buf[4];
int err = 0; int err = 0;
if (param & DVBFE_TUNER_FREQUENCY) { if ((new_frequency < config->frequency_max)
|| (new_frequency > config->frequency_min)) {
frequency = tstate->frequency; printk(KERN_ERR "%s: Frequency beyond limits, frequency=%d\n",
if ((frequency < config->frequency_max) || (frequency > config->frequency_min)) { __func__, new_frequency);
printk(KERN_ERR "%s: Frequency beyond limits, frequency=%d\n", __func__, frequency);
return -EINVAL;
}
frequency += config->frequency_offst;
frequency *= config->ref_multiplier;
frequency += config->ref_divider >> 1;
frequency /= config->ref_divider;
buf[0] = (u8) ((frequency & 0x7f00) >> 8);
buf[1] = (u8) (frequency & 0x00ff) >> 0;
buf[2] = 0x80 | 0x40 | 0x02;
buf[3] = 0x00;
/* restore frequency */
frequency = tstate->frequency;
if (frequency < 153000000) {
/* VHF-L */
buf[3] |= 0x01; /* fc, Low Band, 47 - 153 MHz */
if (frequency < 68000000)
buf[3] |= 0x40; /* 83uA */
if (frequency < 1040000000)
buf[3] |= 0x60; /* 122uA */
if (frequency < 1250000000)
buf[3] |= 0x80; /* 163uA */
else
buf[3] |= 0xa0; /* 254uA */
} else if (frequency < 438000000) {
/* VHF-H */
buf[3] |= 0x02; /* fc, Mid Band, 153 - 438 MHz */
if (frequency < 230000000)
buf[3] |= 0x40;
if (frequency < 300000000)
buf[3] |= 0x60;
else
buf[3] |= 0x80;
} else {
/* UHF */
buf[3] |= 0x04; /* fc, High Band, 438 - 862 MHz */
if (frequency < 470000000)
buf[3] |= 0x60;
if (frequency < 526000000)
buf[3] |= 0x80;
else
buf[3] |= 0xa0;
}
/* Set params */
err = tda665x_write(state, buf, 5);
if (err < 0)
goto exit;
/* sleep for some time */
printk(KERN_DEBUG "%s: Waiting to Phase LOCK\n", __func__);
msleep(20);
/* check status */
err = tda665x_get_status(fe, &status);
if (err < 0)
goto exit;
if (status == 1) {
printk(KERN_DEBUG "%s: Tuner Phase locked: status=%d\n", __func__, status);
state->frequency = frequency; /* cache successful state */
} else {
printk(KERN_ERR "%s: No Phase lock: status=%d\n", __func__, status);
}
} else {
printk(KERN_ERR "%s: Unknown parameter (param=%d)\n", __func__, param);
return -EINVAL; return -EINVAL;
} }
frequency = new_frequency;
frequency += config->frequency_offst;
frequency *= config->ref_multiplier;
frequency += config->ref_divider >> 1;
frequency /= config->ref_divider;
buf[0] = (u8) ((frequency & 0x7f00) >> 8);
buf[1] = (u8) (frequency & 0x00ff) >> 0;
buf[2] = 0x80 | 0x40 | 0x02;
buf[3] = 0x00;
/* restore frequency */
frequency = new_frequency;
if (frequency < 153000000) {
/* VHF-L */
buf[3] |= 0x01; /* fc, Low Band, 47 - 153 MHz */
if (frequency < 68000000)
buf[3] |= 0x40; /* 83uA */
if (frequency < 1040000000)
buf[3] |= 0x60; /* 122uA */
if (frequency < 1250000000)
buf[3] |= 0x80; /* 163uA */
else
buf[3] |= 0xa0; /* 254uA */
} else if (frequency < 438000000) {
/* VHF-H */
buf[3] |= 0x02; /* fc, Mid Band, 153 - 438 MHz */
if (frequency < 230000000)
buf[3] |= 0x40;
if (frequency < 300000000)
buf[3] |= 0x60;
else
buf[3] |= 0x80;
} else {
/* UHF */
buf[3] |= 0x04; /* fc, High Band, 438 - 862 MHz */
if (frequency < 470000000)
buf[3] |= 0x60;
if (frequency < 526000000)
buf[3] |= 0x80;
else
buf[3] |= 0xa0;
}
/* Set params */
err = tda665x_write(state, buf, 5);
if (err < 0)
goto exit;
/* sleep for some time */
printk(KERN_DEBUG "%s: Waiting to Phase LOCK\n", __func__);
msleep(20);
/* check status */
err = tda665x_get_status(fe, &status);
if (err < 0)
goto exit;
if (status == 1) {
printk(KERN_DEBUG "%s: Tuner Phase locked: status=%d\n",
__func__, status);
state->frequency = frequency; /* cache successful state */
} else {
printk(KERN_ERR "%s: No Phase lock: status=%d\n",
__func__, status);
}
return 0; return 0;
exit: exit:
printk(KERN_ERR "%s: I/O Error\n", __func__); printk(KERN_ERR "%s: I/O Error\n", __func__);
return err; return err;
} }
static int tda665x_set_params(struct dvb_frontend *fe)
{
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
tda665x_set_frequency(fe, c->frequency);
return 0;
}
static int tda665x_release(struct dvb_frontend *fe) static int tda665x_release(struct dvb_frontend *fe)
{ {
struct tda665x_state *state = fe->tuner_priv; struct tda665x_state *state = fe->tuner_priv;
@ -213,10 +207,9 @@ static int tda665x_release(struct dvb_frontend *fe)
} }
static struct dvb_tuner_ops tda665x_ops = { static struct dvb_tuner_ops tda665x_ops = {
.set_state = tda665x_set_state,
.get_state = tda665x_get_state,
.get_status = tda665x_get_status, .get_status = tda665x_get_status,
.set_params = tda665x_set_params,
.get_frequency = tda665x_get_frequency,
.release = tda665x_release .release = tda665x_release
}; };

Просмотреть файл

@ -83,88 +83,71 @@ static int tda8261_get_status(struct dvb_frontend *fe, u32 *status)
static const u32 div_tab[] = { 2000, 1000, 500, 250, 125 }; /* kHz */ static const u32 div_tab[] = { 2000, 1000, 500, 250, 125 }; /* kHz */
static const u8 ref_div[] = { 0x00, 0x01, 0x02, 0x05, 0x07 }; static const u8 ref_div[] = { 0x00, 0x01, 0x02, 0x05, 0x07 };
static int tda8261_get_state(struct dvb_frontend *fe, static int tda8261_get_frequency(struct dvb_frontend *fe, u32 *frequency)
enum tuner_param param,
struct tuner_state *tstate)
{ {
struct tda8261_state *state = fe->tuner_priv; struct tda8261_state *state = fe->tuner_priv;
int err = 0;
switch (param) { *frequency = state->frequency;
case DVBFE_TUNER_FREQUENCY:
tstate->frequency = state->frequency;
break;
case DVBFE_TUNER_BANDWIDTH:
tstate->bandwidth = 40000000; /* FIXME! need to calculate Bandwidth */
break;
default:
pr_err("%s: Unknown parameter (param=%d)\n", __func__, param);
err = -EINVAL;
break;
}
return err; return 0;
} }
static int tda8261_set_state(struct dvb_frontend *fe, static int tda8261_set_params(struct dvb_frontend *fe)
enum tuner_param param,
struct tuner_state *tstate)
{ {
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
struct tda8261_state *state = fe->tuner_priv; struct tda8261_state *state = fe->tuner_priv;
const struct tda8261_config *config = state->config; const struct tda8261_config *config = state->config;
u32 frequency, N, status = 0; u32 frequency, N, status = 0;
u8 buf[4]; u8 buf[4];
int err = 0; int err = 0;
if (param & DVBFE_TUNER_FREQUENCY) { /*
/** * N = Max VCO Frequency / Channel Spacing
* N = Max VCO Frequency / Channel Spacing * Max VCO Frequency = VCO frequency + (channel spacing - 1)
* Max VCO Frequency = VCO frequency + (channel spacing - 1) * (to account for half channel spacing on either side)
* (to account for half channel spacing on either side) */
*/ frequency = c->frequency;
frequency = tstate->frequency; if ((frequency < 950000) || (frequency > 2150000)) {
if ((frequency < 950000) || (frequency > 2150000)) { pr_warn("%s: Frequency beyond limits, frequency=%d\n",
pr_warn("%s: Frequency beyond limits, frequency=%d\n", __func__, frequency); __func__, frequency);
return -EINVAL;
}
N = (frequency + (div_tab[config->step_size] - 1)) / div_tab[config->step_size];
pr_debug("%s: Step size=%d, Divider=%d, PG=0x%02x (%d)\n",
__func__, config->step_size, div_tab[config->step_size], N, N);
buf[0] = (N >> 8) & 0xff;
buf[1] = N & 0xff;
buf[2] = (0x01 << 7) | ((ref_div[config->step_size] & 0x07) << 1);
if (frequency < 1450000)
buf[3] = 0x00;
else if (frequency < 2000000)
buf[3] = 0x40;
else if (frequency < 2150000)
buf[3] = 0x80;
/* Set params */
if ((err = tda8261_write(state, buf)) < 0) {
pr_err("%s: I/O Error\n", __func__);
return err;
}
/* sleep for some time */
pr_debug("%s: Waiting to Phase LOCK\n", __func__);
msleep(20);
/* check status */
if ((err = tda8261_get_status(fe, &status)) < 0) {
pr_err("%s: I/O Error\n", __func__);
return err;
}
if (status == 1) {
pr_debug("%s: Tuner Phase locked: status=%d\n", __func__, status);
state->frequency = frequency; /* cache successful state */
} else {
pr_debug("%s: No Phase lock: status=%d\n", __func__, status);
}
} else {
pr_err("%s: Unknown parameter (param=%d)\n", __func__, param);
return -EINVAL; return -EINVAL;
} }
N = (frequency + (div_tab[config->step_size] - 1)) / div_tab[config->step_size];
pr_debug("%s: Step size=%d, Divider=%d, PG=0x%02x (%d)\n",
__func__, config->step_size, div_tab[config->step_size], N, N);
buf[0] = (N >> 8) & 0xff;
buf[1] = N & 0xff;
buf[2] = (0x01 << 7) | ((ref_div[config->step_size] & 0x07) << 1);
if (frequency < 1450000)
buf[3] = 0x00;
else if (frequency < 2000000)
buf[3] = 0x40;
else if (frequency < 2150000)
buf[3] = 0x80;
/* Set params */
err = tda8261_write(state, buf);
if (err < 0) {
pr_err("%s: I/O Error\n", __func__);
return err;
}
/* sleep for some time */
pr_debug("%s: Waiting to Phase LOCK\n", __func__);
msleep(20);
/* check status */
if ((err = tda8261_get_status(fe, &status)) < 0) {
pr_err("%s: I/O Error\n", __func__);
return err;
}
if (status == 1) {
pr_debug("%s: Tuner Phase locked: status=%d\n", __func__,
status);
state->frequency = frequency; /* cache successful state */
} else {
pr_debug("%s: No Phase lock: status=%d\n", __func__, status);
}
return 0; return 0;
} }
@ -182,14 +165,13 @@ static struct dvb_tuner_ops tda8261_ops = {
.info = { .info = {
.name = "TDA8261", .name = "TDA8261",
// .tuner_name = NULL,
.frequency_min = 950000, .frequency_min = 950000,
.frequency_max = 2150000, .frequency_max = 2150000,
.frequency_step = 0 .frequency_step = 0
}, },
.set_state = tda8261_set_state, .set_params = tda8261_set_params,
.get_state = tda8261_get_state, .get_frequency = tda8261_get_frequency,
.get_status = tda8261_get_status, .get_status = tda8261_get_status,
.release = tda8261_release .release = tda8261_release
}; };
@ -210,10 +192,7 @@ struct dvb_frontend *tda8261_attach(struct dvb_frontend *fe,
fe->ops.tuner_ops = tda8261_ops; fe->ops.tuner_ops = tda8261_ops;
fe->ops.tuner_ops.info.frequency_step = div_tab[config->step_size]; fe->ops.tuner_ops.info.frequency_step = div_tab[config->step_size];
// fe->ops.tuner_ops.tuner_name = &config->buf;
// printk("%s: Attaching %s TDA8261 8PSK/QPSK tuner\n",
// __func__, fe->ops.tuner_ops.tuner_name);
pr_info("%s: Attaching TDA8261 8PSK/QPSK tuner\n", __func__); pr_info("%s: Attaching TDA8261 8PSK/QPSK tuner\n", __func__);
return fe; return fe;

Просмотреть файл

@ -21,17 +21,15 @@ static int tda8261_get_frequency(struct dvb_frontend *fe, u32 *frequency)
{ {
struct dvb_frontend_ops *frontend_ops = &fe->ops; struct dvb_frontend_ops *frontend_ops = &fe->ops;
struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops;
struct tuner_state t_state;
int err = 0; int err = 0;
if (tuner_ops->get_state) { if (tuner_ops->get_frequency) {
err = tuner_ops->get_state(fe, DVBFE_TUNER_FREQUENCY, &t_state); err = tuner_ops->get_frequency(fe, frequency);
if (err < 0) { if (err < 0) {
printk("%s: Invalid parameter\n", __func__); pr_err("%s: Invalid parameter\n", __func__);
return err; return err;
} }
*frequency = t_state.frequency; pr_debug("%s: Frequency=%d\n", __func__, *frequency);
printk("%s: Frequency=%d\n", __func__, t_state.frequency);
} }
return 0; return 0;
} }
@ -40,37 +38,24 @@ static int tda8261_set_frequency(struct dvb_frontend *fe, u32 frequency)
{ {
struct dvb_frontend_ops *frontend_ops = &fe->ops; struct dvb_frontend_ops *frontend_ops = &fe->ops;
struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops;
struct tuner_state t_state; struct dtv_frontend_properties *c = &fe->dtv_property_cache;
int err = 0; int err = 0;
t_state.frequency = frequency; if (tuner_ops->set_params) {
err = tuner_ops->set_params(fe);
if (tuner_ops->set_state) {
err = tuner_ops->set_state(fe, DVBFE_TUNER_FREQUENCY, &t_state);
if (err < 0) { if (err < 0) {
printk("%s: Invalid parameter\n", __func__); pr_err("%s: Invalid parameter\n", __func__);
return err; return err;
} }
} }
printk("%s: Frequency=%d\n", __func__, t_state.frequency); pr_debug("%s: Frequency=%d\n", __func__, c->frequency);
return 0; return 0;
} }
static int tda8261_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth) static int tda8261_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth)
{ {
struct dvb_frontend_ops *frontend_ops = &fe->ops; /* FIXME! need to calculate Bandwidth */
struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; *bandwidth = 40000000;
struct tuner_state t_state;
int err = 0;
if (tuner_ops->get_state) {
err = tuner_ops->get_state(fe, DVBFE_TUNER_BANDWIDTH, &t_state);
if (err < 0) {
printk("%s: Invalid parameter\n", __func__);
return err;
}
*bandwidth = t_state.bandwidth;
printk("%s: Bandwidth=%d\n", __func__, t_state.bandwidth);
}
return 0; return 0;
} }

Просмотреть файл

@ -20,7 +20,7 @@
* Or, point your browser to http://www.gnu.org/copyleft/gpl.html * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
* *
* *
* The project's page is at http://www.linuxtv.org * The project's page is at https://linuxtv.org
*/ */
#ifndef TDHD1_H #ifndef TDHD1_H

Просмотреть файл

@ -83,6 +83,16 @@ config VIDEO_MSP3400
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called msp3400. module will be called msp3400.
config VIDEO_CS3308
tristate "Cirrus Logic CS3308 audio ADC"
depends on VIDEO_V4L2 && I2C
---help---
Support for the Cirrus Logic CS3308 High Performance 8-Channel
Analog Volume Control
To compile this driver as a module, choose M here: the
module will be called cs3308.
config VIDEO_CS5345 config VIDEO_CS5345
tristate "Cirrus Logic CS5345 audio ADC" tristate "Cirrus Logic CS5345 audio ADC"
depends on VIDEO_V4L2 && I2C depends on VIDEO_V4L2 && I2C

Просмотреть файл

@ -43,6 +43,7 @@ obj-$(CONFIG_VIDEO_TVP7002) += tvp7002.o
obj-$(CONFIG_VIDEO_TW2804) += tw2804.o obj-$(CONFIG_VIDEO_TW2804) += tw2804.o
obj-$(CONFIG_VIDEO_TW9903) += tw9903.o obj-$(CONFIG_VIDEO_TW9903) += tw9903.o
obj-$(CONFIG_VIDEO_TW9906) += tw9906.o obj-$(CONFIG_VIDEO_TW9906) += tw9906.o
obj-$(CONFIG_VIDEO_CS3308) += cs3308.o
obj-$(CONFIG_VIDEO_CS5345) += cs5345.o obj-$(CONFIG_VIDEO_CS5345) += cs5345.o
obj-$(CONFIG_VIDEO_CS53L32A) += cs53l32a.o obj-$(CONFIG_VIDEO_CS53L32A) += cs53l32a.o
obj-$(CONFIG_VIDEO_M52790) += m52790.o obj-$(CONFIG_VIDEO_M52790) += m52790.o

Просмотреть файл

@ -35,7 +35,7 @@
#include <media/v4l2-common.h> #include <media/v4l2-common.h>
#include <media/v4l2-dv-timings.h> #include <media/v4l2-dv-timings.h>
#include <media/v4l2-ctrls.h> #include <media/v4l2-ctrls.h>
#include <media/ad9389b.h> #include <media/i2c/ad9389b.h>
static int debug; static int debug;
module_param(debug, int, 0644); module_param(debug, int, 0644);

Просмотреть файл

@ -37,7 +37,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/gpio/consumer.h> #include <linux/gpio/consumer.h>
#include <media/adp1653.h> #include <media/i2c/adp1653.h>
#include <media/v4l2-device.h> #include <media/v4l2-device.h>
#define TIMEOUT_MAX 820000 #define TIMEOUT_MAX 820000

Просмотреть файл

@ -1112,7 +1112,7 @@ static int init_device(struct adv7180_state *state)
mutex_lock(&state->mutex); mutex_lock(&state->mutex);
adv7180_write(state, ADV7180_REG_PWR_MAN, ADV7180_PWR_MAN_RES); adv7180_write(state, ADV7180_REG_PWR_MAN, ADV7180_PWR_MAN_RES);
usleep_range(2000, 10000); usleep_range(5000, 10000);
ret = state->chip_info->init(state); ret = state->chip_info->init(state);
if (ret) if (ret)

Просмотреть файл

@ -27,7 +27,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <media/adv7183.h> #include <media/i2c/adv7183.h>
#include <media/v4l2-ctrls.h> #include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h> #include <media/v4l2-device.h>

Просмотреть файл

@ -28,7 +28,7 @@
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_graph.h> #include <linux/of_graph.h>
#include <media/adv7343.h> #include <media/i2c/adv7343.h>
#include <media/v4l2-async.h> #include <media/v4l2-async.h>
#include <media/v4l2-device.h> #include <media/v4l2-device.h>
#include <media/v4l2-ctrls.h> #include <media/v4l2-ctrls.h>

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше