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

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

parent 5b7ed28e
Loading
Loading
Loading
Loading
+49 −61
Original line number Diff line number Diff line
@@ -146,7 +146,7 @@ static struct v4l2_pix_format sif_072a_mode[] = {
#define SPCA561_SNAPBIT 0x20
#define SPCA561_SNAPCTRL 0x40

static const __u16 rev72a_init_data[][2] = {
static const __u16 rev72a_init_data1[][2] = {
	{0x0000, 0x8114},	/* Software GPIO output data */
	{0x0001, 0x8114},	/* Software GPIO output data */
	{0x0000, 0x8112},	/* Some kind of reset */
@@ -156,44 +156,26 @@ static const __u16 rev72a_init_data[][2] = {
	{0x0001, 0x8118},	/* Conf sensor */
	{0x0092, 0x8804},	/* I know nothing about these */
	{0x0010, 0x8802},	/* 0x88xx registers, so I won't */
	/***************/
	{0x000d, 0x8805},	/* sensor default setting */
	{0x0001, 0x8801},	/* 1 <- 0x0d */
	{0x0000, 0x8800},
	{0x0018, 0x8805},
	{0x0002, 0x8801},	/* 2 <- 0x18 */
	{0x0000, 0x8800},
	{0x0065, 0x8805},
	{0x0004, 0x8801},	/* 4 <- 0x01 0x65 */
	{0x0001, 0x8800},
	{0x0021, 0x8805},
	{0x0005, 0x8801},	/* 5 <- 0x21 */
	{0x0000, 0x8800},
	{0x00aa, 0x8805},
	{0x0007, 0x8801},	/* 7 <- 0xaa */
	{0x0000, 0x8800},
	{0x0004, 0x8805},
	{0x0020, 0x8801},	/* 0x20 <- 0x15 0x04 */
	{0x0015, 0x8800},
	{0x0002, 0x8805},
	{0x0039, 0x8801},	/* 0x39 <- 0x02 */
	{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},
	/***************/
	{}
};
static const __u16 rev72a_init_sensor1[][2] = {
				/* ms-win values */
	{0x0001, 0x0018},	/* 0x01 <- 0x0d */
	{0x0002, 0x0065},	/* 0x02 <- 0x18 */
	{0x0004, 0x0121},	/* 0x04 <- 0x0165 */
	{0x0005, 0x00aa},	/* 0x05 <- 0x21 */
	{0x0007, 0x0004},	/* 0x07 <- 0xaa */
	{0x0020, 0x1502},	/* 0x20 <- 0x1504 */
	{0x0039, 0x0010},	/* 0x39 <- 0x02 */
	{0x0035, 0x0049},	/* 0x35 <- 0x10 */
	{0x0009, 0x100b},	/* 0x09 <- 0x1049 */
	{0x0028, 0x000f},	/* 0x28 <- 0x0b */
	{0x003b, 0x003c},	/* 0x3b <- 0x0f */
	{0x003c, 0x0000},	/* 0x3c <- 0x00 */
	{}
};
static const __u16 rev72a_init_data2[][2] = {
	{0x0018, 0x8601},	/* Pixel/line selection for color separation */
	{0x0000, 0x8602},	/* Optical black level for user setting */
	{0x0060, 0x8604},	/* Optical black horizontal offset */
@@ -234,29 +216,22 @@ static const __u16 rev72a_init_data[][2] = {

	{0x0002, 0x865b},	/* Horizontal offset for valid pixels */
	{0x0003, 0x865c},	/* Vertical offset for valid lines */
	/***************/		/* sensor active */
	{0x0003, 0x8801},	/* 0x03 <- 0x01 0x21 //289 */
	{0x0021, 0x8805},
	{0x0001, 0x8800},
	{0x0004, 0x8801},	/* 0x04 <- 0x01 0x65 //357 */
	{0x0065, 0x8805},
	{0x0001, 0x8800},
	{0x0005, 0x8801},	/* 0x05 <- 0x2f */
	{0x002f, 0x8805},
	{0x0000, 0x8800},
	{0x0006, 0x8801},	/* 0x06 <- 0 */
	{0x0000, 0x8805},
	{0x0000, 0x8800},
	{0x000a, 0x8801},	/* 0x0a <- 2 */
	{0x0002, 0x8805},
	{0x0000, 0x8800},
	{0x0009, 0x8801},	/* 0x09 <- 0x1061 */
	{0x0061, 0x8805},
	{0x0010, 0x8800},
	{0x0035, 0x8801},	/* 0x35 <-0x14 */
	{0x0014, 0x8805},
	{0x0000, 0x8800},
	{}
};
static const __u16 rev72a_init_sensor2[][2] = {
				/* ms-win values */
	{0x0003, 0x0121},	/* 0x03 <- 0x01 0x21 //289 */
	{0x0004, 0x0165},	/* 0x04 <- 0x01 0x65 //357 */
	{0x0005, 0x002f},	/* 0x05 <- 0x2f */
	{0x0006, 0x0000},	/* 0x06 <- 0 */
	{0x000a, 0x0002},	/* 0x0a <- 2 */
	{0x0009, 0x1061},	/* 0x09 <- 0x1061 */
	{0x0035, 0x0014},	/* 0x35 <- 0x14 */
	{}
};
static const __u16 rev72a_init_data3[][2] = {
	{0x0030, 0x8112},	/* ISO and drop packet enable */
/*fixme: should stop here*/
	{0x0000, 0x8112},	/* Some kind of reset ???? */
	{0x0009, 0x8118},	/* Enable sensor and set standby */
	{0x0000, 0x8114},	/* Software GPIO output data */
@@ -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)
{
	write_vector(gspca_dev, spca561_161rev12A_data1);
@@ -588,7 +572,11 @@ static int sd_init_12a(struct gspca_dev *gspca_dev)
static int sd_init_72a(struct gspca_dev *gspca_dev)
{
	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;
}