Skip to content

Commit

Permalink
V4L/DVB (11568): cx18: Fix the handling of i2c bus registration error
Browse files Browse the repository at this point in the history
* Return actual error values as returned by the i2c subsystem, rather
  than 0 or 1.
* If the registration of the second bus fails, unregister the first one
  before exiting, otherwise we are leaking resources.

Signed-off-by: Jean Delvare <[email protected]>
Acked-by: Andy Walls <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
  • Loading branch information
Jean Delvare authored and Mauro Carvalho Chehab committed Apr 29, 2009
1 parent a357482 commit 272aa39
Showing 1 changed file with 13 additions and 3 deletions.
16 changes: 13 additions & 3 deletions drivers/media/video/cx18/cx18-i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -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++) {
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 272aa39

Please sign in to comment.