Skip to content

Commit

Permalink
V4L/DVB (6465): Use correct error codes when chip is not recognized
Browse files Browse the repository at this point in the history
If the chip isn't recognized, then the correct errors should be returned.
The v4l2_i2c_attach() utility function will return 0 for all errors
except -ENOMEM to provide proper compatibility support for the old I2C
probing function.

Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
  • Loading branch information
hverkuil authored and mchehab committed Jan 25, 2008
1 parent 6235168 commit 188f345
Show file tree
Hide file tree
Showing 11 changed files with 22 additions and 14 deletions.
2 changes: 1 addition & 1 deletion drivers/media/video/cs53l32a.c
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ static int cs53l32a_probe(struct i2c_client *client)

/* Check if the adapter supports the needed features */
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
return 0;
return -EIO;

snprintf(client->name, sizeof(client->name) - 1, "cs53l32a");

Expand Down
6 changes: 5 additions & 1 deletion drivers/media/video/cx25840/cx25840-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1078,6 +1078,10 @@ static int cx25840_probe(struct i2c_client *client)
u32 id;
u16 device_id;

/* Check if the adapter supports the needed features */
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
return -EIO;

v4l_dbg(1, cx25840_debug, client, "detecting cx25840 client on address 0x%x\n", client->addr << 1);

device_id = cx25840_read(client, 0x101) << 8;
Expand All @@ -1093,7 +1097,7 @@ static int cx25840_probe(struct i2c_client *client)
}
else {
v4l_dbg(1, cx25840_debug, client, "cx25840 not found\n");
return 0;
return -ENODEV;
}

state = kzalloc(sizeof(struct cx25840_state), GFP_KERNEL);
Expand Down
4 changes: 2 additions & 2 deletions drivers/media/video/msp3400-driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -812,7 +812,7 @@ static int msp_probe(struct i2c_client *client)

if (msp_reset(client) == -1) {
v4l_dbg(1, msp_debug, client, "msp3400 not found\n");
return 0;
return -ENODEV;
}

state = kzalloc(sizeof(*state), GFP_KERNEL);
Expand Down Expand Up @@ -844,7 +844,7 @@ static int msp_probe(struct i2c_client *client)
if (state->rev1 == -1 || (state->rev1 == 0 && state->rev2 == 0)) {
v4l_dbg(1, msp_debug, client, "not an msp3400 (cannot read chip version)\n");
kfree(state);
return 0;
return -ENODEV;
}

msp_set_audio(client);
Expand Down
4 changes: 2 additions & 2 deletions drivers/media/video/saa7115.c
Original file line number Diff line number Diff line change
Expand Up @@ -1459,7 +1459,7 @@ static int saa7115_probe(struct i2c_client *client)

/* Check if the adapter supports the needed features */
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
return 0;
return -EIO;

snprintf(client->name, sizeof(client->name) - 1, "saa7115");

Expand All @@ -1478,7 +1478,7 @@ static int saa7115_probe(struct i2c_client *client)
if (memcmp(name, "1f711", 5)) {
v4l_dbg(1, debug, client, "chip found @ 0x%x (ID %s) does not match a known saa711x chip.\n",
client->addr << 1, name);
return 0;
return -ENODEV;
}

snprintf(client->name, sizeof(client->name) - 1, "saa711%d",chip_id);
Expand Down
6 changes: 3 additions & 3 deletions drivers/media/video/saa7127.c
Original file line number Diff line number Diff line change
Expand Up @@ -671,7 +671,7 @@ static int saa7127_probe(struct i2c_client *client)

/* Check if the adapter supports the needed features */
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
return 0;
return -EIO;

snprintf(client->name, sizeof(client->name) - 1, "saa7127");

Expand All @@ -685,12 +685,12 @@ static int saa7127_probe(struct i2c_client *client)
if ((saa7127_read(client, 0) & 0xe4) != 0 ||
(saa7127_read(client, 0x29) & 0x3f) != 0x1d) {
v4l_dbg(1, debug, client, "saa7127 not found\n");
return 0;
return -ENODEV;
}
state = kzalloc(sizeof(struct saa7127_state), GFP_KERNEL);

if (state == NULL) {
return (-ENOMEM);
return -ENOMEM;
}

i2c_set_clientdata(client, state);
Expand Down
2 changes: 1 addition & 1 deletion drivers/media/video/tlv320aic23b.c
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ static int tlv320aic23b_probe(struct i2c_client *client)

/* Check if the adapter supports the needed features */
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
return 0;
return -EIO;

v4l_info(client, "chip found @ 0x%x (%s)\n", client->addr << 1, client->adapter->name);

Expand Down
2 changes: 1 addition & 1 deletion drivers/media/video/upd64031a.c
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ static int upd64031a_probe(struct i2c_client *client)
int i;

if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
return 0;
return -EIO;

v4l_info(client, "chip found @ 0x%x (%s)\n", client->addr << 1, client->adapter->name);

Expand Down
2 changes: 1 addition & 1 deletion drivers/media/video/upd64083.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ static int upd64083_probe(struct i2c_client *client)
int i;

if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
return 0;
return -EIO;

v4l_info(client, "chip found @ 0x%x (%s)\n", client->addr << 1, client->adapter->name);

Expand Down
2 changes: 1 addition & 1 deletion drivers/media/video/v4l2-common.c
Original file line number Diff line number Diff line change
Expand Up @@ -1037,7 +1037,7 @@ int v4l2_i2c_attach(struct i2c_adapter *adapter, int address, struct i2c_driver
else {
kfree(client);
}
return err;
return err != -ENOMEM ? 0 : err;
}

/* ----------------------------------------------------------------- */
Expand Down
2 changes: 1 addition & 1 deletion drivers/media/video/vp27smpx.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ static int vp27smpx_probe(struct i2c_client *client)

/* Check if the adapter supports the needed features */
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
return 0;
return -EIO;

snprintf(client->name, sizeof(client->name) - 1, "vp27smpx");

Expand Down
4 changes: 4 additions & 0 deletions drivers/media/video/wm8739.c
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,10 @@ static int wm8739_probe(struct i2c_client *client)
{
struct wm8739_state *state;

/* Check if the adapter supports the needed features */
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
return -EIO;

v4l_info(client, "chip found @ 0x%x (%s)\n", client->addr << 1, client->adapter->name);

state = kmalloc(sizeof(struct wm8739_state), GFP_KERNEL);
Expand Down

0 comments on commit 188f345

Please sign in to comment.