Commit | Line | Data |
---|---|---|
7ce08c93 LR |
1 | /*************************************************************************** |
2 | * API for image sensors connected to ET61X[12]51 PC Camera Controllers * | |
3 | * * | |
4 | * Copyright (C) 2006 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 _ET61X251_SENSOR_H_ | |
22 | #define _ET61X251_SENSOR_H_ | |
23 | ||
24 | #include <linux/usb.h> | |
25 | #include <linux/videodev.h> | |
26 | #include <linux/device.h> | |
27 | #include <linux/stddef.h> | |
28 | #include <linux/errno.h> | |
29 | #include <asm/types.h> | |
30 | ||
31 | struct et61x251_device; | |
32 | struct et61x251_sensor; | |
33 | ||
34 | /*****************************************************************************/ | |
35 | ||
36 | extern int et61x251_probe_tas5130d1b(struct et61x251_device* cam); | |
37 | ||
38 | #define ET61X251_SENSOR_TABLE \ | |
39 | /* Weak detections must go at the end of the list */ \ | |
40 | static int (*et61x251_sensor_table[])(struct et61x251_device*) = { \ | |
41 | &et61x251_probe_tas5130d1b, \ | |
42 | NULL, \ | |
43 | }; | |
44 | ||
ccad7789 LR |
45 | extern struct et61x251_device* |
46 | et61x251_match_id(struct et61x251_device* cam, const struct usb_device_id *id); | |
47 | ||
7ce08c93 LR |
48 | extern void |
49 | et61x251_attach_sensor(struct et61x251_device* cam, | |
d56410e0 | 50 | struct et61x251_sensor* sensor); |
7ce08c93 LR |
51 | |
52 | /*****************************************************************************/ | |
53 | ||
54 | extern int et61x251_write_reg(struct et61x251_device*, u8 value, u16 index); | |
55 | extern int et61x251_read_reg(struct et61x251_device*, u16 index); | |
56 | extern int et61x251_i2c_write(struct et61x251_device*, u8 address, u8 value); | |
57 | extern int et61x251_i2c_read(struct et61x251_device*, u8 address); | |
58 | extern int et61x251_i2c_try_write(struct et61x251_device*, | |
d56410e0 MCC |
59 | struct et61x251_sensor*, u8 address, |
60 | u8 value); | |
7ce08c93 | 61 | extern int et61x251_i2c_try_read(struct et61x251_device*, |
d56410e0 | 62 | struct et61x251_sensor*, u8 address); |
7ce08c93 | 63 | extern int et61x251_i2c_raw_write(struct et61x251_device*, u8 n, u8 data1, |
d56410e0 MCC |
64 | u8 data2, u8 data3, u8 data4, u8 data5, |
65 | u8 data6, u8 data7, u8 data8, u8 address); | |
7ce08c93 LR |
66 | |
67 | /*****************************************************************************/ | |
68 | ||
69 | enum et61x251_i2c_sysfs_ops { | |
70 | ET61X251_I2C_READ = 0x01, | |
71 | ET61X251_I2C_WRITE = 0x02, | |
72 | }; | |
73 | ||
74 | enum et61x251_i2c_interface { | |
75 | ET61X251_I2C_2WIRES, | |
76 | ET61X251_I2C_3WIRES, | |
77 | }; | |
78 | ||
79 | /* Repeat start condition when RSTA is high */ | |
80 | enum et61x251_i2c_rsta { | |
81 | ET61X251_I2C_RSTA_STOP = 0x00, /* stop then start */ | |
82 | ET61X251_I2C_RSTA_REPEAT = 0x01, /* repeat start */ | |
83 | }; | |
84 | ||
85 | #define ET61X251_MAX_CTRLS V4L2_CID_LASTP1-V4L2_CID_BASE+10 | |
86 | ||
87 | struct et61x251_sensor { | |
88 | char name[32]; | |
89 | ||
90 | enum et61x251_i2c_sysfs_ops sysfs_ops; | |
91 | ||
92 | enum et61x251_i2c_interface interface; | |
93 | u8 i2c_slave_id; | |
94 | enum et61x251_i2c_rsta rsta; | |
95 | struct v4l2_rect active_pixel; /* left and top define FVSX and FVSY */ | |
96 | ||
97 | struct v4l2_queryctrl qctrl[ET61X251_MAX_CTRLS]; | |
98 | struct v4l2_cropcap cropcap; | |
99 | struct v4l2_pix_format pix_format; | |
100 | ||
101 | int (*init)(struct et61x251_device* cam); | |
102 | int (*get_ctrl)(struct et61x251_device* cam, | |
d56410e0 | 103 | struct v4l2_control* ctrl); |
7ce08c93 | 104 | int (*set_ctrl)(struct et61x251_device* cam, |
d56410e0 | 105 | const struct v4l2_control* ctrl); |
7ce08c93 | 106 | int (*set_crop)(struct et61x251_device* cam, |
d56410e0 | 107 | const struct v4l2_rect* rect); |
7ce08c93 | 108 | int (*set_pix_format)(struct et61x251_device* cam, |
d56410e0 | 109 | const struct v4l2_pix_format* pix); |
7ce08c93 | 110 | |
7ce08c93 LR |
111 | /* Private */ |
112 | struct v4l2_queryctrl _qctrl[ET61X251_MAX_CTRLS]; | |
113 | struct v4l2_rect _rect; | |
114 | }; | |
115 | ||
116 | #endif /* _ET61X251_SENSOR_H_ */ |