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:
Коммит
c3152592e7
|
@ -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 “function is not available”.</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
|
|
||||||
“bottom half” 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 <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
226
MAINTAINERS
226
MAINTAINERS
|
@ -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>
|
||||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче