Mike Isely [Mon, 26 Nov 2007 05:07:26 +0000 (02:07 -0300)]
V4L/DVB (6698): pvrusb2: Implement signal routing schemes
The exact routing of video and audio signals within a device is a
device-specific attribute. Hauppauge devices do it one way; other
types of device may route things differently. Unfortunately it is
rather impractical to define chip-specific routing at the device
attribute level, so instead what happens here is that "schemes" are
defined. Each chip level interface implements its part of a given
scheme and the scheme as a whole is made into a device specific
attribute controlled via a table entry in pvrusb2-devattr.c. The only
scheme defined here is for Hauppauge devices, but clearly this opens
the door for other possibilities to follow.
Signed-off-by: Mike Isely <isely@pobox.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Mike Isely [Mon, 26 Nov 2007 05:04:11 +0000 (02:04 -0300)]
V4L/DVB (6697): pvrusb2: Existence of Hauppauge ROM is a device-specific attribute
Arrange so that the pvrusb2 driver can optionally work without a
Hauppauge ROM being present - which is fairly important for devices
that happen to not come from Hauppauge. The expected existence of a
Hauppauge ROM is now a device attribute. The tuner type is now also a
device attribute, which is consulted if there is no ROM.
Signed-off-by: Mike Isely <isely@pobox.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Mike Isely [Mon, 26 Nov 2007 04:58:20 +0000 (01:58 -0300)]
V4L/DVB (6695): pvrusb2: Implement functions to pass descriptive hardware info
Implement additional pvrusb2 device info table entries for a device
identifier and a device description. Export this information via the
driver's internal API. Make this information available via the sysfs
driver interface. Also propagate this information into the v4l2
capability structure. An app can now retrieve and report a
descriptive string about the particular type of hardware device it is
operating.
Signed-off-by: Mike Isely <isely@pobox.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Mike Isely [Mon, 26 Nov 2007 04:55:07 +0000 (01:55 -0300)]
V4L/DVB (6694): pvrusb2: Remove obsolete global hardware type enumeration
Device-specific driver behavior is now defined by generic device
characteristics rather than by specific device model information.
With this change, the hardware type field can go away, thus this
change.
Signed-off-by: Mike Isely <isely@pobox.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Mike Isely [Mon, 26 Nov 2007 04:53:12 +0000 (01:53 -0300)]
V4L/DVB (6692): pvrusb2: Centralize device specific attributes into a single place
The pvrusb2 driver currently supports two variants of the Hauppauge
PVR USB2. However there are other hardware types potentially
supportable, but the driver at the moment is not structured to make it
easy to describe these minor variations. This changeset is the first
set of changes to make such additional device support possible.
Device attributes are held in several tables all contained within
pvrusb2-devattr.c; all other device-specific driver behavior now
derives from these tables.
Signed-off-by: Mike Isely <isely@pobox.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Mike Isely [Mon, 26 Nov 2007 04:48:52 +0000 (01:48 -0300)]
V4L/DVB (6691): pvrusb2: Rework pipeline state control
This is a new implementation for video pipeline control within the
pvrusb2 driver. Actual start/stop of the pipeline is moved to the
driver's kernel thread. Pipeline stages are controlled autonomously
based on surrounding pipeline or application control state. Kernel
thread management is also cleaned up and moved into the internal
control structure of the driver, solving a set up / tear down race
along the way. Better failure recovery is implemented with this new
control strategy. Also with this change comes better control of the
cx23416 encoder, building on additional information learned about the
peculiarities of controlling this part (this information was the
original trigger for this rework). With this change, overall encoder
stability should be considerably improved. Yes, this is a large
change for this driver, but due to the nature of the feature being
worked on, the changes are fairly pervasive and would be difficult to
break into smaller pieces with any semblence of step-wise stability.
Signed-off-by: Mike Isely <isely@pobox.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Hermann Pitton [Thu, 29 Nov 2007 00:54:35 +0000 (21:54 -0300)]
V4L/DVB (6687): saa7134: add mute support for radio/analog-in on MD9717 and MD7134
Currently the saa7134 chips only have mute support for the TV input.
Cards with mute from external audio muxes are already fine on the
other inputs and some recent tuners mute at least the radio on exit.
But these mostly hybrid tuners are not fully backward compatible, since
they must power down and mute regardless.
For some included above, the MD7134 knows several, to switch on mute/automute
to the TV input is functional and backward compatible for the applications,
except that the tuners with tda9887 always mute on exit.
Signed-off-by: Hermann Pitton <hermann-pitton@arcor.de> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
V4L/DVB (6685): ir-keymaps.c: extra keys on winfast Y04G0033 remote
This change adds support for 4 extra keys on the remote currently being
shipped by leadtek with their "WinFast TV2000 XP/Expert" and
"WinFast PVR2000" cards. The remote P/N seems to be Y04G0033 and
you can see a picture of it here: http://lespinasse.org/y04g0033.jpg
The extra keys are at the bottom and are labeled MCE +VOL, -VOL, +CH, -CH.
I chose to map them to the F21-F24 keycodes, following the precedent of
ir_codes_gotview7135[], so as to differentiate these 'MCE' keys from the
other +VOL, -VOL, +CH, -CH 'arrow' keys higher up on the remote.
Signed-off-by: Michel Lespinasse <walken@zoy.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
s-code tables are related to IF frequency used for video demodulation.
The s-codes for analog are automatically loaded, according with video standard.
However, for digital, they will depend on the IF of the demoduler chip. IF of
the demoduler.
Before this patch, only a few IF's where possible to use. This patch allows
selecting any IF defined at firmware file.
V4L/DVB (6671): Avoids checking digital/analog at check_firmware
Since check_firmware is called via analog or digital set freq routines, move
type selection to those routines. This avoids having several if's at the code,
and simplifies the source code.
A sideback effect is that implementing radio and other dvb types will become
simpler.
Maxim Levitsky [Sun, 4 Nov 2007 21:21:25 +0000 (18:21 -0300)]
V4L/DVB (6669): Add few missing bits of code to saa7134_resume
First the saa7134_initdev waits between saa7134_hwinit1
and saa7134_hwinit2 , thus it is probably wise to do the same in saa7134_resume
some hardware probably needs this.
Call saa7134_irq_video_signalchange in .resume like in saa7134_resume to make
saa7134_resume mirror perfectly the saa7134_initdev although
this call isn't strictly necessary in the saa7134_initdev,
but it won't harm anyway.
Maxim Levitsky [Sun, 4 Nov 2007 22:34:23 +0000 (19:34 -0300)]
V4L/DVB (6668): Fix theoretical races between IRQ handler and .suspend/resume
*dev->insuspend = 1 should be set before synchronize_irq
*ACK interrupts after synchronize_irq, to make sure there aren't
pending interrupts.
*Add barrier before we restart interrupts so the handler will 100%
see the dev->insuspend
V4L/DVB (6661): Remove firmware reload hack for analog
On some cases, xc2028/xc3028 wents into "turn off" mode. It seems that this
happens when very weak signals are tuned. To solve this, specific standard
reaload were done previously. Christopher patches changed this behavior to a
complete firmware reload.
This patch removes the hack. A much cleaner solution for this trouble is just
to sent a xc2028/3028 software reset.
V4L/DVB (6660): Allow fully configuring xc3028 during xc2028_attach
xc3028 can be used on some DTV only designs (for example, DVB-S boards). Before
this patch, a DTV only board would need to call set_tuner_config callback.
This patch allows to optionally pass a xc3028_ctrl parameter, via xc3028_config
struct, fully initializing the driver for DTV.
Xc2028.3028 has two type of firmwares: audio-standard specific ones and
baseband MTS firmwares. MTS firmwares provide stereo decoding for 6 MHz
BTSC/EIAJ and for monoaural audio decoding on 8 MHz firmwares.
It seems that the option to use MTS or a standard-specific audio decoding
depends on the way xc2028/3028 is connected.
Instead of wasting 32 (or 64 bits) to signalize if the driver needs to use MTS
firmware, this patch converts it to a bitfield that can be shared with other
proprieties of xc2028/3028.
Chris Pascoe [Tue, 20 Nov 2007 06:34:11 +0000 (03:34 -0300)]
V4L/DVB (6655): Add support for MT352-based DViCO FusionHDTV DVB-T NANO devices
There are at least three variants of the DViCO FusionHDTV DVB-T NANO that
share the same USB device ID. The first (ZL10353 w/ firmware in ROM) is
already supported; the latter two both require firmware and have either
an MT352 or ZL10353 demodulator, and have a different IR receiver from the
first.
This introduces a new identify_state that can tell the difference between a
"warm" device which is running the embedded firmware, and a "cold" device
that needs us to upload firmware to it before it will work. We patch the
uploaded device ID (like we do for other bluebird devices) to make it easy
to identify the particular device variant when it reattaches.
NB: These devices use a different firmware file from previous bluebird
devices. You need a new firmware file to make this work.
Signed-off-by: Chris Pascoe <c.pascoe@itee.uq.edu.au> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Chris Pascoe [Tue, 20 Nov 2007 02:18:36 +0000 (23:18 -0300)]
V4L/DVB (6651): xc2028: mask off type correctly when searching for standard-specific types
When searching for standard-specific analog firmware, only certain
type bits are valid, much like for DTV. Mask them off when finding
the firmware to load.
Signed-off-by: Chris Pascoe <c.pascoe@itee.uq.edu.au> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Chris Pascoe [Tue, 20 Nov 2007 00:57:10 +0000 (21:57 -0300)]
V4L/DVB (6649): Add support for the DViCO FusionHDTV Dual Digital 4
Add support for DViCO's Dual Digital 4 with xc3028 tuner, zl10353 DVB-T
demodulator and a new-style I2C IR remote control receiver.
This would not have been possible without the work of and advice from
Mike Krufky, who originally got the Dual Digital 4 and second-gen DVB-T
NANO devices working with the out-of-tree XC3028 driver.
I converted it to use the in-tree XC3028 driver (after making it suitable
for our use), and added the IR remote control support based on his advice.
NB: a firmware package is required to use this device.
Signed-off-by: Chris Pascoe <c.pascoe@itee.uq.edu.au> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Chris Pascoe [Mon, 19 Nov 2007 14:35:45 +0000 (11:35 -0300)]
V4L/DVB (6647): xc2028: retry firmware load if tuner does not respond
In practice, the tuner occasionally fails to respond correctly after a
firmware load. Retry the firmware load if the firmware/hardware version
we read back from the tuner after programming does not match what we
expect.
Signed-off-by: Chris Pascoe <c.pascoe@itee.uq.edu.au> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Chris Pascoe [Mon, 19 Nov 2007 14:22:03 +0000 (11:22 -0300)]
V4L/DVB (6646): xc2028: rework firmware (re)loading process
Define a list of valid "firmware types" for each combination of BASE,
DTV and SCODEs. By masking the appropriate firmware bits off we can
just use one "type" for the firmware searching and also flag when we
are looking for a BASE, DTV or SCODE type firmware. This makes it
much easier to track if we need to change device modes or flash an
individual firmware part.
Add a structure to remember what firmware properties we have. This
contains the currently loaded/wanted base firmware (type), video std
(id), video std requested (std_req), scode file and number in use.
Incorporate said structure into the tuner private data.
When checking whether the current firmware needs to be reloaded, first
figure out exactly what "type" of firmware we want (base, std and
scode), and then proceed to load the appropriate matching base,
std-specific and scode records iff there are any changes required.
This removes guesswork from the process because we no longer need to
individually code a check for every tuning parameter's interactions.
Signed-off-by: Chris Pascoe <c.pascoe@itee.uq.edu.au> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Chris Pascoe [Mon, 19 Nov 2007 13:04:06 +0000 (10:04 -0300)]
V4L/DVB (6643): xc2028: use best match instead of first partial match during firmware selection
Rather than picking the first video standard firmware that supports any of
the standards that the user has requested, try to select one that supports
as many of them as possible. This improves the likelihood that the firmware
we select will support the user's desired TV standard.
Signed-off-by: Chris Pascoe <c.pascoe@itee.uq.edu.au> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Chris Pascoe [Mon, 19 Nov 2007 12:29:59 +0000 (09:29 -0300)]
V4L/DVB (6642): xc2028: don't duplicate max_len in priv
There is no need to duplicate the max_len field from the ctrl structure
in the private data. If we use it directly from priv->ctrl, we can memcpy
the structure (apart from strings) to reduce maintenance as it grows.
Enforce a minimum max_len length of 8 data bytes (+ 1 address byte) as seems
to be required by the tuner.
Also, use kstrdup instead of open coding the string duplication.
Signed-off-by: Chris Pascoe <c.pascoe@itee.uq.edu.au> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
We were using priv->bandwidth to select the base firmware to load, not the
requested bandwidth value, oops. Also, 7MHz Digital TV needs 8MHz base
firmware loaded.
Signed-off-by: Chris Pascoe <c.pascoe@itee.uq.edu.au> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Chris Pascoe [Mon, 19 Nov 2007 07:31:58 +0000 (04:31 -0300)]
V4L/DVB (6633): xc2028: make register reads atomic
Issuing register reads as a separate address write and data read transactions
means that other I2C activity could occur in between and state could get out
of sync. Issue both the write and read in a single transaction so that the
i2c layer can prevent other users accessing the bus until we are complete.
Signed-off-by: Chris Pascoe <c.pascoe@itee.uq.edu.au> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Chris Pascoe [Mon, 19 Nov 2007 06:01:22 +0000 (03:01 -0300)]
V4L/DVB (6626): CXUSB: support only-read i2c requests
Any i2c read request that was not immediately preceded by a write request was
incorrectly taking the write path. Add the capability to handle individual
read requests.
Signed-off-by: Chris Pascoe <c.pascoe@itee.uq.edu.au> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Chris Pascoe [Mon, 19 Nov 2007 05:42:44 +0000 (02:42 -0300)]
V4L/DVB (6624): CXUSB: return control message transfer result to caller
Callers to cxusb_ctrl_msg currently do not receive any indication that their
transfer failed. Return the true return code from dvb_usb_generic_{rw,write}.
Signed-off-by: Chris Pascoe <c.pascoe@itee.uq.edu.au> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Adrian Bunk [Wed, 21 Nov 2007 22:55:52 +0000 (19:55 -0300)]
V4L/DVB (6623): remove saa7134-oss
The saa7134-oss is deprecated for quite some time, it's the only remaining OSS
user outside of sound/oss/, and considering how few and what kind of
soundcards are left supported by OSS I hardly see any use cases left.
Signed-off-by: Adrian Bunk <bunk@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Aidan Thornton [Tue, 20 Nov 2007 18:25:08 +0000 (15:25 -0300)]
V4L/DVB (6619): Use MTS firmware for the HVR-900
The HVR-900 requires the MTS version of the xc3028 firmware in order
to get any sound. The below patch selects this firmware variant on
HVR-900 cards, as well as splitting the HVR-950 into its own entry
(since I don't know if it uses the MTS variant and it will have to be
split off eventually anyway).
Michael Krufky [Thu, 15 Nov 2007 13:34:33 +0000 (10:34 -0300)]
V4L/DVB (6607): saa7134: add support for reading Hauppauge eeprom
Increased size of dev->eedata from 128 to 256, since the Hauppauge data begins
at byte 128. This has been tested on boards with smaller eeproms, and caused
no problems.
Added comments to distinguish between the various versions of the HVR1110.
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
V4L/DVB (6605): Add a modprobe option to manually select audio standard
While there's no public API to define audio standard, adds a hack option for
select them. This is needed only for NICAM and A2 firmwares, since AM, BTSC and
EAIJ are already properly handled, on firmware version 2.7.
Make the driver less verbose by default. It adds a debug parameter to make the
driver more verbose.
Also, error messages were using KERN_ERR level, instead of KERN_INFO.
A few printk messages were reviewed to make them more clear.
Some tuners, like xc3028, need to print error messages. Instead of declaring
local macros, create a tuner global macro for printing tuner errors.
To preserve CodingStyle on all tuner_macros, a few CodingStyle violations were
fixed at the other macros:
- lines with more than 80 columns
- two statements at the same line
The patch also removes the CodingStyle violation of having emacs declarations
inside de source code (CodingStyle chapter 18).
Xceive 2028/3028 has a concept of scode/dcode.
Scode is a table of 16 values (each with 12 bytes i2c sequence).
Dcode is the entry of Scode table that should be used, given a certain
frequency.
The idea is that, depending on what frequency is selected, and according with a
country-based (or standard-based?) table, the Xceive should be "hacked" to
fine-tune that specific frequency.
By default, Scode=0 is used, for undefined frequencies. Also, Scode=0 seems to
be the most used value.
This patch adds the capability of selecting a scode. However, extra work will
be needed to allow auto-selecting the proper scode, for a given set of
frequencies.
I'm not sure what would be the proper way for implementing the dcode selection.
Jaroslav Barton [Sat, 10 Nov 2007 22:17:45 +0000 (19:17 -0300)]
V4L/DVB (6588): Leadtek Winfast DTV Dongle remote control
Add remote controller support for Leadtek Winfast DTV Dongle based on
DiB7700P, MT2060 and using last drivers (6040:6a79c243aecc), firmware
dvb-usb-dib0700-03-pre1.fw
Signed-off-by: Jaroslav Barton <djaara@djaara.net> Signed-off-by: Patrick Boettcher <pb@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
V4L/DVB (6586): Remove some dead code and make drive fully V4L2 compatible
There were some vestiges of an old V4L1 I2C driver that were called by em28xx.
This patch removes this dead code, and replaces videodev.h to videodev2.h
Uses the newer ioctl handler at videodev. This patch also cleans up some
bad logic at the driver and do CodingStyle and other cleanups at the
resulting driver.
Also, since VIDIOCMBUF were not working, the V4L1 compat code were removed.
The compat code will eventually be re-inserted, if we find a clean way for
implementing compatibility with the old API.