Skip to content

Commit

Permalink
V4L/DVB (10018): gspca - m5602 - ov9650: Use generic read_sensor func…
Browse files Browse the repository at this point in the history
…tion

Toggle read sensor sequence depending on type of sensor. Check that no
more than max width of a sensor is read.

Signed-off-by: Erik Andrén <erik.andren@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Erik Andrén authored and Mauro Carvalho Chehab committed Dec 30, 2008
1 parent e7a7f51 commit edbfbdb
Showing 1 changed file with 17 additions and 6 deletions.
23 changes: 17 additions & 6 deletions drivers/media/video/gspca/m5602/m5602_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,14 @@ int m5602_read_sensor(struct sd *sd, const u8 address,
{
int err, i;

if (!len || len > sd->sensor->i2c_regW)
return -EINVAL;

do {
err = m5602_read_bridge(sd, M5602_XB_I2C_STATUS, i2c_data);
} while ((*i2c_data & I2C_BUSY) && !err);
if (err < 0)
goto out;

err = m5602_write_bridge(sd, M5602_XB_I2C_DEV_ADDR,
sd->sensor->i2c_slave_id);
Expand All @@ -98,13 +103,19 @@ int m5602_read_sensor(struct sd *sd, const u8 address,
if (err < 0)
goto out;

err = m5602_write_bridge(sd, M5602_XB_I2C_CTRL, 0x10 + len);
if (err < 0)
goto out;
if (sd->sensor->i2c_regW == 1) {
err = m5602_write_bridge(sd, M5602_XB_I2C_CTRL, len);
if (err < 0)
goto out;

err = m5602_write_bridge(sd, M5602_XB_I2C_CTRL, 0x08);
if (err < 0)
goto out;
err = m5602_write_bridge(sd, M5602_XB_I2C_CTRL, 0x08);
if (err < 0)
goto out;
} else {
err = m5602_write_bridge(sd, M5602_XB_I2C_CTRL, 0x18 + len);
if (err < 0)
goto out;
}

for (i = 0; (i < len) && !err; i++) {
err = m5602_read_bridge(sd, M5602_XB_I2C_DATA, &(i2c_data[i]));
Expand Down

0 comments on commit edbfbdb

Please sign in to comment.