• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/drivers/media/video/gspca/m5602/
1/*
2 * Driver for the ov7660 sensor
3 *
4 * Copyright (C) 2009 Erik Andr��n
5 * Copyright (C) 2007 Ilyes Gouta. Based on the m5603x Linux Driver Project.
6 * Copyright (C) 2005 m5603x Linux Driver Project <m5602@x3ng.com.br>
7 *
8 * Portions of code to USB interface and ALi driver software,
9 * Copyright (c) 2006 Willem Duinker
10 * v4l2 interface modeled after the V4L2 driver
11 * for SN9C10x PC Camera Controllers
12 *
13 * This program is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU General Public License as
15 * published by the Free Software Foundation, version 2.
16 *
17 */
18
19#ifndef M5602_OV7660_H_
20#define M5602_OV7660_H_
21
22#include "m5602_sensor.h"
23
24#define OV7660_GAIN		0x00
25#define OV7660_BLUE_GAIN	0x01
26#define OV7660_RED_GAIN		0x02
27#define OV7660_VREF		0x03
28#define OV7660_COM1		0x04
29#define OV7660_BAVE		0x05
30#define OV7660_GEAVE		0x06
31#define OV7660_AECHH		0x07
32#define OV7660_RAVE		0x08
33#define OV7660_COM2		0x09
34#define OV7660_PID		0x0a
35#define OV7660_VER		0x0b
36#define OV7660_COM3		0x0c
37#define OV7660_COM4		0x0d
38#define OV7660_COM5		0x0e
39#define OV7660_COM6		0x0f
40#define OV7660_AECH		0x10
41#define OV7660_CLKRC		0x11
42#define OV7660_COM7		0x12
43#define OV7660_COM8		0x13
44#define OV7660_COM9		0x14
45#define OV7660_COM10		0x15
46#define OV7660_RSVD16		0x16
47#define OV7660_HSTART		0x17
48#define OV7660_HSTOP		0x18
49#define OV7660_VSTART		0x19
50#define OV7660_VSTOP		0x1a
51#define OV7660_PSHFT		0x1b
52#define OV7660_MIDH		0x1c
53#define OV7660_MIDL		0x1d
54#define OV7660_MVFP		0x1e
55#define OV7660_LAEC		0x1f
56#define OV7660_BOS		0x20
57#define OV7660_GBOS		0x21
58#define OV7660_GROS		0x22
59#define OV7660_ROS		0x23
60#define OV7660_AEW		0x24
61#define OV7660_AEB		0x25
62#define OV7660_VPT		0x26
63#define OV7660_BBIAS		0x27
64#define OV7660_GbBIAS		0x28
65#define OV7660_RSVD29		0x29
66#define OV7660_RBIAS		0x2c
67#define OV7660_HREF		0x32
68#define OV7660_ADC		0x37
69#define OV7660_OFON		0x39
70#define OV7660_TSLB		0x3a
71#define OV7660_COM12		0x3c
72#define OV7660_COM13		0x3d
73#define OV7660_LCC1		0x62
74#define OV7660_LCC2		0x63
75#define OV7660_LCC3		0x64
76#define OV7660_LCC4		0x65
77#define OV7660_LCC5		0x66
78#define OV7660_HV		0x69
79#define OV7660_RSVDA1		0xa1
80
81#define OV7660_DEFAULT_GAIN		0x0e
82#define OV7660_DEFAULT_RED_GAIN		0x80
83#define OV7660_DEFAULT_BLUE_GAIN 	0x80
84#define OV7660_DEFAULT_SATURATION	0x00
85#define OV7660_DEFAULT_EXPOSURE		0x20
86
87/* Kernel module parameters */
88extern int force_sensor;
89extern int dump_sensor;
90
91int ov7660_probe(struct sd *sd);
92int ov7660_init(struct sd *sd);
93int ov7660_start(struct sd *sd);
94int ov7660_stop(struct sd *sd);
95void ov7660_disconnect(struct sd *sd);
96
97static const struct m5602_sensor ov7660 = {
98	.name = "ov7660",
99	.i2c_slave_id = 0x42,
100	.i2c_regW = 1,
101	.probe = ov7660_probe,
102	.init = ov7660_init,
103	.start = ov7660_start,
104	.stop = ov7660_stop,
105	.disconnect = ov7660_disconnect,
106};
107
108static const unsigned char preinit_ov7660[][4] =
109{
110	{BRIDGE, M5602_XB_MCU_CLK_DIV, 0x02},
111	{BRIDGE, M5602_XB_MCU_CLK_CTRL, 0xb0},
112	{BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00},
113	{BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
114	{BRIDGE, M5602_XB_ADC_CTRL, 0xc0},
115	{BRIDGE, M5602_XB_SENSOR_TYPE, 0x0d},
116	{BRIDGE, M5602_XB_SENSOR_CTRL, 0x00},
117	{BRIDGE, M5602_XB_GPIO_DIR, 0x03},
118	{BRIDGE, M5602_XB_GPIO_DIR, 0x03},
119	{BRIDGE, M5602_XB_ADC_CTRL, 0xc0},
120	{BRIDGE, M5602_XB_SENSOR_TYPE, 0x0c},
121
122	{SENSOR, OV7660_OFON, 0x0c},
123	{SENSOR, OV7660_COM2, 0x11},
124	{SENSOR, OV7660_COM7, 0x05},
125
126	{BRIDGE, M5602_XB_GPIO_DIR, 0x01},
127	{BRIDGE, M5602_XB_GPIO_DAT, 0x04},
128	{BRIDGE, M5602_XB_GPIO_EN_H, 0x06},
129	{BRIDGE, M5602_XB_GPIO_DIR_H, 0x06},
130	{BRIDGE, M5602_XB_GPIO_DAT_H, 0x00},
131	{BRIDGE, M5602_XB_SEN_CLK_DIV, 0x08},
132	{BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
133	{BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00},
134	{BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
135	{BRIDGE, M5602_XB_ADC_CTRL, 0xc0},
136	{BRIDGE, M5602_XB_SENSOR_TYPE, 0x0c},
137	{BRIDGE, M5602_XB_GPIO_DIR, 0x05},
138	{BRIDGE, M5602_XB_GPIO_DAT, 0x00},
139	{BRIDGE, M5602_XB_GPIO_EN_H, 0x06},
140	{BRIDGE, M5602_XB_GPIO_EN_L, 0x00}
141};
142
143static const unsigned char init_ov7660[][4] =
144{
145	{BRIDGE, M5602_XB_MCU_CLK_DIV, 0x02},
146	{BRIDGE, M5602_XB_MCU_CLK_CTRL, 0xb0},
147	{BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00},
148	{BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
149	{BRIDGE, M5602_XB_ADC_CTRL, 0xc0},
150	{BRIDGE, M5602_XB_SENSOR_TYPE, 0x0d},
151	{BRIDGE, M5602_XB_SENSOR_CTRL, 0x00},
152	{BRIDGE, M5602_XB_GPIO_DIR, 0x01},
153	{BRIDGE, M5602_XB_GPIO_DIR, 0x01},
154	{BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00},
155	{BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
156	{BRIDGE, M5602_XB_ADC_CTRL, 0xc0},
157	{BRIDGE, M5602_XB_SENSOR_TYPE, 0x0c},
158	{BRIDGE, M5602_XB_GPIO_DIR, 0x05},
159	{BRIDGE, M5602_XB_GPIO_DAT, 0x00},
160	{BRIDGE, M5602_XB_GPIO_EN_H, 0x06},
161	{BRIDGE, M5602_XB_GPIO_EN_L, 0x00},
162	{SENSOR, OV7660_COM7, 0x80},
163	{SENSOR, OV7660_CLKRC, 0x80},
164	{SENSOR, OV7660_COM9, 0x4c},
165	{SENSOR, OV7660_OFON, 0x43},
166	{SENSOR, OV7660_COM12, 0x28},
167	{SENSOR, OV7660_COM8, 0x00},
168	{SENSOR, OV7660_COM10, 0x40},
169	{SENSOR, OV7660_HSTART, 0x0c},
170	{SENSOR, OV7660_HSTOP, 0x61},
171	{SENSOR, OV7660_HREF, 0xa4},
172	{SENSOR, OV7660_PSHFT, 0x0b},
173	{SENSOR, OV7660_VSTART, 0x01},
174	{SENSOR, OV7660_VSTOP, 0x7a},
175	{SENSOR, OV7660_VSTOP, 0x00},
176	{SENSOR, OV7660_COM7, 0x05},
177	{SENSOR, OV7660_COM6, 0x42},
178	{SENSOR, OV7660_BBIAS, 0x94},
179	{SENSOR, OV7660_GbBIAS, 0x94},
180	{SENSOR, OV7660_RSVD29, 0x94},
181	{SENSOR, OV7660_RBIAS, 0x94},
182	{SENSOR, OV7660_COM1, 0x00},
183	{SENSOR, OV7660_AECH, 0x00},
184	{SENSOR, OV7660_AECHH, 0x00},
185	{SENSOR, OV7660_ADC, 0x05},
186	{SENSOR, OV7660_COM13, 0x00},
187	{SENSOR, OV7660_RSVDA1, 0x23},
188	{SENSOR, OV7660_TSLB, 0x0d},
189	{SENSOR, OV7660_HV, 0x80},
190	{SENSOR, OV7660_LCC1, 0x00},
191	{SENSOR, OV7660_LCC2, 0x00},
192	{SENSOR, OV7660_LCC3, 0x10},
193	{SENSOR, OV7660_LCC4, 0x40},
194	{SENSOR, OV7660_LCC5, 0x01},
195
196	{SENSOR, OV7660_AECH, 0x20},
197	{SENSOR, OV7660_COM1, 0x00},
198	{SENSOR, OV7660_OFON, 0x0c},
199	{SENSOR, OV7660_COM2, 0x11},
200	{SENSOR, OV7660_COM7, 0x05},
201	{BRIDGE, M5602_XB_GPIO_DIR, 0x01},
202	{BRIDGE, M5602_XB_GPIO_DAT, 0x04},
203	{BRIDGE, M5602_XB_GPIO_EN_H, 0x06},
204	{BRIDGE, M5602_XB_GPIO_DIR_H, 0x06},
205	{BRIDGE, M5602_XB_GPIO_DAT_H, 0x00},
206	{BRIDGE, M5602_XB_SEN_CLK_DIV, 0x08},
207	{BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
208	{BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00},
209	{BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
210	{BRIDGE, M5602_XB_ADC_CTRL, 0xc0},
211	{BRIDGE, M5602_XB_SENSOR_TYPE, 0x0c},
212	{BRIDGE, M5602_XB_GPIO_DIR, 0x05},
213	{BRIDGE, M5602_XB_GPIO_DAT, 0x00},
214	{BRIDGE, M5602_XB_GPIO_EN_H, 0x06},
215	{BRIDGE, M5602_XB_GPIO_EN_L, 0x00},
216	{SENSOR, OV7660_AECH, 0x5f},
217	{SENSOR, OV7660_COM1, 0x03},
218	{SENSOR, OV7660_OFON, 0x0c},
219	{SENSOR, OV7660_COM2, 0x11},
220	{SENSOR, OV7660_COM7, 0x05},
221	{BRIDGE, M5602_XB_GPIO_DIR, 0x01},
222	{BRIDGE, M5602_XB_GPIO_DAT, 0x04},
223	{BRIDGE, M5602_XB_GPIO_EN_H, 0x06},
224	{BRIDGE, M5602_XB_GPIO_DIR_H, 0x06},
225	{BRIDGE, M5602_XB_GPIO_DAT_H, 0x00},
226	{BRIDGE, M5602_XB_SEN_CLK_DIV, 0x08},
227	{BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
228	{BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00},
229	{BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
230	{BRIDGE, M5602_XB_ADC_CTRL, 0xc0},
231	{BRIDGE, M5602_XB_SENSOR_TYPE, 0x0c},
232	{BRIDGE, M5602_XB_GPIO_DIR, 0x05},
233	{BRIDGE, M5602_XB_GPIO_DAT, 0x00},
234	{BRIDGE, M5602_XB_GPIO_EN_H, 0x06},
235	{BRIDGE, M5602_XB_GPIO_EN_L, 0x00},
236
237	{BRIDGE, M5602_XB_SEN_CLK_DIV, 0x06},
238	{BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
239	{BRIDGE, M5602_XB_ADC_CTRL, 0xc0},
240	{BRIDGE, M5602_XB_SENSOR_TYPE, 0x0c},
241	{BRIDGE, M5602_XB_LINE_OF_FRAME_H, 0x81},
242	{BRIDGE, M5602_XB_PIX_OF_LINE_H, 0x82},
243	{BRIDGE, M5602_XB_SIG_INI, 0x01},
244	{BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
245	{BRIDGE, M5602_XB_VSYNC_PARA, 0x08},
246	{BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
247	{BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
248	{BRIDGE, M5602_XB_VSYNC_PARA, 0x01},
249	{BRIDGE, M5602_XB_VSYNC_PARA, 0xec},
250	{BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
251	{BRIDGE, M5602_XB_VSYNC_PARA, 0x00},
252	{BRIDGE, M5602_XB_SIG_INI, 0x00},
253	{BRIDGE, M5602_XB_SIG_INI, 0x02},
254	{BRIDGE, M5602_XB_HSYNC_PARA, 0x00},
255	{BRIDGE, M5602_XB_HSYNC_PARA, 0x27},
256	{BRIDGE, M5602_XB_HSYNC_PARA, 0x02},
257	{BRIDGE, M5602_XB_HSYNC_PARA, 0xa7},
258	{BRIDGE, M5602_XB_SIG_INI, 0x00},
259	{BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00},
260	{BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0},
261};
262
263#endif
264