Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

V4L/DVB (9561): gspca: Cleanup the source of ov519.

parent 91711874
Loading
Loading
Loading
Loading
+64 −84
Original line number Diff line number Diff line
@@ -40,22 +40,18 @@ struct sd {
	struct gspca_dev gspca_dev;		/* !! must be the first item */

	/* Determined by sensor type */
	char sif;
	__u8 sif;

	unsigned char primary_i2c_slave;	/* I2C write id of sensor */

	unsigned char brightness;
	unsigned char contrast;
	unsigned char colors;
	__u8 brightness;
	__u8 contrast;
	__u8 colors;
	__u8 hflip;
	__u8 vflip;

	char compress;		/* Should the next frame be compressed? */
	char compress_inited;	/* Are compression params uploaded? */
	char stopped;		/* Streaming is temporarily paused */
	__u8 stopped;		/* Streaming is temporarily paused */

	char frame_rate;	/* current Framerate (OV519 only) */
	char clockdiv;		/* clockdiv override for OV519 only */
	__u8 frame_rate;	/* current Framerate (OV519 only) */
	__u8 clockdiv;		/* clockdiv override for OV519 only */

	char sensor;		/* Type of image sensor chip (SEN_*) */
#define SEN_UNKNOWN 0
@@ -67,7 +63,6 @@ struct sd {
#define SEN_OV7670 6
#define SEN_OV76BE 7
#define SEN_OV8610 8

};

/* V4L2 controls supported by the driver */
@@ -184,15 +179,15 @@ static struct v4l2_pix_format sif_mode[] = {
};

/* OV519 Camera interface register numbers */
#define OV519_CAM_H_SIZE		0x10
#define OV519_CAM_V_SIZE		0x11
#define OV519_CAM_X_OFFSETL		0x12
#define OV519_CAM_X_OFFSETH		0x13
#define OV519_CAM_Y_OFFSETL		0x14
#define OV519_CAM_Y_OFFSETH		0x15
#define OV519_CAM_DIVIDER		0x16
#define OV519_CAM_DFR			0x20
#define OV519_CAM_FORMAT		0x25
#define OV519_R10_H_SIZE		0x10
#define OV519_R11_V_SIZE		0x11
#define OV519_R12_X_OFFSETL		0x12
#define OV519_R13_X_OFFSETH		0x13
#define OV519_R14_Y_OFFSETL		0x14
#define OV519_R15_Y_OFFSETH		0x15
#define OV519_R16_DIVIDER		0x16
#define OV519_R20_DFR			0x20
#define OV519_R25_FORMAT		0x25

/* OV519 System Controller register numbers */
#define OV519_SYS_RESET1 0x51
@@ -562,8 +557,8 @@ static const struct ov_i2c_regvals norm_7670[] = {
	{ OV7670_REG_VSTOP, 0x7a },
	{ OV7670_REG_VREF, 0x0a },

	{ OV7670_REG_COM3, 0 },
	{ OV7670_REG_COM14, 0 },
	{ OV7670_REG_COM3, 0x00 },
	{ OV7670_REG_COM14, 0x00 },
/* Mystery scaling numbers */
	{ 0x70, 0x3a },
	{ 0x71, 0x35 },
@@ -595,8 +590,8 @@ static const struct ov_i2c_regvals norm_7670[] = {
	{ OV7670_REG_COM8, OV7670_COM8_FASTAEC
			 | OV7670_COM8_AECSTEP
			 | OV7670_COM8_BFILT },
	{ OV7670_REG_GAIN, 0 },
	{ OV7670_REG_AECH, 0 },
	{ OV7670_REG_GAIN, 0x00 },
	{ OV7670_REG_AECH, 0x00 },
	{ OV7670_REG_COM4, 0x40 }, /* magic reserved bit */
	{ OV7670_REG_COM9, 0x18 }, /* 4x gain + magic rsvd bit */
	{ OV7670_REG_BD50MAX, 0x05 },
@@ -634,16 +629,16 @@ static const struct ov_i2c_regvals norm_7670[] = {
	{ OV7670_REG_COM12, 0x78 },
	{ 0x4d, 0x40 },
	{ 0x4e, 0x20 },
	{ OV7670_REG_GFIX, 0 },
	{ OV7670_REG_GFIX, 0x00 },
	{ 0x6b, 0x4a },
	{ 0x74, 0x10 },
	{ 0x8d, 0x4f },
	{ 0x8e, 0 },
	{ 0x8f, 0 },
	{ 0x90, 0 },
	{ 0x91, 0 },
	{ 0x96, 0 },
	{ 0x9a, 0 },
	{ 0x8e, 0x00 },
	{ 0x8f, 0x00 },
	{ 0x90, 0x00 },
	{ 0x91, 0x00 },
	{ 0x96, 0x00 },
	{ 0x9a, 0x00 },
	{ 0xb0, 0x84 },
	{ 0xb1, 0x0c },
	{ 0xb2, 0x0e },
@@ -681,17 +676,17 @@ static const struct ov_i2c_regvals norm_7670[] = {
/* Matrix coefficients */
	{ 0x4f, 0x80 },
	{ 0x50, 0x80 },
	{ 0x51, 0 },
	{ 0x51, 0x00 },
	{ 0x52, 0x22 },
	{ 0x53, 0x5e },
	{ 0x54, 0x80 },
	{ 0x58, 0x9e },

	{ OV7670_REG_COM16, OV7670_COM16_AWBGAIN },
	{ OV7670_REG_EDGE, 0 },
	{ OV7670_REG_EDGE, 0x00 },
	{ 0x75, 0x05 },
	{ 0x76, 0xe1 },
	{ 0x4c, 0 },
	{ 0x4c, 0x00 },
	{ 0x77, 0x01 },
	{ OV7670_REG_COM13, OV7670_COM13_GAMMA
			  | OV7670_COM13_UVSAT
@@ -704,7 +699,7 @@ static const struct ov_i2c_regvals norm_7670[] = {
	{ 0x34, 0x11 },
	{ OV7670_REG_COM11, OV7670_COM11_EXP|OV7670_COM11_HZAUTO },
	{ 0xa4, 0x88 },
	{ 0x96, 0 },
	{ 0x96, 0x00 },
	{ 0x97, 0x30 },
	{ 0x98, 0x20 },
	{ 0x99, 0x30 },
@@ -942,11 +937,11 @@ static int i2c_w(struct sd *sd,

	/* Initiate 3-byte write cycle */
	rc = reg_w(sd, R518_I2C_CTL, 0x01);
	if (rc < 0)
		return rc;

	/* wait for write complete */
	msleep(4);
	if (rc < 0)
		return rc;
	return reg_r8(sd, R518_I2C_CTL);
}

@@ -1029,7 +1024,7 @@ static inline int ov51x_restart(struct sd *sd)
 */
static int init_ov_sensor(struct sd *sd)
{
	int i, success;
	int i;

	/* Reset the sensor */
	if (i2c_w(sd, 0x12, 0x80) < 0)
@@ -1038,11 +1033,11 @@ static int init_ov_sensor(struct sd *sd)
	/* Wait for it to initialize */
	msleep(150);

	for (i = 0, success = 0; i < i2c_detect_tries && !success; i++) {
	for (i = 0; i < i2c_detect_tries; i++) {
		if (i2c_r(sd, OV7610_REG_ID_HIGH) == 0x7f &&
		    i2c_r(sd, OV7610_REG_ID_LOW) == 0xa2) {
			success = 1;
			continue;
			PDEBUG(D_PROBE, "I2C synced in %d attempt(s)", i);
			return 0;
		}

		/* Reset the sensor */
@@ -1054,10 +1049,7 @@ static int init_ov_sensor(struct sd *sd)
		if (i2c_r(sd, 0x00) < 0)
			return -EIO;
	}
	if (!success)
	return -EIO;
	PDEBUG(D_PROBE, "I2C synced in %d attempt(s)", i);
	return 0;
}

/* Set the read and write slave IDs. The "slave" argument is the write slave,
@@ -1073,7 +1065,6 @@ static int ov51x_set_slave_ids(struct sd *sd,
	rc = reg_w(sd, R51x_I2C_W_SID, slave);
	if (rc < 0)
		return rc;
	sd->primary_i2c_slave = slave;
	return reg_w(sd, R51x_I2C_R_SID, slave + 1);
}

@@ -1285,7 +1276,6 @@ static int ov6xx0_configure(struct sd *sd)
/* Turns on or off the LED. Only has an effect with OV511+/OV518(+)/OV519 */
static void ov51x_led_control(struct sd *sd, int on)
{
/*	PDEBUG(D_STREAM, "LED (%s)", on ? "on" : "off"); */
	reg_w_mask(sd, OV519_GPIO_DATA_OUT0, !on, 1);	/* 0 / 1 */
}

@@ -1482,7 +1472,7 @@ static int ov519_mode_init_regs(struct sd *sd)
			return -EIO;
		if (sd->sensor == SEN_OV7640) {
			/* Select 8-bit input mode */
			reg_w_mask(sd, OV519_CAM_DFR, 0x10, 0x10);
			reg_w_mask(sd, OV519_R20_DFR, 0x10, 0x10);
		}
	} else {
		if (write_regvals(sd, mode_init_519_ov7670,
@@ -1490,14 +1480,14 @@ static int ov519_mode_init_regs(struct sd *sd)
			return -EIO;
	}

	reg_w(sd, OV519_CAM_H_SIZE,	sd->gspca_dev.width >> 4);
	reg_w(sd, OV519_CAM_V_SIZE,	sd->gspca_dev.height >> 3);
	reg_w(sd, OV519_CAM_X_OFFSETL,	0x00);
	reg_w(sd, OV519_CAM_X_OFFSETH,	0x00);
	reg_w(sd, OV519_CAM_Y_OFFSETL,	0x00);
	reg_w(sd, OV519_CAM_Y_OFFSETH,	0x00);
	reg_w(sd, OV519_CAM_DIVIDER,	0x00);
	reg_w(sd, OV519_CAM_FORMAT,	0x03); /* YUV422 */
	reg_w(sd, OV519_R10_H_SIZE,	sd->gspca_dev.width >> 4);
	reg_w(sd, OV519_R11_V_SIZE,	sd->gspca_dev.height >> 3);
	reg_w(sd, OV519_R12_X_OFFSETL,	0x00);
	reg_w(sd, OV519_R13_X_OFFSETH,	0x00);
	reg_w(sd, OV519_R14_Y_OFFSETL,	0x00);
	reg_w(sd, OV519_R15_Y_OFFSETH,	0x00);
	reg_w(sd, OV519_R16_DIVIDER,	0x00);
	reg_w(sd, OV519_R25_FORMAT,	0x03); /* YUV422 */
	reg_w(sd, 0x26,			0x00); /* Undocumented */

	/******** Set the framerate ********/
@@ -1576,7 +1566,6 @@ static int ov519_mode_init_regs(struct sd *sd)
		}
		break;
	}

	return 0;
}

@@ -1667,7 +1656,7 @@ static int mode_init_ov_sensor_regs(struct sd *sd)
		 * the gain or the contrast. The "reserved" bits seem
		 * to have some effect in this case. */
		i2c_w(sd, 0x2d, 0x85);
	} else if (sd->clockdiv >= 0) {
	} else {
		i2c_w(sd, 0x11, sd->clockdiv);
	}

@@ -1869,7 +1858,6 @@ static int sd_start(struct gspca_dev *gspca_dev)
	ret = ov51x_restart(sd);
	if (ret < 0)
		goto out;
	PDEBUG(D_STREAM, "camera started alt: 0x%02x", gspca_dev->alt);
	ov51x_led_control(sd, 1);
	return 0;
out:
@@ -1879,8 +1867,10 @@ out:

static void sd_stopN(struct gspca_dev *gspca_dev)
{
	ov51x_stop((struct sd *) gspca_dev);
	ov51x_led_control((struct sd *) gspca_dev, 0);
	struct sd *sd = (struct sd *) gspca_dev;

	ov51x_stop(sd);
	ov51x_led_control(sd, 0);
}

static void sd_pkt_scan(struct gspca_dev *gspca_dev,
@@ -1935,9 +1925,6 @@ static void setbrightness(struct gspca_dev *gspca_dev)
	int val;

	val = sd->brightness;
	PDEBUG(D_CONF, "brightness:%d", val);
/*	if (gspca_dev->streaming)
 *		ov51x_stop(sd); */
	switch (sd->sensor) {
	case SEN_OV8610:
	case SEN_OV7610:
@@ -1959,8 +1946,6 @@ static void setbrightness(struct gspca_dev *gspca_dev)
		i2c_w(sd, OV7670_REG_BRIGHT, ov7670_abs_to_sm(val));
		break;
	}
/*	if (gspca_dev->streaming)
 *		ov51x_restart(sd); */
}

static void setcontrast(struct gspca_dev *gspca_dev)
@@ -1969,9 +1954,6 @@ static void setcontrast(struct gspca_dev *gspca_dev)
	int val;

	val = sd->contrast;
	PDEBUG(D_CONF, "contrast:%d", val);
/*	if (gspca_dev->streaming)
		ov51x_stop(sd); */
	switch (sd->sensor) {
	case SEN_OV7610:
	case SEN_OV6620:
@@ -2007,8 +1989,6 @@ static void setcontrast(struct gspca_dev *gspca_dev)
		i2c_w(sd, OV7670_REG_CONTRAS, val >> 1);
		break;
	}
/*	if (gspca_dev->streaming)
		ov51x_restart(sd); */
}

static void setcolors(struct gspca_dev *gspca_dev)
@@ -2017,9 +1997,6 @@ static void setcolors(struct gspca_dev *gspca_dev)
	int val;

	val = sd->colors;
	PDEBUG(D_CONF, "saturation:%d", val);
/*	if (gspca_dev->streaming)
		ov51x_stop(sd); */
	switch (sd->sensor) {
	case SEN_OV8610:
	case SEN_OV7610:
@@ -2044,8 +2021,6 @@ static void setcolors(struct gspca_dev *gspca_dev)
		/* set REG_COM13 values for UV sat auto mode */
		break;
	}
/*	if (gspca_dev->streaming)
		ov51x_restart(sd); */
}

static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)
@@ -2053,6 +2028,7 @@ static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)
	struct sd *sd = (struct sd *) gspca_dev;

	sd->brightness = val;
	if (gspca_dev->streaming)
		setbrightness(gspca_dev);
	return 0;
}
@@ -2070,6 +2046,7 @@ static int sd_setcontrast(struct gspca_dev *gspca_dev, __s32 val)
	struct sd *sd = (struct sd *) gspca_dev;

	sd->contrast = val;
	if (gspca_dev->streaming)
		setcontrast(gspca_dev);
	return 0;
}
@@ -2087,6 +2064,7 @@ static int sd_setcolors(struct gspca_dev *gspca_dev, __s32 val)
	struct sd *sd = (struct sd *) gspca_dev;

	sd->colors = val;
	if (gspca_dev->streaming)
		setcolors(gspca_dev);
	return 0;
}
@@ -2104,6 +2082,7 @@ static int sd_sethflip(struct gspca_dev *gspca_dev, __s32 val)
	struct sd *sd = (struct sd *) gspca_dev;

	sd->hflip = val;
	if (gspca_dev->streaming)
		sethvflip(sd);
	return 0;
}
@@ -2121,6 +2100,7 @@ static int sd_setvflip(struct gspca_dev *gspca_dev, __s32 val)
	struct sd *sd = (struct sd *) gspca_dev;

	sd->vflip = val;
	if (gspca_dev->streaming)
		sethvflip(sd);
	return 0;
}
@@ -2162,7 +2142,7 @@ static const __devinitdata struct usb_device_id device_table[] = {
	{USB_DEVICE(0x05a9, 0x8519)},
	{}
};
#undef DVNAME

MODULE_DEVICE_TABLE(usb, device_table);

/* -- device connect -- */