aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/video/cafe_ccic.c8
-rw-r--r--drivers/media/video/cx25840/cx25840-core.c9
-rw-r--r--drivers/media/video/cx25840/cx25840-core.h3
-rw-r--r--drivers/media/video/ov7670.c6
-rw-r--r--drivers/media/video/saa7115.c9
-rw-r--r--drivers/media/video/saa7127.c8
-rw-r--r--drivers/media/video/v4l2-common.c21
-rw-r--r--drivers/media/video/videodev.c10
-rw-r--r--include/linux/videodev2.h10
-rw-r--r--include/media/v4l2-chip-ident.h62
-rw-r--r--include/media/v4l2-common.h39
-rw-r--r--include/media/v4l2-dev.h2
12 files changed, 130 insertions, 57 deletions
diff --git a/drivers/media/video/cafe_ccic.c b/drivers/media/video/cafe_ccic.c
index 710c11a68296..4d4db7b2b611 100644
--- a/drivers/media/video/cafe_ccic.c
+++ b/drivers/media/video/cafe_ccic.c
@@ -22,6 +22,7 @@
22#include <linux/spinlock.h> 22#include <linux/spinlock.h>
23#include <linux/videodev2.h> 23#include <linux/videodev2.h>
24#include <media/v4l2-common.h> 24#include <media/v4l2-common.h>
25#include <media/v4l2-chip-ident.h>
25#include <linux/device.h> 26#include <linux/device.h>
26#include <linux/wait.h> 27#include <linux/wait.h>
27#include <linux/list.h> 28#include <linux/list.h>
@@ -164,7 +165,7 @@ struct cafe_camera
164 struct tasklet_struct s_tasklet; 165 struct tasklet_struct s_tasklet;
165 166
166 /* Current operating parameters */ 167 /* Current operating parameters */
167 enum v4l2_chip_ident sensor_type; /* Currently ov7670 only */ 168 u32 sensor_type; /* Currently ov7670 only */
168 struct v4l2_pix_format pix_format; 169 struct v4l2_pix_format pix_format;
169 170
170 /* Locks */ 171 /* Locks */
@@ -818,6 +819,7 @@ static int __cafe_cam_reset(struct cafe_camera *cam)
818 */ 819 */
819static int cafe_cam_init(struct cafe_camera *cam) 820static int cafe_cam_init(struct cafe_camera *cam)
820{ 821{
822 struct v4l2_chip_ident chip = { V4L2_CHIP_MATCH_I2C_ADDR, 0, 0, 0 };
821 int ret; 823 int ret;
822 824
823 mutex_lock(&cam->s_mutex); 825 mutex_lock(&cam->s_mutex);
@@ -827,9 +829,11 @@ static int cafe_cam_init(struct cafe_camera *cam)
827 ret = __cafe_cam_reset(cam); 829 ret = __cafe_cam_reset(cam);
828 if (ret) 830 if (ret)
829 goto out; 831 goto out;
830 ret = __cafe_cam_cmd(cam, VIDIOC_INT_G_CHIP_IDENT, &cam->sensor_type); 832 chip.match_chip = cam->sensor->addr;
833 ret = __cafe_cam_cmd(cam, VIDIOC_G_CHIP_IDENT, &chip);
831 if (ret) 834 if (ret)
832 goto out; 835 goto out;
836 cam->sensor_type = chip.ident;
833// if (cam->sensor->addr != OV7xx0_SID) { 837// if (cam->sensor->addr != OV7xx0_SID) {
834 if (cam->sensor_type != V4L2_IDENT_OV7670) { 838 if (cam->sensor_type != V4L2_IDENT_OV7670) {
835 cam_err(cam, "Unsupported sensor type %d", cam->sensor->addr); 839 cam_err(cam, "Unsupported sensor type %d", cam->sensor->addr);
diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c
index 774d2536555b..1757a588970f 100644
--- a/drivers/media/video/cx25840/cx25840-core.c
+++ b/drivers/media/video/cx25840/cx25840-core.c
@@ -35,6 +35,7 @@
35#include <linux/videodev2.h> 35#include <linux/videodev2.h>
36#include <linux/i2c.h> 36#include <linux/i2c.h>
37#include <media/v4l2-common.h> 37#include <media/v4l2-common.h>
38#include <media/v4l2-chip-ident.h>
38#include <media/cx25840.h> 39#include <media/cx25840.h>
39 40
40#include "cx25840-core.h" 41#include "cx25840-core.h"
@@ -827,9 +828,8 @@ static int cx25840_command(struct i2c_client *client, unsigned int cmd,
827 cx25840_initialize(client, 0); 828 cx25840_initialize(client, 0);
828 break; 829 break;
829 830
830 case VIDIOC_INT_G_CHIP_IDENT: 831 case VIDIOC_G_CHIP_IDENT:
831 *(enum v4l2_chip_ident *)arg = state->id; 832 return v4l2_chip_ident_i2c_client(client, arg, state->id, state->rev);
832 break;
833 833
834 default: 834 default:
835 return -EINVAL; 835 return -EINVAL;
@@ -847,7 +847,7 @@ static int cx25840_detect_client(struct i2c_adapter *adapter, int address,
847{ 847{
848 struct i2c_client *client; 848 struct i2c_client *client;
849 struct cx25840_state *state; 849 struct cx25840_state *state;
850 enum v4l2_chip_ident id; 850 u32 id;
851 u16 device_id; 851 u16 device_id;
852 852
853 /* Check if the adapter supports the needed features 853 /* Check if the adapter supports the needed features
@@ -902,6 +902,7 @@ static int cx25840_detect_client(struct i2c_adapter *adapter, int address,
902 state->audmode = V4L2_TUNER_MODE_LANG1; 902 state->audmode = V4L2_TUNER_MODE_LANG1;
903 state->vbi_line_offset = 8; 903 state->vbi_line_offset = 8;
904 state->id = id; 904 state->id = id;
905 state->rev = device_id;
905 906
906 i2c_attach_client(client); 907 i2c_attach_client(client);
907 908
diff --git a/drivers/media/video/cx25840/cx25840-core.h b/drivers/media/video/cx25840/cx25840-core.h
index 28049064dd7d..f4b56d2fd6b6 100644
--- a/drivers/media/video/cx25840/cx25840-core.h
+++ b/drivers/media/video/cx25840/cx25840-core.h
@@ -43,7 +43,8 @@ struct cx25840_state {
43 u32 audclk_freq; 43 u32 audclk_freq;
44 int audmode; 44 int audmode;
45 int vbi_line_offset; 45 int vbi_line_offset;
46 enum v4l2_chip_ident id; 46 u32 id;
47 u32 rev;
47 int is_cx25836; 48 int is_cx25836;
48}; 49};
49 50
diff --git a/drivers/media/video/ov7670.c b/drivers/media/video/ov7670.c
index 5ed0adc4ca26..5234762c5427 100644
--- a/drivers/media/video/ov7670.c
+++ b/drivers/media/video/ov7670.c
@@ -15,6 +15,7 @@
15#include <linux/delay.h> 15#include <linux/delay.h>
16#include <linux/videodev.h> 16#include <linux/videodev.h>
17#include <media/v4l2-common.h> 17#include <media/v4l2-common.h>
18#include <media/v4l2-chip-ident.h>
18#include <linux/i2c.h> 19#include <linux/i2c.h>
19 20
20 21
@@ -1270,9 +1271,8 @@ static int ov7670_command(struct i2c_client *client, unsigned int cmd,
1270 void *arg) 1271 void *arg)
1271{ 1272{
1272 switch (cmd) { 1273 switch (cmd) {
1273 case VIDIOC_INT_G_CHIP_IDENT: 1274 case VIDIOC_G_CHIP_IDENT:
1274 * (enum v4l2_chip_ident *) arg = V4L2_IDENT_OV7670; 1275 return v4l2_chip_ident_i2c_client(client, arg, V4L2_IDENT_OV7670, 0);
1275 return 0;
1276 1276
1277 case VIDIOC_INT_RESET: 1277 case VIDIOC_INT_RESET:
1278 ov7670_reset(client); 1278 ov7670_reset(client);
diff --git a/drivers/media/video/saa7115.c b/drivers/media/video/saa7115.c
index 4d5bbd859de1..26c9b64c748c 100644
--- a/drivers/media/video/saa7115.c
+++ b/drivers/media/video/saa7115.c
@@ -45,6 +45,7 @@
45#include <linux/i2c.h> 45#include <linux/i2c.h>
46#include <linux/videodev2.h> 46#include <linux/videodev2.h>
47#include <media/v4l2-common.h> 47#include <media/v4l2-common.h>
48#include <media/v4l2-chip-ident.h>
48#include <media/saa7115.h> 49#include <media/saa7115.h>
49#include <asm/div64.h> 50#include <asm/div64.h>
50 51
@@ -80,7 +81,7 @@ struct saa711x_state {
80 int sat; 81 int sat;
81 int width; 82 int width;
82 int height; 83 int height;
83 enum v4l2_chip_ident ident; 84 u32 ident;
84 u32 audclk_freq; 85 u32 audclk_freq;
85 u32 crystal_freq; 86 u32 crystal_freq;
86 u8 ucgc; 87 u8 ucgc;
@@ -1232,7 +1233,6 @@ static void saa711x_decode_vbi_line(struct i2c_client *client,
1232static int saa711x_command(struct i2c_client *client, unsigned int cmd, void *arg) 1233static int saa711x_command(struct i2c_client *client, unsigned int cmd, void *arg)
1233{ 1234{
1234 struct saa711x_state *state = i2c_get_clientdata(client); 1235 struct saa711x_state *state = i2c_get_clientdata(client);
1235 int *iarg = arg;
1236 1236
1237 /* ioctls to allow direct access to the saa7115 registers for testing */ 1237 /* ioctls to allow direct access to the saa7115 registers for testing */
1238 switch (cmd) { 1238 switch (cmd) {
@@ -1437,9 +1437,8 @@ static int saa711x_command(struct i2c_client *client, unsigned int cmd, void *ar
1437 } 1437 }
1438#endif 1438#endif
1439 1439
1440 case VIDIOC_INT_G_CHIP_IDENT: 1440 case VIDIOC_G_CHIP_IDENT:
1441 *iarg = state->ident; 1441 return v4l2_chip_ident_i2c_client(client, arg, state->ident, 0);
1442 break;
1443 1442
1444 default: 1443 default:
1445 return -EINVAL; 1444 return -EINVAL;
diff --git a/drivers/media/video/saa7127.c b/drivers/media/video/saa7127.c
index 50dbb76d4a7f..9f986930490f 100644
--- a/drivers/media/video/saa7127.c
+++ b/drivers/media/video/saa7127.c
@@ -54,6 +54,7 @@
54#include <linux/i2c.h> 54#include <linux/i2c.h>
55#include <linux/videodev2.h> 55#include <linux/videodev2.h>
56#include <media/v4l2-common.h> 56#include <media/v4l2-common.h>
57#include <media/v4l2-chip-ident.h>
57#include <media/saa7127.h> 58#include <media/saa7127.h>
58 59
59static int debug = 0; 60static int debug = 0;
@@ -234,7 +235,7 @@ static struct i2c_reg_value saa7127_init_config_50hz[] = {
234 235
235struct saa7127_state { 236struct saa7127_state {
236 v4l2_std_id std; 237 v4l2_std_id std;
237 enum v4l2_chip_ident ident; 238 u32 ident;
238 enum saa7127_input_type input_type; 239 enum saa7127_input_type input_type;
239 enum saa7127_output_type output_type; 240 enum saa7127_output_type output_type;
240 int video_enable; 241 int video_enable;
@@ -650,9 +651,8 @@ static int saa7127_command(struct i2c_client *client,
650 break; 651 break;
651 } 652 }
652 653
653 case VIDIOC_INT_G_CHIP_IDENT: 654 case VIDIOC_G_CHIP_IDENT:
654 *(enum v4l2_chip_ident *)arg = state->ident; 655 return v4l2_chip_ident_i2c_client(client, arg, state->ident, 0);
655 break;
656 656
657 default: 657 default:
658 return -EINVAL; 658 return -EINVAL;
diff --git a/drivers/media/video/v4l2-common.c b/drivers/media/video/v4l2-common.c
index 4a3635cd6f9e..49f1df74aa21 100644
--- a/drivers/media/video/v4l2-common.c
+++ b/drivers/media/video/v4l2-common.c
@@ -60,6 +60,7 @@
60#include <linux/video_decoder.h> 60#include <linux/video_decoder.h>
61#define __OLD_VIDIOC_ /* To allow fixing old calls*/ 61#define __OLD_VIDIOC_ /* To allow fixing old calls*/
62#include <media/v4l2-common.h> 62#include <media/v4l2-common.h>
63#include <media/v4l2-chip-ident.h>
63 64
64#ifdef CONFIG_KMOD 65#ifdef CONFIG_KMOD
65#include <linux/kmod.h> 66#include <linux/kmod.h>
@@ -383,6 +384,8 @@ static const char *v4l2_ioctls[] = {
383 384
384 [_IOC_NR(VIDIOC_DBG_S_REGISTER)] = "VIDIOC_DBG_S_REGISTER", 385 [_IOC_NR(VIDIOC_DBG_S_REGISTER)] = "VIDIOC_DBG_S_REGISTER",
385 [_IOC_NR(VIDIOC_DBG_G_REGISTER)] = "VIDIOC_DBG_G_REGISTER", 386 [_IOC_NR(VIDIOC_DBG_G_REGISTER)] = "VIDIOC_DBG_G_REGISTER",
387
388 [_IOC_NR(VIDIOC_G_CHIP_IDENT)] = "VIDIOC_G_CHIP_IDENT",
386#endif 389#endif
387}; 390};
388#define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) 391#define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls)
@@ -413,7 +416,6 @@ static const char *v4l2_int_ioctls[] = {
413 [_IOC_NR(VIDIOC_INT_DECODE_VBI_LINE)] = "VIDIOC_INT_DECODE_VBI_LINE", 416 [_IOC_NR(VIDIOC_INT_DECODE_VBI_LINE)] = "VIDIOC_INT_DECODE_VBI_LINE",
414 [_IOC_NR(VIDIOC_INT_S_VBI_DATA)] = "VIDIOC_INT_S_VBI_DATA", 417 [_IOC_NR(VIDIOC_INT_S_VBI_DATA)] = "VIDIOC_INT_S_VBI_DATA",
415 [_IOC_NR(VIDIOC_INT_G_VBI_DATA)] = "VIDIOC_INT_G_VBI_DATA", 418 [_IOC_NR(VIDIOC_INT_G_VBI_DATA)] = "VIDIOC_INT_G_VBI_DATA",
416 [_IOC_NR(VIDIOC_INT_G_CHIP_IDENT)] = "VIDIOC_INT_G_CHIP_IDENT",
417 [_IOC_NR(VIDIOC_INT_I2S_CLOCK_FREQ)] = "VIDIOC_INT_I2S_CLOCK_FREQ", 419 [_IOC_NR(VIDIOC_INT_I2S_CLOCK_FREQ)] = "VIDIOC_INT_I2S_CLOCK_FREQ",
418 [_IOC_NR(VIDIOC_INT_S_STANDBY)] = "VIDIOC_INT_S_STANDBY", 420 [_IOC_NR(VIDIOC_INT_S_STANDBY)] = "VIDIOC_INT_S_STANDBY",
419 [_IOC_NR(VIDIOC_INT_S_AUDIO_ROUTING)] = "VIDIOC_INT_S_AUDIO_ROUTING", 421 [_IOC_NR(VIDIOC_INT_S_AUDIO_ROUTING)] = "VIDIOC_INT_S_AUDIO_ROUTING",
@@ -981,6 +983,22 @@ int v4l2_chip_match_i2c_client(struct i2c_client *c, u32 match_type, u32 match_c
981 } 983 }
982} 984}
983 985
986int v4l2_chip_ident_i2c_client(struct i2c_client *c, struct v4l2_chip_ident *chip,
987 u32 ident, u32 revision)
988{
989 if (!v4l2_chip_match_i2c_client(c, chip->match_type, chip->match_chip))
990 return 0;
991 if (chip->ident == V4L2_IDENT_NONE) {
992 chip->ident = ident;
993 chip->revision = revision;
994 }
995 else {
996 chip->ident = V4L2_IDENT_AMBIGUOUS;
997 chip->revision = 0;
998 }
999 return 0;
1000}
1001
984int v4l2_chip_match_host(u32 match_type, u32 match_chip) 1002int v4l2_chip_match_host(u32 match_type, u32 match_chip)
985{ 1003{
986 switch (match_type) { 1004 switch (match_type) {
@@ -1015,6 +1033,7 @@ EXPORT_SYMBOL(v4l2_ctrl_query_fill);
1015EXPORT_SYMBOL(v4l2_ctrl_query_fill_std); 1033EXPORT_SYMBOL(v4l2_ctrl_query_fill_std);
1016 1034
1017EXPORT_SYMBOL(v4l2_chip_match_i2c_client); 1035EXPORT_SYMBOL(v4l2_chip_match_i2c_client);
1036EXPORT_SYMBOL(v4l2_chip_ident_i2c_client);
1018EXPORT_SYMBOL(v4l2_chip_match_host); 1037EXPORT_SYMBOL(v4l2_chip_match_host);
1019 1038
1020/* 1039/*
diff --git a/drivers/media/video/videodev.c b/drivers/media/video/videodev.c
index 5c9f2116d7bf..fdfef0b53315 100644
--- a/drivers/media/video/videodev.c
+++ b/drivers/media/video/videodev.c
@@ -1532,6 +1532,16 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
1532 break; 1532 break;
1533 } 1533 }
1534#endif 1534#endif
1535 case VIDIOC_G_CHIP_IDENT:
1536 {
1537 struct v4l2_chip_ident *p=arg;
1538 if (!vfd->vidioc_g_chip_ident)
1539 break;
1540 ret=vfd->vidioc_g_chip_ident(file, fh, p);
1541 if (!ret)
1542 dbgarg (cmd, "chip_ident=%u, revision=0x%x\n", p->ident, p->revision);
1543 break;
1544 }
1535 } /* switch */ 1545 } /* switch */
1536 1546
1537 if (vfd->debug & V4L2_DEBUG_IOCTL_ARG) { 1547 if (vfd->debug & V4L2_DEBUG_IOCTL_ARG) {
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
index a08ef2c16300..a25c2afa67e1 100644
--- a/include/linux/videodev2.h
+++ b/include/linux/videodev2.h
@@ -1398,6 +1398,14 @@ struct v4l2_register {
1398 __u64 val; 1398 __u64 val;
1399}; 1399};
1400 1400
1401/* VIDIOC_G_CHIP_IDENT */
1402struct v4l2_chip_ident {
1403 __u32 match_type; /* Match type */
1404 __u32 match_chip; /* Match this chip, meaning determined by match_type */
1405 __u32 ident; /* chip identifier as specified in <media/v4l2-chip-ident.h> */
1406 __u32 revision; /* chip revision, chip specific */
1407};
1408
1401/* 1409/*
1402 * I O C T L C O D E S F O R V I D E O D E V I C E S 1410 * I O C T L C O D E S F O R V I D E O D E V I C E S
1403 * 1411 *
@@ -1471,6 +1479,8 @@ struct v4l2_register {
1471/* Experimental, only implemented if CONFIG_VIDEO_ADV_DEBUG is defined */ 1479/* Experimental, only implemented if CONFIG_VIDEO_ADV_DEBUG is defined */
1472#define VIDIOC_DBG_S_REGISTER _IOW ('V', 79, struct v4l2_register) 1480#define VIDIOC_DBG_S_REGISTER _IOW ('V', 79, struct v4l2_register)
1473#define VIDIOC_DBG_G_REGISTER _IOWR ('V', 80, struct v4l2_register) 1481#define VIDIOC_DBG_G_REGISTER _IOWR ('V', 80, struct v4l2_register)
1482
1483#define VIDIOC_G_CHIP_IDENT _IOWR ('V', 81, struct v4l2_chip_ident)
1474#endif 1484#endif
1475 1485
1476#ifdef __OLD_VIDIOC_ 1486#ifdef __OLD_VIDIOC_
diff --git a/include/media/v4l2-chip-ident.h b/include/media/v4l2-chip-ident.h
new file mode 100644
index 000000000000..f6686ce133d8
--- /dev/null
+++ b/include/media/v4l2-chip-ident.h
@@ -0,0 +1,62 @@
1/*
2 v4l2 chip identifiers header
3
4 This header provides a list of chip identifiers that can be returned
5 through the VIDIOC_G_CHIP_IDENT ioctl.
6
7 Copyright (C) 2007 Hans Verkuil <hverkuil@xs4all.nl>
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 */
23
24#ifndef V4L2_CHIP_IDENT_H_
25#define V4L2_CHIP_IDENT_H_
26
27/* VIDIOC_G_CHIP_IDENT: identifies the actual chip installed on the board */
28enum {
29 /* general idents: reserved range 0-49 */
30 V4L2_IDENT_NONE = 0, /* No chip matched */
31 V4L2_IDENT_AMBIGUOUS = 1, /* Match too general, multiple chips matched */
32 V4L2_IDENT_UNKNOWN = 2, /* Chip found, but cannot identify */
33
34 /* module saa7110: just ident= 100 */
35 V4L2_IDENT_SAA7110 = 100,
36
37 /* module saa7111: just ident= 101 */
38 V4L2_IDENT_SAA7111 = 101,
39
40 /* module saa7115: reserved range 102-149 */
41 V4L2_IDENT_SAA7113 = 103,
42 V4L2_IDENT_SAA7114 = 104,
43 V4L2_IDENT_SAA7115 = 105,
44 V4L2_IDENT_SAA7118 = 108,
45
46 /* module saa7127: reserved range 150-199 */
47 V4L2_IDENT_SAA7127 = 157,
48 V4L2_IDENT_SAA7129 = 159,
49
50 /* module cx25840: reserved range 200-249 */
51 V4L2_IDENT_CX25836 = 236,
52 V4L2_IDENT_CX25837 = 237,
53 V4L2_IDENT_CX25840 = 240,
54 V4L2_IDENT_CX25841 = 241,
55 V4L2_IDENT_CX25842 = 242,
56 V4L2_IDENT_CX25843 = 243,
57
58 /* OmniVision sensors - range 250-299 */
59 V4L2_IDENT_OV7670 = 250,
60};
61
62#endif
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h
index abb9ce9b21b8..181a40c46a52 100644
--- a/include/media/v4l2-common.h
+++ b/include/media/v4l2-common.h
@@ -98,6 +98,8 @@ u32 v4l2_ctrl_next(const u32 * const *ctrl_classes, u32 id);
98 98
99struct i2c_client; /* forward reference */ 99struct i2c_client; /* forward reference */
100int v4l2_chip_match_i2c_client(struct i2c_client *c, u32 id_type, u32 chip_id); 100int v4l2_chip_match_i2c_client(struct i2c_client *c, u32 id_type, u32 chip_id);
101int v4l2_chip_ident_i2c_client(struct i2c_client *c, struct v4l2_chip_ident *chip,
102 u32 ident, u32 revision);
101int v4l2_chip_match_host(u32 id_type, u32 chip_id); 103int v4l2_chip_match_host(u32 id_type, u32 chip_id);
102 104
103/* ------------------------------------------------------------------------- */ 105/* ------------------------------------------------------------------------- */
@@ -114,39 +116,6 @@ struct v4l2_decode_vbi_line {
114 u32 type; /* VBI service type (V4L2_SLICED_*). 0 if no service found */ 116 u32 type; /* VBI service type (V4L2_SLICED_*). 0 if no service found */
115}; 117};
116 118
117/* VIDIOC_INT_G_CHIP_IDENT: identifies the actual chip installed on the board */
118enum v4l2_chip_ident {
119 /* general idents: reserved range 0-49 */
120 V4L2_IDENT_UNKNOWN = 0,
121
122 /* module saa7110: just ident= 100 */
123 V4L2_IDENT_SAA7110 = 100,
124
125 /* module saa7111: just ident= 101 */
126 V4L2_IDENT_SAA7111 = 101,
127
128 /* module saa7115: reserved range 102-149 */
129 V4L2_IDENT_SAA7113 = 103,
130 V4L2_IDENT_SAA7114 = 104,
131 V4L2_IDENT_SAA7115 = 105,
132 V4L2_IDENT_SAA7118 = 108,
133
134 /* module saa7127: reserved range 150-199 */
135 V4L2_IDENT_SAA7127 = 157,
136 V4L2_IDENT_SAA7129 = 159,
137
138 /* module cx25840: reserved range 200-249 */
139 V4L2_IDENT_CX25836 = 236,
140 V4L2_IDENT_CX25837 = 237,
141 V4L2_IDENT_CX25840 = 240,
142 V4L2_IDENT_CX25841 = 241,
143 V4L2_IDENT_CX25842 = 242,
144 V4L2_IDENT_CX25843 = 243,
145
146 /* OmniVision sensors - range 250-299 */
147 V4L2_IDENT_OV7670 = 250,
148};
149
150/* audio ioctls */ 119/* audio ioctls */
151 120
152/* v4l device was opened in Radio mode, to be replaced by VIDIOC_INT_S_TUNER_MODE */ 121/* v4l device was opened in Radio mode, to be replaced by VIDIOC_INT_S_TUNER_MODE */
@@ -208,10 +177,6 @@ enum v4l2_chip_ident {
208 whether CC data from the first or second field should be obtained). */ 177 whether CC data from the first or second field should be obtained). */
209#define VIDIOC_INT_G_VBI_DATA _IOWR('d', 106, struct v4l2_sliced_vbi_data) 178#define VIDIOC_INT_G_VBI_DATA _IOWR('d', 106, struct v4l2_sliced_vbi_data)
210 179
211/* Returns the chip identifier or V4L2_IDENT_UNKNOWN if no identification can
212 be made. */
213#define VIDIOC_INT_G_CHIP_IDENT _IOR ('d', 107, enum v4l2_chip_ident)
214
215/* Sets I2S speed in bps. This is used to provide a standard way to select I2S 180/* Sets I2S speed in bps. This is used to provide a standard way to select I2S
216 clock used by driving digital audio streams at some board designs. 181 clock used by driving digital audio streams at some board designs.
217 Usual values for the frequency are 1024000 and 2048000. 182 Usual values for the frequency are 1024000 and 2048000.
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h
index 2693f3ae6ffb..d62847f846c2 100644
--- a/include/media/v4l2-dev.h
+++ b/include/media/v4l2-dev.h
@@ -317,6 +317,8 @@ struct video_device
317 int (*vidioc_s_register) (struct file *file, void *fh, 317 int (*vidioc_s_register) (struct file *file, void *fh,
318 struct v4l2_register *reg); 318 struct v4l2_register *reg);
319#endif 319#endif
320 int (*vidioc_g_chip_ident) (struct file *file, void *fh,
321 struct v4l2_chip_ident *chip);
320 322
321 323
322#ifdef OBSOLETE_OWNER /* to be removed soon */ 324#ifdef OBSOLETE_OWNER /* to be removed soon */