Fix all device drivers to use the video_drvdata function instead of
maintaining a local list of minor to private data mappings. Call
video_set_drvdata to register the driver private pointer when not
already done.
Where applicable, the local list of mappings is completely removed when
it becomes unused.
[mchehab.redhat.com: removed tm6000 changes as tm6000 is not ready yet for submission even on staging]
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
With em2800 hardware, AC97 hardware can be detected even when it doesn't
exist. If, after probing for AC97, the driver won't find a companion
chip, simply prevents the load of the audio modules.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
It seems that some patch broke alt modprobe parameter. Fix it to allow
changing alternate interfaces during module load and at runtime.
If changed during runtime, you'll need to stop a and restart stream for
the parameter to be used.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Do not create the VBI device in cases where VBI is not supported on the target
em28xx chip.
This work was sponsored by EyeMagnet Limited.
Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Add support for raw VBI capture for the em28xx bridge, currently only for
NTSC. Support for PAL capture to follow shortly (including the removal of
numerous hard-coded NTSC-specific sizes for capture buffers, etc).
Note that the code currently changes the default current norm from PAL to
NTSC (so that zvbi-ntsc-cc works properly). The default norm really should
be moved into a board-level parameter.
This work was sponsored by EyeMagnet Limited.
Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Add code enabling the VBI registers for variants of the em28xx chip that
support VBI, and make sure the isoc streaming code continues to work for
the video component of the stream (note the video and vbi data arrive
intermixed on the same isoc pipe).
Note that this version just drops the actual VBI data onto the floor as
opposed to processing it. The "#ifdef 0" tags are for the videobuf code that
appears in the next patch in this series.
We created a separate version of the isoc_copy version for parsing the version
of the stream that includes VBI data. In theory, they might be able to be
merged at some point in the future, but the initial goal is to ensure that we
do not cause any regressions with devices that do not have VBI support.
This work was sponsored by EyeMagnet Limited.
Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Register 0x13 seems to be a sort of image control, maybe gamma, white
level or black level. Lower values produce better images, while higher
values increases the contrast and shifts colors to green. 0xff produces
a black image. This register is not Silvercrest-specific, so its code
should be moved to a better place.
If this register is left alone, a random value can be found at the
register, producing weird results.
While here, let's remove register 0x0d, as it had no noticed effect at
the image.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Due to historical reasons, em28xx driver gets two consecutive frames and
fold them into an unique framing, doing interlacing. While this works
fine for TV images, this produces two bad effects with webcams:
1) webcam images are progressive. Merging two consecutive images produce
interlacing artifacts on the image;
2) since the driver needs to get two frames, it reduces the maximum
frame rate by two.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Depending on the video input format, vinmode/vinctl needs adjustments.
For TV, this is not relevant, since the supported decoders output data
at the same format. However, webcam sensors may have different formats,
so, this needs to be adjusted based on the device.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
While trying to fix an mt9v001 webcam, I noticed that HSCALE/VSCALE do
work with em28xx + webcam. The issue is that the scaling setup depends
on the number of visible rows/cols of the input image.
With mt9v011 (Silvercrest), the resolution is 640x480. So, the scaling
is different from a normal TV image (720x480 on NTSC). This were causing
a wrong scaling and a previous patch disabled scaling.
As each sensor have their different resolution setting, the xres/yres
should be adjusted accordingly with the input sensor.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Just renames the flag, to use a clearer name. Later patches will use
this flag to properly set some drivers behaviors for webcams.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Discovered the bug that were limiting the output format to just RGB565.
Now, it is possible to output image at Bayer format (the original one,
as generated by Silvercrest sensor, and two others), and also on YUY.
Adds Bayer formats also to the driver.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This webcam uses a em2710 chipset, that identifies itself as em2820,
plus a mt9v011 sensor, and a DY-301P lens.
It needs a few different initializations than a normal em28xx device.
Thanks to Hans de Goede <hdegoede@redhat.com> and Douglas Landgraf
<dougsland@redhat.com> for providing the acces for the webcam during
this weekend, I could make a patch for it while returning back from
FISL/Fudcom LATAM 2009.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
In cases where the device does not actually provide a USB audio class *or*
vendor audio, do not load the driver that provides vendor audio support (such
as the KWorld 2800d). Otherwise, the /dev/audio1 device file gets created and
users get confused.
Also, reworks the logic a bit so that we don't try to inspect the register
content if the register read failed entirely.
Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
The em28xx actually has a register that tells the driver what the maximum
packet size is (based on a value programmed into the eeprom). Make use of
that register instead of assuming a hardcoded value of 564 (since 564 is not
correct for devices that do QAM such as the KWorld 340u).
Note that for now the em2874 code isn't there, falling back to the 564 value,
however this is not a problem since there are not any em2874 based devices in
the current v4l-dvb tree).
Thanks to Jarod Wilson for detecting the initial problem and figuring out that
the isoc configuration was wrong for his device.
Cc: Jarod Wilson <jarod@wilsonet.com>
Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
It is no longer needed to use a struct pointer as argument, since v4l2_subdev
doesn't require that ioctl-like approach anymore. Instead just pass the input,
output and config (new!) arguments directly.
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Converted em28xx driver to v4l2_subdev.
Thanks to Hans Verkuil <hverkuil@xs4all.nl> for helping this conversion.
Signed-off-by: Douglas Schilling Landgraf <dougsland@redhat.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Add missing URB_NO_TRANSFER_DMA_MAP flag, since the use of consistent memory
is not permitted for DMA on the ARM platform.
Thanks to Paul Thomas <pthomas8589@gmail.com> for providing sample ARM
hardware that was experiencing the oops (tested on the at91rm9200 based
LinuxStamp).
Thanks to David Brownell <david-b@pacbell.net> for providing insight into the
ARM memory architecture.
Signed-off-by: Devin Heitmueller <dheitmueller@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Compro VideoMate uses an external audio DSP chip, controlled via tvaudio
module (tda9874a). This patch improves em28xx infrastructure to support
an external audio processor and fixes the Compro VideoMate entry to work
with it.
Signed-off-by: Vitaly Wool <vital@embeddedalley.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Lots of coding style fixes and a typo correction for em28xx.
[dougsland@redhat.com: fixed a reject due to a change on em28xx-audio.c]
Signed-off-by: Nicola Soranzo <nsoranzo@tiscali.it>
Signed-off-by: Douglas Schilling Landgraf <dougsland@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Fix for em28xx memory leak and function rename
Signed-off-by: Robert Krakora <rob.krakora@messagenetsystems.com>
Signed-off-by: Douglas Schilling Landgraf <dougsland@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Trace: (Provided by Douglas)
BUG: sleeping function called from invalid context at drivers/usb/core/urb.c:558
in_atomic():0, irqs_disabled():1
Pid: 4918, comm: sox Not tainted 2.6.27.5 #1
[<c04246d8>] __might_sleep+0xc6/0xcb
[<c058c8b0>] usb_kill_urb+0x1a/0xd8
[<c0488e68>] ? __kmalloc+0x9b/0xfc
[<c0488e85>] ? __kmalloc+0xb8/0xfc
[<c058cd5a>] ? usb_alloc_urb+0xf/0x31
[<f8dd638c>] em28xx_isoc_audio_deinit+0x2f/0x6c [em28xx_alsa]
[<f8dd6573>] em28xx_cmd+0x1aa/0x1c5 [em28xx_alsa]
[<f8dd65e1>] snd_em28xx_capture_trigger+0x53/0x68 [em28xx_alsa]
[<f8aa8674>] snd_pcm_do_start+0x1c/0x23 [snd_pcm]
[<f8aa85d7>] snd_pcm_action_single+0x25/0x4b [snd_pcm]
[<f8aa9833>] snd_pcm_action+0x6a/0x76 [snd_pcm]
[<f8aa98f5>] snd_pcm_start+0x14/0x16 [snd_pcm]
[<f8aae10e>] snd_pcm_lib_read1+0x66/0x273 [snd_pcm]
[<f8aac5a3>] ? snd_pcm_kernel_ioctl+0x46/0x5f [snd_pcm]
[<f8aae4a7>] snd_pcm_lib_read+0xbf/0xcd [snd_pcm]
[<f8aad774>] ? snd_pcm_lib_read_transfer+0x0/0xaf [snd_pcm]
[<f89feeb6>] snd_pcm_oss_read3+0x99/0xdc [snd_pcm_oss]
[<f89fef9c>] snd_pcm_oss_read2+0xa3/0xbf [snd_pcm_oss]
[<c064169d>] ? _cond_resched+0x8/0x32
[<f89ff0be>] snd_pcm_oss_read+0x106/0x150 [snd_pcm_oss]
[<f89fefb8>] ? snd_pcm_oss_read+0x0/0x150 [snd_pcm_oss]
[<c048c6e2>] vfs_read+0x81/0xdc
[<c048c7d6>] sys_read+0x3b/0x60
[<c04039bf>] sysenter_do_call+0x12/0x34
=======================
The culprit in the trace is snd_pcm_action() which invokes a spin lock
which disables pre-emption which disables an IRQ which causes the
__might_sleep() function to fail the irqs_disabled() test. Since
pre-emption is enabled then it is safe to de-allocate the memory if
you first unlink each URB. In this instance you are safe since
pre-emption is disabled. If pre-emption and irqs are not disabled then
call usb_kill_urb(), else call usb_unlink_urb().
Thanks to Douglas for tracking down this bug originally!!!
[dougsland@redhat.com: Fixed codyingstyle]
Signed-off-by: Robert Krakora <rob.krakora@messagenetsystems.com>
Signed-off-by: Douglas Schilling Landgraf <dougsland@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Fix for KWorld 330U AC97
Many thanks to Devin and Mauro again!!!
Signed-off-by: Robert Krakora <rob.krakora@messagenetsystems.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Some em28xx devices use the PCM IN AC 97 PIN for digital audio. However,
currently, the PCM IN selection is not set by the driver. This patch allows
specifying the PCM IN expected output, via board description table.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
/home/v4l/master/v4l/em28xx-core.c:396:25: warning: symbol 'outputs' was not declared. Should it be static?
/home/v4l/master/v4l/em28xx-input.c:324:6: warning: symbol 'em28xx_ir_start' was not declared. Should it be static?
/home/v4l/master/v4l/em28xx-cards.c:1925:5: warning: symbol 'em28xx_init_dev' was not declared. Should it be static?
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Introduce a struct v4l2_file_operations for v4l2 drivers.
Remove the unnecessary inode argument.
Move compat32 handling (and llseek) into the v4l2-dev core: this is now
handled in the v4l2 core and no longer in the drivers themselves.
Note that this changeset reverts an earlier patch that changed the return
type of__video_ioctl2 from int to long. This change will be reinstated
later in a much improved version.
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
The current code was trying to query the AC97 registers for the vendor
information even if it was clearly not a AC97 audio device (resulting in errors
in the dmesg output). This was due to a bug in the way we did the check.
Signed-off-by: Devin Heitmueller <dheitmueller@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Like the em2874, the em2870 does not have any analog support, so don't bother
loading the em28xx-alsa module.
Signed-off-by: Devin Heitmueller <dheitmueller@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
em28xx-video were holding several code that are not specific to V4L2
interface.
This patch moves the core code for em28xx-core, and usb probing code
into em28xx-cards.
This opens the possibility of breaking em28xx into a core module and a
V4L2 module, loaded only on devices that have analog interfaces.
Some cleanup may be done at em28xx-cards to optimize the config code.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
The em28xx driver can be coupled to an anciliary AC97 chip. This patch
allows read/write AC97 registers directly.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This patch uses the same code for enumberating video formats that are
present on cx88, bttv and saa7134 drivers.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Change log format to look more like URB transactions. In fact, setup and
IN/OUT transactions are merged. This helps to debug the driver.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Several chips may be turned off when the device is not used, like audio,
video and dvb demods. This patch adds a gpio callback at the core
structs to allow turning off such devices.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
A previous changeset moved gpio from em28xx struct into em28xx_board.
However, the driver were not updated to properly honor those gpio's.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Replaces all occurrences of em28xx_write_regs_req() and em28xx_write_reg()
used to setup register names by em28xx_write_reg().
Also, documents the register names that are known.
This patch were generated by this small perl script:
my %reg_map = (
# Register table - the same as defined on parse_em28xx.pl script
);
while (<>) {
if (m/(.*)em28xx_write_regs_req\(dev\,\s*0x00\,\s*(.*)\,\s*\"\\x(..)\",\s*1\)\;(.*)/) {
my $reg = $2;
my $val = $3;
$val =~ tr/A-f/a-f/;
$reg = $reg_map{$reg} if defined($reg_map{$reg});
printf "$1em28xx_write_reg(dev, %s, 0x%s);$4\n", $reg, $val;
} elsif (m/(.*)em28xx_write_regs\(dev\,\s*(.*)\,\s*\"\\x(..)\",\s*1\)\;(.*)/) {
my $reg = $2;
my $val = $3;
$val =~ tr/A-f/a-f/;
$reg = $reg_map{$reg} if defined($reg_map{$reg});
printf "$1em28xx_write_reg(dev, %s, 0x%s);$4\n", $reg, $val;
} else {
print $_;
}
}
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Several fields are duplicated on both structs. Let's just copy em28xx_board instead.
A later cleanup could just copy the fields that are changed, in order to keep em28xx_board
const.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
The previous patches removed XCLK and I2C magic. Now, we finally know
what those registers do. Also, only a very few cards need different
setups for those.
Instead of keeping the setups for those values inside the per-device
hack magic switch, move the uncommon values to the board-specific
struct, and have a common setup for all other boards.
So, almost 100 lines of hacking magic were removed.
A co-lateral effect of this patch is that it also fixes a bug at em28xx-core, where xclk
were set, without taking any care about not overriding a previous xclk setup.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Some devices use more than one AC97 outputs. This patch allows such
devices to properly work.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Some boards use different AC97 setups for output. This patch adds the
capability of specifying the output to be used. Currently, only one
output is selected, but the better is to allow user to select it via a
mixer, on alsa driver.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Introduce a new function that writes to a single register. This is
useful because the vast majority of register writes are a single
register, and this format permits or'ing register value bits together.
Signed-off-by: Devin Heitmueller <devin.heitmueller@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
AC97 devices provide several input and outputs. However, before this
patch, em28xx device weren't properly allowing the usage of ac97
possible combinations. Also, several input volumes were left untouched,
instead of making sure that the volumes were set on mute state.
This patch improves support for ac97 devices by allowing to use any
inputs, and making sure that unused inputs are set on mute state.
Yet, some work is still needed to select the AC97 output.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This makes easier to identify vendor ID, since AC97 vendors are
generally identified by 3 bytes. The remaining byte is used by the
vendor to identify its devices.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This patch properly implements audio handling on em28xx. Before this
patch, it was assumed that every device has an Empia 202 audio chip.
However, this is not true.
After this patch, specific AC97 chipset setup and configurations can be
done.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Previously, AC97 registers were named as if they were part of em28xx
device, generating some confusion. Replace such names for a more general
naming convention.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Properly support capture start on em2874
The transport stream enable register moved in the em2874, so make it work
properly.
Thanks for Ray Lu from Empia for providing the em2874 datasheet.
Signed-off-by: Devin Heitmueller <devin.heitmueller@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>