|
@@ -268,72 +268,6 @@ et61x251_i2c_wait(struct et61x251_device* cam,
|
|
|
}
|
|
|
|
|
|
|
|
|
-static int et61x251_i2c_try_read(struct et61x251_device* cam,
|
|
|
- const struct et61x251_sensor* sensor,
|
|
|
- u8 address)
|
|
|
-{
|
|
|
- struct usb_device* udev = cam->usbdev;
|
|
|
- u8* data = cam->control_buffer;
|
|
|
- int err = 0, res;
|
|
|
-
|
|
|
- data[0] = address;
|
|
|
- data[1] = cam->sensor.i2c_slave_id;
|
|
|
- data[2] = cam->sensor.rsta | 0x10;
|
|
|
- data[3] = !(et61x251_read_reg(cam, 0x8b) & 0x02);
|
|
|
- res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41,
|
|
|
- 0, 0x88, data, 4, ET61X251_CTRL_TIMEOUT);
|
|
|
- if (res < 0)
|
|
|
- err += res;
|
|
|
-
|
|
|
- err += et61x251_i2c_wait(cam, sensor);
|
|
|
-
|
|
|
- res = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 0x00, 0xc1,
|
|
|
- 0, 0x80, data, 8, ET61X251_CTRL_TIMEOUT);
|
|
|
- if (res < 0)
|
|
|
- err += res;
|
|
|
-
|
|
|
- if (err)
|
|
|
- DBG(3, "I2C read failed for %s image sensor", sensor->name);
|
|
|
-
|
|
|
- PDBGG("I2C read: address 0x%02X, value: 0x%02X", address, data[0]);
|
|
|
-
|
|
|
- return err ? -1 : (int)data[0];
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-static int et61x251_i2c_try_write(struct et61x251_device* cam,
|
|
|
- const struct et61x251_sensor* sensor,
|
|
|
- u8 address, u8 value)
|
|
|
-{
|
|
|
- struct usb_device* udev = cam->usbdev;
|
|
|
- u8* data = cam->control_buffer;
|
|
|
- int err = 0, res;
|
|
|
-
|
|
|
- data[0] = address;
|
|
|
- data[1] = cam->sensor.i2c_slave_id;
|
|
|
- data[2] = cam->sensor.rsta | 0x12;
|
|
|
- res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41,
|
|
|
- 0, 0x88, data, 3, ET61X251_CTRL_TIMEOUT);
|
|
|
- if (res < 0)
|
|
|
- err += res;
|
|
|
-
|
|
|
- data[0] = value;
|
|
|
- res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41,
|
|
|
- 0, 0x80, data, 1, ET61X251_CTRL_TIMEOUT);
|
|
|
- if (res < 0)
|
|
|
- err += res;
|
|
|
-
|
|
|
- err += et61x251_i2c_wait(cam, sensor);
|
|
|
-
|
|
|
- if (err)
|
|
|
- DBG(3, "I2C write failed for %s image sensor", sensor->name);
|
|
|
-
|
|
|
- PDBGG("I2C write: address 0x%02X, value: 0x%02X", address, value);
|
|
|
-
|
|
|
- return err ? -1 : 0;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
int
|
|
|
et61x251_i2c_raw_write(struct et61x251_device* cam, u8 n, u8 data1, u8 data2,
|
|
|
u8 data3, u8 data4, u8 data5, u8 data6, u8 data7,
|
|
@@ -386,18 +320,6 @@ et61x251_i2c_raw_write(struct et61x251_device* cam, u8 n, u8 data1, u8 data2,
|
|
|
}
|
|
|
|
|
|
|
|
|
-static int et61x251_i2c_read(struct et61x251_device* cam, u8 address)
|
|
|
-{
|
|
|
- return et61x251_i2c_try_read(cam, &cam->sensor, address);
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-static int et61x251_i2c_write(struct et61x251_device* cam,
|
|
|
- u8 address, u8 value)
|
|
|
-{
|
|
|
- return et61x251_i2c_try_write(cam, &cam->sensor, address, value);
|
|
|
-}
|
|
|
-
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
static void et61x251_urb_complete(struct urb *urb)
|
|
@@ -675,6 +597,83 @@ static int et61x251_stream_interrupt(struct et61x251_device* cam)
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
|
|
+
|
|
|
+static int et61x251_i2c_try_read(struct et61x251_device* cam,
|
|
|
+ const struct et61x251_sensor* sensor,
|
|
|
+ u8 address)
|
|
|
+{
|
|
|
+ struct usb_device* udev = cam->usbdev;
|
|
|
+ u8* data = cam->control_buffer;
|
|
|
+ int err = 0, res;
|
|
|
+
|
|
|
+ data[0] = address;
|
|
|
+ data[1] = cam->sensor.i2c_slave_id;
|
|
|
+ data[2] = cam->sensor.rsta | 0x10;
|
|
|
+ data[3] = !(et61x251_read_reg(cam, 0x8b) & 0x02);
|
|
|
+ res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41,
|
|
|
+ 0, 0x88, data, 4, ET61X251_CTRL_TIMEOUT);
|
|
|
+ if (res < 0)
|
|
|
+ err += res;
|
|
|
+
|
|
|
+ err += et61x251_i2c_wait(cam, sensor);
|
|
|
+
|
|
|
+ res = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 0x00, 0xc1,
|
|
|
+ 0, 0x80, data, 8, ET61X251_CTRL_TIMEOUT);
|
|
|
+ if (res < 0)
|
|
|
+ err += res;
|
|
|
+
|
|
|
+ if (err)
|
|
|
+ DBG(3, "I2C read failed for %s image sensor", sensor->name);
|
|
|
+
|
|
|
+ PDBGG("I2C read: address 0x%02X, value: 0x%02X", address, data[0]);
|
|
|
+
|
|
|
+ return err ? -1 : (int)data[0];
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+static int et61x251_i2c_try_write(struct et61x251_device* cam,
|
|
|
+ const struct et61x251_sensor* sensor,
|
|
|
+ u8 address, u8 value)
|
|
|
+{
|
|
|
+ struct usb_device* udev = cam->usbdev;
|
|
|
+ u8* data = cam->control_buffer;
|
|
|
+ int err = 0, res;
|
|
|
+
|
|
|
+ data[0] = address;
|
|
|
+ data[1] = cam->sensor.i2c_slave_id;
|
|
|
+ data[2] = cam->sensor.rsta | 0x12;
|
|
|
+ res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41,
|
|
|
+ 0, 0x88, data, 3, ET61X251_CTRL_TIMEOUT);
|
|
|
+ if (res < 0)
|
|
|
+ err += res;
|
|
|
+
|
|
|
+ data[0] = value;
|
|
|
+ res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41,
|
|
|
+ 0, 0x80, data, 1, ET61X251_CTRL_TIMEOUT);
|
|
|
+ if (res < 0)
|
|
|
+ err += res;
|
|
|
+
|
|
|
+ err += et61x251_i2c_wait(cam, sensor);
|
|
|
+
|
|
|
+ if (err)
|
|
|
+ DBG(3, "I2C write failed for %s image sensor", sensor->name);
|
|
|
+
|
|
|
+ PDBGG("I2C write: address 0x%02X, value: 0x%02X", address, value);
|
|
|
+
|
|
|
+ return err ? -1 : 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int et61x251_i2c_read(struct et61x251_device* cam, u8 address)
|
|
|
+{
|
|
|
+ return et61x251_i2c_try_read(cam, &cam->sensor, address);
|
|
|
+}
|
|
|
+
|
|
|
+static int et61x251_i2c_write(struct et61x251_device* cam,
|
|
|
+ u8 address, u8 value)
|
|
|
+{
|
|
|
+ return et61x251_i2c_try_write(cam, &cam->sensor, address, value);
|
|
|
+}
|
|
|
+
|
|
|
static u8 et61x251_strtou8(const char* buff, size_t len, ssize_t* count)
|
|
|
{
|
|
|
char str[5];
|