From: Greg Kroah-Hartman Date: Fri, 30 Mar 2007 20:28:29 +0000 (-0700) Subject: more patches added X-Git-Tag: v2.6.20.5~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6a02735de68b335773e65d56ae3f2612ccf1feb3;p=thirdparty%2Fkernel%2Fstable-queue.git more patches added --- diff --git a/queue-2.6.20/dvb-core-fix-several-locking-related-problems.patch b/queue-2.6.20/dvb-core-fix-several-locking-related-problems.patch new file mode 100644 index 00000000000..f283ca0485b --- /dev/null +++ b/queue-2.6.20/dvb-core-fix-several-locking-related-problems.patch @@ -0,0 +1,169 @@ +From stable-bounces@linux.kernel.org Wed Mar 28 18:24:10 2007 +From: Simon Arlott +Date: Wed, 28 Mar 2007 21:22:40 -0400 +Subject: dvb-core: fix several locking related problems +To: stable@kernel.org +Message-ID: <460B14E0.2040100@linuxtv.org> + + +From: Simon Arlott + +dvb-core: fix several locking related problems + +Fix several instances of dvb-core functions using mutex_lock_interruptible +and returning -ERESTARTSYS where the calling function will either never +retry or never check the return value. + +These cause a race condition with dvb_dmxdev_filter_free and +dvb_dvr_release, both of which are filesystem release functions whose +return value is ignored and will never be retried. When this happens it +becomes impossible to open dvr0 again (-EBUSY) since it has not been +released properly. + +(cherry picked from commit c278850206fd9df0bb62a72ca0b277fe20c5a452) + +Signed-off-by: Simon Arlott +Signed-off-by: Andrew Morton +Acked-By: Johannes Stezenbach +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Michael Krufky +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/dvb/dvb-core/dmxdev.c | 12 +++--------- + drivers/media/dvb/dvb-core/dvb_demux.c | 21 +++++++-------------- + drivers/media/dvb/dvb-core/dvbdev.c | 9 +++------ + 3 files changed, 13 insertions(+), 29 deletions(-) + +--- a/drivers/media/dvb/dvb-core/dmxdev.c ++++ b/drivers/media/dvb/dvb-core/dmxdev.c +@@ -181,8 +181,7 @@ static int dvb_dvr_release(struct inode + struct dvb_device *dvbdev = file->private_data; + struct dmxdev *dmxdev = dvbdev->priv; + +- if (mutex_lock_interruptible(&dmxdev->mutex)) +- return -ERESTARTSYS; ++ mutex_lock(&dmxdev->mutex); + + if ((file->f_flags & O_ACCMODE) == O_WRONLY) { + dmxdev->demux->disconnect_frontend(dmxdev->demux); +@@ -674,13 +673,8 @@ static int dvb_demux_open(struct inode * + static int dvb_dmxdev_filter_free(struct dmxdev *dmxdev, + struct dmxdev_filter *dmxdevfilter) + { +- if (mutex_lock_interruptible(&dmxdev->mutex)) +- return -ERESTARTSYS; +- +- if (mutex_lock_interruptible(&dmxdevfilter->mutex)) { +- mutex_unlock(&dmxdev->mutex); +- return -ERESTARTSYS; +- } ++ mutex_lock(&dmxdev->mutex); ++ mutex_lock(&dmxdevfilter->mutex); + + dvb_dmxdev_filter_stop(dmxdevfilter); + dvb_dmxdev_filter_reset(dmxdevfilter); +--- a/drivers/media/dvb/dvb-core/dvb_demux.c ++++ b/drivers/media/dvb/dvb-core/dvb_demux.c +@@ -673,8 +673,7 @@ static int dmx_ts_feed_stop_filtering(st + struct dvb_demux *demux = feed->demux; + int ret; + +- if (mutex_lock_interruptible(&demux->mutex)) +- return -ERESTARTSYS; ++ mutex_lock(&demux->mutex); + + if (feed->state < DMX_STATE_GO) { + mutex_unlock(&demux->mutex); +@@ -748,8 +747,7 @@ static int dvbdmx_release_ts_feed(struct + struct dvb_demux *demux = (struct dvb_demux *)dmx; + struct dvb_demux_feed *feed = (struct dvb_demux_feed *)ts_feed; + +- if (mutex_lock_interruptible(&demux->mutex)) +- return -ERESTARTSYS; ++ mutex_lock(&demux->mutex); + + if (feed->state == DMX_STATE_FREE) { + mutex_unlock(&demux->mutex); +@@ -916,8 +914,7 @@ static int dmx_section_feed_stop_filteri + struct dvb_demux *dvbdmx = dvbdmxfeed->demux; + int ret; + +- if (mutex_lock_interruptible(&dvbdmx->mutex)) +- return -ERESTARTSYS; ++ mutex_lock(&dvbdmx->mutex); + + if (!dvbdmx->stop_feed) { + mutex_unlock(&dvbdmx->mutex); +@@ -942,8 +939,7 @@ static int dmx_section_feed_release_filt + struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)feed; + struct dvb_demux *dvbdmx = dvbdmxfeed->demux; + +- if (mutex_lock_interruptible(&dvbdmx->mutex)) +- return -ERESTARTSYS; ++ mutex_lock(&dvbdmx->mutex); + + if (dvbdmxfilter->feed != dvbdmxfeed) { + mutex_unlock(&dvbdmx->mutex); +@@ -1016,8 +1012,7 @@ static int dvbdmx_release_section_feed(s + struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)feed; + struct dvb_demux *dvbdmx = (struct dvb_demux *)demux; + +- if (mutex_lock_interruptible(&dvbdmx->mutex)) +- return -ERESTARTSYS; ++ mutex_lock(&dvbdmx->mutex); + + if (dvbdmxfeed->state == DMX_STATE_FREE) { + mutex_unlock(&dvbdmx->mutex); +@@ -1126,8 +1121,7 @@ static int dvbdmx_connect_frontend(struc + if (demux->frontend) + return -EINVAL; + +- if (mutex_lock_interruptible(&dvbdemux->mutex)) +- return -ERESTARTSYS; ++ mutex_lock(&dvbdemux->mutex); + + demux->frontend = frontend; + mutex_unlock(&dvbdemux->mutex); +@@ -1138,8 +1132,7 @@ static int dvbdmx_disconnect_frontend(st + { + struct dvb_demux *dvbdemux = (struct dvb_demux *)demux; + +- if (mutex_lock_interruptible(&dvbdemux->mutex)) +- return -ERESTARTSYS; ++ mutex_lock(&dvbdemux->mutex); + + demux->frontend = NULL; + mutex_unlock(&dvbdemux->mutex); +--- a/drivers/media/dvb/dvb-core/dvbdev.c ++++ b/drivers/media/dvb/dvb-core/dvbdev.c +@@ -204,8 +204,7 @@ int dvb_register_device(struct dvb_adapt + + int id; + +- if (mutex_lock_interruptible(&dvbdev_register_lock)) +- return -ERESTARTSYS; ++ mutex_lock(&dvbdev_register_lock); + + if ((id = dvbdev_get_free_id (adap, type)) < 0) { + mutex_unlock(&dvbdev_register_lock); +@@ -295,8 +294,7 @@ int dvb_register_adapter(struct dvb_adap + { + int num; + +- if (mutex_lock_interruptible(&dvbdev_register_lock)) +- return -ERESTARTSYS; ++ mutex_lock(&dvbdev_register_lock); + + if ((num = dvbdev_get_free_adapter_num ()) < 0) { + mutex_unlock(&dvbdev_register_lock); +@@ -324,8 +322,7 @@ EXPORT_SYMBOL(dvb_register_adapter); + + int dvb_unregister_adapter(struct dvb_adapter *adap) + { +- if (mutex_lock_interruptible(&dvbdev_register_lock)) +- return -ERESTARTSYS; ++ mutex_lock(&dvbdev_register_lock); + list_del (&adap->list_head); + mutex_unlock(&dvbdev_register_lock); + return 0; diff --git a/queue-2.6.20/dvb-fix-nxt200x-rf-input-switching.patch b/queue-2.6.20/dvb-fix-nxt200x-rf-input-switching.patch new file mode 100644 index 00000000000..a94efcd4f7b --- /dev/null +++ b/queue-2.6.20/dvb-fix-nxt200x-rf-input-switching.patch @@ -0,0 +1,45 @@ +From stable-bounces@linux.kernel.org Wed Mar 28 18:23:55 2007 +From: Michael Krufky +Date: Wed, 28 Mar 2007 21:22:16 -0400 +Subject: DVB: fix nxt200x rf input switching +To: stable@kernel.org +Message-ID: <460B14C8.9050707@linuxtv.org> + +From: Michael Krufky + +DVB: fix nxt200x rf input switching + +After dvb tuner refactoring, the pll buffer has been altered such that +the pll address is now stored in buf[0]. Instead of sending buf to +set_pll_input, we should send buf+1. + +(cherry picked from commit f5ae29e284b328e0976789d5c199bbbe80e4b005) + +Signed-off-by: Michael Krufky +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/dvb/frontends/nxt200x.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/media/dvb/frontends/nxt200x.c ++++ b/drivers/media/dvb/frontends/nxt200x.c +@@ -562,7 +562,7 @@ static int nxt200x_setup_frontend_parame + + /* set input */ + if (state->config->set_pll_input) +- state->config->set_pll_input(buf, 1); ++ state->config->set_pll_input(buf+1, 1); + break; + case VSB_8: + /* Set non-punctured clock for VSB */ +@@ -571,7 +571,7 @@ static int nxt200x_setup_frontend_parame + + /* set input */ + if (state->config->set_pll_input) +- state->config->set_pll_input(buf, 0); ++ state->config->set_pll_input(buf+1, 0); + break; + default: + return -EINVAL; diff --git a/queue-2.6.20/dvb-isl6421-don-t-reference-freed-memory.patch b/queue-2.6.20/dvb-isl6421-don-t-reference-freed-memory.patch new file mode 100644 index 00000000000..c76237ea09c --- /dev/null +++ b/queue-2.6.20/dvb-isl6421-don-t-reference-freed-memory.patch @@ -0,0 +1,34 @@ +From stable-bounces@linux.kernel.org Wed Mar 28 18:24:01 2007 +From: Thomas Viehweger +Date: Wed, 28 Mar 2007 21:22:37 -0400 +Subject: DVB: isl6421: don't reference freed memory +To: stable@kernel.org +Message-ID: <460B14DD.5000707@linuxtv.org> + +From: Thomas Viehweger + +DVB: isl6421: don't reference freed memory + +After freeing a block there should be no reference to this block. + +(cherry picked from commit 09d4895488d4df5c58b739573846f514ceabc911) + +Signed-off-by: Thomas Viehweger +Signed-off-by: Michael Krufky +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/dvb/frontends/isl6421.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/media/dvb/frontends/isl6421.c ++++ b/drivers/media/dvb/frontends/isl6421.c +@@ -122,6 +122,7 @@ struct dvb_frontend *isl6421_attach(stru + /* detect if it is present or not */ + if (isl6421_set_voltage(fe, SEC_VOLTAGE_OFF)) { + kfree(isl6421); ++ fe->sec_priv = NULL; + return NULL; + } + diff --git a/queue-2.6.20/i2o-block-io-errors-on-i2o-disk.patch b/queue-2.6.20/i2o-block-io-errors-on-i2o-disk.patch new file mode 100644 index 00000000000..211ae438765 --- /dev/null +++ b/queue-2.6.20/i2o-block-io-errors-on-i2o-disk.patch @@ -0,0 +1,72 @@ +From stable-bounces@linux.kernel.org Wed Mar 28 09:36:44 2007 +From: Vasily Averin +Date: Wed, 28 Mar 2007 12:35:29 -0400 +Subject: i2o: block IO errors on i2o disk +To: linux-stable +Message-ID: <460A9951.4050106@redhat.com> + +From: Vasily Averin + +[PATCH] i2o: block IO errors on i2o disk + +I2O subsystem has been broken in mainstream several months ago (after +2.6.18). Commit 4aff5e2333c9a1609662f2091f55c3f6fffdad36 from Jens +Axboe split struct request ->flags into two parts: cmd_type and +cmd_flags. + +In i2o layer this patch has replaced flag REQ_SPECIAL by the according +cmd_type. However i2o has used REQ_SPECIAL not as command type but as +driver-specific flag for the debug purposes. As result all i2o requests +have type "special" now, are not processed to the hardware and fail with +I/O error: + + i2o/hda:<3>Buffer I/O error on device i2o/hda, logical block 0 + Buffer I/O error on device i2o/hda, logical block 0 + Buffer I/O error on device i2o/hda, logical block 0 + unable to read partition table + block-osm: device added (TID: 207): i2o/hda + +The following patch removes the extra debug checks without any drawbacks and +restores the normal driver's work. + +Signed-off-by: Vasily Averin +Acked-by: Markus Lidel +Cc: Jens Axboe +From: Chuck Ebbert +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/message/i2o/i2o_block.c | 12 +----------- + 1 file changed, 1 insertion(+), 11 deletions(-) + +--- a/drivers/message/i2o/i2o_block.c ++++ b/drivers/message/i2o/i2o_block.c +@@ -390,13 +390,6 @@ static int i2o_block_prep_req_fn(struct + return BLKPREP_KILL; + } + +- /* request is already processed by us, so return */ +- if (blk_special_request(req)) { +- osm_debug("REQ_SPECIAL already set!\n"); +- req->cmd_flags |= REQ_DONTPREP; +- return BLKPREP_OK; +- } +- + /* connect the i2o_block_request to the request */ + if (!req->special) { + ireq = i2o_block_request_alloc(); +@@ -408,11 +401,8 @@ static int i2o_block_prep_req_fn(struct + ireq->i2o_blk_dev = i2o_blk_dev; + req->special = ireq; + ireq->req = req; +- } else +- ireq = req->special; +- ++ } + /* do not come back here */ +- req->cmd_type = REQ_TYPE_SPECIAL; + req->cmd_flags |= REQ_DONTPREP; + + return BLKPREP_OK; diff --git a/queue-2.6.20/ide-revert-ide-fix-drive-side-80c-cable-check-take-2-for-now.patch b/queue-2.6.20/ide-revert-ide-fix-drive-side-80c-cable-check-take-2-for-now.patch new file mode 100644 index 00000000000..05cc4a49689 --- /dev/null +++ b/queue-2.6.20/ide-revert-ide-fix-drive-side-80c-cable-check-take-2-for-now.patch @@ -0,0 +1,62 @@ +From stable-bounces@linux.kernel.org Wed Mar 28 12:12:44 2007 +From: Chuck Ebbert +Date: Wed, 28 Mar 2007 15:11:13 -0400 +Subject: ide: revert "ide: fix drive side 80c cable check, take 2" for now +To: linux-stable +Message-ID: <460ABDD1.3050608@redhat.com> + +From: Bartlomiej Zolnierkiewicz + +[PATCH] ide: revert "ide: fix drive side 80c cable check, take 2" for now + +"ide: fix drive side 80c cable check, take 2" patch from Tejun Heo (commit +fab59375b9543f84d1714f7dd00f5d11e531bd3e) fixed 80c bit test (bit13 of word93) +but we also need to fix master/slave IDENTIFY order (slave device should be +probed first in order to make it release PDIAG- signal) and we should also +check for pre-ATA3 slave devices (which may not release PDIAG- signal). + +Unfortunately the fact that IDE driver doesn't reset devices itself helps +only a bit as it seems that some BIOS-es reset ATA devices after programming +the chipset, some BIOS-es can be set to not probe/configure selected devices, +there may be no BIOS in case of add-on cards etc. + +Since we are quite late in the release cycle and the required changes will +affect a lot of systems just revert the fix for now. + +[ Please also see libata commit f31f0cc2f0b7527072d94d02da332d9bb8d7d94c. ] + +Cc: Chuck Ebbert +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/ide/ide-iops.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- a/drivers/ide/ide-iops.c ++++ b/drivers/ide/ide-iops.c +@@ -598,6 +598,9 @@ u8 eighty_ninty_three (ide_drive_t *driv + if(HWIF(drive)->udma_four == 0) + return 0; + ++ printk(KERN_INFO "%s: hw_config=%04x\n", ++ drive->name, drive->id->hw_config); ++ + /* Check for SATA but only if we are ATA5 or higher */ + if (drive->id->hw_config == 0 && (drive->id->major_rev_num & 0x7FE0)) + return 1; +@@ -607,8 +610,14 @@ u8 eighty_ninty_three (ide_drive_t *driv + if(!(drive->id->hw_config & 0x4000)) + return 0; + #endif /* CONFIG_IDEDMA_IVB */ ++/* ++ * FIXME: enable this after fixing master/slave IDENTIFY order, ++ * also ignore the result if the slave device is pre-ATA3 one ++ */ ++#if 0 + if (!(drive->id->hw_config & 0x2000)) + return 0; ++#endif + return 1; + } + diff --git a/queue-2.6.20/jmicron-make-ide-jmicron-driver-play-nice-with-libata-ones.patch b/queue-2.6.20/jmicron-make-ide-jmicron-driver-play-nice-with-libata-ones.patch new file mode 100644 index 00000000000..fdb91bf46dd --- /dev/null +++ b/queue-2.6.20/jmicron-make-ide-jmicron-driver-play-nice-with-libata-ones.patch @@ -0,0 +1,73 @@ +From stable-bounces@linux.kernel.org Wed Mar 28 09:33:18 2007 +From: Tejun Heo +Date: Wed, 28 Mar 2007 12:31:53 -0400 +Subject: jmicron: make ide jmicron driver play nice with libata ones +To: linux-stable +Message-ID: <460A9879.7040902@redhat.com> + +From: Tejun Heo + +jmicron: make ide jmicron driver play nice with libata ones + +When libata is configured, the device is configured such that SATA and +PATA ports live in separate functions with different programming +interfaces. pata_jmicron and ide jmicron drivers can drive only the +PATA part. + +This patch makes jmicron match PCI class code such that it doesn't +attach itself to the SATA part preventing the proper ahci driver from +attaching. + +This change is suggested by Bartlomiej. + +Signed-off-by: Tejun Heo +Cc: Jeff Garzik +Cc: justin@jmicron.com +Cc: Chuck Ebbert +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman + + +--- + drivers/ide/pci/jmicron.c | 29 ++++++++++++++++++++++++----- + 1 file changed, 24 insertions(+), 5 deletions(-) + +--- a/drivers/ide/pci/jmicron.c ++++ b/drivers/ide/pci/jmicron.c +@@ -240,12 +240,31 @@ static int __devinit jmicron_init_one(st + return 0; + } + ++/* If libata is configured, jmicron PCI quirk will configure it such ++ * that the SATA ports are in AHCI function while the PATA ports are ++ * in a separate IDE function. In such cases, match device class and ++ * attach only to IDE. If libata isn't configured, keep the old ++ * behavior for backward compatibility. ++ */ ++#if defined(CONFIG_ATA) || defined(CONFIG_ATA_MODULE) ++#define JMB_CLASS PCI_CLASS_STORAGE_IDE << 8 ++#define JMB_CLASS_MASK 0xffff00 ++#else ++#define JMB_CLASS 0 ++#define JMB_CLASS_MASK 0 ++#endif ++ + static struct pci_device_id jmicron_pci_tbl[] = { +- { PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB361, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, +- { PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB363, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, +- { PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB365, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2}, +- { PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB366, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3}, +- { PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB368, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4}, ++ { PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB361, ++ PCI_ANY_ID, PCI_ANY_ID, JMB_CLASS, JMB_CLASS_MASK, 0}, ++ { PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB363, ++ PCI_ANY_ID, PCI_ANY_ID, JMB_CLASS, JMB_CLASS_MASK, 1}, ++ { PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB365, ++ PCI_ANY_ID, PCI_ANY_ID, JMB_CLASS, JMB_CLASS_MASK, 2}, ++ { PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB366, ++ PCI_ANY_ID, PCI_ANY_ID, JMB_CLASS, JMB_CLASS_MASK, 3}, ++ { PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB368, ++ PCI_ANY_ID, PCI_ANY_ID, JMB_CLASS, JMB_CLASS_MASK, 4}, + { 0, }, + }; + diff --git a/queue-2.6.20/series b/queue-2.6.20/series index eb1398c4a57..c8739e4dd54 100644 --- a/queue-2.6.20/series +++ b/queue-2.6.20/series @@ -17,3 +17,13 @@ net-fix-sock_attach_fd-failure-in-sys_accept.patch sparc-fix-sparc-builds-with-gcc-4.2.x.patch fix-decnet-endianness.patch net-fix-fib-rules-compatability.patch +dvb-fix-nxt200x-rf-input-switching.patch +v4l-radio-fix-error-in-kbuild-file.patch +v4l-fix-secam-handling-on-saa7115.patch +v4l-msp_attach-must-return-0-if-no-msp3400-was-found.patch +dvb-isl6421-don-t-reference-freed-memory.patch +dvb-core-fix-several-locking-related-problems.patch +v4l-saa7146-fix-allocation-of-clipping-memory.patch +jmicron-make-ide-jmicron-driver-play-nice-with-libata-ones.patch +i2o-block-io-errors-on-i2o-disk.patch +ide-revert-ide-fix-drive-side-80c-cable-check-take-2-for-now.patch diff --git a/queue-2.6.20/v4l-fix-secam-handling-on-saa7115.patch b/queue-2.6.20/v4l-fix-secam-handling-on-saa7115.patch new file mode 100644 index 00000000000..0a01da5eb43 --- /dev/null +++ b/queue-2.6.20/v4l-fix-secam-handling-on-saa7115.patch @@ -0,0 +1,33 @@ +From stable-bounces@linux.kernel.org Wed Mar 28 18:23:50 2007 +From: Mauro Carvalho Chehab +Date: Wed, 28 Mar 2007 21:22:32 -0400 +Subject: V4L: Fix SECAM handling on saa7115 +To: stable@kernel.org +Message-ID: <460B14D8.2050704@linuxtv.org> + + +From: Mauro Carvalho Chehab + +V4L: Fix SECAM handling on saa7115 + +(cherry picked from commit a9aaec4e83e687d23b78b38e331bbd6a10b96380) + +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Michael Krufky +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/video/saa7115.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/media/video/saa7115.c ++++ b/drivers/media/video/saa7115.c +@@ -960,7 +960,7 @@ static void saa711x_set_v4lstd(struct i2 + reg |= 0x10; + } else if (std == V4L2_STD_NTSC_M_JP) { + reg |= 0x40; +- } else if (std == V4L2_STD_SECAM) { ++ } else if (std & V4L2_STD_SECAM) { + reg |= 0x50; + } + saa711x_write(client, R_0E_CHROMA_CNTL_1, reg); diff --git a/queue-2.6.20/v4l-msp_attach-must-return-0-if-no-msp3400-was-found.patch b/queue-2.6.20/v4l-msp_attach-must-return-0-if-no-msp3400-was-found.patch new file mode 100644 index 00000000000..b37d394eec9 --- /dev/null +++ b/queue-2.6.20/v4l-msp_attach-must-return-0-if-no-msp3400-was-found.patch @@ -0,0 +1,46 @@ +From stable-bounces@linux.kernel.org Wed Mar 28 18:24:18 2007 +From: Hans Verkuil +Date: Wed, 28 Mar 2007 21:22:35 -0400 +Subject: V4L: msp_attach must return 0 if no msp3400 was found. +To: stable@kernel.org +Message-ID: <460B14DB.20303@linuxtv.org> + +From: Hans Verkuil + +V4L: msp_attach must return 0 if no msp3400 was found. + +Returning -1 causes the probe to stop, but it should just continue +instead. This patch fixes an annoying 'i2c_adapter i2c-7: Client +creation failed at 0x44 (-1)' kernel message that appeared in 2.6.20 + +(cherry picked from commit 3284b4e077cb2322754ea7455b8f8af7ce3777b8) + +Signed-off-by: Hans Verkuil +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Michael Krufky +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/video/msp3400-driver.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/media/video/msp3400-driver.c ++++ b/drivers/media/video/msp3400-driver.c +@@ -825,7 +825,7 @@ static int msp_attach(struct i2c_adapter + if (msp_reset(client) == -1) { + v4l_dbg(1, msp_debug, client, "msp3400 not found\n"); + kfree(client); +- return -1; ++ return 0; + } + + state = kmalloc(sizeof(*state), GFP_KERNEL); +@@ -859,7 +859,7 @@ static int msp_attach(struct i2c_adapter + v4l_dbg(1, msp_debug, client, "not an msp3400 (cannot read chip version)\n"); + kfree(state); + kfree(client); +- return -1; ++ return 0; + } + + msp_set_audio(client); diff --git a/queue-2.6.20/v4l-radio-fix-error-in-kbuild-file.patch b/queue-2.6.20/v4l-radio-fix-error-in-kbuild-file.patch new file mode 100644 index 00000000000..043cd39fd20 --- /dev/null +++ b/queue-2.6.20/v4l-radio-fix-error-in-kbuild-file.patch @@ -0,0 +1,38 @@ +From stable-bounces@linux.kernel.org Wed Mar 28 18:23:50 2007 +From: Trent Piepho +Date: Wed, 28 Mar 2007 21:22:28 -0400 +Subject: V4L: radio: Fix error in Kbuild file +To: stable@kernel.org +Message-ID: <460B14D4.7060109@linuxtv.org> + +From: Trent Piepho + +V4L: radio: Fix error in Kbuild file + +All the radio drivers need video_dev, but they were depending on +VIDEO_DEV!=n. That meant that one could try to compile the driver into +the kernel when VIDEO_DEV=m, which will not work. If video_dev is a +module, then the radio drivers must be modules too. + +(cherry picked from commit b10fece583fdfdb3d2f29b0da3896ec58b8fe122) + +Signed-off-by: Trent Piepho +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Michael Krufky +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/radio/Kconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/media/radio/Kconfig ++++ b/drivers/media/radio/Kconfig +@@ -3,7 +3,7 @@ + # + + menu "Radio Adapters" +- depends on VIDEO_DEV!=n ++ depends on VIDEO_DEV + + config RADIO_CADET + tristate "ADS Cadet AM/FM Tuner" diff --git a/queue-2.6.20/v4l-saa7146-fix-allocation-of-clipping-memory.patch b/queue-2.6.20/v4l-saa7146-fix-allocation-of-clipping-memory.patch new file mode 100644 index 00000000000..c42c8622ff8 --- /dev/null +++ b/queue-2.6.20/v4l-saa7146-fix-allocation-of-clipping-memory.patch @@ -0,0 +1,43 @@ +From stable-bounces@linux.kernel.org Wed Mar 28 18:24:18 2007 +From: Oliver Endriss +Date: Wed, 28 Mar 2007 21:22:42 -0400 +Subject: V4L: saa7146: Fix allocation of clipping memory +To: stable@kernel.org +Message-ID: <460B14E2.70904@linuxtv.org> + +From: Oliver Endriss + +V4L: saa7146: Fix allocation of clipping memory + +Olaf Hering pointed out that SAA7146_CLIPPING_MEM would become +very large for PAGE_SIZE > 4K. + +In fact, the number of clipping windows is limited to 16, +and calculate_clipping_registers_rect() does not use more +than 256 bytes. SAA7146_CLIPPING_MEM adjusted accordingly. + +(cherry picked from commit 7a7cd1920969dd9da4e0d99aab573b3eba24c799) + +Thanks-to: Olaf Hering +Acked-by: Michael Hunold +Signed-off-by: Oliver Endriss +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Michael Krufky +Signed-off-by: Greg Kroah-Hartman + +--- + include/media/saa7146_vv.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/include/media/saa7146_vv.h ++++ b/include/media/saa7146_vv.h +@@ -239,7 +239,8 @@ void saa7146_res_free(struct saa7146_fh + #define SAA7146_HPS_SYNC_PORT_B 0x01 + + /* some memory sizes */ +-#define SAA7146_CLIPPING_MEM (14*PAGE_SIZE) ++/* max. 16 clipping rectangles */ ++#define SAA7146_CLIPPING_MEM (16 * 4 * sizeof(u32)) + + /* some defines for the various clipping-modes */ + #define SAA7146_CLIPPING_RECT 0x4