Commit 54a772b8aace3df8ad6af0bd0748f57d27f72b1d

Authored by Linus Torvalds

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)"

Showing 6 changed files Side-by-side Diff

drivers/media/dvb/dvb-core/dvb_frontend.c
... ... @@ -1988,6 +1988,14 @@
1988 1988 if (dvbdev->users == -1 && fe->ops.ts_bus_ctrl) {
1989 1989 if ((ret = fe->ops.ts_bus_ctrl(fe, 1)) < 0)
1990 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 2001 if ((ret = dvb_generic_open (inode, file)) < 0)
drivers/media/radio/Kconfig
... ... @@ -168,7 +168,7 @@
168 168  
169 169 config RADIO_MIROPCM20
170 170 tristate "miroSOUND PCM20 radio"
171   - depends on ISA && VIDEO_V4L2 && SND
  171 + depends on ISA && ISA_DMA_API && VIDEO_V4L2 && SND
172 172 select SND_ISA
173 173 select SND_MIRO
174 174 ---help---
... ... @@ -201,7 +201,7 @@
201 201  
202 202 config RADIO_SF16FMR2
203 203 tristate "SF16FMR2 Radio"
204   - depends on ISA && VIDEO_V4L2
  204 + depends on ISA && VIDEO_V4L2 && SND
205 205 ---help---
206 206 Choose Y here if you have one of these FM radio cards.
207 207  
drivers/media/rc/mceusb.c
... ... @@ -558,9 +558,10 @@
558 558 inout, data1);
559 559 break;
560 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 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 565 break;
565 566 case MCE_CMD_G_TIMEOUT:
566 567 dev_info(dev, "Get receive timeout\n");
... ... @@ -847,7 +848,7 @@
847 848 switch (ir->buf_in[index]) {
848 849 /* 2-byte return value commands */
849 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 852 break;
852 853  
853 854 /* 1-byte return value commands */
... ... @@ -1078,7 +1079,7 @@
1078 1079 rc->priv = ir;
1079 1080 rc->driver_type = RC_DRIVER_IR_RAW;
1080 1081 rc->allowed_protos = RC_TYPE_ALL;
1081   - rc->timeout = US_TO_NS(1000);
  1082 + rc->timeout = MS_TO_NS(100);
1082 1083 if (!ir->flags.no_tx) {
1083 1084 rc->s_tx_mask = mceusb_set_tx_mask;
1084 1085 rc->s_tx_carrier = mceusb_set_tx_carrier;
drivers/media/rc/nuvoton-cir.c
... ... @@ -1110,7 +1110,7 @@
1110 1110 rdev->dev.parent = &pdev->dev;
1111 1111 rdev->driver_name = NVT_DRIVER_NAME;
1112 1112 rdev->map_name = RC_MAP_RC6_MCE;
1113   - rdev->timeout = US_TO_NS(1000);
  1113 + rdev->timeout = MS_TO_NS(100);
1114 1114 /* rx resolution is hardwired to 50us atm, 1, 25, 100 also possible */
1115 1115 rdev->rx_resolution = US_TO_NS(CIR_SAMPLE_PERIOD);
1116 1116 #if 0
drivers/media/video/cx23885/cx23885-core.c
... ... @@ -2060,12 +2060,8 @@
2060 2060 goto fail_irq;
2061 2061 }
2062 2062  
2063   - if (!pci_enable_msi(pci_dev))
2064   - err = request_irq(pci_dev->irq, cx23885_irq,
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);
  2063 + err = request_irq(pci_dev->irq, cx23885_irq,
  2064 + IRQF_SHARED | IRQF_DISABLED, dev->name, dev);
2069 2065 if (err < 0) {
2070 2066 printk(KERN_ERR "%s: can't get IRQ %d\n",
2071 2067 dev->name, pci_dev->irq);
... ... @@ -2114,7 +2110,6 @@
2114 2110  
2115 2111 /* unregister stuff */
2116 2112 free_irq(pci_dev->irq, dev);
2117   - pci_disable_msi(pci_dev);
2118 2113  
2119 2114 cx23885_dev_unregister(dev);
2120 2115 v4l2_device_unregister(v4l2_dev);
drivers/media/video/tuner-core.c
... ... @@ -714,10 +714,19 @@
714 714 * returns 0.
715 715 * This function is needed for boards that have a separate tuner for
716 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 */
718 721 static 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 730 return -EINVAL;
722 731  
723 732 return 0;
... ... @@ -984,7 +993,7 @@
984 993 case V4L2_TUNER_RADIO:
985 994 p = "radio";
986 995 break;
987   - case V4L2_TUNER_DIGITAL_TV:
  996 + case V4L2_TUNER_DIGITAL_TV: /* Used by mt20xx */
988 997 p = "digital TV";
989 998 break;
990 999 case V4L2_TUNER_ANALOG_TV:
991 1000  
... ... @@ -1135,9 +1144,8 @@
1135 1144 return 0;
1136 1145 if (vt->type == t->mode && analog_ops->get_afc)
1137 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 1148 vt->capability |= V4L2_TUNER_CAP_NORM;
1140   - if (vt->type != V4L2_TUNER_RADIO) {
1141 1149 vt->rangelow = tv_range[0] * 16;
1142 1150 vt->rangehigh = tv_range[1] * 16;
1143 1151 return 0;