diff --git a/kernel.spec b/kernel.spec index 1a148b77a..5c119dc21 100644 --- a/kernel.spec +++ b/kernel.spec @@ -727,6 +727,7 @@ Patch2900: linux-2.6-v4l-dvb-fixes.patch Patch2901: linux-2.6-v4l-dvb-experimental.patch Patch2918: imon-default-proto-modparam.patch Patch2919: linux-2.6-v4l-dvb-build-lirc.patch +Patch2920: linux-2.6-v4l-dvb-backport-reverts.patch Patch2950: linux-2.6-via-velocity-dma-fix.patch @@ -1454,6 +1455,11 @@ ApplyPatch imon-default-proto-modparam.patch # because I keep forgetting to manually add the bits back ApplyPatch linux-2.6-v4l-dvb-build-lirc.patch +# A few bits have to be reverted so things actually build, +# and in order to quit forgetting them, split them into their +# own patch +ApplyPatch linux-2.6-v4l-dvb-backport-reverts.patch + # bz #575873 ApplyPatch flexcop-fix-xlate_proc_name-warning.patch @@ -2148,7 +2154,7 @@ fi # and build. %changelog -* Mon Jan 24 2011 Jarod Wilson 2.6.35.10-81 +* Tue Jan 25 2011 Jarod Wilson 2.6.35.10-81 - Further improvements to ir-kbd-i2c when used with zilog chips - Finally hopefully fix annoying mceusb keybounce issue diff --git a/linux-2.6-v4l-dvb-backport-reverts.patch b/linux-2.6-v4l-dvb-backport-reverts.patch new file mode 100644 index 000000000..03705bf13 --- /dev/null +++ b/linux-2.6-v4l-dvb-backport-reverts.patch @@ -0,0 +1,306 @@ +diff -Naurp linux-2.6.35/drivers/media/dvb/dvb-core/dvb_net.c linux-2.6.35.media/drivers/media/dvb/dvb-core/dvb_net.c +--- linux-2.6.35/drivers/media/dvb/dvb-core/dvb_net.c 2011-01-25 10:10:44.000000000 -0500 ++++ linux-2.6.35.media/drivers/media/dvb/dvb-core/dvb_net.c 2011-01-25 10:14:06.000000000 -0500 +@@ -1329,8 +1329,7 @@ static int dvb_net_remove_if(struct dvb_ + return -EBUSY; + + dvb_net_stop(net); +- flush_work_sync(&priv->set_multicast_list_wq); +- flush_work_sync(&priv->restart_net_feed_wq); ++ flush_scheduled_work(); + printk("dvb_net: removed network interface %s\n", net->name); + unregister_netdev(net); + dvbnet->state[num]=0; +diff -Naurp linux-2.6.35/drivers/media/dvb/dvb-usb/dvb-usb-remote.c linux-2.6.35.media/drivers/media/dvb/dvb-usb/dvb-usb-remote.c +--- linux-2.6.35/drivers/media/dvb/dvb-usb/dvb-usb-remote.c 2011-01-25 10:10:44.000000000 -0500 ++++ linux-2.6.35.media/drivers/media/dvb/dvb-usb/dvb-usb-remote.c 2011-01-25 10:14:06.000000000 -0500 +@@ -314,6 +314,7 @@ int dvb_usb_remote_exit(struct dvb_usb_d + { + if (d->state & DVB_USB_STATE_REMOTE) { + cancel_delayed_work_sync(&d->rc_query_work); ++ flush_scheduled_work(); + if (d->props.rc.mode == DVB_RC_LEGACY) + input_unregister_device(d->input_dev); + else +diff -Naurp linux-2.6.35/drivers/media/dvb/mantis/mantis_evm.c linux-2.6.35.media/drivers/media/dvb/mantis/mantis_evm.c +--- linux-2.6.35/drivers/media/dvb/mantis/mantis_evm.c 2011-01-25 10:10:44.000000000 -0500 ++++ linux-2.6.35.media/drivers/media/dvb/mantis/mantis_evm.c 2011-01-25 10:14:06.000000000 -0500 +@@ -111,7 +111,7 @@ void mantis_evmgr_exit(struct mantis_ca + struct mantis_pci *mantis = ca->ca_priv; + + dprintk(MANTIS_DEBUG, 1, "Mantis Host I/F Event manager exiting"); +- flush_work_sync(&ca->hif_evm_work); ++ flush_scheduled_work(); + mantis_hif_exit(ca); + mantis_pcmcia_exit(ca); + } +diff -Naurp linux-2.6.35/drivers/media/dvb/mantis/mantis_uart.c linux-2.6.35.media/drivers/media/dvb/mantis/mantis_uart.c +--- linux-2.6.35/drivers/media/dvb/mantis/mantis_uart.c 2011-01-25 10:10:44.000000000 -0500 ++++ linux-2.6.35.media/drivers/media/dvb/mantis/mantis_uart.c 2011-01-25 10:14:06.000000000 -0500 +@@ -182,6 +182,5 @@ void mantis_uart_exit(struct mantis_pci + { + /* disable interrupt */ + mmwrite(mmread(MANTIS_UART_CTL) & 0xffef, MANTIS_UART_CTL); +- flush_work_sync(&mantis->uart_work); + } + EXPORT_SYMBOL_GPL(mantis_uart_exit); +diff -Naurp linux-2.6.35/drivers/media/rc/keymaps/rc-tbs-nec.c linux-2.6.35.media/drivers/media/rc/keymaps/rc-tbs-nec.c +--- linux-2.6.35/drivers/media/rc/keymaps/rc-tbs-nec.c 2011-01-25 10:10:44.000000000 -0500 ++++ linux-2.6.35.media/drivers/media/rc/keymaps/rc-tbs-nec.c 2011-01-25 11:10:04.000000000 -0500 +@@ -12,6 +12,9 @@ + + #include + ++#define KEY_10CHANNELSUP 0x1b8 ++#define KEY_10CHANNELSDOWN 0x1b9 ++ + static struct rc_map_table tbs_nec[] = { + { 0x84, KEY_POWER2}, /* power */ + { 0x94, KEY_MUTE}, /* mute */ +diff -Naurp linux-2.6.35/drivers/media/video/bt8xx/bttv-driver.c linux-2.6.35.media/drivers/media/video/bt8xx/bttv-driver.c +--- linux-2.6.35/drivers/media/video/bt8xx/bttv-driver.c 2011-01-25 10:10:44.000000000 -0500 ++++ linux-2.6.35.media/drivers/media/video/bt8xx/bttv-driver.c 2011-01-25 10:32:49.000000000 -0500 +@@ -189,14 +189,8 @@ static void request_modules(struct bttv + INIT_WORK(&dev->request_module_wk, request_module_async); + schedule_work(&dev->request_module_wk); + } +- +-static void flush_request_modules(struct bttv *dev) +-{ +- flush_work_sync(&dev->request_module_wk); +-} + #else + #define request_modules(dev) +-#define flush_request_modules(dev) + #endif /* CONFIG_MODULES */ + + +@@ -4435,9 +4429,6 @@ static void __devexit bttv_remove(struct + if (bttv_verbose) + printk("bttv%d: unloading\n",btv->c.nr); + +- if (bttv_tvcards[btv->c.type].has_dvb) +- flush_request_modules(btv); +- + /* shutdown everything (DMA+IRQs) */ + btand(~15, BT848_GPIO_DMA_CTL); + btwrite(0, BT848_INT_MASK); +diff -Naurp linux-2.6.35/drivers/media/video/cx18/cx18-driver.c linux-2.6.35.media/drivers/media/video/cx18/cx18-driver.c +--- linux-2.6.35/drivers/media/video/cx18/cx18-driver.c 2011-01-25 10:10:44.000000000 -0500 ++++ linux-2.6.35.media/drivers/media/video/cx18/cx18-driver.c 2011-01-25 10:32:49.000000000 -0500 +@@ -268,14 +268,8 @@ static void request_modules(struct cx18 + INIT_WORK(&dev->request_module_wk, request_module_async); + schedule_work(&dev->request_module_wk); + } +- +-static void flush_request_modules(struct cx18 *dev) +-{ +- flush_work_sync(&dev->request_module_wk); +-} + #else + #define request_modules(dev) +-#define flush_request_modules(dev) + #endif /* CONFIG_MODULES */ + + /* Generic utility functions */ +@@ -1245,8 +1239,6 @@ static void cx18_remove(struct pci_dev * + + CX18_DEBUG_INFO("Removing Card\n"); + +- flush_request_modules(cx); +- + /* Stop all captures */ + CX18_DEBUG_INFO("Stopping all streams\n"); + if (atomic_read(&cx->tot_capturing) > 0) +diff -Naurp linux-2.6.35/drivers/media/video/cx231xx/cx231xx-cards.c linux-2.6.35.media/drivers/media/video/cx231xx/cx231xx-cards.c +--- linux-2.6.35/drivers/media/video/cx231xx/cx231xx-cards.c 2011-01-25 10:10:44.000000000 -0500 ++++ linux-2.6.35.media/drivers/media/video/cx231xx/cx231xx-cards.c 2011-01-25 10:32:49.000000000 -0500 +@@ -813,14 +813,8 @@ static void request_modules(struct cx231 + INIT_WORK(&dev->request_module_wk, request_module_async); + schedule_work(&dev->request_module_wk); + } +- +-static void flush_request_modules(struct cx231xx *dev) +-{ +- flush_work_sync(&dev->request_module_wk); +-} + #else + #define request_modules(dev) +-#define flush_request_modules(dev) + #endif /* CONFIG_MODULES */ + + /* +@@ -1153,8 +1147,6 @@ static void cx231xx_usb_disconnect(struc + if (!dev->udev) + return; + +- flush_request_modules(dev); +- + /* delete v4l2 device */ + v4l2_device_unregister(&dev->v4l2_dev); + +diff -Naurp linux-2.6.35/drivers/media/video/cx23885/cx23885-input.c linux-2.6.35.media/drivers/media/video/cx23885/cx23885-input.c +--- linux-2.6.35/drivers/media/video/cx23885/cx23885-input.c 2011-01-25 10:10:44.000000000 -0500 ++++ linux-2.6.35.media/drivers/media/video/cx23885/cx23885-input.c 2011-01-25 10:14:06.000000000 -0500 +@@ -229,6 +229,8 @@ static void cx23885_input_ir_stop(struct + v4l2_subdev_call(dev->sd_ir, ir, rx_s_parameters, ¶ms); + v4l2_subdev_call(dev->sd_ir, ir, rx_g_parameters, ¶ms); + } ++ ++ flush_scheduled_work(); + } + + static void cx23885_input_ir_close(struct rc_dev *rc) +diff -Naurp linux-2.6.35/drivers/media/video/cx88/cx88-mpeg.c linux-2.6.35.media/drivers/media/video/cx88/cx88-mpeg.c +--- linux-2.6.35/drivers/media/video/cx88/cx88-mpeg.c 2011-01-25 10:10:44.000000000 -0500 ++++ linux-2.6.35.media/drivers/media/video/cx88/cx88-mpeg.c 2011-01-25 10:32:49.000000000 -0500 +@@ -66,14 +66,8 @@ static void request_modules(struct cx880 + INIT_WORK(&dev->request_module_wk, request_module_async); + schedule_work(&dev->request_module_wk); + } +- +-static void flush_request_modules(struct cx8802_dev *dev) +-{ +- flush_work_sync(&dev->request_module_wk); +-} + #else + #define request_modules(dev) +-#define flush_request_modules(dev) + #endif /* CONFIG_MODULES */ + + +@@ -825,8 +819,6 @@ static void __devexit cx8802_remove(stru + + dprintk( 1, "%s\n", __func__); + +- flush_request_modules(dev); +- + if (!list_empty(&dev->drvlist)) { + struct cx8802_driver *drv, *tmp; + int err; +diff -Naurp linux-2.6.35/drivers/media/video/em28xx/em28xx-cards.c linux-2.6.35.media/drivers/media/video/em28xx/em28xx-cards.c +--- linux-2.6.35/drivers/media/video/em28xx/em28xx-cards.c 2011-01-25 10:10:44.000000000 -0500 ++++ linux-2.6.35.media/drivers/media/video/em28xx/em28xx-cards.c 2011-01-25 10:32:49.000000000 -0500 +@@ -2693,14 +2693,8 @@ static void request_modules(struct em28x + INIT_WORK(&dev->request_module_wk, request_module_async); + schedule_work(&dev->request_module_wk); + } +- +-static void flush_request_modules(struct em28xx *dev) +-{ +- flush_work_sync(&dev->request_module_wk); +-} + #else + #define request_modules(dev) +-#define flush_request_modules(dev) + #endif /* CONFIG_MODULES */ + + /* +@@ -3127,8 +3121,6 @@ static void em28xx_usb_disconnect(struct + + em28xx_info("disconnecting %s\n", dev->vdev->name); + +- flush_request_modules(dev); +- + /* wait until all current v4l2 io is finished then deallocate + resources */ + mutex_lock(&dev->lock); +diff -Naurp linux-2.6.35/drivers/media/video/omap24xxcam.c linux-2.6.35.media/drivers/media/video/omap24xxcam.c +--- linux-2.6.35/drivers/media/video/omap24xxcam.c 2011-01-25 10:10:44.000000000 -0500 ++++ linux-2.6.35.media/drivers/media/video/omap24xxcam.c 2011-01-25 10:14:06.000000000 -0500 +@@ -1198,7 +1198,7 @@ static int vidioc_streamoff(struct file + + atomic_inc(&cam->reset_disable); + +- flush_work_sync(&cam->sensor_reset_work); ++ flush_scheduled_work(); + + rval = videobuf_streamoff(q); + if (!rval) { +@@ -1512,7 +1512,7 @@ static int omap24xxcam_release(struct fi + + atomic_inc(&cam->reset_disable); + +- flush_work_sync(&cam->sensor_reset_work); ++ flush_scheduled_work(); + + /* stop streaming capture */ + videobuf_streamoff(&fh->vbq); +@@ -1536,7 +1536,7 @@ static int omap24xxcam_release(struct fi + * not be scheduled anymore since streaming is already + * disabled.) + */ +- flush_work_sync(&cam->sensor_reset_work); ++ flush_scheduled_work(); + + mutex_lock(&cam->mutex); + if (atomic_dec_return(&cam->users) == 0) { +diff -Naurp linux-2.6.35/drivers/media/video/saa7134/saa7134-core.c linux-2.6.35.media/drivers/media/video/saa7134/saa7134-core.c +--- linux-2.6.35/drivers/media/video/saa7134/saa7134-core.c 2011-01-25 10:10:44.000000000 -0500 ++++ linux-2.6.35.media/drivers/media/video/saa7134/saa7134-core.c 2011-01-25 10:32:49.000000000 -0500 +@@ -166,14 +166,8 @@ static void request_submodules(struct sa + schedule_work(&dev->request_module_wk); + } + +-static void flush_request_submodules(struct saa7134_dev *dev) +-{ +- flush_work_sync(&dev->request_module_wk); +-} +- + #else + #define request_submodules(dev) +-#define flush_request_submodules(dev) + #endif /* CONFIG_MODULES */ + + /* ------------------------------------------------------------------ */ +@@ -1027,6 +1021,8 @@ static int __devinit saa7134_initdev(str + } + } + ++ request_submodules(dev); ++ + v4l2_prio_init(&dev->prio); + + mutex_lock(&saa7134_devlist_lock); +@@ -1081,7 +1077,6 @@ static int __devinit saa7134_initdev(str + if (saa7134_dmasound_init && !dev->dmasound.priv_data) + saa7134_dmasound_init(dev); + +- request_submodules(dev); + return 0; + + fail4: +@@ -1107,8 +1102,6 @@ static void __devexit saa7134_finidev(st + struct saa7134_dev *dev = container_of(v4l2_dev, struct saa7134_dev, v4l2_dev); + struct saa7134_mpeg_ops *mops; + +- flush_request_submodules(dev); +- + /* Release DMA sound modules if present */ + if (saa7134_dmasound_exit && dev->dmasound.priv_data) { + saa7134_dmasound_exit(dev); +diff -Naurp linux-2.6.35/drivers/media/video/saa7134/saa7134-empress.c linux-2.6.35.media/drivers/media/video/saa7134/saa7134-empress.c +--- linux-2.6.35/drivers/media/video/saa7134/saa7134-empress.c 2011-01-25 10:10:44.000000000 -0500 ++++ linux-2.6.35.media/drivers/media/video/saa7134/saa7134-empress.c 2011-01-25 10:14:06.000000000 -0500 +@@ -553,7 +553,7 @@ static int empress_fini(struct saa7134_d + + if (NULL == dev->empress_dev) + return 0; +- flush_work_sync(&dev->empress_workqueue); ++ flush_scheduled_work(); + video_unregister_device(dev->empress_dev); + dev->empress_dev = NULL; + return 0; +diff -Naurp linux-2.6.35/drivers/media/video/tlg2300/pd-main.c linux-2.6.35.media/drivers/media/video/tlg2300/pd-main.c +--- linux-2.6.35/drivers/media/video/tlg2300/pd-main.c 2011-01-25 10:10:44.000000000 -0500 ++++ linux-2.6.35.media/drivers/media/video/tlg2300/pd-main.c 2011-01-25 11:08:48.000000000 -0500 +@@ -452,8 +452,7 @@ static int poseidon_probe(struct usb_int + + device_init_wakeup(&udev->dev, 1); + #ifdef CONFIG_PM +- pm_runtime_set_autosuspend_delay(&pd->udev->dev, +- 1000 * PM_SUSPEND_DELAY); ++ pd->udev->autosuspend_delay = HZ * PM_SUSPEND_DELAY; + usb_enable_autosuspend(pd->udev); + + if (in_hibernation(pd)) {