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

Commit aeabc882 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (10068): Change device ID selection method on ov772x driver

parent 2d425131
Loading
Loading
Loading
Loading
+21 −6
Original line number Diff line number Diff line
@@ -345,6 +345,12 @@
#define OP_UV       0x00000001
#define OP_SWAP_RGB 0x00000002

/*
 * ID
 */
#define OV7720  0x7720
#define VERSION(pid, ver) ((pid<<8)|(ver&0xFF))

/*
 * struct
 */
@@ -374,6 +380,7 @@ struct ov772x_priv {
	struct soc_camera_device          icd;
	const struct ov772x_color_format *fmt;
	const struct ov772x_win_size     *win;
	int                               model;
};

#define ENDMARKER { 0xff, 0xff }
@@ -702,7 +709,9 @@ static unsigned long ov772x_query_bus_param(struct soc_camera_device *icd)
static int ov772x_get_chip_id(struct soc_camera_device *icd,
			      struct v4l2_chip_ident   *id)
{
	id->ident    = V4L2_IDENT_OV772X;
	struct ov772x_priv *priv = container_of(icd, struct ov772x_priv, icd);

	id->ident    = priv->model;
	id->revision = 0;

	return 0;
@@ -796,6 +805,7 @@ static int ov772x_video_probe(struct soc_camera_device *icd)
{
	struct ov772x_priv *priv = container_of(icd, struct ov772x_priv, icd);
	u8                  pid, ver;
	const char         *devname;

	/*
	 * We must have a parent by now. And it cannot be a wrong one.
@@ -822,15 +832,21 @@ static int ov772x_video_probe(struct soc_camera_device *icd)
	 */
	pid = i2c_smbus_read_byte_data(priv->client, PID);
	ver = i2c_smbus_read_byte_data(priv->client, VER);
	if (pid != 0x77 ||
	    ver != 0x21) {

	switch (VERSION(pid, ver)) {
	case OV7720:
		devname     = "ov7720";
		priv->model = V4L2_IDENT_OV7720;
		break;
	default:
		dev_err(&icd->dev,
			"Product ID error %x:%x\n", pid, ver);
		return -ENODEV;
	}

	dev_info(&icd->dev,
		 "ov772x Product ID %0x:%0x Manufacturer ID %x:%x\n",
		 "%s Product ID %0x:%0x Manufacturer ID %x:%x\n",
		 devname,
		 pid,
		 ver,
		 i2c_smbus_read_byte_data(priv->client, MIDH),
@@ -941,7 +957,6 @@ static struct i2c_driver ov772x_i2c_driver = {

static int __init ov772x_module_init(void)
{
	printk(KERN_INFO "ov772x driver\n");
	return i2c_add_driver(&ov772x_i2c_driver);
}

+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ enum {

	/* OmniVision sensors: reserved range 250-299 */
	V4L2_IDENT_OV7670 = 250,
	V4L2_IDENT_OV772X = 251,
	V4L2_IDENT_OV7720 = 251,

	/* Conexant MPEG encoder/decoders: reserved range 410-420 */
	V4L2_IDENT_CX23415 = 415,