Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
media
usb
gspca
m5602
m5602_mt9m111.h
Go to the documentation of this file.
1
/*
2
* Driver for the mt9m111 sensor
3
*
4
* Copyright (C) 2008 Erik Andrén
5
* Copyright (C) 2007 Ilyes Gouta. Based on the m5603x Linux Driver Project.
6
* Copyright (C) 2005 m5603x Linux Driver Project <
[email protected]
>
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
* Some defines taken from the mt9m111 sensor driver
14
* Copyright (C) 2008, Robert Jarzmik <
[email protected]
>
15
*
16
* This program is free software; you can redistribute it and/or
17
* modify it under the terms of the GNU General Public License as
18
* published by the Free Software Foundation, version 2.
19
*
20
*/
21
22
#ifndef M5602_MT9M111_H_
23
#define M5602_MT9M111_H_
24
25
#include "
m5602_sensor.h
"
26
27
/*****************************************************************************/
28
29
#define MT9M111_SC_CHIPVER 0x00
30
#define MT9M111_SC_ROWSTART 0x01
31
#define MT9M111_SC_COLSTART 0x02
32
#define MT9M111_SC_WINDOW_HEIGHT 0x03
33
#define MT9M111_SC_WINDOW_WIDTH 0x04
34
#define MT9M111_SC_HBLANK_CONTEXT_B 0x05
35
#define MT9M111_SC_VBLANK_CONTEXT_B 0x06
36
#define MT9M111_SC_HBLANK_CONTEXT_A 0x07
37
#define MT9M111_SC_VBLANK_CONTEXT_A 0x08
38
#define MT9M111_SC_SHUTTER_WIDTH 0x09
39
#define MT9M111_SC_ROW_SPEED 0x0a
40
#define MT9M111_SC_EXTRA_DELAY 0x0b
41
#define MT9M111_SC_SHUTTER_DELAY 0x0c
42
#define MT9M111_SC_RESET 0x0d
43
#define MT9M111_SC_R_MODE_CONTEXT_B 0x20
44
#define MT9M111_SC_R_MODE_CONTEXT_A 0x21
45
#define MT9M111_SC_FLASH_CONTROL 0x23
46
#define MT9M111_SC_GREEN_1_GAIN 0x2b
47
#define MT9M111_SC_BLUE_GAIN 0x2c
48
#define MT9M111_SC_RED_GAIN 0x2d
49
#define MT9M111_SC_GREEN_2_GAIN 0x2e
50
#define MT9M111_SC_GLOBAL_GAIN 0x2f
51
52
#define MT9M111_CONTEXT_CONTROL 0xc8
53
#define MT9M111_PAGE_MAP 0xf0
54
#define MT9M111_BYTEWISE_ADDRESS 0xf1
55
56
#define MT9M111_CP_OPERATING_MODE_CTL 0x06
57
#define MT9M111_CP_LUMA_OFFSET 0x34
58
#define MT9M111_CP_LUMA_CLIP 0x35
59
#define MT9M111_CP_OUTPUT_FORMAT_CTL2_CONTEXT_A 0x3a
60
#define MT9M111_CP_LENS_CORRECTION_1 0x3b
61
#define MT9M111_CP_DEFECT_CORR_CONTEXT_A 0x4c
62
#define MT9M111_CP_DEFECT_CORR_CONTEXT_B 0x4d
63
#define MT9M111_CP_OUTPUT_FORMAT_CTL2_CONTEXT_B 0x9b
64
#define MT9M111_CP_GLOBAL_CLK_CONTROL 0xb3
65
66
#define MT9M111_CC_AUTO_EXPOSURE_PARAMETER_18 0x65
67
#define MT9M111_CC_AWB_PARAMETER_7 0x28
68
69
#define MT9M111_SENSOR_CORE 0x00
70
#define MT9M111_COLORPIPE 0x01
71
#define MT9M111_CAMERA_CONTROL 0x02
72
73
#define MT9M111_RESET (1 << 0)
74
#define MT9M111_RESTART (1 << 1)
75
#define MT9M111_ANALOG_STANDBY (1 << 2)
76
#define MT9M111_CHIP_ENABLE (1 << 3)
77
#define MT9M111_CHIP_DISABLE (0 << 3)
78
#define MT9M111_OUTPUT_DISABLE (1 << 4)
79
#define MT9M111_SHOW_BAD_FRAMES (1 << 0)
80
#define MT9M111_RESTART_BAD_FRAMES (1 << 1)
81
#define MT9M111_SYNCHRONIZE_CHANGES (1 << 7)
82
83
#define MT9M111_RMB_OVER_SIZED (1 << 0)
84
#define MT9M111_RMB_MIRROR_ROWS (1 << 0)
85
#define MT9M111_RMB_MIRROR_COLS (1 << 1)
86
#define MT9M111_RMB_ROW_SKIP_2X (1 << 2)
87
#define MT9M111_RMB_COLUMN_SKIP_2X (1 << 3)
88
#define MT9M111_RMB_ROW_SKIP_4X (1 << 4)
89
#define MT9M111_RMB_COLUMN_SKIP_4X (1 << 5)
90
91
#define MT9M111_COLOR_MATRIX_BYPASS (1 << 4)
92
#define MT9M111_SEL_CONTEXT_B (1 << 3)
93
94
#define MT9M111_TRISTATE_PIN_IN_STANDBY (1 << 1)
95
#define MT9M111_SOC_SOFT_STANDBY (1 << 0)
96
97
#define MT9M111_2D_DEFECT_CORRECTION_ENABLE (1 << 0)
98
99
#define INITIAL_MAX_GAIN 64
100
#define MT9M111_DEFAULT_GAIN 283
101
#define MT9M111_GREEN_GAIN_DEFAULT 0x20
102
#define MT9M111_BLUE_GAIN_DEFAULT 0x20
103
#define MT9M111_RED_GAIN_DEFAULT 0x20
104
105
/*****************************************************************************/
106
107
/* Kernel module parameters */
108
extern
int
force_sensor
;
109
extern
bool
dump_sensor
;
110
111
int
mt9m111_probe
(
struct
sd
*
sd
);
112
int
mt9m111_init
(
struct
sd
*
sd
);
113
int
mt9m111_start
(
struct
sd
*
sd
);
114
void
mt9m111_disconnect
(
struct
sd
*
sd
);
115
116
static
const
struct
m5602_sensor
mt9m111
= {
117
.name =
"MT9M111"
,
118
119
.i2c_slave_id = 0xba,
120
.i2c_regW = 2,
121
122
.probe =
mt9m111_probe
,
123
.init =
mt9m111_init
,
124
.disconnect =
mt9m111_disconnect
,
125
.start =
mt9m111_start
,
126
};
127
128
static
const
unsigned
char
preinit_mt9m111[][4] = {
129
{
BRIDGE
,
M5602_XB_MCU_CLK_DIV
, 0x02, 0x00},
130
{
BRIDGE
,
M5602_XB_MCU_CLK_CTRL
, 0xb0, 0x00},
131
{
BRIDGE
,
M5602_XB_SEN_CLK_DIV
, 0x00, 0x00},
132
{
BRIDGE
,
M5602_XB_SEN_CLK_CTRL
, 0xb0, 0x00},
133
{
BRIDGE
,
M5602_XB_SENSOR_TYPE
, 0x0d, 0x00},
134
{
BRIDGE
,
M5602_XB_SENSOR_CTRL
, 0x00, 0x00},
135
{
BRIDGE
,
M5602_XB_ADC_CTRL
, 0xc0, 0x00},
136
{
BRIDGE
,
M5602_XB_SENSOR_TYPE
, 0x09, 0x00},
137
138
{
SENSOR
,
MT9M111_PAGE_MAP
, 0x00, 0x00},
139
{
SENSOR
,
MT9M111_SC_RESET
,
140
MT9M111_RESET
|
141
MT9M111_RESTART
|
142
MT9M111_ANALOG_STANDBY
|
143
MT9M111_CHIP_DISABLE
,
144
MT9M111_SHOW_BAD_FRAMES
|
145
MT9M111_RESTART_BAD_FRAMES
|
146
MT9M111_SYNCHRONIZE_CHANGES
},
147
148
{
BRIDGE
,
M5602_XB_GPIO_DIR
, 0x05, 0x00},
149
{
BRIDGE
,
M5602_XB_GPIO_DAT
, 0x04, 0x00},
150
{
BRIDGE
,
M5602_XB_GPIO_EN_H
, 0x3e, 0x00},
151
{
BRIDGE
,
M5602_XB_GPIO_DIR_H
, 0x3e, 0x00},
152
{
BRIDGE
,
M5602_XB_GPIO_DAT_H
, 0x02, 0x00},
153
{
BRIDGE
,
M5602_XB_GPIO_EN_L
, 0xff, 0x00},
154
{
BRIDGE
,
M5602_XB_GPIO_DIR_L
, 0xff, 0x00},
155
{
BRIDGE
,
M5602_XB_GPIO_DAT_L
, 0x00, 0x00},
156
157
{
BRIDGE
,
M5602_XB_SEN_CLK_DIV
, 0x00, 0x00},
158
{
BRIDGE
,
M5602_XB_SEN_CLK_CTRL
, 0xb0, 0x00},
159
{
BRIDGE
,
M5602_XB_GPIO_DIR
, 0x07, 0x00},
160
{
BRIDGE
,
M5602_XB_GPIO_DAT
, 0x0b, 0x00},
161
{
BRIDGE
,
M5602_XB_GPIO_EN_H
, 0x06, 0x00},
162
{
BRIDGE
,
M5602_XB_GPIO_EN_L
, 0x00, 0x00},
163
164
{
BRIDGE
,
M5602_XB_I2C_CLK_DIV
, 0x0a, 0x00}
165
};
166
167
static
const
unsigned
char
init_mt9m111[][4] = {
168
{
BRIDGE
,
M5602_XB_MCU_CLK_DIV
, 0x02, 0x00},
169
{
BRIDGE
,
M5602_XB_MCU_CLK_CTRL
, 0xb0, 0x00},
170
{
BRIDGE
,
M5602_XB_SEN_CLK_DIV
, 0x00, 0x00},
171
{
BRIDGE
,
M5602_XB_SEN_CLK_CTRL
, 0xb0, 0x00},
172
{
BRIDGE
,
M5602_XB_ADC_CTRL
, 0xc0, 0x00},
173
{
BRIDGE
,
M5602_XB_SENSOR_TYPE
, 0x09, 0x00},
174
175
{
BRIDGE
,
M5602_XB_GPIO_EN_H
, 0x06, 0x00},
176
{
BRIDGE
,
M5602_XB_GPIO_EN_L
, 0x00, 0x00},
177
{
BRIDGE
,
M5602_XB_GPIO_DAT
, 0x04, 0x00},
178
{
BRIDGE
,
M5602_XB_GPIO_DIR_H
, 0x3e, 0x00},
179
{
BRIDGE
,
M5602_XB_GPIO_DIR_L
, 0xff, 0x00},
180
{
BRIDGE
,
M5602_XB_GPIO_DAT_H
, 0x02, 0x00},
181
{
BRIDGE
,
M5602_XB_GPIO_DAT_L
, 0x00, 0x00},
182
{
BRIDGE
,
M5602_XB_GPIO_DIR
, 0x07, 0x00},
183
{
BRIDGE
,
M5602_XB_GPIO_DAT
, 0x0b, 0x00},
184
{
BRIDGE
,
M5602_XB_I2C_CLK_DIV
, 0x0a, 0x00},
185
186
{
SENSOR
,
MT9M111_SC_RESET
, 0x00, 0x29},
187
{
SENSOR
,
MT9M111_PAGE_MAP
, 0x00, 0x00},
188
{
SENSOR
,
MT9M111_SC_RESET
, 0x00, 0x08},
189
{
SENSOR
,
MT9M111_PAGE_MAP
, 0x00, 0x01},
190
{
SENSOR
,
MT9M111_CP_OPERATING_MODE_CTL
, 0x00,
191
MT9M111_CP_OPERATING_MODE_CTL},
192
{
SENSOR
,
MT9M111_CP_LENS_CORRECTION_1
, 0x04, 0x2a},
193
{
SENSOR
,
MT9M111_CP_DEFECT_CORR_CONTEXT_A
, 0x00,
194
MT9M111_2D_DEFECT_CORRECTION_ENABLE
},
195
{
SENSOR
,
MT9M111_CP_DEFECT_CORR_CONTEXT_B
, 0x00,
196
MT9M111_2D_DEFECT_CORRECTION_ENABLE
},
197
{
SENSOR
,
MT9M111_CP_LUMA_OFFSET
, 0x00, 0x00},
198
{
SENSOR
,
MT9M111_CP_LUMA_CLIP
, 0xff, 0x00},
199
{
SENSOR
,
MT9M111_CP_OUTPUT_FORMAT_CTL2_CONTEXT_A
, 0x14, 0x00},
200
{
SENSOR
,
MT9M111_CP_OUTPUT_FORMAT_CTL2_CONTEXT_B
, 0x14, 0x00},
201
{
SENSOR
, 0xcd, 0x00, 0x0e},
202
{
SENSOR
, 0xd0, 0x00, 0x40},
203
204
{
SENSOR
,
MT9M111_PAGE_MAP
, 0x00, 0x02},
205
{
SENSOR
,
MT9M111_CC_AUTO_EXPOSURE_PARAMETER_18
, 0x00, 0x00},
206
{
SENSOR
,
MT9M111_CC_AWB_PARAMETER_7
, 0xef, 0x03},
207
208
{
SENSOR
,
MT9M111_PAGE_MAP
, 0x00, 0x00},
209
{
SENSOR
, 0x33, 0x03, 0x49},
210
{
SENSOR
, 0x34, 0xc0, 0x19},
211
{
SENSOR
, 0x3f, 0x20, 0x20},
212
{
SENSOR
, 0x40, 0x20, 0x20},
213
{
SENSOR
, 0x5a, 0xc0, 0x0a},
214
{
SENSOR
, 0x70, 0x7b, 0x0a},
215
{
SENSOR
, 0x71, 0xff, 0x00},
216
{
SENSOR
, 0x72, 0x19, 0x0e},
217
{
SENSOR
, 0x73, 0x18, 0x0f},
218
{
SENSOR
, 0x74, 0x57, 0x32},
219
{
SENSOR
, 0x75, 0x56, 0x34},
220
{
SENSOR
, 0x76, 0x73, 0x35},
221
{
SENSOR
, 0x77, 0x30, 0x12},
222
{
SENSOR
, 0x78, 0x79, 0x02},
223
{
SENSOR
, 0x79, 0x75, 0x06},
224
{
SENSOR
, 0x7a, 0x77, 0x0a},
225
{
SENSOR
, 0x7b, 0x78, 0x09},
226
{
SENSOR
, 0x7c, 0x7d, 0x06},
227
{
SENSOR
, 0x7d, 0x31, 0x10},
228
{
SENSOR
, 0x7e, 0x00, 0x7e},
229
{
SENSOR
, 0x80, 0x59, 0x04},
230
{
SENSOR
, 0x81, 0x59, 0x04},
231
{
SENSOR
, 0x82, 0x57, 0x0a},
232
{
SENSOR
, 0x83, 0x58, 0x0b},
233
{
SENSOR
, 0x84, 0x47, 0x0c},
234
{
SENSOR
, 0x85, 0x48, 0x0e},
235
{
SENSOR
, 0x86, 0x5b, 0x02},
236
{
SENSOR
, 0x87, 0x00, 0x5c},
237
{
SENSOR
,
MT9M111_CONTEXT_CONTROL
, 0x00,
MT9M111_SEL_CONTEXT_B
},
238
{
SENSOR
, 0x60, 0x00, 0x80},
239
{
SENSOR
, 0x61, 0x00, 0x00},
240
{
SENSOR
, 0x62, 0x00, 0x00},
241
{
SENSOR
, 0x63, 0x00, 0x00},
242
{
SENSOR
, 0x64, 0x00, 0x00},
243
244
{
SENSOR
,
MT9M111_SC_ROWSTART
, 0x00, 0x0d},
/* 13 */
245
{
SENSOR
,
MT9M111_SC_COLSTART
, 0x00, 0x12},
/* 18 */
246
{
SENSOR
,
MT9M111_SC_WINDOW_HEIGHT
, 0x04, 0x00},
/* 1024 */
247
{
SENSOR
,
MT9M111_SC_WINDOW_WIDTH
, 0x05, 0x10},
/* 1296 */
248
{
SENSOR
,
MT9M111_SC_HBLANK_CONTEXT_B
, 0x01, 0x60},
/* 352 */
249
{
SENSOR
,
MT9M111_SC_VBLANK_CONTEXT_B
, 0x00, 0x11},
/* 17 */
250
{
SENSOR
,
MT9M111_SC_HBLANK_CONTEXT_A
, 0x01, 0x60},
/* 352 */
251
{
SENSOR
,
MT9M111_SC_VBLANK_CONTEXT_A
, 0x00, 0x11},
/* 17 */
252
{
SENSOR
,
MT9M111_SC_R_MODE_CONTEXT_A
, 0x01, 0x0f},
/* 271 */
253
{
SENSOR
, 0x30, 0x04, 0x00},
254
/* Set number of blank rows chosen to 400 */
255
{
SENSOR
,
MT9M111_SC_SHUTTER_WIDTH
, 0x01, 0x90},
256
};
257
258
static
const
unsigned
char
start_mt9m111[][4] = {
259
{
BRIDGE
,
M5602_XB_SEN_CLK_DIV
, 0x06, 0x00},
260
{
BRIDGE
,
M5602_XB_SEN_CLK_CTRL
, 0xb0, 0x00},
261
{
BRIDGE
,
M5602_XB_ADC_CTRL
, 0xc0, 0x00},
262
{
BRIDGE
,
M5602_XB_SENSOR_TYPE
, 0x09, 0x00},
263
{
BRIDGE
,
M5602_XB_LINE_OF_FRAME_H
, 0x81, 0x00},
264
{
BRIDGE
,
M5602_XB_PIX_OF_LINE_H
, 0x82, 0x00},
265
{
BRIDGE
,
M5602_XB_SIG_INI
, 0x01, 0x00},
266
{
BRIDGE
,
M5602_XB_VSYNC_PARA
, 0x00, 0x00},
267
{
BRIDGE
,
M5602_XB_VSYNC_PARA
, 0x00, 0x00},
268
{
BRIDGE
,
M5602_XB_VSYNC_PARA
, 0x00, 0x00},
269
{
BRIDGE
,
M5602_XB_VSYNC_PARA
, 0x00, 0x00},
270
};
271
#endif
Generated on Thu Jan 10 2013 13:51:48 for Linux Kernel by
1.8.2