Commit 54a772b8aace3df8ad6af0bd0748f57d27f72b1d
Exists in
master
and in
7 other branches
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; |