summaryrefslogtreecommitdiff
path: root/drivers/media/video/cx18/cx18-i2c.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-04-29 21:25:39 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2009-04-29 21:25:39 -0700
commit93acda847f42aa3ca6d0107845fd59a6041b13e2 (patch)
treebb3dc8650cee8bd49a5a0150af77949bc3d02353 /drivers/media/video/cx18/cx18-i2c.c
parent3dacbdad2401c06b97d8d754974233a70c165536 (diff)
parentfe78a49c8ae009d33d6e2c80d4f7f2634440d523 (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
Diffstat (limited to 'drivers/media/video/cx18/cx18-i2c.c')
-rw-r--r--drivers/media/video/cx18/cx18-i2c.c16
1 files changed, 13 insertions, 3 deletions
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 = {
/* init + register i2c algo-bit adapter */
int init_cx18_i2c(struct cx18 *cx)
{
- int i;
+ int i, err;
CX18_DEBUG_I2C("i2c init\n");
for (i = 0; i < 2; i++) {
@@ -268,8 +268,18 @@ int init_cx18_i2c(struct cx18 *cx)
cx18_call_hw(cx, CX18_HW_GPIO_RESET_CTRL,
core, reset, (u32) CX18_GPIO_RESET_I2C);
- return i2c_bit_add_bus(&cx->i2c_adap[0]) ||
- i2c_bit_add_bus(&cx->i2c_adap[1]);
+ err = i2c_bit_add_bus(&cx->i2c_adap[0]);
+ 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)