Commit 93acda84 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 3dacbdad fe78a49c
...@@ -36,7 +36,7 @@ obj-$(CONFIG_FB_INTEL) += video/intelfb/ ...@@ -36,7 +36,7 @@ obj-$(CONFIG_FB_INTEL) += video/intelfb/
obj-y += serial/ obj-y += serial/
obj-$(CONFIG_PARPORT) += parport/ obj-$(CONFIG_PARPORT) += parport/
obj-y += base/ block/ misc/ mfd/ media/ obj-y += base/ block/ misc/ mfd/
obj-$(CONFIG_NUBUS) += nubus/ obj-$(CONFIG_NUBUS) += nubus/
obj-y += macintosh/ obj-y += macintosh/
obj-$(CONFIG_IDE) += ide/ obj-$(CONFIG_IDE) += ide/
...@@ -71,7 +71,7 @@ obj-$(CONFIG_GAMEPORT) += input/gameport/ ...@@ -71,7 +71,7 @@ obj-$(CONFIG_GAMEPORT) += input/gameport/
obj-$(CONFIG_INPUT) += input/ obj-$(CONFIG_INPUT) += input/
obj-$(CONFIG_I2O) += message/ obj-$(CONFIG_I2O) += message/
obj-$(CONFIG_RTC_LIB) += rtc/ obj-$(CONFIG_RTC_LIB) += rtc/
obj-y += i2c/ obj-y += i2c/ media/
obj-$(CONFIG_W1) += w1/ obj-$(CONFIG_W1) += w1/
obj-$(CONFIG_POWER_SUPPLY) += power/ obj-$(CONFIG_POWER_SUPPLY) += power/
obj-$(CONFIG_HWMON) += hwmon/ obj-$(CONFIG_HWMON) += hwmon/
......
...@@ -192,8 +192,6 @@ static int au0828_usb_probe(struct usb_interface *interface, ...@@ -192,8 +192,6 @@ static int au0828_usb_probe(struct usb_interface *interface,
dev->usbdev = usbdev; dev->usbdev = usbdev;
dev->boardnr = id->driver_info; dev->boardnr = id->driver_info;
usb_set_intfdata(interface, dev);
/* Create the v4l2_device */ /* Create the v4l2_device */
retval = v4l2_device_register(&interface->dev, &dev->v4l2_dev); retval = v4l2_device_register(&interface->dev, &dev->v4l2_dev);
if (retval) { if (retval) {
...@@ -222,6 +220,10 @@ static int au0828_usb_probe(struct usb_interface *interface, ...@@ -222,6 +220,10 @@ static int au0828_usb_probe(struct usb_interface *interface,
/* Digital TV */ /* Digital TV */
au0828_dvb_register(dev); au0828_dvb_register(dev);
/* Store the pointer to the au0828_dev so it can be accessed in
au0828_usb_disconnect */
usb_set_intfdata(interface, dev);
printk(KERN_INFO "Registered device AU0828 [%s]\n", printk(KERN_INFO "Registered device AU0828 [%s]\n",
dev->board.name == NULL ? "Unset" : dev->board.name); dev->board.name == NULL ? "Unset" : dev->board.name);
......
...@@ -44,7 +44,7 @@ int cx18_audio_set_io(struct cx18 *cx) ...@@ -44,7 +44,7 @@ int cx18_audio_set_io(struct cx18 *cx)
/* handle muxer chips */ /* handle muxer chips */
v4l2_subdev_call(cx->sd_extmux, audio, s_routing, v4l2_subdev_call(cx->sd_extmux, audio, s_routing,
in->audio_input, 0, 0); (u32) in->muxer_input, 0, 0);
err = cx18_call_hw_err(cx, cx->card->hw_audio_ctrl, err = cx18_call_hw_err(cx, cx->card->hw_audio_ctrl,
audio, s_routing, in->audio_input, 0, 0); audio, s_routing, in->audio_input, 0, 0);
......
...@@ -211,7 +211,7 @@ static struct i2c_algo_bit_data cx18_i2c_algo_template = { ...@@ -211,7 +211,7 @@ static struct i2c_algo_bit_data cx18_i2c_algo_template = {
/* init + register i2c algo-bit adapter */ /* init + register i2c algo-bit adapter */
int init_cx18_i2c(struct cx18 *cx) int init_cx18_i2c(struct cx18 *cx)
{ {
int i; int i, err;
CX18_DEBUG_I2C("i2c init\n"); CX18_DEBUG_I2C("i2c init\n");
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
...@@ -268,8 +268,18 @@ int init_cx18_i2c(struct cx18 *cx) ...@@ -268,8 +268,18 @@ int init_cx18_i2c(struct cx18 *cx)
cx18_call_hw(cx, CX18_HW_GPIO_RESET_CTRL, cx18_call_hw(cx, CX18_HW_GPIO_RESET_CTRL,
core, reset, (u32) CX18_GPIO_RESET_I2C); core, reset, (u32) CX18_GPIO_RESET_I2C);
return i2c_bit_add_bus(&cx->i2c_adap[0]) || err = i2c_bit_add_bus(&cx->i2c_adap[0]);
i2c_bit_add_bus(&cx->i2c_adap[1]); if (err)
goto err;
err = i2c_bit_add_bus(&cx->i2c_adap[1]);
if (err)
goto err_del_bus_0;
return 0;
err_del_bus_0:
i2c_del_adapter(&cx->i2c_adap[0]);
err:
return err;
} }
void exit_cx18_i2c(struct cx18 *cx) void exit_cx18_i2c(struct cx18 *cx)
......
...@@ -6,7 +6,6 @@ config VIDEO_CX231XX ...@@ -6,7 +6,6 @@ config VIDEO_CX231XX
select VIDEO_IR select VIDEO_IR
select VIDEOBUF_VMALLOC select VIDEOBUF_VMALLOC
select VIDEO_CX25840 select VIDEO_CX25840
select VIDEO_CX231XX_ALSA
---help--- ---help---
This is a video4linux driver for Conexant 231xx USB based TV cards. This is a video4linux driver for Conexant 231xx USB based TV cards.
...@@ -30,6 +29,7 @@ config VIDEO_CX231XX_DVB ...@@ -30,6 +29,7 @@ config VIDEO_CX231XX_DVB
depends on VIDEO_CX231XX && DVB_CORE depends on VIDEO_CX231XX && DVB_CORE
select VIDEOBUF_DVB select VIDEOBUF_DVB
select MEDIA_TUNER_XC5000 if !DVB_FE_CUSTOMISE select MEDIA_TUNER_XC5000 if !DVB_FE_CUSTOMISE
---help--- ---help---
This adds support for DVB cards based on the This adds support for DVB cards based on the
Conexant cx231xx chips. Conexant cx231xx chips.
...@@ -441,9 +441,9 @@ int cx23885_tuner_callback(void *priv, int component, int command, int arg) ...@@ -441,9 +441,9 @@ int cx23885_tuner_callback(void *priv, int component, int command, int arg)
case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP: case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:
/* Two identical tuners on two different i2c buses, /* Two identical tuners on two different i2c buses,
* we need to reset the correct gpio. */ * we need to reset the correct gpio. */
if (port->nr == 0) if (port->nr == 1)
bitmask = 0x01; bitmask = 0x01;
else if (port->nr == 1) else if (port->nr == 2)
bitmask = 0x04; bitmask = 0x04;
break; break;
} }
......
...@@ -314,6 +314,7 @@ static struct zl10353_config dvico_fusionhdtv_xc3028 = { ...@@ -314,6 +314,7 @@ static struct zl10353_config dvico_fusionhdtv_xc3028 = {
.demod_address = 0x0f, .demod_address = 0x0f,
.if2 = 45600, .if2 = 45600,
.no_tuner = 1, .no_tuner = 1,
.disable_i2c_gate_ctrl = 1,
}; };
static struct stv0900_config netup_stv0900_config = { static struct stv0900_config netup_stv0900_config = {
......
...@@ -1063,10 +1063,6 @@ static struct soc_camera_host_ops mx3_soc_camera_host_ops = { ...@@ -1063,10 +1063,6 @@ static struct soc_camera_host_ops mx3_soc_camera_host_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.add = mx3_camera_add_device, .add = mx3_camera_add_device,
.remove = mx3_camera_remove_device, .remove = mx3_camera_remove_device,
#ifdef CONFIG_PM
.suspend = mx3_camera_suspend,
.resume = mx3_camera_resume,
#endif
.set_crop = mx3_camera_set_crop, .set_crop = mx3_camera_set_crop,
.set_fmt = mx3_camera_set_fmt, .set_fmt = mx3_camera_set_fmt,
.try_fmt = mx3_camera_try_fmt, .try_fmt = mx3_camera_try_fmt,
......
...@@ -1237,6 +1237,7 @@ static int s2255_set_mode(struct s2255_dev *dev, unsigned long chn, ...@@ -1237,6 +1237,7 @@ static int s2255_set_mode(struct s2255_dev *dev, unsigned long chn,
buffer[1] = (u32) chn_rev; buffer[1] = (u32) chn_rev;
buffer[2] = CMD_SET_MODE; buffer[2] = CMD_SET_MODE;
memcpy(&buffer[3], &dev->mode[chn], sizeof(struct s2255_mode)); memcpy(&buffer[3], &dev->mode[chn], sizeof(struct s2255_mode));
dev->setmode_ready[chn] = 0;
res = s2255_write_config(dev->udev, (unsigned char *)buffer, 512); res = s2255_write_config(dev->udev, (unsigned char *)buffer, 512);
if (debug) if (debug)
dump_verify_mode(dev, mode); dump_verify_mode(dev, mode);
...@@ -1245,7 +1246,6 @@ static int s2255_set_mode(struct s2255_dev *dev, unsigned long chn, ...@@ -1245,7 +1246,6 @@ static int s2255_set_mode(struct s2255_dev *dev, unsigned long chn,
/* wait at least 3 frames before continuing */ /* wait at least 3 frames before continuing */
if (mode->restart) { if (mode->restart) {
dev->setmode_ready[chn] = 0;
wait_event_timeout(dev->wait_setmode[chn], wait_event_timeout(dev->wait_setmode[chn],
(dev->setmode_ready[chn] != 0), (dev->setmode_ready[chn] != 0),
msecs_to_jiffies(S2255_SETMODE_TIMEOUT)); msecs_to_jiffies(S2255_SETMODE_TIMEOUT));
......
...@@ -1092,9 +1092,8 @@ static int saa5246a_probe(struct i2c_client *client, ...@@ -1092,9 +1092,8 @@ static int saa5246a_probe(struct i2c_client *client,
/* Register it */ /* Register it */
err = video_register_device(t->vdev, VFL_TYPE_VTX, -1); err = video_register_device(t->vdev, VFL_TYPE_VTX, -1);
if (err < 0) { if (err < 0) {
kfree(t);
video_device_release(t->vdev); video_device_release(t->vdev);
t->vdev = NULL; kfree(t);
return err; return err;
} }
return 0; return 0;
......
...@@ -598,6 +598,7 @@ static int saa5249_probe(struct i2c_client *client, ...@@ -598,6 +598,7 @@ static int saa5249_probe(struct i2c_client *client,
/* Now create a video4linux device */ /* Now create a video4linux device */
t->vdev = video_device_alloc(); t->vdev = video_device_alloc();
if (t->vdev == NULL) { if (t->vdev == NULL) {
kfree(t);
kfree(client); kfree(client);
return -ENOMEM; return -ENOMEM;
} }
...@@ -617,9 +618,8 @@ static int saa5249_probe(struct i2c_client *client, ...@@ -617,9 +618,8 @@ static int saa5249_probe(struct i2c_client *client,
/* Register it */ /* Register it */
err = video_register_device(t->vdev, VFL_TYPE_VTX, -1); err = video_register_device(t->vdev, VFL_TYPE_VTX, -1);
if (err < 0) { if (err < 0) {
kfree(t);
video_device_release(t->vdev); video_device_release(t->vdev);
t->vdev = NULL; kfree(t);
return err; return err;
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment