Commit f8a04a6f authored by Jean-Francois Moine's avatar Jean-Francois Moine Committed by Mauro Carvalho Chehab

V4L/DVB (9988): gspca - spca561: Separate the bridge and sensor tables of Rev72a

Signed-off-by: default avatarJean-Francois Moine <moinejf@free.fr>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 5b7ed28e
...@@ -146,7 +146,7 @@ static struct v4l2_pix_format sif_072a_mode[] = { ...@@ -146,7 +146,7 @@ static struct v4l2_pix_format sif_072a_mode[] = {
#define SPCA561_SNAPBIT 0x20 #define SPCA561_SNAPBIT 0x20
#define SPCA561_SNAPCTRL 0x40 #define SPCA561_SNAPCTRL 0x40
static const __u16 rev72a_init_data[][2] = { static const __u16 rev72a_init_data1[][2] = {
{0x0000, 0x8114}, /* Software GPIO output data */ {0x0000, 0x8114}, /* Software GPIO output data */
{0x0001, 0x8114}, /* Software GPIO output data */ {0x0001, 0x8114}, /* Software GPIO output data */
{0x0000, 0x8112}, /* Some kind of reset */ {0x0000, 0x8112}, /* Some kind of reset */
...@@ -156,44 +156,26 @@ static const __u16 rev72a_init_data[][2] = { ...@@ -156,44 +156,26 @@ static const __u16 rev72a_init_data[][2] = {
{0x0001, 0x8118}, /* Conf sensor */ {0x0001, 0x8118}, /* Conf sensor */
{0x0092, 0x8804}, /* I know nothing about these */ {0x0092, 0x8804}, /* I know nothing about these */
{0x0010, 0x8802}, /* 0x88xx registers, so I won't */ {0x0010, 0x8802}, /* 0x88xx registers, so I won't */
/***************/
{0x000d, 0x8805}, /* sensor default setting */ {0x000d, 0x8805}, /* sensor default setting */
{0x0001, 0x8801}, /* 1 <- 0x0d */ {}
{0x0000, 0x8800}, };
{0x0018, 0x8805}, static const __u16 rev72a_init_sensor1[][2] = {
{0x0002, 0x8801}, /* 2 <- 0x18 */ /* ms-win values */
{0x0000, 0x8800}, {0x0001, 0x0018}, /* 0x01 <- 0x0d */
{0x0065, 0x8805}, {0x0002, 0x0065}, /* 0x02 <- 0x18 */
{0x0004, 0x8801}, /* 4 <- 0x01 0x65 */ {0x0004, 0x0121}, /* 0x04 <- 0x0165 */
{0x0001, 0x8800}, {0x0005, 0x00aa}, /* 0x05 <- 0x21 */
{0x0021, 0x8805}, {0x0007, 0x0004}, /* 0x07 <- 0xaa */
{0x0005, 0x8801}, /* 5 <- 0x21 */ {0x0020, 0x1502}, /* 0x20 <- 0x1504 */
{0x0000, 0x8800}, {0x0039, 0x0010}, /* 0x39 <- 0x02 */
{0x00aa, 0x8805}, {0x0035, 0x0049}, /* 0x35 <- 0x10 */
{0x0007, 0x8801}, /* 7 <- 0xaa */ {0x0009, 0x100b}, /* 0x09 <- 0x1049 */
{0x0000, 0x8800}, {0x0028, 0x000f}, /* 0x28 <- 0x0b */
{0x0004, 0x8805}, {0x003b, 0x003c}, /* 0x3b <- 0x0f */
{0x0020, 0x8801}, /* 0x20 <- 0x15 0x04 */ {0x003c, 0x0000}, /* 0x3c <- 0x00 */
{0x0015, 0x8800}, {}
{0x0002, 0x8805}, };
{0x0039, 0x8801}, /* 0x39 <- 0x02 */ static const __u16 rev72a_init_data2[][2] = {
{0x0000, 0x8800},
{0x0010, 0x8805},
{0x0035, 0x8801}, /* 0x35 <- 0x10 */
{0x0000, 0x8800},
{0x0049, 0x8805},
{0x0009, 0x8801}, /* 0x09 <- 0x10 0x49 */
{0x0010, 0x8800},
{0x000b, 0x8805},
{0x0028, 0x8801}, /* 0x28 <- 0x0b */
{0x0000, 0x8800},
{0x000f, 0x8805},
{0x003b, 0x8801}, /* 0x3b <- 0x0f */
{0x0000, 0x8800},
{0x0000, 0x8805},
{0x003c, 0x8801}, /* 0x3c <- 0x00 */
{0x0000, 0x8800},
/***************/
{0x0018, 0x8601}, /* Pixel/line selection for color separation */ {0x0018, 0x8601}, /* Pixel/line selection for color separation */
{0x0000, 0x8602}, /* Optical black level for user setting */ {0x0000, 0x8602}, /* Optical black level for user setting */
{0x0060, 0x8604}, /* Optical black horizontal offset */ {0x0060, 0x8604}, /* Optical black horizontal offset */
...@@ -234,29 +216,22 @@ static const __u16 rev72a_init_data[][2] = { ...@@ -234,29 +216,22 @@ static const __u16 rev72a_init_data[][2] = {
{0x0002, 0x865b}, /* Horizontal offset for valid pixels */ {0x0002, 0x865b}, /* Horizontal offset for valid pixels */
{0x0003, 0x865c}, /* Vertical offset for valid lines */ {0x0003, 0x865c}, /* Vertical offset for valid lines */
/***************/ /* sensor active */ {}
{0x0003, 0x8801}, /* 0x03 <- 0x01 0x21 //289 */ };
{0x0021, 0x8805}, static const __u16 rev72a_init_sensor2[][2] = {
{0x0001, 0x8800}, /* ms-win values */
{0x0004, 0x8801}, /* 0x04 <- 0x01 0x65 //357 */ {0x0003, 0x0121}, /* 0x03 <- 0x01 0x21 //289 */
{0x0065, 0x8805}, {0x0004, 0x0165}, /* 0x04 <- 0x01 0x65 //357 */
{0x0001, 0x8800}, {0x0005, 0x002f}, /* 0x05 <- 0x2f */
{0x0005, 0x8801}, /* 0x05 <- 0x2f */ {0x0006, 0x0000}, /* 0x06 <- 0 */
{0x002f, 0x8805}, {0x000a, 0x0002}, /* 0x0a <- 2 */
{0x0000, 0x8800}, {0x0009, 0x1061}, /* 0x09 <- 0x1061 */
{0x0006, 0x8801}, /* 0x06 <- 0 */ {0x0035, 0x0014}, /* 0x35 <- 0x14 */
{0x0000, 0x8805}, {}
{0x0000, 0x8800}, };
{0x000a, 0x8801}, /* 0x0a <- 2 */ static const __u16 rev72a_init_data3[][2] = {
{0x0002, 0x8805},
{0x0000, 0x8800},
{0x0009, 0x8801}, /* 0x09 <- 0x1061 */
{0x0061, 0x8805},
{0x0010, 0x8800},
{0x0035, 0x8801}, /* 0x35 <-0x14 */
{0x0014, 0x8805},
{0x0000, 0x8800},
{0x0030, 0x8112}, /* ISO and drop packet enable */ {0x0030, 0x8112}, /* ISO and drop packet enable */
/*fixme: should stop here*/
{0x0000, 0x8112}, /* Some kind of reset ???? */ {0x0000, 0x8112}, /* Some kind of reset ???? */
{0x0009, 0x8118}, /* Enable sensor and set standby */ {0x0009, 0x8118}, /* Enable sensor and set standby */
{0x0000, 0x8114}, /* Software GPIO output data */ {0x0000, 0x8114}, /* Software GPIO output data */
...@@ -519,6 +494,15 @@ static void sensor_mapwrite(struct gspca_dev *gspca_dev, ...@@ -519,6 +494,15 @@ static void sensor_mapwrite(struct gspca_dev *gspca_dev,
} }
} }
static void write_sensor_72a(struct gspca_dev *gspca_dev,
const __u16 (*sensor)[2])
{
while ((*sensor)[0]) {
i2c_write(gspca_dev, (*sensor)[1], (*sensor)[0]);
sensor++;
}
}
static void init_161rev12A(struct gspca_dev *gspca_dev) static void init_161rev12A(struct gspca_dev *gspca_dev)
{ {
write_vector(gspca_dev, spca561_161rev12A_data1); write_vector(gspca_dev, spca561_161rev12A_data1);
...@@ -588,7 +572,11 @@ static int sd_init_12a(struct gspca_dev *gspca_dev) ...@@ -588,7 +572,11 @@ static int sd_init_12a(struct gspca_dev *gspca_dev)
static int sd_init_72a(struct gspca_dev *gspca_dev) static int sd_init_72a(struct gspca_dev *gspca_dev)
{ {
PDEBUG(D_STREAM, "Chip revision: 072a"); PDEBUG(D_STREAM, "Chip revision: 072a");
write_vector(gspca_dev, rev72a_init_data); write_vector(gspca_dev, rev72a_init_data1);
write_sensor_72a(gspca_dev, rev72a_init_sensor1);
write_vector(gspca_dev, rev72a_init_data2);
write_sensor_72a(gspca_dev, rev72a_init_sensor2);
write_vector(gspca_dev, rev72a_init_data3);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment