blob: 35223e0d7e49bb09deada63abd58f8428a59e18b [file] [log] [blame]
Luca Risoliaf327ebb2007-01-08 10:43:56 -03001/***************************************************************************
2 * Table of device identifiers of the SN9C1xx PC Camera Controllers *
3 * *
4 * Copyright (C) 2007 by Luca Risolia <luca.risolia@studio.unibo.it> *
5 * *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program; if not, write to the Free Software *
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
19 ***************************************************************************/
20
21#ifndef _SN9C102_DEVTABLE_H_
22#define _SN9C102_DEVTABLE_H_
23
24#include <linux/usb.h>
25
26struct sn9c102_device;
27
28/*
29 Each SN9C1xx camera has proper PID/VID identifiers.
30 SN9C103, SN9C105, SN9C120 support multiple interfaces, but we only have to
31 handle the video class interface.
32*/
33#define SN9C102_USB_DEVICE(vend, prod, bridge) \
34 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
35 USB_DEVICE_ID_MATCH_INT_CLASS, \
36 .idVendor = (vend), \
37 .idProduct = (prod), \
38 .bInterfaceClass = 0xff, \
39 .driver_info = (bridge)
40
41static const struct usb_device_id sn9c102_id_table[] = {
42 /* SN9C101 and SN9C102 */
43 { SN9C102_USB_DEVICE(0x0c45, 0x6001, BRIDGE_SN9C102), },
44 { SN9C102_USB_DEVICE(0x0c45, 0x6005, BRIDGE_SN9C102), },
45 { SN9C102_USB_DEVICE(0x0c45, 0x6007, BRIDGE_SN9C102), },
46 { SN9C102_USB_DEVICE(0x0c45, 0x6009, BRIDGE_SN9C102), },
47 { SN9C102_USB_DEVICE(0x0c45, 0x6011, BRIDGE_SN9C102), },
48 { SN9C102_USB_DEVICE(0x0c45, 0x600d, BRIDGE_SN9C102), },
49 { SN9C102_USB_DEVICE(0x0c45, 0x6019, BRIDGE_SN9C102), },
50 { SN9C102_USB_DEVICE(0x0c45, 0x6024, BRIDGE_SN9C102), },
51 { SN9C102_USB_DEVICE(0x0c45, 0x6025, BRIDGE_SN9C102), },
52 { SN9C102_USB_DEVICE(0x0c45, 0x6028, BRIDGE_SN9C102), },
53 { SN9C102_USB_DEVICE(0x0c45, 0x6029, BRIDGE_SN9C102), },
54 { SN9C102_USB_DEVICE(0x0c45, 0x602a, BRIDGE_SN9C102), },
55 { SN9C102_USB_DEVICE(0x0c45, 0x602b, BRIDGE_SN9C102), },
56 { SN9C102_USB_DEVICE(0x0c45, 0x602c, BRIDGE_SN9C102), },
57 { SN9C102_USB_DEVICE(0x0c45, 0x602d, BRIDGE_SN9C102), },
58 { SN9C102_USB_DEVICE(0x0c45, 0x602e, BRIDGE_SN9C102), },
59 { SN9C102_USB_DEVICE(0x0c45, 0x6030, BRIDGE_SN9C102), },
60 { SN9C102_USB_DEVICE(0x0c45, 0x603f, BRIDGE_SN9C102), },
61 /* SN9C103 */
62 { SN9C102_USB_DEVICE(0x0c45, 0x6080, BRIDGE_SN9C103), },
63 { SN9C102_USB_DEVICE(0x0c45, 0x6082, BRIDGE_SN9C103), },
64 { SN9C102_USB_DEVICE(0x0c45, 0x6083, BRIDGE_SN9C103), },
65 { SN9C102_USB_DEVICE(0x0c45, 0x6088, BRIDGE_SN9C103), },
66 { SN9C102_USB_DEVICE(0x0c45, 0x608a, BRIDGE_SN9C103), },
67 { SN9C102_USB_DEVICE(0x0c45, 0x608b, BRIDGE_SN9C103), },
68 { SN9C102_USB_DEVICE(0x0c45, 0x608c, BRIDGE_SN9C103), },
69 { SN9C102_USB_DEVICE(0x0c45, 0x608e, BRIDGE_SN9C103), },
70 { SN9C102_USB_DEVICE(0x0c45, 0x608f, BRIDGE_SN9C103), },
71 { SN9C102_USB_DEVICE(0x0c45, 0x60a0, BRIDGE_SN9C103), },
72 { SN9C102_USB_DEVICE(0x0c45, 0x60a2, BRIDGE_SN9C103), },
73 { SN9C102_USB_DEVICE(0x0c45, 0x60a3, BRIDGE_SN9C103), },
74 { SN9C102_USB_DEVICE(0x0c45, 0x60a8, BRIDGE_SN9C103), },
75 { SN9C102_USB_DEVICE(0x0c45, 0x60aa, BRIDGE_SN9C103), },
76 { SN9C102_USB_DEVICE(0x0c45, 0x60ab, BRIDGE_SN9C103), },
77 { SN9C102_USB_DEVICE(0x0c45, 0x60ac, BRIDGE_SN9C103), },
78 { SN9C102_USB_DEVICE(0x0c45, 0x60ae, BRIDGE_SN9C103), },
79 { SN9C102_USB_DEVICE(0x0c45, 0x60af, BRIDGE_SN9C103), },
80 { SN9C102_USB_DEVICE(0x0c45, 0x60b0, BRIDGE_SN9C103), },
81 { SN9C102_USB_DEVICE(0x0c45, 0x60b2, BRIDGE_SN9C103), },
82 { SN9C102_USB_DEVICE(0x0c45, 0x60b3, BRIDGE_SN9C103), },
83 { SN9C102_USB_DEVICE(0x0c45, 0x60b8, BRIDGE_SN9C103), },
84 { SN9C102_USB_DEVICE(0x0c45, 0x60ba, BRIDGE_SN9C103), },
85 { SN9C102_USB_DEVICE(0x0c45, 0x60bb, BRIDGE_SN9C103), },
86 { SN9C102_USB_DEVICE(0x0c45, 0x60bc, BRIDGE_SN9C103), },
87 { SN9C102_USB_DEVICE(0x0c45, 0x60be, BRIDGE_SN9C103), },
88 /* SN9C105 */
Luca Risolia480b55c22007-05-02 10:04:03 -030089 { SN9C102_USB_DEVICE(0x045e, 0x00f5, BRIDGE_SN9C105), },
90 { SN9C102_USB_DEVICE(0x045e, 0x00f7, BRIDGE_SN9C105), },
Luca Risoliaf327ebb2007-01-08 10:43:56 -030091 { SN9C102_USB_DEVICE(0x0471, 0x0327, BRIDGE_SN9C105), },
92 { SN9C102_USB_DEVICE(0x0471, 0x0328, BRIDGE_SN9C105), },
93 { SN9C102_USB_DEVICE(0x0c45, 0x60c0, BRIDGE_SN9C105), },
Luca Risoliaf423b9a2007-03-26 16:12:04 -030094 { SN9C102_USB_DEVICE(0x0c45, 0x60c2, BRIDGE_SN9C105), },
Luca Risoliaf327ebb2007-01-08 10:43:56 -030095 { SN9C102_USB_DEVICE(0x0c45, 0x60c8, BRIDGE_SN9C105), },
96 { SN9C102_USB_DEVICE(0x0c45, 0x60cc, BRIDGE_SN9C105), },
97 { SN9C102_USB_DEVICE(0x0c45, 0x60ea, BRIDGE_SN9C105), },
98 { SN9C102_USB_DEVICE(0x0c45, 0x60ec, BRIDGE_SN9C105), },
Luca Risoliaf423b9a2007-03-26 16:12:04 -030099 { SN9C102_USB_DEVICE(0x0c45, 0x60ef, BRIDGE_SN9C105), },
Luca Risoliaf327ebb2007-01-08 10:43:56 -0300100 { SN9C102_USB_DEVICE(0x0c45, 0x60fa, BRIDGE_SN9C105), },
101 { SN9C102_USB_DEVICE(0x0c45, 0x60fb, BRIDGE_SN9C105), },
102 { SN9C102_USB_DEVICE(0x0c45, 0x60fc, BRIDGE_SN9C105), },
103 { SN9C102_USB_DEVICE(0x0c45, 0x60fe, BRIDGE_SN9C105), },
104 /* SN9C120 */
Luca Risolia480b55c22007-05-02 10:04:03 -0300105 { SN9C102_USB_DEVICE(0x0458, 0x7025, BRIDGE_SN9C120), },
Luca Risoliaf423b9a2007-03-26 16:12:04 -0300106 { SN9C102_USB_DEVICE(0x0c45, 0x6102, BRIDGE_SN9C120), },
107 { SN9C102_USB_DEVICE(0x0c45, 0x6108, BRIDGE_SN9C120), },
108 { SN9C102_USB_DEVICE(0x0c45, 0x610f, BRIDGE_SN9C120), },
Luca Risoliaf327ebb2007-01-08 10:43:56 -0300109 { SN9C102_USB_DEVICE(0x0c45, 0x6130, BRIDGE_SN9C120), },
Luca Risoliaf423b9a2007-03-26 16:12:04 -0300110 { SN9C102_USB_DEVICE(0x0c45, 0x6138, BRIDGE_SN9C120), },
Luca Risoliaf327ebb2007-01-08 10:43:56 -0300111 { SN9C102_USB_DEVICE(0x0c45, 0x613a, BRIDGE_SN9C120), },
112 { SN9C102_USB_DEVICE(0x0c45, 0x613b, BRIDGE_SN9C120), },
113 { SN9C102_USB_DEVICE(0x0c45, 0x613c, BRIDGE_SN9C120), },
114 { SN9C102_USB_DEVICE(0x0c45, 0x613e, BRIDGE_SN9C120), },
115 { }
116};
117
118/*
119 Probing functions: on success, you must attach the sensor to the camera
120 by calling sn9c102_attach_sensor().
121 To enable the I2C communication, you might need to perform a really basic
122 initialization of the SN9C1XX chip.
123 Functions must return 0 on success, the appropriate error otherwise.
124*/
125extern int sn9c102_probe_hv7131d(struct sn9c102_device* cam);
Luca Risoliaf423b9a2007-03-26 16:12:04 -0300126extern int sn9c102_probe_hv7131r(struct sn9c102_device* cam);
Luca Risoliaf327ebb2007-01-08 10:43:56 -0300127extern int sn9c102_probe_mi0343(struct sn9c102_device* cam);
Luca Risoliaf423b9a2007-03-26 16:12:04 -0300128extern int sn9c102_probe_mi0360(struct sn9c102_device* cam);
Luca Risoliaddef2dc2007-11-12 11:42:54 -0300129extern int sn9c102_probe_mt9v111(struct sn9c102_device *cam);
Luca Risoliaf327ebb2007-01-08 10:43:56 -0300130extern int sn9c102_probe_ov7630(struct sn9c102_device* cam);
131extern int sn9c102_probe_ov7660(struct sn9c102_device* cam);
132extern int sn9c102_probe_pas106b(struct sn9c102_device* cam);
133extern int sn9c102_probe_pas202bcb(struct sn9c102_device* cam);
134extern int sn9c102_probe_tas5110c1b(struct sn9c102_device* cam);
Luca Risoliaf423b9a2007-03-26 16:12:04 -0300135extern int sn9c102_probe_tas5110d(struct sn9c102_device* cam);
Luca Risoliaf327ebb2007-01-08 10:43:56 -0300136extern int sn9c102_probe_tas5130d1b(struct sn9c102_device* cam);
137
138/*
139 Add the above entries to this table. Be sure to add the entry in the right
140 place, since, on failure, the next probing routine is called according to
141 the order of the list below, from top to bottom.
142*/
143static int (*sn9c102_sensor_table[])(struct sn9c102_device*) = {
Luca Risoliaf423b9a2007-03-26 16:12:04 -0300144 &sn9c102_probe_hv7131d, /* strong detection based on SENSOR ids */
145 &sn9c102_probe_hv7131r, /* strong detection based on SENSOR ids */
Luca Risoliaf327ebb2007-01-08 10:43:56 -0300146 &sn9c102_probe_mi0343, /* strong detection based on SENSOR ids */
Luca Risoliaf423b9a2007-03-26 16:12:04 -0300147 &sn9c102_probe_mi0360, /* strong detection based on SENSOR ids */
Luca Risoliaddef2dc2007-11-12 11:42:54 -0300148 &sn9c102_probe_mt9v111, /* strong detection based on SENSOR ids */
Luca Risoliaf327ebb2007-01-08 10:43:56 -0300149 &sn9c102_probe_pas106b, /* strong detection based on SENSOR ids */
150 &sn9c102_probe_pas202bcb, /* strong detection based on SENSOR ids */
Luca Risoliaf327ebb2007-01-08 10:43:56 -0300151 &sn9c102_probe_ov7630, /* strong detection based on SENSOR ids */
152 &sn9c102_probe_ov7660, /* strong detection based on SENSOR ids */
153 &sn9c102_probe_tas5110c1b, /* detection based on USB pid/vid */
Luca Risoliaf423b9a2007-03-26 16:12:04 -0300154 &sn9c102_probe_tas5110d, /* detection based on USB pid/vid */
Luca Risoliaf327ebb2007-01-08 10:43:56 -0300155 &sn9c102_probe_tas5130d1b, /* detection based on USB pid/vid */
Luca Risoliaf327ebb2007-01-08 10:43:56 -0300156};
157
158#endif /* _SN9C102_DEVTABLE_H_ */