diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-30 00:25:39 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-30 00:25:39 -0400 |
commit | 93acda847f42aa3ca6d0107845fd59a6041b13e2 (patch) | |
tree | bb3dc8650cee8bd49a5a0150af77949bc3d02353 | |
parent | 3dacbdad2401c06b97d8d754974233a70c165536 (diff) | |
parent | fe78a49c8ae009d33d6e2c80d4f7f2634440d523 (diff) |
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6:
V4L/DVB (11652): au0828: fix kernel oops regression on USB disconnect.
V4L/DVB (11626): cx23885: Two fixes for DViCO FusionHDTV DVB-T Dual Express
V4L/DVB (11612): mx3_camera: Fix compilation with CONFIG_PM
V4L/DVB (11570): patch: s2255drv: fix race condition on set mode
V4L/DVB (11568): cx18: Fix the handling of i2c bus registration error
V4L/DVB (11561a): move media after i2c
V4L/DVB (11516): drivers/media/video/saa5246a.c: fix use-after-free
V4L/DVB (11515): drivers/media/video/saa5249.c: fix use-after-free and leak
V4L/DVB (11494a): cx231xx Kconfig fixes
V4L/DVB (11494): cx18: Send correct input routing value to external audio multiplexers
-rw-r--r-- | drivers/Makefile | 4 | ||||
-rw-r--r-- | drivers/media/video/au0828/au0828-core.c | 6 | ||||
-rw-r--r-- | drivers/media/video/cx18/cx18-audio.c | 2 | ||||
-rw-r--r-- | drivers/media/video/cx18/cx18-i2c.c | 16 | ||||
-rw-r--r-- | drivers/media/video/cx231xx/Kconfig | 44 | ||||
-rw-r--r-- | drivers/media/video/cx23885/cx23885-cards.c | 4 | ||||
-rw-r--r-- | drivers/media/video/cx23885/cx23885-dvb.c | 1 | ||||
-rw-r--r-- | drivers/media/video/mx3_camera.c | 4 | ||||
-rw-r--r-- | drivers/media/video/s2255drv.c | 2 | ||||
-rw-r--r-- | drivers/media/video/saa5246a.c | 3 | ||||
-rw-r--r-- | drivers/media/video/saa5249.c | 4 |
11 files changed, 49 insertions, 41 deletions
diff --git a/drivers/Makefile b/drivers/Makefile index 2618a6169a13..1266ead6ace0 100644 --- a/drivers/Makefile +++ b/drivers/Makefile | |||
@@ -36,7 +36,7 @@ obj-$(CONFIG_FB_INTEL) += video/intelfb/ | |||
36 | 36 | ||
37 | obj-y += serial/ | 37 | obj-y += serial/ |
38 | obj-$(CONFIG_PARPORT) += parport/ | 38 | obj-$(CONFIG_PARPORT) += parport/ |
39 | obj-y += base/ block/ misc/ mfd/ media/ | 39 | obj-y += base/ block/ misc/ mfd/ |
40 | obj-$(CONFIG_NUBUS) += nubus/ | 40 | obj-$(CONFIG_NUBUS) += nubus/ |
41 | obj-y += macintosh/ | 41 | obj-y += macintosh/ |
42 | obj-$(CONFIG_IDE) += ide/ | 42 | obj-$(CONFIG_IDE) += ide/ |
@@ -71,7 +71,7 @@ obj-$(CONFIG_GAMEPORT) += input/gameport/ | |||
71 | obj-$(CONFIG_INPUT) += input/ | 71 | obj-$(CONFIG_INPUT) += input/ |
72 | obj-$(CONFIG_I2O) += message/ | 72 | obj-$(CONFIG_I2O) += message/ |
73 | obj-$(CONFIG_RTC_LIB) += rtc/ | 73 | obj-$(CONFIG_RTC_LIB) += rtc/ |
74 | obj-y += i2c/ | 74 | obj-y += i2c/ media/ |
75 | obj-$(CONFIG_W1) += w1/ | 75 | obj-$(CONFIG_W1) += w1/ |
76 | obj-$(CONFIG_POWER_SUPPLY) += power/ | 76 | obj-$(CONFIG_POWER_SUPPLY) += power/ |
77 | obj-$(CONFIG_HWMON) += hwmon/ | 77 | obj-$(CONFIG_HWMON) += hwmon/ |
diff --git a/drivers/media/video/au0828/au0828-core.c b/drivers/media/video/au0828/au0828-core.c index 4cee0b92eeee..a1e4c0d769a6 100644 --- a/drivers/media/video/au0828/au0828-core.c +++ b/drivers/media/video/au0828/au0828-core.c | |||
@@ -192,8 +192,6 @@ static int au0828_usb_probe(struct usb_interface *interface, | |||
192 | dev->usbdev = usbdev; | 192 | dev->usbdev = usbdev; |
193 | dev->boardnr = id->driver_info; | 193 | dev->boardnr = id->driver_info; |
194 | 194 | ||
195 | usb_set_intfdata(interface, dev); | ||
196 | |||
197 | /* Create the v4l2_device */ | 195 | /* Create the v4l2_device */ |
198 | retval = v4l2_device_register(&interface->dev, &dev->v4l2_dev); | 196 | retval = v4l2_device_register(&interface->dev, &dev->v4l2_dev); |
199 | if (retval) { | 197 | if (retval) { |
@@ -222,6 +220,10 @@ static int au0828_usb_probe(struct usb_interface *interface, | |||
222 | /* Digital TV */ | 220 | /* Digital TV */ |
223 | au0828_dvb_register(dev); | 221 | au0828_dvb_register(dev); |
224 | 222 | ||
223 | /* Store the pointer to the au0828_dev so it can be accessed in | ||
224 | au0828_usb_disconnect */ | ||
225 | usb_set_intfdata(interface, dev); | ||
226 | |||
225 | printk(KERN_INFO "Registered device AU0828 [%s]\n", | 227 | printk(KERN_INFO "Registered device AU0828 [%s]\n", |
226 | dev->board.name == NULL ? "Unset" : dev->board.name); | 228 | dev->board.name == NULL ? "Unset" : dev->board.name); |
227 | 229 | ||
diff --git a/drivers/media/video/cx18/cx18-audio.c b/drivers/media/video/cx18/cx18-audio.c index 1519e91c677a..7a8ad5963de8 100644 --- a/drivers/media/video/cx18/cx18-audio.c +++ b/drivers/media/video/cx18/cx18-audio.c | |||
@@ -44,7 +44,7 @@ int cx18_audio_set_io(struct cx18 *cx) | |||
44 | 44 | ||
45 | /* handle muxer chips */ | 45 | /* handle muxer chips */ |
46 | v4l2_subdev_call(cx->sd_extmux, audio, s_routing, | 46 | v4l2_subdev_call(cx->sd_extmux, audio, s_routing, |
47 | in->audio_input, 0, 0); | 47 | (u32) in->muxer_input, 0, 0); |
48 | 48 | ||
49 | err = cx18_call_hw_err(cx, cx->card->hw_audio_ctrl, | 49 | err = cx18_call_hw_err(cx, cx->card->hw_audio_ctrl, |
50 | audio, s_routing, in->audio_input, 0, 0); | 50 | audio, s_routing, in->audio_input, 0, 0); |
diff --git a/drivers/media/video/cx18/cx18-i2c.c b/drivers/media/video/cx18/cx18-i2c.c index b9b7064a2be8..8591e4fc359f 100644 --- a/drivers/media/video/cx18/cx18-i2c.c +++ b/drivers/media/video/cx18/cx18-i2c.c | |||
@@ -211,7 +211,7 @@ static struct i2c_algo_bit_data cx18_i2c_algo_template = { | |||
211 | /* init + register i2c algo-bit adapter */ | 211 | /* init + register i2c algo-bit adapter */ |
212 | int init_cx18_i2c(struct cx18 *cx) | 212 | int init_cx18_i2c(struct cx18 *cx) |
213 | { | 213 | { |
214 | int i; | 214 | int i, err; |
215 | CX18_DEBUG_I2C("i2c init\n"); | 215 | CX18_DEBUG_I2C("i2c init\n"); |
216 | 216 | ||
217 | for (i = 0; i < 2; i++) { | 217 | for (i = 0; i < 2; i++) { |
@@ -268,8 +268,18 @@ int init_cx18_i2c(struct cx18 *cx) | |||
268 | cx18_call_hw(cx, CX18_HW_GPIO_RESET_CTRL, | 268 | cx18_call_hw(cx, CX18_HW_GPIO_RESET_CTRL, |
269 | core, reset, (u32) CX18_GPIO_RESET_I2C); | 269 | core, reset, (u32) CX18_GPIO_RESET_I2C); |
270 | 270 | ||
271 | return i2c_bit_add_bus(&cx->i2c_adap[0]) || | 271 | err = i2c_bit_add_bus(&cx->i2c_adap[0]); |
272 | i2c_bit_add_bus(&cx->i2c_adap[1]); | 272 | if (err) |
273 | goto err; | ||
274 | err = i2c_bit_add_bus(&cx->i2c_adap[1]); | ||
275 | if (err) | ||
276 | goto err_del_bus_0; | ||
277 | return 0; | ||
278 | |||
279 | err_del_bus_0: | ||
280 | i2c_del_adapter(&cx->i2c_adap[0]); | ||
281 | err: | ||
282 | return err; | ||
273 | } | 283 | } |
274 | 284 | ||
275 | void exit_cx18_i2c(struct cx18 *cx) | 285 | void exit_cx18_i2c(struct cx18 *cx) |
diff --git a/drivers/media/video/cx231xx/Kconfig b/drivers/media/video/cx231xx/Kconfig index 91156546a07a..477d4ab5e9ac 100644 --- a/drivers/media/video/cx231xx/Kconfig +++ b/drivers/media/video/cx231xx/Kconfig | |||
@@ -1,12 +1,11 @@ | |||
1 | config VIDEO_CX231XX | 1 | config VIDEO_CX231XX |
2 | tristate "Conexant cx231xx USB video capture support" | 2 | tristate "Conexant cx231xx USB video capture support" |
3 | depends on VIDEO_DEV && I2C && INPUT | 3 | depends on VIDEO_DEV && I2C && INPUT |
4 | select VIDEO_TUNER | 4 | select VIDEO_TUNER |
5 | select VIDEO_TVEEPROM | 5 | select VIDEO_TVEEPROM |
6 | select VIDEO_IR | 6 | select VIDEO_IR |
7 | select VIDEOBUF_VMALLOC | 7 | select VIDEOBUF_VMALLOC |
8 | select VIDEO_CX25840 | 8 | select VIDEO_CX25840 |
9 | select VIDEO_CX231XX_ALSA | ||
10 | 9 | ||
11 | ---help--- | 10 | ---help--- |
12 | This is a video4linux driver for Conexant 231xx USB based TV cards. | 11 | This is a video4linux driver for Conexant 231xx USB based TV cards. |
@@ -15,21 +14,22 @@ config VIDEO_CX231XX | |||
15 | module will be called cx231xx | 14 | module will be called cx231xx |
16 | 15 | ||
17 | config VIDEO_CX231XX_ALSA | 16 | config VIDEO_CX231XX_ALSA |
18 | tristate "Conexant Cx231xx ALSA audio module" | 17 | tristate "Conexant Cx231xx ALSA audio module" |
19 | depends on VIDEO_CX231XX && SND | 18 | depends on VIDEO_CX231XX && SND |
20 | select SND_PCM | 19 | select SND_PCM |
21 | 20 | ||
22 | ---help--- | 21 | ---help--- |
23 | This is an ALSA driver for Cx231xx USB based TV cards. | 22 | This is an ALSA driver for Cx231xx USB based TV cards. |
24 | 23 | ||
25 | To compile this driver as a module, choose M here: the | 24 | To compile this driver as a module, choose M here: the |
26 | module will be called cx231xx-alsa | 25 | module will be called cx231xx-alsa |
27 | 26 | ||
28 | config VIDEO_CX231XX_DVB | 27 | config VIDEO_CX231XX_DVB |
29 | tristate "DVB/ATSC Support for Cx231xx based TV cards" | 28 | tristate "DVB/ATSC Support for Cx231xx based TV cards" |
30 | depends on VIDEO_CX231XX && DVB_CORE | 29 | depends on VIDEO_CX231XX && DVB_CORE |
31 | select VIDEOBUF_DVB | 30 | select VIDEOBUF_DVB |
32 | select MEDIA_TUNER_XC5000 if !DVB_FE_CUSTOMISE | 31 | select MEDIA_TUNER_XC5000 if !DVB_FE_CUSTOMISE |
33 | ---help--- | 32 | |
34 | This adds support for DVB cards based on the | 33 | ---help--- |
35 | Conexant cx231xx chips. | 34 | This adds support for DVB cards based on the |
35 | Conexant cx231xx chips. | ||
diff --git a/drivers/media/video/cx23885/cx23885-cards.c b/drivers/media/video/cx23885/cx23885-cards.c index a3c0565be1a9..6d6293f7d428 100644 --- a/drivers/media/video/cx23885/cx23885-cards.c +++ b/drivers/media/video/cx23885/cx23885-cards.c | |||
@@ -441,9 +441,9 @@ int cx23885_tuner_callback(void *priv, int component, int command, int arg) | |||
441 | case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP: | 441 | case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP: |
442 | /* Two identical tuners on two different i2c buses, | 442 | /* Two identical tuners on two different i2c buses, |
443 | * we need to reset the correct gpio. */ | 443 | * we need to reset the correct gpio. */ |
444 | if (port->nr == 0) | 444 | if (port->nr == 1) |
445 | bitmask = 0x01; | 445 | bitmask = 0x01; |
446 | else if (port->nr == 1) | 446 | else if (port->nr == 2) |
447 | bitmask = 0x04; | 447 | bitmask = 0x04; |
448 | break; | 448 | break; |
449 | } | 449 | } |
diff --git a/drivers/media/video/cx23885/cx23885-dvb.c b/drivers/media/video/cx23885/cx23885-dvb.c index f48454ab3900..0c49a98213c4 100644 --- a/drivers/media/video/cx23885/cx23885-dvb.c +++ b/drivers/media/video/cx23885/cx23885-dvb.c | |||
@@ -314,6 +314,7 @@ static struct zl10353_config dvico_fusionhdtv_xc3028 = { | |||
314 | .demod_address = 0x0f, | 314 | .demod_address = 0x0f, |
315 | .if2 = 45600, | 315 | .if2 = 45600, |
316 | .no_tuner = 1, | 316 | .no_tuner = 1, |
317 | .disable_i2c_gate_ctrl = 1, | ||
317 | }; | 318 | }; |
318 | 319 | ||
319 | static struct stv0900_config netup_stv0900_config = { | 320 | static struct stv0900_config netup_stv0900_config = { |
diff --git a/drivers/media/video/mx3_camera.c b/drivers/media/video/mx3_camera.c index c462b811e994..2d0781118eb0 100644 --- a/drivers/media/video/mx3_camera.c +++ b/drivers/media/video/mx3_camera.c | |||
@@ -1063,10 +1063,6 @@ static struct soc_camera_host_ops mx3_soc_camera_host_ops = { | |||
1063 | .owner = THIS_MODULE, | 1063 | .owner = THIS_MODULE, |
1064 | .add = mx3_camera_add_device, | 1064 | .add = mx3_camera_add_device, |
1065 | .remove = mx3_camera_remove_device, | 1065 | .remove = mx3_camera_remove_device, |
1066 | #ifdef CONFIG_PM | ||
1067 | .suspend = mx3_camera_suspend, | ||
1068 | .resume = mx3_camera_resume, | ||
1069 | #endif | ||
1070 | .set_crop = mx3_camera_set_crop, | 1066 | .set_crop = mx3_camera_set_crop, |
1071 | .set_fmt = mx3_camera_set_fmt, | 1067 | .set_fmt = mx3_camera_set_fmt, |
1072 | .try_fmt = mx3_camera_try_fmt, | 1068 | .try_fmt = mx3_camera_try_fmt, |
diff --git a/drivers/media/video/s2255drv.c b/drivers/media/video/s2255drv.c index 5202cadb2aae..30f4698be90a 100644 --- a/drivers/media/video/s2255drv.c +++ b/drivers/media/video/s2255drv.c | |||
@@ -1237,6 +1237,7 @@ static int s2255_set_mode(struct s2255_dev *dev, unsigned long chn, | |||
1237 | buffer[1] = (u32) chn_rev; | 1237 | buffer[1] = (u32) chn_rev; |
1238 | buffer[2] = CMD_SET_MODE; | 1238 | buffer[2] = CMD_SET_MODE; |
1239 | memcpy(&buffer[3], &dev->mode[chn], sizeof(struct s2255_mode)); | 1239 | memcpy(&buffer[3], &dev->mode[chn], sizeof(struct s2255_mode)); |
1240 | dev->setmode_ready[chn] = 0; | ||
1240 | res = s2255_write_config(dev->udev, (unsigned char *)buffer, 512); | 1241 | res = s2255_write_config(dev->udev, (unsigned char *)buffer, 512); |
1241 | if (debug) | 1242 | if (debug) |
1242 | dump_verify_mode(dev, mode); | 1243 | dump_verify_mode(dev, mode); |
@@ -1245,7 +1246,6 @@ static int s2255_set_mode(struct s2255_dev *dev, unsigned long chn, | |||
1245 | 1246 | ||
1246 | /* wait at least 3 frames before continuing */ | 1247 | /* wait at least 3 frames before continuing */ |
1247 | if (mode->restart) { | 1248 | if (mode->restart) { |
1248 | dev->setmode_ready[chn] = 0; | ||
1249 | wait_event_timeout(dev->wait_setmode[chn], | 1249 | wait_event_timeout(dev->wait_setmode[chn], |
1250 | (dev->setmode_ready[chn] != 0), | 1250 | (dev->setmode_ready[chn] != 0), |
1251 | msecs_to_jiffies(S2255_SETMODE_TIMEOUT)); | 1251 | msecs_to_jiffies(S2255_SETMODE_TIMEOUT)); |
diff --git a/drivers/media/video/saa5246a.c b/drivers/media/video/saa5246a.c index da47b2f05288..155804b061e9 100644 --- a/drivers/media/video/saa5246a.c +++ b/drivers/media/video/saa5246a.c | |||
@@ -1092,9 +1092,8 @@ static int saa5246a_probe(struct i2c_client *client, | |||
1092 | /* Register it */ | 1092 | /* Register it */ |
1093 | err = video_register_device(t->vdev, VFL_TYPE_VTX, -1); | 1093 | err = video_register_device(t->vdev, VFL_TYPE_VTX, -1); |
1094 | if (err < 0) { | 1094 | if (err < 0) { |
1095 | kfree(t); | ||
1096 | video_device_release(t->vdev); | 1095 | video_device_release(t->vdev); |
1097 | t->vdev = NULL; | 1096 | kfree(t); |
1098 | return err; | 1097 | return err; |
1099 | } | 1098 | } |
1100 | return 0; | 1099 | return 0; |
diff --git a/drivers/media/video/saa5249.c b/drivers/media/video/saa5249.c index 48b27fe48087..271d6e931b75 100644 --- a/drivers/media/video/saa5249.c +++ b/drivers/media/video/saa5249.c | |||
@@ -598,6 +598,7 @@ static int saa5249_probe(struct i2c_client *client, | |||
598 | /* Now create a video4linux device */ | 598 | /* Now create a video4linux device */ |
599 | t->vdev = video_device_alloc(); | 599 | t->vdev = video_device_alloc(); |
600 | if (t->vdev == NULL) { | 600 | if (t->vdev == NULL) { |
601 | kfree(t); | ||
601 | kfree(client); | 602 | kfree(client); |
602 | return -ENOMEM; | 603 | return -ENOMEM; |
603 | } | 604 | } |
@@ -617,9 +618,8 @@ static int saa5249_probe(struct i2c_client *client, | |||
617 | /* Register it */ | 618 | /* Register it */ |
618 | err = video_register_device(t->vdev, VFL_TYPE_VTX, -1); | 619 | err = video_register_device(t->vdev, VFL_TYPE_VTX, -1); |
619 | if (err < 0) { | 620 | if (err < 0) { |
620 | kfree(t); | ||
621 | video_device_release(t->vdev); | 621 | video_device_release(t->vdev); |
622 | t->vdev = NULL; | 622 | kfree(t); |
623 | return err; | 623 | return err; |
624 | } | 624 | } |
625 | return 0; | 625 | return 0; |