mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 21:51:40 +00:00
Merge branch 'v4l_for_linus' into staging/for_v3.6
* v4l_for_linus: (44 commits) [media] smia: Fix compile failures [media] Fix VIDIOC_DQEVENT docbook entry [media] s5p-fimc: Fix control creation function [media] s5p-mfc: Fix checkpatch error in s5p_mfc_shm.h file [media] s5p-mfc: Fix setting controls [media] v4l/s5p-mfc: added image size align in VIDIOC_TRY_FMT [media] v4l/s5p-mfc: corrected encoder v4l control definitions [media] v4l: mem2mem_testdev: Fix race conditions in driver [media] s5p-mfc: Bug fix of timestamp/timecode copy mechanism [media] cxd2820r: Fix an incorrect modulation type bitmask [media] em28xx: Show a warning if the board does not support remote controls [media] em28xx: Add remote control support for Terratec's Cinergy HTC Stick HD [media] USB: Staging: media: lirc: initialize spinlocks before usage [media] Revert "[media] media: mx2_camera: Fix mbus format handling" [media] bw-qcam: driver and pixfmt documentation fixes [media] cx88: fix firmware load on big-endian systems [media] cx18: support big-endian systems [media] ivtv: fix support for big-endian systems [media] tuner-core: return the frequency range of the correct tuner [media] v4l2-dev.c: fix g_parm regression in determine_valid_ioctls() ... Conflicts: Documentation/DocBook/media/v4l/vidioc-create-bufs.xml drivers/media/video/em28xx/em28xx-cards.c
This commit is contained in:
commit
a99817ca60
@ -986,13 +986,13 @@ http://www.thedirks.org/winnov/</ulink></para></entry>
|
||||
<row id="V4L2-PIX-FMT-Y4">
|
||||
<entry><constant>V4L2_PIX_FMT_Y4</constant></entry>
|
||||
<entry>'Y04 '</entry>
|
||||
<entry>Old 4-bit greyscale format. Only the least significant 4 bits of each byte are used,
|
||||
<entry>Old 4-bit greyscale format. Only the most significant 4 bits of each byte are used,
|
||||
the other bits are set to 0.</entry>
|
||||
</row>
|
||||
<row id="V4L2-PIX-FMT-Y6">
|
||||
<entry><constant>V4L2_PIX_FMT_Y6</constant></entry>
|
||||
<entry>'Y06 '</entry>
|
||||
<entry>Old 6-bit greyscale format. Only the least significant 6 bits of each byte are used,
|
||||
<entry>Old 6-bit greyscale format. Only the most significant 6 bits of each byte are used,
|
||||
the other bits are set to 0.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
|
@ -560,6 +560,7 @@ and discussions on the V4L mailing list.</revremark>
|
||||
&sub-g-tuner;
|
||||
&sub-log-status;
|
||||
&sub-overlay;
|
||||
&sub-prepare-buf;
|
||||
&sub-qbuf;
|
||||
&sub-querybuf;
|
||||
&sub-querycap;
|
||||
@ -567,7 +568,6 @@ and discussions on the V4L mailing list.</revremark>
|
||||
&sub-query-dv-preset;
|
||||
&sub-query-dv-timings;
|
||||
&sub-querystd;
|
||||
&sub-prepare-buf;
|
||||
&sub-reqbufs;
|
||||
&sub-s-hw-freq-seek;
|
||||
&sub-streamon;
|
||||
|
@ -108,7 +108,7 @@ information.</para>
|
||||
/></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>&v4l2-format;</entry>
|
||||
<entry>struct v4l2_format</entry>
|
||||
<entry><structfield>format</structfield></entry>
|
||||
<entry>Filled in by the application, preserved by the driver.</entry>
|
||||
</row>
|
||||
|
@ -89,7 +89,7 @@
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry>&v4l2-event-frame-sync;</entry>
|
||||
<entry><structfield>frame</structfield></entry>
|
||||
<entry><structfield>frame_sync</structfield></entry>
|
||||
<entry>Event data for event V4L2_EVENT_FRAME_SYNC.</entry>
|
||||
</row>
|
||||
<row>
|
||||
|
@ -23,6 +23,7 @@
|
||||
#ifndef __MACH_MX2_CAM_H_
|
||||
#define __MACH_MX2_CAM_H_
|
||||
|
||||
#define MX2_CAMERA_SWAP16 (1 << 0)
|
||||
#define MX2_CAMERA_EXT_VSYNC (1 << 1)
|
||||
#define MX2_CAMERA_CCIR (1 << 2)
|
||||
#define MX2_CAMERA_CCIR_INTERLACE (1 << 3)
|
||||
@ -30,6 +31,7 @@
|
||||
#define MX2_CAMERA_GATED_CLOCK (1 << 5)
|
||||
#define MX2_CAMERA_INV_DATA (1 << 6)
|
||||
#define MX2_CAMERA_PCLK_SAMPLE_RISING (1 << 7)
|
||||
#define MX2_CAMERA_PACK_DIR_MSB (1 << 8)
|
||||
|
||||
/**
|
||||
* struct mx2_camera_platform_data - optional platform data for mx2_camera
|
||||
|
@ -1800,6 +1800,7 @@ static const struct hid_device_id hid_ignore_list[] = {
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM)},
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM2)},
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_AVERMEDIA, USB_DEVICE_ID_AVER_FM_MR800) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_AXENTIA, USB_DEVICE_ID_AXENTIA_FM_RADIO) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CIDC, 0x0103) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI470X) },
|
||||
|
@ -157,6 +157,9 @@
|
||||
#define USB_VENDOR_ID_AVERMEDIA 0x07ca
|
||||
#define USB_DEVICE_ID_AVER_FM_MR800 0xb800
|
||||
|
||||
#define USB_VENDOR_ID_AXENTIA 0x12cf
|
||||
#define USB_DEVICE_ID_AXENTIA_FM_RADIO 0x7111
|
||||
|
||||
#define USB_VENDOR_ID_BELKIN 0x050d
|
||||
#define USB_DEVICE_ID_FLIP_KVM 0x3201
|
||||
|
||||
|
@ -516,9 +516,9 @@ static int cx24110_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
|
||||
if(cx24110_readreg(state,0x10)&0x40) {
|
||||
/* the RS error counter has finished one counting window */
|
||||
cx24110_writereg(state,0x10,0x60); /* select the byer reg */
|
||||
cx24110_readreg(state, 0x12) |
|
||||
(void)(cx24110_readreg(state, 0x12) |
|
||||
(cx24110_readreg(state, 0x13) << 8) |
|
||||
(cx24110_readreg(state, 0x14) << 16);
|
||||
(cx24110_readreg(state, 0x14) << 16));
|
||||
cx24110_writereg(state,0x10,0x70); /* select the bler reg */
|
||||
state->lastbler=cx24110_readreg(state,0x12)|
|
||||
(cx24110_readreg(state,0x13)<<8)|
|
||||
|
@ -121,7 +121,7 @@ int cxd2820r_get_frontend_c(struct dvb_frontend *fe)
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
switch ((buf[0] >> 0) & 0x03) {
|
||||
switch ((buf[0] >> 0) & 0x07) {
|
||||
case 0:
|
||||
c->modulation = QAM_16;
|
||||
break;
|
||||
|
@ -126,7 +126,7 @@ static int lg216x_write_regs(struct lg216x_state *state,
|
||||
|
||||
lg_reg("writing %d registers...\n", len);
|
||||
|
||||
for (i = 0; i < len - 1; i++) {
|
||||
for (i = 0; i < len; i++) {
|
||||
ret = lg216x_write_reg(state, regs[i].reg, regs[i].val);
|
||||
if (lg_fail(ret))
|
||||
return ret;
|
||||
|
@ -544,6 +544,8 @@ static const struct usb_device_id smsusb_id_table[] __devinitconst = {
|
||||
.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
|
||||
{ USB_DEVICE(0x2040, 0xc0a0),
|
||||
.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
|
||||
{ USB_DEVICE(0x2040, 0xf5a0),
|
||||
.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
|
@ -157,7 +157,7 @@ static int __devinit maxiradio_probe(struct pci_dev *pdev, const struct pci_devi
|
||||
goto err_out_free_region;
|
||||
|
||||
dev->io = pci_resource_start(pdev, 0);
|
||||
if (snd_tea575x_init(&dev->tea)) {
|
||||
if (snd_tea575x_init(&dev->tea, THIS_MODULE)) {
|
||||
printk(KERN_ERR "radio-maxiradio: Unable to detect TEA575x tuner\n");
|
||||
goto err_out_free_region;
|
||||
}
|
||||
|
@ -238,7 +238,7 @@ static int __devinit fmr2_probe(struct fmr2 *fmr2, struct device *pdev, int io)
|
||||
snprintf(fmr2->tea.bus_info, sizeof(fmr2->tea.bus_info), "%s:%s",
|
||||
fmr2->is_fmd2 ? "PnP" : "ISA", dev_name(pdev));
|
||||
|
||||
if (snd_tea575x_init(&fmr2->tea)) {
|
||||
if (snd_tea575x_init(&fmr2->tea, THIS_MODULE)) {
|
||||
printk(KERN_ERR "radio-sf16fmr2: Unable to detect TEA575x tuner\n");
|
||||
release_region(fmr2->io, 2);
|
||||
return -ENODEV;
|
||||
|
@ -51,6 +51,8 @@ static struct usb_device_id si470x_usb_driver_id_table[] = {
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x1b80, 0xd700, USB_CLASS_HID, 0, 0) },
|
||||
/* Sanei Electric, Inc. FM USB Radio (sold as DealExtreme.com PCear) */
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x10c5, 0x819a, USB_CLASS_HID, 0, 0) },
|
||||
/* Axentia ALERT FM USB Receiver */
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x12cf, 0x7111, USB_CLASS_HID, 0, 0) },
|
||||
/* Terminating entry */
|
||||
{ }
|
||||
};
|
||||
|
@ -371,7 +371,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 2, 0, 0, 0 },
|
||||
.gpiomute = 10,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
@ -384,7 +383,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 1, 2, 3 },
|
||||
.gpiomute = 4,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
@ -398,7 +396,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomux = { 4, 0, 2, 3 },
|
||||
.gpiomute = 1,
|
||||
.no_msp34xx = 1,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = TUNER_PHILIPS_NTSC,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.pll = PLL_28,
|
||||
@ -414,7 +411,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 0,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
@ -427,7 +423,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 0),
|
||||
.gpiomux = { 0, 1, 0, 1 },
|
||||
.gpiomute = 3,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
@ -440,7 +435,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0x0f,
|
||||
.gpiomux = { 0x0c, 0x04, 0x08, 0x04 },
|
||||
/* 0x04 for some cards ?? */
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.audio_mode_gpio= avermedia_tvphone_audio,
|
||||
@ -454,7 +448,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 0, 0),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
@ -469,7 +462,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 0xc00, 0x800, 0x400 },
|
||||
.gpiomute = 0xc00,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -482,7 +474,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 3,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 1, 1, 2, 3 },
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_TEMIC_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -496,7 +487,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 0, 1, 1),
|
||||
.gpiomux = { 0, 1, 2, 3 },
|
||||
.gpiomute = 4,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -510,7 +500,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x20001,0x10001, 0, 0 },
|
||||
.gpiomute = 10,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
@ -524,7 +513,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 15,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 13, 14, 11, 7 },
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
@ -536,7 +524,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 15,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 13, 14, 11, 7 },
|
||||
.needs_tvaudio = 1,
|
||||
.msp34xx_alt = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
@ -553,7 +540,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 2, 1, 3 }, /* old: {0, 1, 2, 3, 4} */
|
||||
.gpiomute = 4,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -567,7 +553,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 0, 1, 0 },
|
||||
.gpiomute = 10,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
@ -583,7 +568,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
/* 2003-10-20 by "Anton A. Arapov" <arapov@mail.ru> */
|
||||
.gpiomux = { 0x001e00, 0, 0x018000, 0x014000 },
|
||||
.gpiomute = 0x002000,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -597,7 +581,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1, 0),
|
||||
.gpiomux = { 0x4fa007,0xcfa007,0xcfa007,0xcfa007 },
|
||||
.gpiomute = 0xcfa007,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.volume_gpio = winview_volume,
|
||||
@ -611,7 +594,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 1, 0, 0, 0 },
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
@ -660,7 +642,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 1, 0x800, 0x400 },
|
||||
.gpiomute = 0xc00,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -691,7 +672,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = {0x400, 0x400, 0x400, 0x400 },
|
||||
.gpiomute = 0xc00,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -706,7 +686,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x20000, 0x30000, 0x10000, 0 },
|
||||
.gpiomute = 0x40000,
|
||||
.needs_tvaudio = 0,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.audio_mode_gpio= terratv_audio,
|
||||
@ -720,7 +699,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 0, 1, 1),
|
||||
.gpiomux = { 0, 1, 2, 3 },
|
||||
.gpiomute = 4,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
@ -748,7 +726,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x20000, 0x30000, 0x10000, 0x00000 },
|
||||
.gpiomute = 0x40000,
|
||||
.needs_tvaudio = 0,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.audio_mode_gpio= terratv_audio,
|
||||
@ -793,7 +770,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 0, 0),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.muxsel_hook = PXC200_muxsel,
|
||||
@ -834,7 +810,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 0,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
@ -847,7 +822,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x500, 0, 0x300, 0x900 },
|
||||
.gpiomute = 0x900,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -874,7 +848,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
Note: There exists another variant "Winfast 2000" with tv stereo !?
|
||||
Note: eeprom only contains FF and pci subsystem id 107d:6606
|
||||
*/
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.has_radio = 1,
|
||||
.tuner_type = TUNER_PHILIPS_PAL, /* default for now, gpio reads BFFF06 for Pal bg+dk */
|
||||
@ -934,7 +907,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 0),
|
||||
.gpiomux = { 0x551400, 0x551200, 0, 0 },
|
||||
.gpiomute = 0x551c00,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL_I,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -949,7 +921,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 2, 0xd0001, 0, 0 },
|
||||
.gpiomute = 1,
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -966,7 +937,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomux = { 4, 0, 2, 3 },
|
||||
.gpiomute = 1,
|
||||
.no_msp34xx = 1,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = TUNER_PHILIPS_NTSC,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.pll = PLL_28,
|
||||
@ -980,7 +950,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 15,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 13, 4, 11, 7 },
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -995,7 +964,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 0, 0, 0},
|
||||
.needs_tvaudio = 1,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL_I,
|
||||
@ -1066,7 +1034,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x20000, 0x30000, 0x10000, 0 },
|
||||
.gpiomute = 0x40000,
|
||||
.needs_tvaudio = 1,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_35,
|
||||
.tuner_type = TUNER_PHILIPS_PAL_I,
|
||||
@ -1084,7 +1051,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = {2,0,0,0 },
|
||||
.gpiomute = 1,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -1163,7 +1129,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
MUX2 (mask 0x30000):
|
||||
0,2,3= from MSP34xx
|
||||
1= FM stereo Radio from Tuner */
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -1179,7 +1144,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 0, 0x10, 8 },
|
||||
.gpiomute = 4,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -1218,7 +1182,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 0),
|
||||
.gpiomux = { 2, 0, 0, 0 },
|
||||
.gpiomute = 10,
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_TEMIC_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -1250,7 +1213,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(3, 1),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 0,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_35,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
@ -1266,7 +1228,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x400, 0x400, 0x400, 0x400 },
|
||||
.gpiomute = 0x800,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_TEMIC_4036FY5_NTSC,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -1312,7 +1273,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 2),
|
||||
.gpiomux = { },
|
||||
.no_msp34xx = 1,
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -1329,7 +1289,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 0),
|
||||
.gpiomux = { 1, 0, 4, 4 },
|
||||
.gpiomute = 9,
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -1379,7 +1338,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomute = 0x1800,
|
||||
.audio_mode_gpio= fv2000s_audio,
|
||||
.no_msp34xx = 1,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -1393,7 +1351,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x500, 0x500, 0x300, 0x900 },
|
||||
.gpiomute = 0x900,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -1477,7 +1434,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 0, 11, 7 }, /* TV and Radio with same GPIO ! */
|
||||
.gpiomute = 13,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_LG_PAL_I_FM,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -1514,7 +1470,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x01, 0x00, 0x03, 0x03 },
|
||||
.gpiomute = 0x09,
|
||||
.needs_tvaudio = 1,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
@ -1540,7 +1495,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 0, 0),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 0,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
@ -1567,7 +1521,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 1, 1),
|
||||
.gpiomux = { 0, 1, 2, 2 },
|
||||
.gpiomute = 4,
|
||||
.needs_tvaudio = 0,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.pll = PLL_28,
|
||||
@ -1597,7 +1550,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 0),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 0,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
@ -1619,7 +1571,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
* btwincap uses 0x80000/0x80003
|
||||
*/
|
||||
.gpiomute = 4,
|
||||
.needs_tvaudio = 0,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
@ -1655,7 +1606,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
/* .audio_inputs= 1, */
|
||||
.svhs = 2,
|
||||
.muxsel = MUXSEL(2, 0, 1, 1),
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -1875,7 +1825,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 1, 2, 3},
|
||||
.gpiomute = 4,
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.pll = PLL_28,
|
||||
@ -1902,7 +1851,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 0,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
@ -1920,7 +1868,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
/* Tuner, Radio, external, internal, off, on */
|
||||
.gpiomux = { 0x08, 0x0f, 0x0a, 0x08 },
|
||||
.gpiomute = 0x0f,
|
||||
.needs_tvaudio = 0,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_NTSC,
|
||||
@ -1936,7 +1883,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.svhs = 2,
|
||||
.gpiomask = 0x00,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.needs_tvaudio = 1,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
@ -2034,7 +1980,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3, 1, 0),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 0,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
@ -2049,7 +1994,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0x00,
|
||||
.muxsel = MUXSEL(2, 3, 1, 0),
|
||||
.gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -2062,7 +2006,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0x00,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -2079,7 +2022,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 2, 2, 2, 3, 3, 3, 3, 1, 0),
|
||||
.muxsel_hook = phytec_muxsel,
|
||||
.gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -2094,7 +2036,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 2, 2, 2, 3, 3, 3, 3, 1, 1),
|
||||
.muxsel_hook = phytec_muxsel,
|
||||
.gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -2118,7 +2059,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.svhs = NO_SVHS, /* card has no svhs */
|
||||
.needs_tvaudio = 0,
|
||||
.no_msp34xx = 1,
|
||||
.no_tda7432 = 1,
|
||||
.gpiomask = 0x00,
|
||||
@ -2168,7 +2108,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 3,
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 1, 1, 1, 1 },
|
||||
.needs_tvaudio = 1,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.pll = PLL_35,
|
||||
@ -2210,7 +2149,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 0),
|
||||
.no_msp34xx = 1,
|
||||
.no_tda7432 = 1,
|
||||
.needs_tvaudio = 0,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
},
|
||||
@ -2222,7 +2160,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.svhs = 2,
|
||||
.needs_tvaudio = 0,
|
||||
.gpiomask = 0x68,
|
||||
.muxsel = MUXSEL(2, 3, 1),
|
||||
.gpiomux = { 0x68, 0x68, 0x61, 0x61 },
|
||||
@ -2241,7 +2178,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 1, 2, 2 },
|
||||
.gpiomute = 3,
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -2265,7 +2201,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 2, 2, 2),
|
||||
.gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
|
||||
.pll = PLL_28,
|
||||
.needs_tvaudio = 0,
|
||||
.muxsel_hook = picolo_tetra_muxsel,/*Required as it doesn't follow the classic input selection policy*/
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -2358,7 +2293,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 2, 0, 0, 0 },
|
||||
.gpiomute = 10,
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -2405,7 +2339,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.gpiomask = 0x008007,
|
||||
.gpiomux = { 0, 0x000001,0,0 },
|
||||
.needs_tvaudio = 1,
|
||||
.has_radio = 1,
|
||||
},
|
||||
[BTTV_BOARD_TIBET_CS16] = {
|
||||
@ -2518,7 +2451,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x001e00, 0, 0x018000, 0x014000 },
|
||||
.gpiomute = 0x002000,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_YMEC_TVF66T5_B_DFF,
|
||||
.tuner_addr = 0xc1 >>1,
|
||||
@ -2534,7 +2466,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 1, 2, 2 },
|
||||
.gpiomute = 3,
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_TENA_9533_DI,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -2615,7 +2546,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 2, 0, 0, 0 },
|
||||
.gpiomute = 1,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_NTSC,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -2714,7 +2644,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0x20001,0x10001, 0, 0 },
|
||||
.gpiomute = 10,
|
||||
.needs_tvaudio = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_PHILIPS_PAL_I,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -2746,7 +2675,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.muxsel = MUXSEL(2, 3, 1, 1),
|
||||
.gpiomux = { 0, 1, 2, 2 }, /* CONTVFMi */
|
||||
.gpiomute = 3, /* CONTVFMi */
|
||||
.needs_tvaudio = 0,
|
||||
.tuner_type = TUNER_PHILIPS_FM1216ME_MK3, /* TCL MK3 */
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.pll = PLL_28,
|
||||
@ -2785,7 +2713,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0x00,
|
||||
.muxsel = MUXSEL(0, 2, 3, 1),
|
||||
.gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -2799,7 +2726,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0x00,
|
||||
.muxsel = MUXSEL(2, 3, 1),
|
||||
.gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -2813,7 +2739,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0x00,
|
||||
.muxsel = MUXSEL(3, 2, 1),
|
||||
.gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
|
||||
.needs_tvaudio = 0,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
@ -2877,7 +2802,6 @@ struct tvcard bttv_tvcards[] = {
|
||||
.gpiomask = 0,
|
||||
.muxsel = MUXSEL(2, 3),
|
||||
.gpiomux = { 0 },
|
||||
.needs_tvaudio = 0,
|
||||
.no_msp34xx = 1,
|
||||
.pll = PLL_28,
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
@ -3649,7 +3573,7 @@ void __devinit bttv_init_tuner(struct bttv *btv)
|
||||
struct tuner_setup tun_setup;
|
||||
|
||||
/* Load tuner module before issuing tuner config call! */
|
||||
if (bttv_tvcards[btv->c.type].has_radio)
|
||||
if (btv->has_radio)
|
||||
v4l2_i2c_new_subdev(&btv->c.v4l2_dev,
|
||||
&btv->c.i2c_adap, "tuner",
|
||||
0, v4l2_i2c_tuner_addrs(ADDRS_RADIO));
|
||||
@ -3664,7 +3588,7 @@ void __devinit bttv_init_tuner(struct bttv *btv)
|
||||
tun_setup.type = btv->tuner_type;
|
||||
tun_setup.addr = addr;
|
||||
|
||||
if (bttv_tvcards[btv->c.type].has_radio)
|
||||
if (btv->has_radio)
|
||||
tun_setup.mode_mask |= T_RADIO;
|
||||
|
||||
bttv_call_all(btv, tuner, s_type_addr, &tun_setup);
|
||||
@ -3724,6 +3648,10 @@ static void __devinit hauppauge_eeprom(struct bttv *btv)
|
||||
bttv_tvcards[BTTV_BOARD_HAUPPAUGE_IMPACTVCB].name);
|
||||
btv->c.type = BTTV_BOARD_HAUPPAUGE_IMPACTVCB;
|
||||
}
|
||||
|
||||
/* The 61334 needs the msp3410 to do the radio demod to get sound */
|
||||
if (tv.model == 61334)
|
||||
btv->radio_uses_msp_demodulator = 1;
|
||||
}
|
||||
|
||||
static int terratec_active_radio_upgrade(struct bttv *btv)
|
||||
|
@ -1212,6 +1212,11 @@ audio_mux(struct bttv *btv, int input, int mute)
|
||||
For now this is sufficient. */
|
||||
switch (input) {
|
||||
case TVAUDIO_INPUT_RADIO:
|
||||
/* Some boards need the msp do to the radio demod */
|
||||
if (btv->radio_uses_msp_demodulator) {
|
||||
in = MSP_INPUT_DEFAULT;
|
||||
break;
|
||||
}
|
||||
in = MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1,
|
||||
MSP_DSP_IN_SCART, MSP_DSP_IN_SCART);
|
||||
break;
|
||||
|
@ -236,7 +236,6 @@ struct tvcard {
|
||||
/* i2c audio flags */
|
||||
unsigned int no_msp34xx:1;
|
||||
unsigned int no_tda7432:1;
|
||||
unsigned int needs_tvaudio:1;
|
||||
unsigned int msp34xx_alt:1;
|
||||
/* Note: currently no card definition needs to mark the presence
|
||||
of a RDS saa6588 chip. If this is ever needed, then add a new
|
||||
|
@ -440,6 +440,7 @@ struct bttv {
|
||||
/* radio data/state */
|
||||
int has_radio;
|
||||
int radio_user;
|
||||
int radio_uses_msp_demodulator;
|
||||
|
||||
/* miro/pinnacle + Aimslab VHX
|
||||
philips matchbox (tea5757 radio tuner) support */
|
||||
|
@ -607,8 +607,9 @@ static long qc_capture(struct qcam *q, char __user *buf, unsigned long len)
|
||||
}
|
||||
o = i * pixels_per_line + pixels_read + k;
|
||||
if (o < len) {
|
||||
u8 ch = invert - buffer[k];
|
||||
got++;
|
||||
put_user((invert - buffer[k]) << shift, buf + o);
|
||||
put_user(ch << shift, buf + o);
|
||||
}
|
||||
}
|
||||
pixels_read += bytes;
|
||||
@ -648,8 +649,8 @@ static int qcam_querycap(struct file *file, void *priv,
|
||||
struct qcam *qcam = video_drvdata(file);
|
||||
|
||||
strlcpy(vcap->driver, qcam->v4l2_dev.name, sizeof(vcap->driver));
|
||||
strlcpy(vcap->card, "B&W Quickcam", sizeof(vcap->card));
|
||||
strlcpy(vcap->bus_info, "parport", sizeof(vcap->bus_info));
|
||||
strlcpy(vcap->card, "Connectix B&W Quickcam", sizeof(vcap->card));
|
||||
strlcpy(vcap->bus_info, qcam->pport->name, sizeof(vcap->bus_info));
|
||||
vcap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE;
|
||||
vcap->capabilities = vcap->device_caps | V4L2_CAP_DEVICE_CAPS;
|
||||
return 0;
|
||||
@ -688,8 +689,8 @@ static int qcam_g_fmt_vid_cap(struct file *file, void *fh, struct v4l2_format *f
|
||||
pix->height = qcam->height / qcam->transfer_scale;
|
||||
pix->pixelformat = (qcam->bpp == 4) ? V4L2_PIX_FMT_Y4 : V4L2_PIX_FMT_Y6;
|
||||
pix->field = V4L2_FIELD_NONE;
|
||||
pix->bytesperline = qcam->width;
|
||||
pix->sizeimage = qcam->width * qcam->height;
|
||||
pix->bytesperline = pix->width;
|
||||
pix->sizeimage = pix->width * pix->height;
|
||||
/* Just a guess */
|
||||
pix->colorspace = V4L2_COLORSPACE_SRGB;
|
||||
return 0;
|
||||
@ -757,7 +758,7 @@ static int qcam_enum_fmt_vid_cap(struct file *file, void *fh, struct v4l2_fmtdes
|
||||
"4-Bit Monochrome", V4L2_PIX_FMT_Y4,
|
||||
{ 0, 0, 0, 0 }
|
||||
},
|
||||
{ 0, 0, 0,
|
||||
{ 1, 0, 0,
|
||||
"6-Bit Monochrome", V4L2_PIX_FMT_Y6,
|
||||
{ 0, 0, 0, 0 }
|
||||
},
|
||||
@ -772,6 +773,25 @@ static int qcam_enum_fmt_vid_cap(struct file *file, void *fh, struct v4l2_fmtdes
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int qcam_enum_framesizes(struct file *file, void *fh,
|
||||
struct v4l2_frmsizeenum *fsize)
|
||||
{
|
||||
static const struct v4l2_frmsize_discrete sizes[] = {
|
||||
{ 80, 60 },
|
||||
{ 160, 120 },
|
||||
{ 320, 240 },
|
||||
};
|
||||
|
||||
if (fsize->index > 2)
|
||||
return -EINVAL;
|
||||
if (fsize->pixel_format != V4L2_PIX_FMT_Y4 &&
|
||||
fsize->pixel_format != V4L2_PIX_FMT_Y6)
|
||||
return -EINVAL;
|
||||
fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE;
|
||||
fsize->discrete = sizes[fsize->index];
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ssize_t qcam_read(struct file *file, char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
@ -795,6 +815,11 @@ static ssize_t qcam_read(struct file *file, char __user *buf,
|
||||
return len;
|
||||
}
|
||||
|
||||
static unsigned int qcam_poll(struct file *filp, poll_table *wait)
|
||||
{
|
||||
return v4l2_ctrl_poll(filp, wait) | POLLIN | POLLRDNORM;
|
||||
}
|
||||
|
||||
static int qcam_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
struct qcam *qcam =
|
||||
@ -828,7 +853,7 @@ static const struct v4l2_file_operations qcam_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = v4l2_fh_open,
|
||||
.release = v4l2_fh_release,
|
||||
.poll = v4l2_ctrl_poll,
|
||||
.poll = qcam_poll,
|
||||
.unlocked_ioctl = video_ioctl2,
|
||||
.read = qcam_read,
|
||||
};
|
||||
@ -839,6 +864,7 @@ static const struct v4l2_ioctl_ops qcam_ioctl_ops = {
|
||||
.vidioc_s_input = qcam_s_input,
|
||||
.vidioc_enum_input = qcam_enum_input,
|
||||
.vidioc_enum_fmt_vid_cap = qcam_enum_fmt_vid_cap,
|
||||
.vidioc_enum_framesizes = qcam_enum_framesizes,
|
||||
.vidioc_g_fmt_vid_cap = qcam_g_fmt_vid_cap,
|
||||
.vidioc_s_fmt_vid_cap = qcam_s_fmt_vid_cap,
|
||||
.vidioc_try_fmt_vid_cap = qcam_try_fmt_vid_cap,
|
||||
@ -864,9 +890,9 @@ static struct qcam *qcam_init(struct parport *port)
|
||||
return NULL;
|
||||
|
||||
v4l2_dev = &qcam->v4l2_dev;
|
||||
strlcpy(v4l2_dev->name, "bw-qcam", sizeof(v4l2_dev->name));
|
||||
snprintf(v4l2_dev->name, sizeof(v4l2_dev->name), "bw-qcam%d", num_cams);
|
||||
|
||||
if (v4l2_device_register(NULL, v4l2_dev) < 0) {
|
||||
if (v4l2_device_register(port->dev, v4l2_dev) < 0) {
|
||||
v4l2_err(v4l2_dev, "Could not register v4l2_device\n");
|
||||
kfree(qcam);
|
||||
return NULL;
|
||||
@ -886,7 +912,7 @@ static struct qcam *qcam_init(struct parport *port)
|
||||
return NULL;
|
||||
}
|
||||
qcam->pport = port;
|
||||
qcam->pdev = parport_register_device(port, "bw-qcam", NULL, NULL,
|
||||
qcam->pdev = parport_register_device(port, v4l2_dev->name, NULL, NULL,
|
||||
NULL, 0, NULL);
|
||||
if (qcam->pdev == NULL) {
|
||||
v4l2_err(v4l2_dev, "couldn't register for %s.\n", port->name);
|
||||
@ -975,6 +1001,7 @@ static int init_bwqcam(struct parport *port)
|
||||
return -ENODEV;
|
||||
}
|
||||
qc_calibrate(qcam);
|
||||
v4l2_ctrl_handler_setup(&qcam->hdl);
|
||||
|
||||
parport_release(qcam->pdev);
|
||||
|
||||
|
@ -838,10 +838,10 @@ static int cx18_setup_pci(struct cx18 *cx, struct pci_dev *pci_dev,
|
||||
}
|
||||
|
||||
CX18_DEBUG_INFO("cx%d (rev %d) at %02x:%02x.%x, "
|
||||
"irq: %d, latency: %d, memory: 0x%lx\n",
|
||||
"irq: %d, latency: %d, memory: 0x%llx\n",
|
||||
cx->pci_dev->device, cx->card_rev, pci_dev->bus->number,
|
||||
PCI_SLOT(pci_dev->devfn), PCI_FUNC(pci_dev->devfn),
|
||||
cx->pci_dev->irq, pci_latency, (unsigned long)cx->base_addr);
|
||||
cx->pci_dev->irq, pci_latency, (u64)cx->base_addr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -938,7 +938,7 @@ static int __devinit cx18_probe(struct pci_dev *pci_dev,
|
||||
if (retval)
|
||||
goto err;
|
||||
|
||||
CX18_DEBUG_INFO("base addr: 0x%08x\n", cx->base_addr);
|
||||
CX18_DEBUG_INFO("base addr: 0x%llx\n", (u64)cx->base_addr);
|
||||
|
||||
/* PCI Device Setup */
|
||||
retval = cx18_setup_pci(cx, pci_dev, pci_id);
|
||||
@ -946,8 +946,8 @@ static int __devinit cx18_probe(struct pci_dev *pci_dev,
|
||||
goto free_workqueues;
|
||||
|
||||
/* map io memory */
|
||||
CX18_DEBUG_INFO("attempting ioremap at 0x%08x len 0x%08x\n",
|
||||
cx->base_addr + CX18_MEM_OFFSET, CX18_MEM_SIZE);
|
||||
CX18_DEBUG_INFO("attempting ioremap at 0x%llx len 0x%08x\n",
|
||||
(u64)cx->base_addr + CX18_MEM_OFFSET, CX18_MEM_SIZE);
|
||||
cx->enc_mem = ioremap_nocache(cx->base_addr + CX18_MEM_OFFSET,
|
||||
CX18_MEM_SIZE);
|
||||
if (!cx->enc_mem) {
|
||||
|
@ -622,7 +622,7 @@ struct cx18 {
|
||||
unique ID. Starts at 1, so 0 can be used as
|
||||
uninitialized value in the stream->id. */
|
||||
|
||||
u32 base_addr;
|
||||
resource_size_t base_addr;
|
||||
|
||||
u8 card_rev;
|
||||
void __iomem *enc_mem, *reg_mem;
|
||||
|
@ -164,8 +164,13 @@ static int load_apu_fw_direct(const char *fn, u8 __iomem *dst, struct cx18 *cx,
|
||||
|
||||
apu_version = (vers[0] << 24) | (vers[4] << 16) | vers[32];
|
||||
while (offset + sizeof(seghdr) < fw->size) {
|
||||
/* TODO: byteswapping */
|
||||
memcpy(&seghdr, src + offset / 4, sizeof(seghdr));
|
||||
const u32 *shptr = src + offset / 4;
|
||||
|
||||
seghdr.sync1 = le32_to_cpu(shptr[0]);
|
||||
seghdr.sync2 = le32_to_cpu(shptr[1]);
|
||||
seghdr.addr = le32_to_cpu(shptr[2]);
|
||||
seghdr.size = le32_to_cpu(shptr[3]);
|
||||
|
||||
offset += sizeof(seghdr);
|
||||
if (seghdr.sync1 != APU_ROM_SYNC1 ||
|
||||
seghdr.sync2 != APU_ROM_SYNC2) {
|
||||
|
@ -434,6 +434,7 @@ static int epu_dma_done_irq(struct cx18 *cx, struct cx18_in_work_order *order)
|
||||
{
|
||||
u32 handle, mdl_ack_offset, mdl_ack_count;
|
||||
struct cx18_mailbox *mb;
|
||||
int i;
|
||||
|
||||
mb = &order->mb;
|
||||
handle = mb->args[0];
|
||||
@ -447,8 +448,9 @@ static int epu_dma_done_irq(struct cx18 *cx, struct cx18_in_work_order *order)
|
||||
return -1;
|
||||
}
|
||||
|
||||
cx18_memcpy_fromio(cx, order->mdl_ack, cx->enc_mem + mdl_ack_offset,
|
||||
sizeof(struct cx18_mdl_ack) * mdl_ack_count);
|
||||
for (i = 0; i < sizeof(struct cx18_mdl_ack) * mdl_ack_count; i += sizeof(u32))
|
||||
((u32 *)order->mdl_ack)[i / sizeof(u32)] =
|
||||
cx18_readl(cx, cx->enc_mem + mdl_ack_offset + i);
|
||||
|
||||
if ((order->flags & CX18_F_EWO_MB_STALE) == 0)
|
||||
mb_ack_irq(cx, order);
|
||||
@ -538,6 +540,7 @@ void cx18_api_epu_cmd_irq(struct cx18 *cx, int rpu)
|
||||
struct cx18_mailbox *order_mb;
|
||||
struct cx18_in_work_order *order;
|
||||
int submit;
|
||||
int i;
|
||||
|
||||
switch (rpu) {
|
||||
case CPU:
|
||||
@ -562,10 +565,12 @@ void cx18_api_epu_cmd_irq(struct cx18 *cx, int rpu)
|
||||
order_mb = &order->mb;
|
||||
|
||||
/* mb->cmd and mb->args[0] through mb->args[2] */
|
||||
cx18_memcpy_fromio(cx, &order_mb->cmd, &mb->cmd, 4 * sizeof(u32));
|
||||
for (i = 0; i < 4; i++)
|
||||
(&order_mb->cmd)[i] = cx18_readl(cx, &mb->cmd + i);
|
||||
|
||||
/* mb->request and mb->ack. N.B. we want to read mb->ack last */
|
||||
cx18_memcpy_fromio(cx, &order_mb->request, &mb->request,
|
||||
2 * sizeof(u32));
|
||||
for (i = 0; i < 2; i++)
|
||||
(&order_mb->request)[i] = cx18_readl(cx, &mb->request + i);
|
||||
|
||||
if (order_mb->request == order_mb->ack) {
|
||||
CX18_DEBUG_WARN("Possibly falling behind: %s self-ack'ed our "
|
||||
|
@ -471,7 +471,7 @@ static int blackbird_load_firmware(struct cx8802_dev *dev)
|
||||
dprintk(1,"Loading firmware ...\n");
|
||||
dataptr = (u32*)firmware->data;
|
||||
for (i = 0; i < (firmware->size >> 2); i++) {
|
||||
value = *dataptr;
|
||||
value = le32_to_cpu(*dataptr);
|
||||
checksum += ~value;
|
||||
memory_write(dev->core, i, value);
|
||||
dataptr++;
|
||||
|
@ -527,6 +527,8 @@ static int em28xx_ir_init(struct em28xx *dev)
|
||||
|
||||
if (dev->board.ir_codes == NULL) {
|
||||
/* No remote control support */
|
||||
em28xx_warn("Remote control support is not available for "
|
||||
"this card.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1653,7 +1653,7 @@ static int vidioc_streamoff(struct file *file, void *priv,
|
||||
enum v4l2_buf_type buf_type)
|
||||
{
|
||||
struct gspca_dev *gspca_dev = video_drvdata(file);
|
||||
int ret;
|
||||
int i, ret;
|
||||
|
||||
if (buf_type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
|
||||
return -EINVAL;
|
||||
@ -1678,6 +1678,8 @@ static int vidioc_streamoff(struct file *file, void *priv,
|
||||
wake_up_interruptible(&gspca_dev->wq);
|
||||
|
||||
/* empty the transfer queues */
|
||||
for (i = 0; i < gspca_dev->nframes; i++)
|
||||
gspca_dev->frame[i].v4l2_buf.flags &= ~BUF_ALL_FLAGS;
|
||||
atomic_set(&gspca_dev->fr_q, 0);
|
||||
atomic_set(&gspca_dev->fr_i, 0);
|
||||
gspca_dev->fr_o = 0;
|
||||
|
@ -96,7 +96,7 @@ static void setbrightness(struct gspca_dev *gspca_dev);
|
||||
static void setcontrast(struct gspca_dev *gspca_dev);
|
||||
static void setgain(struct gspca_dev *gspca_dev);
|
||||
static void setexposure(struct gspca_dev *gspca_dev);
|
||||
static int sd_setagc(struct gspca_dev *gspca_dev, __s32 val);
|
||||
static void setagc(struct gspca_dev *gspca_dev);
|
||||
static void setawb(struct gspca_dev *gspca_dev);
|
||||
static void setaec(struct gspca_dev *gspca_dev);
|
||||
static void setsharpness(struct gspca_dev *gspca_dev);
|
||||
@ -189,7 +189,7 @@ static const struct ctrl sd_ctrls[] = {
|
||||
.step = 1,
|
||||
.default_value = 1,
|
||||
},
|
||||
.set = sd_setagc
|
||||
.set_control = setagc
|
||||
},
|
||||
[AWB] = {
|
||||
{
|
||||
@ -851,6 +851,7 @@ static int sccb_check_status(struct gspca_dev *gspca_dev)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
msleep(10);
|
||||
data = ov534_reg_read(gspca_dev, OV534_REG_STATUS);
|
||||
|
||||
switch (data) {
|
||||
@ -1242,10 +1243,6 @@ static int sd_config(struct gspca_dev *gspca_dev,
|
||||
|
||||
cam->ctrls = sd->ctrls;
|
||||
|
||||
/* the auto white balance control works only when auto gain is set */
|
||||
if (sd_ctrls[AGC].qctrl.default_value == 0)
|
||||
gspca_dev->ctrl_inac |= (1 << AWB);
|
||||
|
||||
cam->cam_mode = ov772x_mode;
|
||||
cam->nmodes = ARRAY_SIZE(ov772x_mode);
|
||||
|
||||
@ -1486,29 +1483,6 @@ scan_next:
|
||||
} while (remaining_len > 0);
|
||||
}
|
||||
|
||||
static int sd_setagc(struct gspca_dev *gspca_dev, __s32 val)
|
||||
{
|
||||
struct sd *sd = (struct sd *) gspca_dev;
|
||||
|
||||
sd->ctrls[AGC].val = val;
|
||||
|
||||
/* the auto white balance control works only
|
||||
* when auto gain is set */
|
||||
if (val) {
|
||||
gspca_dev->ctrl_inac &= ~(1 << AWB);
|
||||
} else {
|
||||
gspca_dev->ctrl_inac |= (1 << AWB);
|
||||
if (sd->ctrls[AWB].val) {
|
||||
sd->ctrls[AWB].val = 0;
|
||||
if (gspca_dev->streaming)
|
||||
setawb(gspca_dev);
|
||||
}
|
||||
}
|
||||
if (gspca_dev->streaming)
|
||||
setagc(gspca_dev);
|
||||
return gspca_dev->usb_err;
|
||||
}
|
||||
|
||||
static int sd_querymenu(struct gspca_dev *gspca_dev,
|
||||
struct v4l2_querymenu *menu)
|
||||
{
|
||||
|
@ -1008,6 +1008,7 @@ static int sccb_check_status(struct gspca_dev *gspca_dev)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
msleep(10);
|
||||
data = reg_r(gspca_dev, OV534_REG_STATUS);
|
||||
|
||||
switch (data) {
|
||||
|
@ -418,7 +418,7 @@ static int sd_init_controls(struct gspca_dev *gspca_dev)
|
||||
struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
|
||||
|
||||
gspca_dev->vdev.ctrl_handler = hdl;
|
||||
v4l2_ctrl_handler_init(hdl, 4);
|
||||
v4l2_ctrl_handler_init(hdl, 5);
|
||||
|
||||
sd->contrast = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
|
||||
V4L2_CID_CONTRAST, 0, 15, 1, 7);
|
||||
|
@ -1761,7 +1761,6 @@ static int sd_init_controls(struct gspca_dev *gspca_dev)
|
||||
V4L2_CID_SATURATION, 0, 255, 1, 127);
|
||||
sd->hue = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
|
||||
V4L2_CID_HUE, -180, 180, 1, 0);
|
||||
v4l2_ctrl_cluster(4, &sd->brightness);
|
||||
|
||||
sd->gamma = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
|
||||
V4L2_CID_GAMMA, 0, 255, 1, 0x10);
|
||||
@ -1770,7 +1769,6 @@ static int sd_init_controls(struct gspca_dev *gspca_dev)
|
||||
V4L2_CID_BLUE_BALANCE, 0, 127, 1, 0x28);
|
||||
sd->red = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
|
||||
V4L2_CID_RED_BALANCE, 0, 127, 1, 0x28);
|
||||
v4l2_ctrl_cluster(2, &sd->blue);
|
||||
|
||||
if (sd->sensor != SENSOR_OV9655 && sd->sensor != SENSOR_SOI968 &&
|
||||
sd->sensor != SENSOR_OV7670 && sd->sensor != SENSOR_MT9M001 &&
|
||||
@ -1779,7 +1777,6 @@ static int sd_init_controls(struct gspca_dev *gspca_dev)
|
||||
V4L2_CID_HFLIP, 0, 1, 1, 0);
|
||||
sd->vflip = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
|
||||
V4L2_CID_VFLIP, 0, 1, 1, 0);
|
||||
v4l2_ctrl_cluster(2, &sd->hflip);
|
||||
}
|
||||
|
||||
if (sd->sensor != SENSOR_SOI968 && sd->sensor != SENSOR_MT9VPRB &&
|
||||
@ -1794,6 +1791,20 @@ static int sd_init_controls(struct gspca_dev *gspca_dev)
|
||||
V4L2_CID_GAIN, 0, 28, 1, 0);
|
||||
sd->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
|
||||
V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
|
||||
}
|
||||
|
||||
sd->jpegqual = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
|
||||
V4L2_CID_JPEG_COMPRESSION_QUALITY, 50, 90, 1, 80);
|
||||
if (hdl->error) {
|
||||
pr_err("Could not initialize controls\n");
|
||||
return hdl->error;
|
||||
}
|
||||
|
||||
v4l2_ctrl_cluster(4, &sd->brightness);
|
||||
v4l2_ctrl_cluster(2, &sd->blue);
|
||||
if (sd->hflip)
|
||||
v4l2_ctrl_cluster(2, &sd->hflip);
|
||||
if (sd->autogain) {
|
||||
if (sd->sensor == SENSOR_SOI968)
|
||||
/* this sensor doesn't have the exposure control and
|
||||
autogain is clustered with gain instead. This works
|
||||
@ -1803,13 +1814,6 @@ static int sd_init_controls(struct gspca_dev *gspca_dev)
|
||||
/* Otherwise autogain is clustered with exposure. */
|
||||
v4l2_ctrl_auto_cluster(2, &sd->autogain, 0, false);
|
||||
}
|
||||
|
||||
sd->jpegqual = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
|
||||
V4L2_CID_JPEG_COMPRESSION_QUALITY, 50, 90, 1, 80);
|
||||
if (hdl->error) {
|
||||
pr_err("Could not initialize controls\n");
|
||||
return hdl->error;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -3120,7 +3120,7 @@ static const struct sd_desc sd_desc = {
|
||||
| (SENSOR_ ## sensor << 8) \
|
||||
| (flags)
|
||||
static const struct usb_device_id device_table[] = {
|
||||
{USB_DEVICE(0x0458, 0x7025), BS(SN9C120, MI0360)},
|
||||
{USB_DEVICE(0x0458, 0x7025), BSF(SN9C120, MI0360B, F_PDN_INV)},
|
||||
{USB_DEVICE(0x0458, 0x702e), BS(SN9C120, OV7660)},
|
||||
{USB_DEVICE(0x045e, 0x00f5), BSF(SN9C105, OV7660, F_PDN_INV)},
|
||||
{USB_DEVICE(0x045e, 0x00f7), BSF(SN9C105, OV7660, F_PDN_INV)},
|
||||
|
@ -866,10 +866,10 @@ static int ivtv_setup_pci(struct ivtv *itv, struct pci_dev *pdev,
|
||||
pci_write_config_dword(pdev, 0x40, 0xffff);
|
||||
|
||||
IVTV_DEBUG_INFO("%d (rev %d) at %02x:%02x.%x, "
|
||||
"irq: %d, latency: %d, memory: 0x%lx\n",
|
||||
"irq: %d, latency: %d, memory: 0x%llx\n",
|
||||
pdev->device, pdev->revision, pdev->bus->number,
|
||||
PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn),
|
||||
pdev->irq, pci_latency, (unsigned long)itv->base_addr);
|
||||
pdev->irq, pci_latency, (u64)itv->base_addr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1007,7 +1007,7 @@ static int __devinit ivtv_probe(struct pci_dev *pdev,
|
||||
itv->cxhdl.priv = itv;
|
||||
itv->cxhdl.func = ivtv_api_func;
|
||||
|
||||
IVTV_DEBUG_INFO("base addr: 0x%08x\n", itv->base_addr);
|
||||
IVTV_DEBUG_INFO("base addr: 0x%llx\n", (u64)itv->base_addr);
|
||||
|
||||
/* PCI Device Setup */
|
||||
retval = ivtv_setup_pci(itv, pdev, pci_id);
|
||||
@ -1017,8 +1017,8 @@ static int __devinit ivtv_probe(struct pci_dev *pdev,
|
||||
goto free_mem;
|
||||
|
||||
/* map io memory */
|
||||
IVTV_DEBUG_INFO("attempting ioremap at 0x%08x len 0x%08x\n",
|
||||
itv->base_addr + IVTV_ENCODER_OFFSET, IVTV_ENCODER_SIZE);
|
||||
IVTV_DEBUG_INFO("attempting ioremap at 0x%llx len 0x%08x\n",
|
||||
(u64)itv->base_addr + IVTV_ENCODER_OFFSET, IVTV_ENCODER_SIZE);
|
||||
itv->enc_mem = ioremap_nocache(itv->base_addr + IVTV_ENCODER_OFFSET,
|
||||
IVTV_ENCODER_SIZE);
|
||||
if (!itv->enc_mem) {
|
||||
@ -1034,8 +1034,8 @@ static int __devinit ivtv_probe(struct pci_dev *pdev,
|
||||
}
|
||||
|
||||
if (itv->has_cx23415) {
|
||||
IVTV_DEBUG_INFO("attempting ioremap at 0x%08x len 0x%08x\n",
|
||||
itv->base_addr + IVTV_DECODER_OFFSET, IVTV_DECODER_SIZE);
|
||||
IVTV_DEBUG_INFO("attempting ioremap at 0x%llx len 0x%08x\n",
|
||||
(u64)itv->base_addr + IVTV_DECODER_OFFSET, IVTV_DECODER_SIZE);
|
||||
itv->dec_mem = ioremap_nocache(itv->base_addr + IVTV_DECODER_OFFSET,
|
||||
IVTV_DECODER_SIZE);
|
||||
if (!itv->dec_mem) {
|
||||
@ -1056,8 +1056,8 @@ static int __devinit ivtv_probe(struct pci_dev *pdev,
|
||||
}
|
||||
|
||||
/* map registers memory */
|
||||
IVTV_DEBUG_INFO("attempting ioremap at 0x%08x len 0x%08x\n",
|
||||
itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
|
||||
IVTV_DEBUG_INFO("attempting ioremap at 0x%llx len 0x%08x\n",
|
||||
(u64)itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
|
||||
itv->reg_mem =
|
||||
ioremap_nocache(itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
|
||||
if (!itv->reg_mem) {
|
||||
|
@ -622,7 +622,7 @@ struct ivtv {
|
||||
struct v4l2_subdev *sd_video; /* controlling video decoder subdev */
|
||||
struct v4l2_subdev *sd_audio; /* controlling audio subdev */
|
||||
struct v4l2_subdev *sd_muxer; /* controlling audio muxer subdev */
|
||||
u32 base_addr; /* PCI resource base address */
|
||||
resource_size_t base_addr; /* PCI resource base address */
|
||||
volatile void __iomem *enc_mem; /* pointer to mapped encoder memory */
|
||||
volatile void __iomem *dec_mem; /* pointer to mapped decoder memory */
|
||||
volatile void __iomem *reg_mem; /* pointer to mapped registers */
|
||||
|
@ -110,22 +110,6 @@ enum {
|
||||
V4L2_M2M_DST = 1,
|
||||
};
|
||||
|
||||
/* Source and destination queue data */
|
||||
static struct m2mtest_q_data q_data[2];
|
||||
|
||||
static struct m2mtest_q_data *get_q_data(enum v4l2_buf_type type)
|
||||
{
|
||||
switch (type) {
|
||||
case V4L2_BUF_TYPE_VIDEO_OUTPUT:
|
||||
return &q_data[V4L2_M2M_SRC];
|
||||
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
|
||||
return &q_data[V4L2_M2M_DST];
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#define V4L2_CID_TRANS_TIME_MSEC V4L2_CID_PRIVATE_BASE
|
||||
#define V4L2_CID_TRANS_NUM_BUFS (V4L2_CID_PRIVATE_BASE + 1)
|
||||
|
||||
@ -198,8 +182,26 @@ struct m2mtest_ctx {
|
||||
int aborting;
|
||||
|
||||
struct v4l2_m2m_ctx *m2m_ctx;
|
||||
|
||||
/* Source and destination queue data */
|
||||
struct m2mtest_q_data q_data[2];
|
||||
};
|
||||
|
||||
static struct m2mtest_q_data *get_q_data(struct m2mtest_ctx *ctx,
|
||||
enum v4l2_buf_type type)
|
||||
{
|
||||
switch (type) {
|
||||
case V4L2_BUF_TYPE_VIDEO_OUTPUT:
|
||||
return &ctx->q_data[V4L2_M2M_SRC];
|
||||
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
|
||||
return &ctx->q_data[V4L2_M2M_DST];
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
static struct v4l2_queryctrl *get_ctrl(int id)
|
||||
{
|
||||
int i;
|
||||
@ -223,7 +225,7 @@ static int device_process(struct m2mtest_ctx *ctx,
|
||||
int tile_w, bytes_left;
|
||||
int width, height, bytesperline;
|
||||
|
||||
q_data = get_q_data(V4L2_BUF_TYPE_VIDEO_OUTPUT);
|
||||
q_data = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT);
|
||||
|
||||
width = q_data->width;
|
||||
height = q_data->height;
|
||||
@ -436,7 +438,7 @@ static int vidioc_g_fmt(struct m2mtest_ctx *ctx, struct v4l2_format *f)
|
||||
if (!vq)
|
||||
return -EINVAL;
|
||||
|
||||
q_data = get_q_data(f->type);
|
||||
q_data = get_q_data(ctx, f->type);
|
||||
|
||||
f->fmt.pix.width = q_data->width;
|
||||
f->fmt.pix.height = q_data->height;
|
||||
@ -535,7 +537,7 @@ static int vidioc_s_fmt(struct m2mtest_ctx *ctx, struct v4l2_format *f)
|
||||
if (!vq)
|
||||
return -EINVAL;
|
||||
|
||||
q_data = get_q_data(f->type);
|
||||
q_data = get_q_data(ctx, f->type);
|
||||
if (!q_data)
|
||||
return -EINVAL;
|
||||
|
||||
@ -747,7 +749,7 @@ static int m2mtest_queue_setup(struct vb2_queue *vq,
|
||||
struct m2mtest_q_data *q_data;
|
||||
unsigned int size, count = *nbuffers;
|
||||
|
||||
q_data = get_q_data(vq->type);
|
||||
q_data = get_q_data(ctx, vq->type);
|
||||
|
||||
size = q_data->width * q_data->height * q_data->fmt->depth >> 3;
|
||||
|
||||
@ -775,7 +777,7 @@ static int m2mtest_buf_prepare(struct vb2_buffer *vb)
|
||||
|
||||
dprintk(ctx->dev, "type: %d\n", vb->vb2_queue->type);
|
||||
|
||||
q_data = get_q_data(vb->vb2_queue->type);
|
||||
q_data = get_q_data(ctx, vb->vb2_queue->type);
|
||||
|
||||
if (vb2_plane_size(vb, 0) < q_data->sizeimage) {
|
||||
dprintk(ctx->dev, "%s data will not fit into plane (%lu < %lu)\n",
|
||||
@ -860,6 +862,9 @@ static int m2mtest_open(struct file *file)
|
||||
ctx->transtime = MEM2MEM_DEF_TRANSTIME;
|
||||
ctx->num_processed = 0;
|
||||
|
||||
ctx->q_data[V4L2_M2M_SRC].fmt = &formats[0];
|
||||
ctx->q_data[V4L2_M2M_DST].fmt = &formats[0];
|
||||
|
||||
ctx->m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev, ctx, &queue_init);
|
||||
|
||||
if (IS_ERR(ctx->m2m_ctx)) {
|
||||
@ -986,9 +991,6 @@ static int m2mtest_probe(struct platform_device *pdev)
|
||||
goto err_m2m;
|
||||
}
|
||||
|
||||
q_data[V4L2_M2M_SRC].fmt = &formats[0];
|
||||
q_data[V4L2_M2M_DST].fmt = &formats[0];
|
||||
|
||||
return 0;
|
||||
|
||||
v4l2_m2m_release(dev->m2m_dev);
|
||||
|
@ -345,19 +345,6 @@ static struct mx2_fmt_cfg mx27_emma_prp_table[] = {
|
||||
PRP_INTR_CH2OVF,
|
||||
}
|
||||
},
|
||||
{
|
||||
.in_fmt = V4L2_MBUS_FMT_UYVY8_2X8,
|
||||
.out_fmt = V4L2_PIX_FMT_YUV420,
|
||||
.cfg = {
|
||||
.channel = 2,
|
||||
.in_fmt = PRP_CNTL_DATA_IN_YUV422,
|
||||
.out_fmt = PRP_CNTL_CH2_OUT_YUV420,
|
||||
.src_pixel = 0x22000888, /* YUV422 (YUYV) */
|
||||
.irq_flags = PRP_INTR_RDERR | PRP_INTR_CH2WERR |
|
||||
PRP_INTR_CH2FC | PRP_INTR_LBOVF |
|
||||
PRP_INTR_CH2OVF,
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
static struct mx2_fmt_cfg *mx27_emma_prp_get_format(
|
||||
@ -984,7 +971,6 @@ static int mx2_camera_set_bus_param(struct soc_camera_device *icd)
|
||||
struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
|
||||
struct mx2_camera_dev *pcdev = ici->priv;
|
||||
struct v4l2_mbus_config cfg = {.type = V4L2_MBUS_PARALLEL,};
|
||||
const struct soc_camera_format_xlate *xlate;
|
||||
unsigned long common_flags;
|
||||
int ret;
|
||||
int bytesperline;
|
||||
@ -1029,31 +1015,14 @@ static int mx2_camera_set_bus_param(struct soc_camera_device *icd)
|
||||
return ret;
|
||||
}
|
||||
|
||||
xlate = soc_camera_xlate_by_fourcc(icd, pixfmt);
|
||||
if (!xlate) {
|
||||
dev_warn(icd->parent, "Format %x not found\n", pixfmt);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (xlate->code == V4L2_MBUS_FMT_YUYV8_2X8) {
|
||||
csicr1 |= CSICR1_PACK_DIR;
|
||||
csicr1 &= ~CSICR1_SWAP16_EN;
|
||||
dev_dbg(icd->parent, "already yuyv format, don't convert\n");
|
||||
} else if (xlate->code == V4L2_MBUS_FMT_UYVY8_2X8) {
|
||||
csicr1 &= ~CSICR1_PACK_DIR;
|
||||
csicr1 |= CSICR1_SWAP16_EN;
|
||||
dev_dbg(icd->parent, "convert uyvy mbus format into yuyv\n");
|
||||
} else {
|
||||
dev_warn(icd->parent, "mbus format not supported\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (common_flags & V4L2_MBUS_PCLK_SAMPLE_RISING)
|
||||
csicr1 |= CSICR1_REDGE;
|
||||
if (common_flags & V4L2_MBUS_VSYNC_ACTIVE_HIGH)
|
||||
csicr1 |= CSICR1_SOF_POL;
|
||||
if (common_flags & V4L2_MBUS_HSYNC_ACTIVE_HIGH)
|
||||
csicr1 |= CSICR1_HSYNC_POL;
|
||||
if (pcdev->platform_flags & MX2_CAMERA_SWAP16)
|
||||
csicr1 |= CSICR1_SWAP16_EN;
|
||||
if (pcdev->platform_flags & MX2_CAMERA_EXT_VSYNC)
|
||||
csicr1 |= CSICR1_EXT_VSYNC;
|
||||
if (pcdev->platform_flags & MX2_CAMERA_CCIR)
|
||||
@ -1064,6 +1033,8 @@ static int mx2_camera_set_bus_param(struct soc_camera_device *icd)
|
||||
csicr1 |= CSICR1_GCLK_MODE;
|
||||
if (pcdev->platform_flags & MX2_CAMERA_INV_DATA)
|
||||
csicr1 |= CSICR1_INV_DATA;
|
||||
if (pcdev->platform_flags & MX2_CAMERA_PACK_DIR_MSB)
|
||||
csicr1 |= CSICR1_PACK_DIR;
|
||||
|
||||
pcdev->csicr1 = csicr1;
|
||||
|
||||
@ -1138,8 +1109,7 @@ static int mx2_camera_get_formats(struct soc_camera_device *icd,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (code == V4L2_MBUS_FMT_YUYV8_2X8 ||
|
||||
code == V4L2_MBUS_FMT_UYVY8_2X8) {
|
||||
if (code == V4L2_MBUS_FMT_YUYV8_2X8) {
|
||||
formats++;
|
||||
if (xlate) {
|
||||
/*
|
||||
@ -1155,18 +1125,6 @@ static int mx2_camera_get_formats(struct soc_camera_device *icd,
|
||||
}
|
||||
}
|
||||
|
||||
if (code == V4L2_MBUS_FMT_UYVY8_2X8) {
|
||||
formats++;
|
||||
if (xlate) {
|
||||
xlate->host_fmt =
|
||||
soc_mbus_get_fmtdesc(V4L2_MBUS_FMT_YUYV8_2X8);
|
||||
xlate->code = code;
|
||||
dev_dbg(dev, "Providing host format %s for sensor code %d\n",
|
||||
xlate->host_fmt->name, code);
|
||||
xlate++;
|
||||
}
|
||||
}
|
||||
|
||||
/* Generic pass-trough */
|
||||
formats++;
|
||||
if (xlate) {
|
||||
|
@ -615,7 +615,7 @@ int fimc_ctrls_create(struct fimc_ctx *ctx)
|
||||
ctx->effect.type = FIMC_REG_CIIMGEFF_FIN_BYPASS;
|
||||
|
||||
if (!handler->error) {
|
||||
v4l2_ctrl_cluster(3, &ctrls->colorfx);
|
||||
v4l2_ctrl_cluster(2, &ctrls->colorfx);
|
||||
ctrls->ready = true;
|
||||
}
|
||||
|
||||
|
@ -164,10 +164,15 @@
|
||||
decoded pic */
|
||||
#define S5P_FIMV_SI_DISPLAY_Y_ADR 0x2010 /* luma addr of displayed pic */
|
||||
#define S5P_FIMV_SI_DISPLAY_C_ADR 0x2014 /* chroma addrof displayed pic */
|
||||
|
||||
#define S5P_FIMV_SI_CONSUMED_BYTES 0x2018 /* Consumed number of bytes to
|
||||
decode a frame */
|
||||
#define S5P_FIMV_SI_DISPLAY_STATUS 0x201c /* status of decoded picture */
|
||||
|
||||
#define S5P_FIMV_SI_DECODE_Y_ADR 0x2024 /* luma addr of decoded pic */
|
||||
#define S5P_FIMV_SI_DECODE_C_ADR 0x2028 /* chroma addrof decoded pic */
|
||||
#define S5P_FIMV_SI_DECODE_STATUS 0x202c /* status of decoded picture */
|
||||
|
||||
#define S5P_FIMV_SI_CH0_SB_ST_ADR 0x2044 /* start addr of stream buf */
|
||||
#define S5P_FIMV_SI_CH0_SB_FRM_SIZE 0x2048 /* size of stream buf */
|
||||
#define S5P_FIMV_SI_CH0_DESC_ADR 0x204c /* addr of descriptor buf */
|
||||
|
@ -627,13 +627,13 @@ static int s5p_mfc_dec_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
|
||||
switch (ctrl->id) {
|
||||
case V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY:
|
||||
ctx->loop_filter_mpeg4 = ctrl->val;
|
||||
ctx->display_delay = ctrl->val;
|
||||
break;
|
||||
case V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE:
|
||||
ctx->display_delay_enable = ctrl->val;
|
||||
break;
|
||||
case V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER:
|
||||
ctx->display_delay = ctrl->val;
|
||||
ctx->loop_filter_mpeg4 = ctrl->val;
|
||||
break;
|
||||
case V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE:
|
||||
ctx->slice_interface = ctrl->val;
|
||||
|
@ -243,12 +243,6 @@ static struct mfc_control controls[] = {
|
||||
.minimum = V4L2_MPEG_VIDEO_H264_LEVEL_1_0,
|
||||
.maximum = V4L2_MPEG_VIDEO_H264_LEVEL_4_0,
|
||||
.default_value = V4L2_MPEG_VIDEO_H264_LEVEL_1_0,
|
||||
.menu_skip_mask = ~(
|
||||
(1 << V4L2_MPEG_VIDEO_H264_LEVEL_4_1) |
|
||||
(1 << V4L2_MPEG_VIDEO_H264_LEVEL_4_2) |
|
||||
(1 << V4L2_MPEG_VIDEO_H264_LEVEL_5_0) |
|
||||
(1 << V4L2_MPEG_VIDEO_H264_LEVEL_5_1)
|
||||
),
|
||||
},
|
||||
{
|
||||
.id = V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL,
|
||||
@ -494,7 +488,7 @@ static struct mfc_control controls[] = {
|
||||
.type = V4L2_CTRL_TYPE_MENU,
|
||||
.minimum = V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_UNSPECIFIED,
|
||||
.maximum = V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_EXTENDED,
|
||||
.default_value = 0,
|
||||
.default_value = V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_UNSPECIFIED,
|
||||
.menu_skip_mask = 0,
|
||||
},
|
||||
{
|
||||
@ -534,7 +528,7 @@ static struct mfc_control controls[] = {
|
||||
.type = V4L2_CTRL_TYPE_MENU,
|
||||
.minimum = V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE,
|
||||
.maximum = V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE,
|
||||
.default_value = 0,
|
||||
.default_value = V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE,
|
||||
.menu_skip_mask = 0,
|
||||
},
|
||||
{
|
||||
@ -907,6 +901,8 @@ static int vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f)
|
||||
mfc_err("failed to try output format\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
v4l_bound_align_image(&pix_fmt_mp->width, 8, 1920, 1,
|
||||
&pix_fmt_mp->height, 4, 1080, 1, 0);
|
||||
} else {
|
||||
mfc_err("invalid buf type\n");
|
||||
return -EINVAL;
|
||||
|
@ -57,10 +57,12 @@ void s5p_mfc_cleanup_queue(struct list_head *lh, struct vb2_queue *vq);
|
||||
S5P_FIMV_SI_DISPLAY_Y_ADR) << \
|
||||
MFC_OFFSET_SHIFT)
|
||||
#define s5p_mfc_get_dec_y_adr() (readl(dev->regs_base + \
|
||||
S5P_FIMV_SI_DISPLAY_Y_ADR) << \
|
||||
S5P_FIMV_SI_DECODE_Y_ADR) << \
|
||||
MFC_OFFSET_SHIFT)
|
||||
#define s5p_mfc_get_dspl_status() readl(dev->regs_base + \
|
||||
S5P_FIMV_SI_DISPLAY_STATUS)
|
||||
#define s5p_mfc_get_dec_status() readl(dev->regs_base + \
|
||||
S5P_FIMV_SI_DECODE_STATUS)
|
||||
#define s5p_mfc_get_frame_type() (readl(dev->regs_base + \
|
||||
S5P_FIMV_DECODE_FRAME_TYPE) \
|
||||
& S5P_FIMV_DECODE_FRAME_MASK)
|
||||
|
@ -13,8 +13,7 @@
|
||||
#ifndef S5P_MFC_SHM_H_
|
||||
#define S5P_MFC_SHM_H_
|
||||
|
||||
enum MFC_SHM_OFS
|
||||
{
|
||||
enum MFC_SHM_OFS {
|
||||
EXTENEDED_DECODE_STATUS = 0x00, /* D */
|
||||
SET_FRAME_TAG = 0x04, /* D */
|
||||
GET_FRAME_TAG_TOP = 0x08, /* D */
|
||||
|
@ -1,6 +1,6 @@
|
||||
config VIDEO_SMIAPP
|
||||
tristate "SMIA++/SMIA sensor support"
|
||||
depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API
|
||||
depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && HAVE_CLK
|
||||
select VIDEO_SMIAPP_PLL
|
||||
---help---
|
||||
This is a generic driver for SMIA++/SMIA camera modules.
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/v4l2-mediabus.h>
|
||||
#include <media/v4l2-device.h>
|
||||
|
||||
|
@ -1178,7 +1178,7 @@ static int tuner_g_tuner(struct v4l2_subdev *sd, struct v4l2_tuner *vt)
|
||||
return 0;
|
||||
if (vt->type == t->mode && analog_ops->get_afc)
|
||||
vt->afc = analog_ops->get_afc(&t->fe);
|
||||
if (t->mode != V4L2_TUNER_RADIO) {
|
||||
if (vt->type != V4L2_TUNER_RADIO) {
|
||||
vt->capability |= V4L2_TUNER_CAP_NORM;
|
||||
vt->rangelow = tv_range[0] * 16;
|
||||
vt->rangehigh = tv_range[1] * 16;
|
||||
|
@ -656,7 +656,7 @@ static void determine_valid_ioctls(struct video_device *vdev)
|
||||
SET_VALID_IOCTL(ops, VIDIOC_TRY_ENCODER_CMD, vidioc_try_encoder_cmd);
|
||||
SET_VALID_IOCTL(ops, VIDIOC_DECODER_CMD, vidioc_decoder_cmd);
|
||||
SET_VALID_IOCTL(ops, VIDIOC_TRY_DECODER_CMD, vidioc_try_decoder_cmd);
|
||||
if (ops->vidioc_g_parm || vdev->current_norm)
|
||||
if (ops->vidioc_g_parm || vdev->vfl_type == VFL_TYPE_GRABBER)
|
||||
set_bit(_IOC_NR(VIDIOC_G_PARM), valid_ioctls);
|
||||
SET_VALID_IOCTL(ops, VIDIOC_S_PARM, vidioc_s_parm);
|
||||
SET_VALID_IOCTL(ops, VIDIOC_G_TUNER, vidioc_g_tuner);
|
||||
@ -679,6 +679,8 @@ static void determine_valid_ioctls(struct video_device *vdev)
|
||||
SET_VALID_IOCTL(ops, VIDIOC_QUERY_DV_PRESET, vidioc_query_dv_preset);
|
||||
SET_VALID_IOCTL(ops, VIDIOC_S_DV_TIMINGS, vidioc_s_dv_timings);
|
||||
SET_VALID_IOCTL(ops, VIDIOC_G_DV_TIMINGS, vidioc_g_dv_timings);
|
||||
SET_VALID_IOCTL(ops, VIDIOC_ENUM_DV_TIMINGS, vidioc_enum_dv_timings);
|
||||
SET_VALID_IOCTL(ops, VIDIOC_QUERY_DV_TIMINGS, vidioc_query_dv_timings);
|
||||
/* yes, really vidioc_subscribe_event */
|
||||
SET_VALID_IOCTL(ops, VIDIOC_DQEVENT, vidioc_subscribe_event);
|
||||
SET_VALID_IOCTL(ops, VIDIOC_SUBSCRIBE_EVENT, vidioc_subscribe_event);
|
||||
|
@ -1680,6 +1680,7 @@ static long __video_do_ioctl(struct file *file,
|
||||
break;
|
||||
|
||||
ret = 0;
|
||||
p->parm.capture.readbuffers = 2;
|
||||
if (ops->vidioc_g_std)
|
||||
ret = ops->vidioc_g_std(file, fh, &std);
|
||||
if (ret == 0)
|
||||
|
@ -2561,7 +2561,7 @@ static int vino_acquire_input(struct vino_channel_settings *vcs)
|
||||
} else if (vino_drvdata->decoder
|
||||
&& (vino_drvdata->decoder_owner == VINO_NO_CHANNEL)) {
|
||||
int input;
|
||||
int data_norm;
|
||||
int data_norm = 0;
|
||||
v4l2_std_id norm;
|
||||
|
||||
input = VINO_INPUT_COMPOSITE;
|
||||
@ -2651,7 +2651,7 @@ static int vino_set_input(struct vino_channel_settings *vcs, int input)
|
||||
}
|
||||
|
||||
if (vino_drvdata->decoder_owner == vcs->channel) {
|
||||
int data_norm;
|
||||
int data_norm = 0;
|
||||
v4l2_std_id norm;
|
||||
|
||||
ret = decoder_call(video, s_routing,
|
||||
|
@ -1149,10 +1149,14 @@ static ssize_t
|
||||
vivi_read(struct file *file, char __user *data, size_t count, loff_t *ppos)
|
||||
{
|
||||
struct vivi_dev *dev = video_drvdata(file);
|
||||
int err;
|
||||
|
||||
dprintk(dev, 1, "read called\n");
|
||||
return vb2_read(&dev->vb_vidq, data, count, ppos,
|
||||
mutex_lock(&dev->mutex);
|
||||
err = vb2_read(&dev->vb_vidq, data, count, ppos,
|
||||
file->f_flags & O_NONBLOCK);
|
||||
mutex_unlock(&dev->mutex);
|
||||
return err;
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
|
@ -129,6 +129,7 @@ static void send_space_homebrew(long length);
|
||||
|
||||
static struct lirc_serial hardware[] = {
|
||||
[LIRC_HOMEBREW] = {
|
||||
.lock = __SPIN_LOCK_UNLOCKED(hardware[LIRC_HOMEBREW].lock),
|
||||
.signal_pin = UART_MSR_DCD,
|
||||
.signal_pin_change = UART_MSR_DDCD,
|
||||
.on = (UART_MCR_RTS | UART_MCR_OUT2 | UART_MCR_DTR),
|
||||
@ -145,6 +146,7 @@ static struct lirc_serial hardware[] = {
|
||||
},
|
||||
|
||||
[LIRC_IRDEO] = {
|
||||
.lock = __SPIN_LOCK_UNLOCKED(hardware[LIRC_IRDEO].lock),
|
||||
.signal_pin = UART_MSR_DSR,
|
||||
.signal_pin_change = UART_MSR_DDSR,
|
||||
.on = UART_MCR_OUT2,
|
||||
@ -156,6 +158,7 @@ static struct lirc_serial hardware[] = {
|
||||
},
|
||||
|
||||
[LIRC_IRDEO_REMOTE] = {
|
||||
.lock = __SPIN_LOCK_UNLOCKED(hardware[LIRC_IRDEO_REMOTE].lock),
|
||||
.signal_pin = UART_MSR_DSR,
|
||||
.signal_pin_change = UART_MSR_DDSR,
|
||||
.on = (UART_MCR_RTS | UART_MCR_DTR | UART_MCR_OUT2),
|
||||
@ -167,6 +170,7 @@ static struct lirc_serial hardware[] = {
|
||||
},
|
||||
|
||||
[LIRC_ANIMAX] = {
|
||||
.lock = __SPIN_LOCK_UNLOCKED(hardware[LIRC_ANIMAX].lock),
|
||||
.signal_pin = UART_MSR_DCD,
|
||||
.signal_pin_change = UART_MSR_DDCD,
|
||||
.on = 0,
|
||||
@ -177,6 +181,7 @@ static struct lirc_serial hardware[] = {
|
||||
},
|
||||
|
||||
[LIRC_IGOR] = {
|
||||
.lock = __SPIN_LOCK_UNLOCKED(hardware[LIRC_IGOR].lock),
|
||||
.signal_pin = UART_MSR_DSR,
|
||||
.signal_pin_change = UART_MSR_DDSR,
|
||||
.on = (UART_MCR_RTS | UART_MCR_OUT2 | UART_MCR_DTR),
|
||||
@ -201,6 +206,7 @@ static struct lirc_serial hardware[] = {
|
||||
* See also http://www.nslu2-linux.org for this device
|
||||
*/
|
||||
[LIRC_NSLU2] = {
|
||||
.lock = __SPIN_LOCK_UNLOCKED(hardware[LIRC_NSLU2].lock),
|
||||
.signal_pin = UART_MSR_CTS,
|
||||
.signal_pin_change = UART_MSR_DCTS,
|
||||
.on = (UART_MCR_RTS | UART_MCR_OUT2 | UART_MCR_DTR),
|
||||
|
@ -2642,9 +2642,9 @@ struct v4l2_create_buffers {
|
||||
|
||||
/* Experimental, these three ioctls may change over the next couple of kernel
|
||||
versions. */
|
||||
#define VIDIOC_ENUM_DV_TIMINGS _IOWR('V', 96, struct v4l2_enum_dv_timings)
|
||||
#define VIDIOC_QUERY_DV_TIMINGS _IOR('V', 97, struct v4l2_dv_timings)
|
||||
#define VIDIOC_DV_TIMINGS_CAP _IOWR('V', 98, struct v4l2_dv_timings_cap)
|
||||
#define VIDIOC_ENUM_DV_TIMINGS _IOWR('V', 98, struct v4l2_enum_dv_timings)
|
||||
#define VIDIOC_QUERY_DV_TIMINGS _IOR('V', 99, struct v4l2_dv_timings)
|
||||
#define VIDIOC_DV_TIMINGS_CAP _IOWR('V', 100, struct v4l2_dv_timings_cap)
|
||||
|
||||
/* Reminder: when adding new ioctls please add support for them to
|
||||
drivers/media/video/v4l2-compat-ioctl32.c as well! */
|
||||
|
@ -44,6 +44,7 @@ struct snd_tea575x_ops {
|
||||
|
||||
struct snd_tea575x {
|
||||
struct v4l2_device *v4l2_dev;
|
||||
struct v4l2_file_operations fops;
|
||||
struct video_device vd; /* video device */
|
||||
int radio_nr; /* radio_nr */
|
||||
bool tea5759; /* 5759 chip is present */
|
||||
@ -62,7 +63,7 @@ struct snd_tea575x {
|
||||
int (*ext_init)(struct snd_tea575x *tea);
|
||||
};
|
||||
|
||||
int snd_tea575x_init(struct snd_tea575x *tea);
|
||||
int snd_tea575x_init(struct snd_tea575x *tea, struct module *owner);
|
||||
void snd_tea575x_exit(struct snd_tea575x *tea);
|
||||
|
||||
#endif /* __SOUND_TEA575X_TUNER_H */
|
||||
|
@ -37,8 +37,8 @@ MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>");
|
||||
MODULE_DESCRIPTION("Routines for control of TEA5757/5759 Philips AM/FM radio tuner chips");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
#define FREQ_LO (76U * 16000)
|
||||
#define FREQ_HI (108U * 16000)
|
||||
#define FREQ_LO ((tea->tea5759 ? 760 : 875) * 1600U)
|
||||
#define FREQ_HI ((tea->tea5759 ? 910 : 1080) * 1600U)
|
||||
|
||||
/*
|
||||
* definitions
|
||||
@ -120,9 +120,9 @@ static u32 snd_tea575x_read(struct snd_tea575x *tea)
|
||||
return data;
|
||||
}
|
||||
|
||||
static u32 snd_tea575x_get_freq(struct snd_tea575x *tea)
|
||||
static u32 snd_tea575x_val_to_freq(struct snd_tea575x *tea, u32 val)
|
||||
{
|
||||
u32 freq = snd_tea575x_read(tea) & TEA575X_BIT_FREQ_MASK;
|
||||
u32 freq = val & TEA575X_BIT_FREQ_MASK;
|
||||
|
||||
if (freq == 0)
|
||||
return freq;
|
||||
@ -139,6 +139,11 @@ static u32 snd_tea575x_get_freq(struct snd_tea575x *tea)
|
||||
return clamp(freq * 16, FREQ_LO, FREQ_HI); /* from kHz */
|
||||
}
|
||||
|
||||
static u32 snd_tea575x_get_freq(struct snd_tea575x *tea)
|
||||
{
|
||||
return snd_tea575x_val_to_freq(tea, snd_tea575x_read(tea));
|
||||
}
|
||||
|
||||
static void snd_tea575x_set_freq(struct snd_tea575x *tea)
|
||||
{
|
||||
u32 freq = tea->freq;
|
||||
@ -156,6 +161,7 @@ static void snd_tea575x_set_freq(struct snd_tea575x *tea)
|
||||
tea->val &= ~TEA575X_BIT_FREQ_MASK;
|
||||
tea->val |= freq & TEA575X_BIT_FREQ_MASK;
|
||||
snd_tea575x_write(tea, tea->val);
|
||||
tea->freq = snd_tea575x_val_to_freq(tea, tea->val);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -319,7 +325,6 @@ static int tea575x_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
}
|
||||
|
||||
static const struct v4l2_file_operations tea575x_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.unlocked_ioctl = video_ioctl2,
|
||||
.open = v4l2_fh_open,
|
||||
.release = v4l2_fh_release,
|
||||
@ -339,7 +344,6 @@ static const struct v4l2_ioctl_ops tea575x_ioctl_ops = {
|
||||
};
|
||||
|
||||
static const struct video_device tea575x_radio = {
|
||||
.fops = &tea575x_fops,
|
||||
.ioctl_ops = &tea575x_ioctl_ops,
|
||||
.release = video_device_release_empty,
|
||||
};
|
||||
@ -351,7 +355,7 @@ static const struct v4l2_ctrl_ops tea575x_ctrl_ops = {
|
||||
/*
|
||||
* initialize all the tea575x chips
|
||||
*/
|
||||
int snd_tea575x_init(struct snd_tea575x *tea)
|
||||
int snd_tea575x_init(struct snd_tea575x *tea, struct module *owner)
|
||||
{
|
||||
int retval;
|
||||
|
||||
@ -376,6 +380,9 @@ int snd_tea575x_init(struct snd_tea575x *tea)
|
||||
tea->vd.lock = &tea->mutex;
|
||||
tea->vd.v4l2_dev = tea->v4l2_dev;
|
||||
tea->vd.ctrl_handler = &tea->ctrl_handler;
|
||||
tea->fops = tea575x_fops;
|
||||
tea->fops.owner = owner;
|
||||
tea->vd.fops = &tea->fops;
|
||||
set_bit(V4L2_FL_USE_FH_PRIO, &tea->vd.flags);
|
||||
/* disable hw_freq_seek if we can't use it */
|
||||
if (tea->cannot_read_data)
|
||||
|
@ -2769,7 +2769,7 @@ static int __devinit snd_es1968_create(struct snd_card *card,
|
||||
chip->tea.ops = &snd_es1968_tea_ops;
|
||||
strlcpy(chip->tea.card, "SF64-PCE2", sizeof(chip->tea.card));
|
||||
sprintf(chip->tea.bus_info, "PCI:%s", pci_name(pci));
|
||||
if (!snd_tea575x_init(&chip->tea))
|
||||
if (!snd_tea575x_init(&chip->tea, THIS_MODULE))
|
||||
printk(KERN_INFO "es1968: detected TEA575x radio\n");
|
||||
#endif
|
||||
|
||||
|
@ -1254,7 +1254,7 @@ static int __devinit snd_fm801_create(struct snd_card *card,
|
||||
sprintf(chip->tea.bus_info, "PCI:%s", pci_name(pci));
|
||||
if ((tea575x_tuner & TUNER_TYPE_MASK) > 0 &&
|
||||
(tea575x_tuner & TUNER_TYPE_MASK) < 4) {
|
||||
if (snd_tea575x_init(&chip->tea)) {
|
||||
if (snd_tea575x_init(&chip->tea, THIS_MODULE)) {
|
||||
snd_printk(KERN_ERR "TEA575x radio not found\n");
|
||||
snd_fm801_free(chip);
|
||||
return -ENODEV;
|
||||
@ -1263,7 +1263,7 @@ static int __devinit snd_fm801_create(struct snd_card *card,
|
||||
/* autodetect tuner connection */
|
||||
for (tea575x_tuner = 1; tea575x_tuner <= 3; tea575x_tuner++) {
|
||||
chip->tea575x_tuner = tea575x_tuner;
|
||||
if (!snd_tea575x_init(&chip->tea)) {
|
||||
if (!snd_tea575x_init(&chip->tea, THIS_MODULE)) {
|
||||
snd_printk(KERN_INFO "detected TEA575x radio type %s\n",
|
||||
get_tea575x_gpio(chip)->name);
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user