aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-07-17 15:48:18 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-07-17 15:48:18 -0400
commit54a772b8aace3df8ad6af0bd0748f57d27f72b1d (patch)
treebb75460187efc5b699491da9cd7fa423e8de7b4b /drivers
parenta6b52a9db891e2a39e8a0fed6005935d8b1aa59c (diff)
parenta1ad5ec7f520c559becab2e989a397f1d6ac5eb0 (diff)
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6
* 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6: [media] tuner-core: fix a 2.6.39 regression with mt20xx [media] dvb_frontend: fix race condition in stopping/starting frontend [media] media: fix radio-sf16fmr2 build when SND is not enabled [media] MEDIA: Fix non-ISA_DMA_API link failure of sound code [media] nuvoton-cir: make idle timeout more sane [media] mceusb: increase default timeout to 100ms [media] mceusb: Timeout unit corrections [media] Revert "V4L/DVB: cx23885: Enable Message Signaled Interrupts(MSI)"
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/dvb/dvb-core/dvb_frontend.c8
-rw-r--r--drivers/media/radio/Kconfig4
-rw-r--r--drivers/media/rc/mceusb.c9
-rw-r--r--drivers/media/rc/nuvoton-cir.c2
-rw-r--r--drivers/media/video/cx23885/cx23885-core.c9
-rw-r--r--drivers/media/video/tuner-core.c16
6 files changed, 30 insertions, 18 deletions
diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c
index 98278041d75f..5b6b451d4694 100644
--- a/drivers/media/dvb/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb/dvb-core/dvb_frontend.c
@@ -1988,6 +1988,14 @@ static int dvb_frontend_open(struct inode *inode, struct file *file)
1988 if (dvbdev->users == -1 && fe->ops.ts_bus_ctrl) { 1988 if (dvbdev->users == -1 && fe->ops.ts_bus_ctrl) {
1989 if ((ret = fe->ops.ts_bus_ctrl(fe, 1)) < 0) 1989 if ((ret = fe->ops.ts_bus_ctrl(fe, 1)) < 0)
1990 goto err0; 1990 goto err0;
1991
1992 /* If we took control of the bus, we need to force
1993 reinitialization. This is because many ts_bus_ctrl()
1994 functions strobe the RESET pin on the demod, and if the
1995 frontend thread already exists then the dvb_init() routine
1996 won't get called (which is what usually does initial
1997 register configuration). */
1998 fepriv->reinitialise = 1;
1991 } 1999 }
1992 2000
1993 if ((ret = dvb_generic_open (inode, file)) < 0) 2001 if ((ret = dvb_generic_open (inode, file)) < 0)
diff --git a/drivers/media/radio/Kconfig b/drivers/media/radio/Kconfig
index e4c97fd6f05a..52798a111e16 100644
--- a/drivers/media/radio/Kconfig
+++ b/drivers/media/radio/Kconfig
@@ -168,7 +168,7 @@ config RADIO_MAXIRADIO
168 168
169config RADIO_MIROPCM20 169config RADIO_MIROPCM20
170 tristate "miroSOUND PCM20 radio" 170 tristate "miroSOUND PCM20 radio"
171 depends on ISA && VIDEO_V4L2 && SND 171 depends on ISA && ISA_DMA_API && VIDEO_V4L2 && SND
172 select SND_ISA 172 select SND_ISA
173 select SND_MIRO 173 select SND_MIRO
174 ---help--- 174 ---help---
@@ -201,7 +201,7 @@ config RADIO_SF16FMI
201 201
202config RADIO_SF16FMR2 202config RADIO_SF16FMR2
203 tristate "SF16FMR2 Radio" 203 tristate "SF16FMR2 Radio"
204 depends on ISA && VIDEO_V4L2 204 depends on ISA && VIDEO_V4L2 && SND
205 ---help--- 205 ---help---
206 Choose Y here if you have one of these FM radio cards. 206 Choose Y here if you have one of these FM radio cards.
207 207
diff --git a/drivers/media/rc/mceusb.c b/drivers/media/rc/mceusb.c
index 06dfe0957b5e..ec972dc25790 100644
--- a/drivers/media/rc/mceusb.c
+++ b/drivers/media/rc/mceusb.c
@@ -558,9 +558,10 @@ static void mceusb_dev_printdata(struct mceusb_dev *ir, char *buf,
558 inout, data1); 558 inout, data1);
559 break; 559 break;
560 case MCE_CMD_S_TIMEOUT: 560 case MCE_CMD_S_TIMEOUT:
561 /* value is in units of 50us, so x*50/100 or x/2 ms */ 561 /* value is in units of 50us, so x*50/1000 ms */
562 dev_info(dev, "%s receive timeout of %d ms\n", 562 dev_info(dev, "%s receive timeout of %d ms\n",
563 inout, ((data1 << 8) | data2) / 2); 563 inout,
564 ((data1 << 8) | data2) * MCE_TIME_UNIT / 1000);
564 break; 565 break;
565 case MCE_CMD_G_TIMEOUT: 566 case MCE_CMD_G_TIMEOUT:
566 dev_info(dev, "Get receive timeout\n"); 567 dev_info(dev, "Get receive timeout\n");
@@ -847,7 +848,7 @@ static void mceusb_handle_command(struct mceusb_dev *ir, int index)
847 switch (ir->buf_in[index]) { 848 switch (ir->buf_in[index]) {
848 /* 2-byte return value commands */ 849 /* 2-byte return value commands */
849 case MCE_CMD_S_TIMEOUT: 850 case MCE_CMD_S_TIMEOUT:
850 ir->rc->timeout = US_TO_NS((hi << 8 | lo) / 2); 851 ir->rc->timeout = US_TO_NS((hi << 8 | lo) * MCE_TIME_UNIT);
851 break; 852 break;
852 853
853 /* 1-byte return value commands */ 854 /* 1-byte return value commands */
@@ -1078,7 +1079,7 @@ static struct rc_dev *mceusb_init_rc_dev(struct mceusb_dev *ir)
1078 rc->priv = ir; 1079 rc->priv = ir;
1079 rc->driver_type = RC_DRIVER_IR_RAW; 1080 rc->driver_type = RC_DRIVER_IR_RAW;
1080 rc->allowed_protos = RC_TYPE_ALL; 1081 rc->allowed_protos = RC_TYPE_ALL;
1081 rc->timeout = US_TO_NS(1000); 1082 rc->timeout = MS_TO_NS(100);
1082 if (!ir->flags.no_tx) { 1083 if (!ir->flags.no_tx) {
1083 rc->s_tx_mask = mceusb_set_tx_mask; 1084 rc->s_tx_mask = mceusb_set_tx_mask;
1084 rc->s_tx_carrier = mceusb_set_tx_carrier; 1085 rc->s_tx_carrier = mceusb_set_tx_carrier;
diff --git a/drivers/media/rc/nuvoton-cir.c b/drivers/media/rc/nuvoton-cir.c
index 565f24c20d77..ce595f9ab4c7 100644
--- a/drivers/media/rc/nuvoton-cir.c
+++ b/drivers/media/rc/nuvoton-cir.c
@@ -1110,7 +1110,7 @@ static int nvt_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id)
1110 rdev->dev.parent = &pdev->dev; 1110 rdev->dev.parent = &pdev->dev;
1111 rdev->driver_name = NVT_DRIVER_NAME; 1111 rdev->driver_name = NVT_DRIVER_NAME;
1112 rdev->map_name = RC_MAP_RC6_MCE; 1112 rdev->map_name = RC_MAP_RC6_MCE;
1113 rdev->timeout = US_TO_NS(1000); 1113 rdev->timeout = MS_TO_NS(100);
1114 /* rx resolution is hardwired to 50us atm, 1, 25, 100 also possible */ 1114 /* rx resolution is hardwired to 50us atm, 1, 25, 100 also possible */
1115 rdev->rx_resolution = US_TO_NS(CIR_SAMPLE_PERIOD); 1115 rdev->rx_resolution = US_TO_NS(CIR_SAMPLE_PERIOD);
1116#if 0 1116#if 0
diff --git a/drivers/media/video/cx23885/cx23885-core.c b/drivers/media/video/cx23885/cx23885-core.c
index 64d9b2136ff6..419777a832ee 100644
--- a/drivers/media/video/cx23885/cx23885-core.c
+++ b/drivers/media/video/cx23885/cx23885-core.c
@@ -2060,12 +2060,8 @@ static int __devinit cx23885_initdev(struct pci_dev *pci_dev,
2060 goto fail_irq; 2060 goto fail_irq;
2061 } 2061 }
2062 2062
2063 if (!pci_enable_msi(pci_dev)) 2063 err = request_irq(pci_dev->irq, cx23885_irq,
2064 err = request_irq(pci_dev->irq, cx23885_irq, 2064 IRQF_SHARED | IRQF_DISABLED, dev->name, dev);
2065 IRQF_DISABLED, dev->name, dev);
2066 else
2067 err = request_irq(pci_dev->irq, cx23885_irq,
2068 IRQF_SHARED | IRQF_DISABLED, dev->name, dev);
2069 if (err < 0) { 2065 if (err < 0) {
2070 printk(KERN_ERR "%s: can't get IRQ %d\n", 2066 printk(KERN_ERR "%s: can't get IRQ %d\n",
2071 dev->name, pci_dev->irq); 2067 dev->name, pci_dev->irq);
@@ -2114,7 +2110,6 @@ static void __devexit cx23885_finidev(struct pci_dev *pci_dev)
2114 2110
2115 /* unregister stuff */ 2111 /* unregister stuff */
2116 free_irq(pci_dev->irq, dev); 2112 free_irq(pci_dev->irq, dev);
2117 pci_disable_msi(pci_dev);
2118 2113
2119 cx23885_dev_unregister(dev); 2114 cx23885_dev_unregister(dev);
2120 v4l2_device_unregister(v4l2_dev); 2115 v4l2_device_unregister(v4l2_dev);
diff --git a/drivers/media/video/tuner-core.c b/drivers/media/video/tuner-core.c
index cfa9f7efe93d..a03945ab9f08 100644
--- a/drivers/media/video/tuner-core.c
+++ b/drivers/media/video/tuner-core.c
@@ -714,10 +714,19 @@ static int tuner_remove(struct i2c_client *client)
714 * returns 0. 714 * returns 0.
715 * This function is needed for boards that have a separate tuner for 715 * This function is needed for boards that have a separate tuner for
716 * radio (like devices with tea5767). 716 * radio (like devices with tea5767).
717 * NOTE: mt20xx uses V4L2_TUNER_DIGITAL_TV and calls set_tv_freq to
718 * select a TV frequency. So, t_mode = T_ANALOG_TV could actually
719 * be used to represent a Digital TV too.
717 */ 720 */
718static inline int check_mode(struct tuner *t, enum v4l2_tuner_type mode) 721static inline int check_mode(struct tuner *t, enum v4l2_tuner_type mode)
719{ 722{
720 if ((1 << mode & t->mode_mask) == 0) 723 int t_mode;
724 if (mode == V4L2_TUNER_RADIO)
725 t_mode = T_RADIO;
726 else
727 t_mode = T_ANALOG_TV;
728
729 if ((t_mode & t->mode_mask) == 0)
721 return -EINVAL; 730 return -EINVAL;
722 731
723 return 0; 732 return 0;
@@ -984,7 +993,7 @@ static void tuner_status(struct dvb_frontend *fe)
984 case V4L2_TUNER_RADIO: 993 case V4L2_TUNER_RADIO:
985 p = "radio"; 994 p = "radio";
986 break; 995 break;
987 case V4L2_TUNER_DIGITAL_TV: 996 case V4L2_TUNER_DIGITAL_TV: /* Used by mt20xx */
988 p = "digital TV"; 997 p = "digital TV";
989 break; 998 break;
990 case V4L2_TUNER_ANALOG_TV: 999 case V4L2_TUNER_ANALOG_TV:
@@ -1135,9 +1144,8 @@ static int tuner_g_tuner(struct v4l2_subdev *sd, struct v4l2_tuner *vt)
1135 return 0; 1144 return 0;
1136 if (vt->type == t->mode && analog_ops->get_afc) 1145 if (vt->type == t->mode && analog_ops->get_afc)
1137 vt->afc = analog_ops->get_afc(&t->fe); 1146 vt->afc = analog_ops->get_afc(&t->fe);
1138 if (vt->type == V4L2_TUNER_ANALOG_TV) 1147 if (t->mode != V4L2_TUNER_RADIO) {
1139 vt->capability |= V4L2_TUNER_CAP_NORM; 1148 vt->capability |= V4L2_TUNER_CAP_NORM;
1140 if (vt->type != V4L2_TUNER_RADIO) {
1141 vt->rangelow = tv_range[0] * 16; 1149 vt->rangelow = tv_range[0] * 16;
1142 vt->rangehigh = tv_range[1] * 16; 1150 vt->rangehigh = tv_range[1] * 16;
1143 return 0; 1151 return 0;