3 * @author Phil Mitchell
7 * @brief Common functions and data for the OmniVision OV7670 sensor.
9 * @note Copyright (C) Phil Mitchell
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
33 * @brief Initializes OV7670 Sensor Registers
35 * @param dev Pointer to the device
37 * @return Zero (success) or negative (USB-error value)
40 int ov7670_initialise(struct usb_microdia
*dev
)
49 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
50 OV7670_CTL_COM7
, dev
->sensor_flags
, buf
);
54 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
55 OV7670_CTL_CLKRC
, dev
->sensor_flags
, buf
);
59 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
60 OV7670_CTL_TSLB
, dev
->sensor_flags
, buf
);
64 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
65 OV7670_CTL_COM7
, dev
->sensor_flags
, buf
);
69 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
70 OV7670_CTL_HREF
, dev
->sensor_flags
, buf
);
74 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
75 OV7670_CTL_VREF
, dev
->sensor_flags
, buf
);
79 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
80 OV7670_CTL_COM3
, dev
->sensor_flags
, buf
);
84 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
85 OV7670_CTL_COM14
, dev
->sensor_flags
, buf
);
89 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
90 OV7670_CTL_SCALING_XSC
, dev
->sensor_flags
, buf
);
94 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
95 OV7670_CTL_SCALING_YSC
, dev
->sensor_flags
, buf
);
99 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
100 OV7670_CTL_SCALING_DCWCTR
, dev
->sensor_flags
, buf
);
104 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
105 OV7670_CTL_SCALING_PCLK_DIV
, dev
->sensor_flags
, buf
);
109 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
110 OV7670_CTL_SCALING_PCLK_DELAY
, dev
->sensor_flags
, buf
);
114 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
115 OV7670_CTL_COM8
, dev
->sensor_flags
, buf
);
119 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
120 OV7670_CTL_GAIN
, dev
->sensor_flags
, buf
);
124 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
125 OV7670_CTL_AECH
, dev
->sensor_flags
, buf
);
129 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
130 OV7670_CTL_COM4
, dev
->sensor_flags
, buf
);
134 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
135 OV7670_CTL_COM9
, dev
->sensor_flags
, buf
);
139 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
140 OV7670_CTL_BD50MAX
, dev
->sensor_flags
, buf
);
144 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
145 OV7670_CTL_BD60MAX
, dev
->sensor_flags
, buf
);
149 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
150 OV7670_CTL_AEW
, dev
->sensor_flags
, buf
);
154 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
155 OV7670_CTL_AEB
, dev
->sensor_flags
, buf
);
159 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
160 OV7670_CTL_VPT
, dev
->sensor_flags
, buf
);
164 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
165 OV7670_CTL_HAECC1
, dev
->sensor_flags
, buf
);
169 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
170 OV7670_CTL_HAECC2
, dev
->sensor_flags
, buf
);
174 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
175 0xa1, dev
->sensor_flags
, buf
);
179 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
180 OV7670_CTL_HAECC3
, dev
->sensor_flags
, buf
);
184 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
185 OV7670_CTL_HAECC4
, dev
->sensor_flags
, buf
);
189 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
190 OV7670_CTL_HAECC5
, dev
->sensor_flags
, buf
);
194 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
195 OV7670_CTL_HAECC6
, dev
->sensor_flags
, buf
);
199 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
200 OV7670_CTL_HAECC7
, dev
->sensor_flags
, buf
);
204 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
205 OV7670_CTL_COM8
, dev
->sensor_flags
, buf
);
209 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
210 OV7670_CTL_COM5
, dev
->sensor_flags
, buf
);
214 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
215 OV7670_CTL_COM6
, dev
->sensor_flags
, buf
);
219 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
220 0x16, dev
->sensor_flags
, buf
);
224 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
225 OV7670_CTL_MVFP
, dev
->sensor_flags
, buf
);
229 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
230 OV7670_CTL_ADCCTR1
, dev
->sensor_flags
, buf
);
234 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
235 OV7670_CTL_ADCCTR2
, dev
->sensor_flags
, buf
);
239 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
240 0x29, dev
->sensor_flags
, buf
);
244 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
245 OV7670_CTL_CHLF
, dev
->sensor_flags
, buf
);
249 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
250 0x35, dev
->sensor_flags
, buf
);
254 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
255 OV7670_CTL_ADC
, dev
->sensor_flags
, buf
);
259 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
260 OV7670_CTL_ACOM
, dev
->sensor_flags
, buf
);
264 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
265 OV7670_CTL_OFON
, dev
->sensor_flags
, buf
);
269 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
270 OV7670_CTL_COM12
, dev
->sensor_flags
, buf
);
274 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
275 0x4d, dev
->sensor_flags
, buf
);
279 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
280 0x4e, dev
->sensor_flags
, buf
);
284 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
285 OV7670_CTL_GFIX
, dev
->sensor_flags
, buf
);
289 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
290 OV7670_CTL_REG74
, dev
->sensor_flags
, buf
);
294 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
295 0x8d, dev
->sensor_flags
, buf
);
299 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
300 0x8e, dev
->sensor_flags
, buf
);
304 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
305 0x8f, dev
->sensor_flags
, buf
);
309 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
310 0x90, dev
->sensor_flags
, buf
);
314 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
315 0x91, dev
->sensor_flags
, buf
);
319 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
320 0x96, dev
->sensor_flags
, buf
);
324 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
325 0x9a, dev
->sensor_flags
, buf
);
329 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
330 0xb0, dev
->sensor_flags
, buf
);
334 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
335 OV7670_CTL_ABLC1
, dev
->sensor_flags
, buf
);
339 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
340 0xb2, dev
->sensor_flags
, buf
);
344 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
345 OV7670_CTL_THL_ST
, dev
->sensor_flags
, buf
);
349 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
350 0xb8, dev
->sensor_flags
, buf
);
354 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
355 OV7670_CTL_AWBC1
, dev
->sensor_flags
, buf
);
359 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
360 OV7670_CTL_AWBC2
, dev
->sensor_flags
, buf
);
364 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
365 OV7670_CTL_AWBC3
, dev
->sensor_flags
, buf
);
369 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
370 OV7670_CTL_AWBC4
, dev
->sensor_flags
, buf
);
374 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
375 OV7670_CTL_AWBC5
, dev
->sensor_flags
, buf
);
379 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
380 OV7670_CTL_AWBC6
, dev
->sensor_flags
, buf
);
384 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
385 0x59, dev
->sensor_flags
, buf
);
389 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
390 0x5a, dev
->sensor_flags
, buf
);
394 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
395 0x5b, dev
->sensor_flags
, buf
);
399 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
400 0x5c, dev
->sensor_flags
, buf
);
404 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
405 0x5d, dev
->sensor_flags
, buf
);
409 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
410 0x5e, dev
->sensor_flags
, buf
);
414 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
415 OV7670_CTL_AWBCTR3
, dev
->sensor_flags
, buf
);
419 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
420 OV7670_CTL_AWBCTR2
, dev
->sensor_flags
, buf
);
424 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
425 OV7670_CTL_AWBCTR1
, dev
->sensor_flags
, buf
);
429 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
430 OV7670_CTL_AWBCTR0
, dev
->sensor_flags
, buf
);
434 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
435 OV7670_CTL_GGAIN
, dev
->sensor_flags
, buf
);
439 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
440 OV7670_CTL_BLUE
, dev
->sensor_flags
, buf
);
444 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
445 OV7670_CTL_RED
, dev
->sensor_flags
, buf
);
449 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
450 OV7670_CTL_COM8
, dev
->sensor_flags
, buf
);
454 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
455 OV7670_CTL_MTX1
, dev
->sensor_flags
, buf
);
459 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
460 OV7670_CTL_MTX2
, dev
->sensor_flags
, buf
);
464 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
465 OV7670_CTL_MTX3
, dev
->sensor_flags
, buf
);
469 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
470 OV7670_CTL_MTX4
, dev
->sensor_flags
, buf
);
474 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
475 OV7670_CTL_MTX5
, dev
->sensor_flags
, buf
);
479 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
480 OV7670_CTL_MTX6
, dev
->sensor_flags
, buf
);
484 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
485 OV7670_CTL_BRIGHT
, dev
->sensor_flags
, buf
);
489 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
490 OV7670_CTL_CONTRAS
, dev
->sensor_flags
, buf
);
494 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
495 OV7670_CTL_CONTRAS_CENTER
, dev
->sensor_flags
, buf
);
499 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
500 OV7670_CTL_MTXS
, dev
->sensor_flags
, buf
);
504 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
505 OV7670_CTL_COM16
, dev
->sensor_flags
, buf
);
509 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
510 OV7670_CTL_EDGE
, dev
->sensor_flags
, buf
);
514 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
515 OV7670_CTL_REG75
, dev
->sensor_flags
, buf
);
519 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
520 OV7670_CTL_REG76
, dev
->sensor_flags
, buf
);
524 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
525 OV7670_CTL_DNSTH
, dev
->sensor_flags
, buf
);
529 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
530 OV7670_CTL_REG77
, dev
->sensor_flags
, buf
);
534 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
535 OV7670_CTL_COM13
, dev
->sensor_flags
, buf
);
539 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
540 OV7670_CTL_REG4B
, dev
->sensor_flags
, buf
);
544 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
545 OV7670_CTL_SATCTR
, dev
->sensor_flags
, buf
);
549 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
550 OV7670_CTL_COM16
, dev
->sensor_flags
, buf
);
554 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
555 OV7670_CTL_CONTRAS
, dev
->sensor_flags
, buf
);
559 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
560 OV7670_CTL_ARBLM
, dev
->sensor_flags
, buf
);
564 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
565 OV7670_CTL_COM11
, dev
->sensor_flags
, buf
);
569 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
570 OV7670_CTL_NT_CTRL
, dev
->sensor_flags
, buf
);
574 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
575 0x96, dev
->sensor_flags
, buf
);
579 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
580 0x97, dev
->sensor_flags
, buf
);
584 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
585 0x98, dev
->sensor_flags
, buf
);
589 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
590 0x99, dev
->sensor_flags
, buf
);
594 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
595 0x9a, dev
->sensor_flags
, buf
);
599 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
600 0x9b, dev
->sensor_flags
, buf
);
604 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
605 0x9c, dev
->sensor_flags
, buf
);
609 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
610 OV7670_CTL_BD50ST
, dev
->sensor_flags
, buf
);
614 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
615 OV7670_CTL_BD60ST
, dev
->sensor_flags
, buf
);
619 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
620 0x78, dev
->sensor_flags
, buf
);
624 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
625 0x79, dev
->sensor_flags
, buf
);
629 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
630 0xc8, dev
->sensor_flags
, buf
);
634 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
635 0x79, dev
->sensor_flags
, buf
);
639 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
640 0xc8, dev
->sensor_flags
, buf
);
644 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
645 0x79, dev
->sensor_flags
, buf
);
649 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
650 0xc8, dev
->sensor_flags
, buf
);
654 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
655 0x79, dev
->sensor_flags
, buf
);
659 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
660 0xc8, dev
->sensor_flags
, buf
);
664 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
665 0x79, dev
->sensor_flags
, buf
);
669 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
670 0xc8, dev
->sensor_flags
, buf
);
674 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
675 0x79, dev
->sensor_flags
, buf
);
679 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
680 0xc8, dev
->sensor_flags
, buf
);
684 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
685 0x79, dev
->sensor_flags
, buf
);
689 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
690 0xc8, dev
->sensor_flags
, buf
);
694 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
695 0x79, dev
->sensor_flags
, buf
);
699 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
700 0xc8, dev
->sensor_flags
, buf
);
704 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
705 0x79, dev
->sensor_flags
, buf
);
709 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
710 0xc8, dev
->sensor_flags
, buf
);
714 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
715 0x79, dev
->sensor_flags
, buf
);
719 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
720 0xc8, dev
->sensor_flags
, buf
);
724 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
725 0x79, dev
->sensor_flags
, buf
);
729 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
730 0xc8, dev
->sensor_flags
, buf
);
734 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
735 0x79, dev
->sensor_flags
, buf
);
739 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
740 OV7670_CTL_LCC1
, dev
->sensor_flags
, buf
);
744 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
745 OV7670_CTL_LCC2
, dev
->sensor_flags
, buf
);
749 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
750 OV7670_CTL_LCC3
, dev
->sensor_flags
, buf
);
754 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
755 OV7670_CTL_LCC4
, dev
->sensor_flags
, buf
);
759 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
760 OV7670_CTL_LCC5
, dev
->sensor_flags
, buf
);
764 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
765 OV7670_CTL_LCC6
, dev
->sensor_flags
, buf
);
769 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
770 OV7670_CTL_LCC7
, dev
->sensor_flags
, buf
);
774 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
775 OV7670_CTL_HSTART
, dev
->sensor_flags
, buf
);
779 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
780 OV7670_CTL_HSTOP
, dev
->sensor_flags
, buf
);
784 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
785 OV7670_CTL_VSTRT
, dev
->sensor_flags
, buf
);
789 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
790 OV7670_CTL_VSTOP
, dev
->sensor_flags
, buf
);
794 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
795 OV7670_CTL_AWBC4
, dev
->sensor_flags
, buf
);
799 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
800 OV7670_CTL_AWBC5
, dev
->sensor_flags
, buf
);
804 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
805 OV7670_CTL_MTXS
, dev
->sensor_flags
, buf
);
809 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
810 0x59, dev
->sensor_flags
, buf
);
814 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
815 0x5a, dev
->sensor_flags
, buf
);
819 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
820 0x5b, dev
->sensor_flags
, buf
);
824 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
825 0x5c, dev
->sensor_flags
, buf
);
829 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
830 0x5d, dev
->sensor_flags
, buf
);
834 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
835 0x5e, dev
->sensor_flags
, buf
);
839 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
840 OV7670_CTL_LCC3
, dev
->sensor_flags
, buf
);
844 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
845 OV7670_CTL_LCC6
, dev
->sensor_flags
, buf
);
849 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
850 OV7670_CTL_LCC7
, dev
->sensor_flags
, buf
);
854 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
855 OV7670_CTL_HAECC3
, dev
->sensor_flags
, buf
);
859 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
860 OV7670_CTL_HAECC4
, dev
->sensor_flags
, buf
);
864 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
865 OV7670_CTL_AWBC6
, dev
->sensor_flags
, buf
);
869 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
870 OV7670_CTL_MTX3
, dev
->sensor_flags
, buf
);
877 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
878 OV7670_CTL_DBLV
, dev
->sensor_flags
, buf
);
882 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
883 OV7670_CTL_CLKRC
, dev
->sensor_flags
, buf
);
887 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
888 OV7670_CTL_EXHCH
, dev
->sensor_flags
, buf
);
892 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
893 OV7670_CTL_EXHCL
, dev
->sensor_flags
, buf
);
897 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
898 OV7670_CTL_DM_LNL
, dev
->sensor_flags
, buf
);
902 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
903 OV7670_CTL_DM_LNH
, dev
->sensor_flags
, buf
);
907 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
908 OV7670_CTL_COM11
, dev
->sensor_flags
, buf
);
912 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
913 OV7670_CTL_BRIGHT
, dev
->sensor_flags
, buf
);
917 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
918 OV7670_CTL_CONTRAS
, dev
->sensor_flags
, buf
);
925 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
926 OV7670_CTL_MTX1
, dev
->sensor_flags
, buf
);
931 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
932 OV7670_CTL_MTX5
, dev
->sensor_flags
, buf
);
936 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
937 OV7670_CTL_MTXS
, dev
->sensor_flags
, buf
);
944 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
945 OV7670_CTL_MTX1
, dev
->sensor_flags
, buf
);
950 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
951 OV7670_CTL_MTX5
, dev
->sensor_flags
, buf
);
955 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
956 OV7670_CTL_MTXS
, dev
->sensor_flags
, buf
);
960 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
961 OV7670_CTL_EDGE
, dev
->sensor_flags
, buf
);
968 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
969 OV7670_CTL_GAM1
, dev
->sensor_flags
, buf
);
976 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
977 OV7670_CTL_GAM5
, dev
->sensor_flags
, buf
);
984 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
985 OV7670_CTL_GAM9
, dev
->sensor_flags
, buf
);
991 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3,
992 OV7670_CTL_GAM13
, dev
->sensor_flags
, buf
);
996 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
997 OV7670_CTL_SLOP
, dev
->sensor_flags
, buf
);
1001 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1002 OV7670_CTL_COM11
, dev
->sensor_flags
, buf
);
1006 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1007 OV7670_CTL_COM11
, dev
->sensor_flags
, buf
);
1012 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1013 OV7670_CTL_HAECC1
, dev
->sensor_flags
, buf
);
1017 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1018 OV7670_CTL_COM8
, dev
->sensor_flags
, buf
);
1025 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1026 OV7670_CTL_DBLV
, dev
->sensor_flags
, buf
);
1030 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1031 OV7670_CTL_CLKRC
, dev
->sensor_flags
, buf
);
1035 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1036 OV7670_CTL_EXHCH
, dev
->sensor_flags
, buf
);
1040 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1041 OV7670_CTL_EXHCL
, dev
->sensor_flags
, buf
);
1045 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1046 OV7670_CTL_DM_LNL
, dev
->sensor_flags
, buf
);
1050 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1051 OV7670_CTL_DM_LNH
, dev
->sensor_flags
, buf
);
1060 UDIA_ERROR("R/W for sensor register failed. Ret code = %d\n", ret
);
1065 * @brief OV7670 Auto-Flip
1067 * @param dev Pointer to the device
1068 * @param vflip Flag to indicate whether or not Camera is currently flipped
1070 * @return Zero (success) or negative (USB-error value)
1073 int ov7670_auto_flip(struct usb_microdia
*dev
, __u8 vflip
)
1078 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1079 OV7670_CTL_MVFP
, dev
->sensor_flags
, buf
);
1084 buf
[0] = buf
[0] & (0xff ^ OV7670_VFLIP_BIT
);
1086 buf
[0] = buf
[0] | OV7670_VFLIP_BIT
;
1087 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1088 OV7670_CTL_MVFP
, dev
->sensor_flags
, buf
);