diff options
-rw-r--r-- | drivers/media/video/cafe_ccic.c | 8 | ||||
-rw-r--r-- | drivers/media/video/cx25840/cx25840-core.c | 9 | ||||
-rw-r--r-- | drivers/media/video/cx25840/cx25840-core.h | 3 | ||||
-rw-r--r-- | drivers/media/video/ov7670.c | 6 | ||||
-rw-r--r-- | drivers/media/video/saa7115.c | 9 | ||||
-rw-r--r-- | drivers/media/video/saa7127.c | 8 | ||||
-rw-r--r-- | drivers/media/video/v4l2-common.c | 21 | ||||
-rw-r--r-- | drivers/media/video/videodev.c | 10 | ||||
-rw-r--r-- | include/linux/videodev2.h | 10 | ||||
-rw-r--r-- | include/media/v4l2-chip-ident.h | 62 | ||||
-rw-r--r-- | include/media/v4l2-common.h | 39 | ||||
-rw-r--r-- | include/media/v4l2-dev.h | 2 |
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 | */ |
819 | static int cafe_cam_init(struct cafe_camera *cam) | 820 | static 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, | |||
1232 | static int saa711x_command(struct i2c_client *client, unsigned int cmd, void *arg) | 1233 | static 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 | ||
59 | static int debug = 0; | 60 | static int debug = 0; |
@@ -234,7 +235,7 @@ static struct i2c_reg_value saa7127_init_config_50hz[] = { | |||
234 | 235 | ||
235 | struct saa7127_state { | 236 | struct 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 | ||
986 | int 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 | |||
984 | int v4l2_chip_match_host(u32 match_type, u32 match_chip) | 1002 | int 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); | |||
1015 | EXPORT_SYMBOL(v4l2_ctrl_query_fill_std); | 1033 | EXPORT_SYMBOL(v4l2_ctrl_query_fill_std); |
1016 | 1034 | ||
1017 | EXPORT_SYMBOL(v4l2_chip_match_i2c_client); | 1035 | EXPORT_SYMBOL(v4l2_chip_match_i2c_client); |
1036 | EXPORT_SYMBOL(v4l2_chip_ident_i2c_client); | ||
1018 | EXPORT_SYMBOL(v4l2_chip_match_host); | 1037 | EXPORT_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 */ | ||
1402 | struct 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 */ | ||
28 | enum { | ||
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 | ||
99 | struct i2c_client; /* forward reference */ | 99 | struct i2c_client; /* forward reference */ |
100 | int v4l2_chip_match_i2c_client(struct i2c_client *c, u32 id_type, u32 chip_id); | 100 | int v4l2_chip_match_i2c_client(struct i2c_client *c, u32 id_type, u32 chip_id); |
101 | int v4l2_chip_ident_i2c_client(struct i2c_client *c, struct v4l2_chip_ident *chip, | ||
102 | u32 ident, u32 revision); | ||
101 | int v4l2_chip_match_host(u32 id_type, u32 chip_id); | 103 | int 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 */ | ||
118 | enum 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 */ |