3 * @author Phil Mitchell
6 * @brief Common functions and data for the OmniVision OV7670 sensor.
8 * @note Copyright (C) Phil Mitchell
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
32 * @brief Initializes OV7670 Sensor Registers
34 * @param dev Pointer to the device
36 * @return Zero (success) or negative (USB-error value)
39 int ov7670_initialise(struct usb_microdia
*dev
)
48 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
49 OV7670_CTL_COM7
, dev
->sensor_flags
, buf
);
53 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
54 OV7670_CTL_CLKRC
, dev
->sensor_flags
, buf
);
58 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
59 OV7670_CTL_TSLB
, dev
->sensor_flags
, buf
);
63 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
64 OV7670_CTL_COM7
, dev
->sensor_flags
, buf
);
68 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
69 OV7670_CTL_HREF
, dev
->sensor_flags
, buf
);
73 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
74 OV7670_CTL_VREF
, dev
->sensor_flags
, buf
);
78 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
79 OV7670_CTL_COM3
, dev
->sensor_flags
, buf
);
83 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
84 OV7670_CTL_COM14
, dev
->sensor_flags
, buf
);
88 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
89 OV7670_CTL_SCALING_XSC
, dev
->sensor_flags
, buf
);
93 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
94 OV7670_CTL_SCALING_YSC
, dev
->sensor_flags
, buf
);
98 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
99 OV7670_CTL_SCALING_DCWCTR
, dev
->sensor_flags
, buf
);
103 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
104 OV7670_CTL_SCALING_PCLK_DIV
, dev
->sensor_flags
, buf
);
108 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
109 OV7670_CTL_SCALING_PCLK_DELAY
, dev
->sensor_flags
, buf
);
113 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
114 OV7670_CTL_COM8
, dev
->sensor_flags
, buf
);
118 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
119 OV7670_CTL_GAIN
, dev
->sensor_flags
, buf
);
123 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
124 OV7670_CTL_AECH
, dev
->sensor_flags
, buf
);
128 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
129 OV7670_CTL_COM4
, dev
->sensor_flags
, buf
);
133 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
134 OV7670_CTL_COM9
, dev
->sensor_flags
, buf
);
138 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
139 OV7670_CTL_BD50MAX
, dev
->sensor_flags
, buf
);
143 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
144 OV7670_CTL_BD60MAX
, dev
->sensor_flags
, buf
);
148 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
149 OV7670_CTL_AEW
, dev
->sensor_flags
, buf
);
153 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
154 OV7670_CTL_AEB
, dev
->sensor_flags
, buf
);
158 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
159 OV7670_CTL_VPT
, dev
->sensor_flags
, buf
);
163 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
164 OV7670_CTL_HAECC1
, dev
->sensor_flags
, buf
);
168 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
169 OV7670_CTL_HAECC2
, dev
->sensor_flags
, buf
);
173 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
174 0xa1, dev
->sensor_flags
, buf
);
178 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
179 OV7670_CTL_HAECC3
, dev
->sensor_flags
, buf
);
183 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
184 OV7670_CTL_HAECC4
, dev
->sensor_flags
, buf
);
188 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
189 OV7670_CTL_HAECC5
, dev
->sensor_flags
, buf
);
193 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
194 OV7670_CTL_HAECC6
, dev
->sensor_flags
, buf
);
198 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
199 OV7670_CTL_HAECC7
, dev
->sensor_flags
, buf
);
203 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
204 OV7670_CTL_COM8
, dev
->sensor_flags
, buf
);
208 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
209 OV7670_CTL_COM5
, dev
->sensor_flags
, buf
);
213 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
214 OV7670_CTL_COM6
, dev
->sensor_flags
, buf
);
218 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
219 0x16, dev
->sensor_flags
, buf
);
223 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
224 OV7670_CTL_MVFP
, dev
->sensor_flags
, buf
);
228 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
229 OV7670_CTL_ADCCTR1
, dev
->sensor_flags
, buf
);
233 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
234 OV7670_CTL_ADCCTR2
, dev
->sensor_flags
, buf
);
238 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
239 0x29, dev
->sensor_flags
, buf
);
243 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
244 OV7670_CTL_CHLF
, dev
->sensor_flags
, buf
);
248 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
249 0x35, dev
->sensor_flags
, buf
);
253 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
254 OV7670_CTL_ADC
, dev
->sensor_flags
, buf
);
258 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
259 OV7670_CTL_ACOM
, dev
->sensor_flags
, buf
);
263 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
264 OV7670_CTL_OFON
, dev
->sensor_flags
, buf
);
268 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
269 OV7670_CTL_COM12
, dev
->sensor_flags
, buf
);
273 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
274 0x4d, dev
->sensor_flags
, buf
);
278 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
279 0x4e, dev
->sensor_flags
, buf
);
283 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
284 OV7670_CTL_GFIX
, dev
->sensor_flags
, buf
);
288 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
289 OV7670_CTL_REG74
, dev
->sensor_flags
, buf
);
293 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
294 0x8d, dev
->sensor_flags
, buf
);
298 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
299 0x8e, dev
->sensor_flags
, buf
);
303 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
304 0x8f, dev
->sensor_flags
, buf
);
308 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
309 0x90, dev
->sensor_flags
, buf
);
313 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
314 0x91, dev
->sensor_flags
, buf
);
318 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
319 0x96, dev
->sensor_flags
, buf
);
323 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
324 0x9a, dev
->sensor_flags
, buf
);
328 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
329 0xb0, dev
->sensor_flags
, buf
);
333 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
334 OV7670_CTL_ABLC1
, dev
->sensor_flags
, buf
);
338 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
339 0xb2, dev
->sensor_flags
, buf
);
343 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
344 OV7670_CTL_THL_ST
, dev
->sensor_flags
, buf
);
348 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
349 0xb8, dev
->sensor_flags
, buf
);
353 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
354 OV7670_CTL_AWBC1
, dev
->sensor_flags
, buf
);
358 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
359 OV7670_CTL_AWBC2
, dev
->sensor_flags
, buf
);
363 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
364 OV7670_CTL_AWBC3
, dev
->sensor_flags
, buf
);
368 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
369 OV7670_CTL_AWBC4
, dev
->sensor_flags
, buf
);
373 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
374 OV7670_CTL_AWBC5
, dev
->sensor_flags
, buf
);
378 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
379 OV7670_CTL_AWBC6
, dev
->sensor_flags
, buf
);
383 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
384 0x59, dev
->sensor_flags
, buf
);
388 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
389 0x5a, dev
->sensor_flags
, buf
);
393 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
394 0x5b, dev
->sensor_flags
, buf
);
398 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
399 0x5c, dev
->sensor_flags
, buf
);
403 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
404 0x5d, dev
->sensor_flags
, buf
);
408 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
409 0x5e, dev
->sensor_flags
, buf
);
413 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
414 OV7670_CTL_AWBCTR3
, dev
->sensor_flags
, buf
);
418 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
419 OV7670_CTL_AWBCTR2
, dev
->sensor_flags
, buf
);
423 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
424 OV7670_CTL_AWBCTR1
, dev
->sensor_flags
, buf
);
428 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
429 OV7670_CTL_AWBCTR0
, dev
->sensor_flags
, buf
);
433 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
434 OV7670_CTL_GGAIN
, dev
->sensor_flags
, buf
);
438 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
439 OV7670_CTL_BLUE
, dev
->sensor_flags
, buf
);
443 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
444 OV7670_CTL_RED
, dev
->sensor_flags
, buf
);
448 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
449 OV7670_CTL_COM8
, dev
->sensor_flags
, buf
);
453 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
454 OV7670_CTL_MTX1
, dev
->sensor_flags
, buf
);
458 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
459 OV7670_CTL_MTX2
, dev
->sensor_flags
, buf
);
463 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
464 OV7670_CTL_MTX3
, dev
->sensor_flags
, buf
);
468 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
469 OV7670_CTL_MTX4
, dev
->sensor_flags
, buf
);
473 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
474 OV7670_CTL_MTX5
, dev
->sensor_flags
, buf
);
478 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
479 OV7670_CTL_MTX6
, dev
->sensor_flags
, buf
);
483 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
484 OV7670_CTL_BRIGHT
, dev
->sensor_flags
, buf
);
488 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
489 OV7670_CTL_CONTRAS
, dev
->sensor_flags
, buf
);
493 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
494 OV7670_CTL_CONTRAS_CENTER
, dev
->sensor_flags
, buf
);
498 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
499 OV7670_CTL_MTXS
, dev
->sensor_flags
, buf
);
503 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
504 OV7670_CTL_COM16
, dev
->sensor_flags
, buf
);
508 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
509 OV7670_CTL_EDGE
, dev
->sensor_flags
, buf
);
513 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
514 OV7670_CTL_REG75
, dev
->sensor_flags
, buf
);
518 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
519 OV7670_CTL_REG76
, dev
->sensor_flags
, buf
);
523 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
524 OV7670_CTL_DNSTH
, dev
->sensor_flags
, buf
);
528 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
529 OV7670_CTL_REG77
, dev
->sensor_flags
, buf
);
533 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
534 OV7670_CTL_COM13
, dev
->sensor_flags
, buf
);
538 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
539 OV7670_CTL_REG4B
, dev
->sensor_flags
, buf
);
543 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
544 OV7670_CTL_SATCTR
, dev
->sensor_flags
, buf
);
548 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
549 OV7670_CTL_COM16
, dev
->sensor_flags
, buf
);
553 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
554 OV7670_CTL_CONTRAS
, dev
->sensor_flags
, buf
);
558 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
559 OV7670_CTL_ARBLM
, dev
->sensor_flags
, buf
);
563 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
564 OV7670_CTL_COM11
, dev
->sensor_flags
, buf
);
568 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
569 OV7670_CTL_NT_CTRL
, dev
->sensor_flags
, buf
);
573 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
574 0x96, dev
->sensor_flags
, buf
);
578 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
579 0x97, dev
->sensor_flags
, buf
);
583 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
584 0x98, dev
->sensor_flags
, buf
);
588 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
589 0x99, dev
->sensor_flags
, buf
);
593 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
594 0x9a, dev
->sensor_flags
, buf
);
598 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
599 0x9b, dev
->sensor_flags
, buf
);
603 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
604 0x9c, dev
->sensor_flags
, buf
);
608 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
609 OV7670_CTL_BD50ST
, dev
->sensor_flags
, buf
);
613 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
614 OV7670_CTL_BD60ST
, dev
->sensor_flags
, buf
);
618 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
619 0x78, dev
->sensor_flags
, buf
);
623 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
624 0x79, dev
->sensor_flags
, buf
);
628 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
629 0xc8, dev
->sensor_flags
, buf
);
633 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
634 0x79, dev
->sensor_flags
, buf
);
638 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
639 0xc8, dev
->sensor_flags
, buf
);
643 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
644 0x79, dev
->sensor_flags
, buf
);
648 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
649 0xc8, dev
->sensor_flags
, buf
);
653 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
654 0x79, dev
->sensor_flags
, buf
);
658 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
659 0xc8, dev
->sensor_flags
, buf
);
663 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
664 0x79, dev
->sensor_flags
, buf
);
668 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
669 0xc8, dev
->sensor_flags
, buf
);
673 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
674 0x79, dev
->sensor_flags
, buf
);
678 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
679 0xc8, dev
->sensor_flags
, buf
);
683 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
684 0x79, dev
->sensor_flags
, buf
);
688 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
689 0xc8, dev
->sensor_flags
, buf
);
693 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
694 0x79, dev
->sensor_flags
, buf
);
698 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
699 0xc8, dev
->sensor_flags
, buf
);
703 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
704 0x79, dev
->sensor_flags
, buf
);
708 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
709 0xc8, dev
->sensor_flags
, buf
);
713 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
714 0x79, dev
->sensor_flags
, buf
);
718 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
719 0xc8, dev
->sensor_flags
, buf
);
723 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
724 0x79, dev
->sensor_flags
, buf
);
728 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
729 0xc8, dev
->sensor_flags
, buf
);
733 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
734 0x79, dev
->sensor_flags
, buf
);
738 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
739 OV7670_CTL_LCC1
, dev
->sensor_flags
, buf
);
743 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
744 OV7670_CTL_LCC2
, dev
->sensor_flags
, buf
);
748 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
749 OV7670_CTL_LCC3
, dev
->sensor_flags
, buf
);
753 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
754 OV7670_CTL_LCC4
, dev
->sensor_flags
, buf
);
758 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
759 OV7670_CTL_LCC5
, dev
->sensor_flags
, buf
);
763 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
764 OV7670_CTL_LCC6
, dev
->sensor_flags
, buf
);
768 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
769 OV7670_CTL_LCC7
, dev
->sensor_flags
, buf
);
773 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
774 OV7670_CTL_HSTART
, dev
->sensor_flags
, buf
);
778 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
779 OV7670_CTL_HSTOP
, dev
->sensor_flags
, buf
);
783 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
784 OV7670_CTL_VSTRT
, dev
->sensor_flags
, buf
);
788 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
789 OV7670_CTL_VSTOP
, dev
->sensor_flags
, buf
);
793 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
794 OV7670_CTL_AWBC4
, dev
->sensor_flags
, buf
);
798 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
799 OV7670_CTL_AWBC5
, dev
->sensor_flags
, buf
);
803 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
804 OV7670_CTL_MTXS
, dev
->sensor_flags
, buf
);
808 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
809 0x59, dev
->sensor_flags
, buf
);
813 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
814 0x5a, dev
->sensor_flags
, buf
);
818 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
819 0x5b, dev
->sensor_flags
, buf
);
823 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
824 0x5c, dev
->sensor_flags
, buf
);
828 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
829 0x5d, dev
->sensor_flags
, buf
);
833 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
834 0x5e, dev
->sensor_flags
, buf
);
838 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
839 OV7670_CTL_LCC3
, dev
->sensor_flags
, buf
);
843 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
844 OV7670_CTL_LCC6
, dev
->sensor_flags
, buf
);
848 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
849 OV7670_CTL_LCC7
, dev
->sensor_flags
, buf
);
853 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
854 OV7670_CTL_HAECC3
, dev
->sensor_flags
, buf
);
858 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
859 OV7670_CTL_HAECC4
, dev
->sensor_flags
, buf
);
863 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
864 OV7670_CTL_AWBC6
, dev
->sensor_flags
, buf
);
868 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
869 OV7670_CTL_MTX3
, dev
->sensor_flags
, buf
);
876 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
877 OV7670_CTL_DBLV
, dev
->sensor_flags
, buf
);
881 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
882 OV7670_CTL_CLKRC
, dev
->sensor_flags
, buf
);
886 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
887 OV7670_CTL_EXHCH
, dev
->sensor_flags
, buf
);
891 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
892 OV7670_CTL_EXHCL
, dev
->sensor_flags
, buf
);
896 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
897 OV7670_CTL_DM_LNL
, dev
->sensor_flags
, buf
);
901 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
902 OV7670_CTL_DM_LNH
, dev
->sensor_flags
, buf
);
906 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
907 OV7670_CTL_COM11
, dev
->sensor_flags
, buf
);
911 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
912 OV7670_CTL_BRIGHT
, dev
->sensor_flags
, buf
);
916 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
917 OV7670_CTL_CONTRAS
, dev
->sensor_flags
, buf
);
924 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
925 OV7670_CTL_MTX1
, dev
->sensor_flags
, buf
);
930 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
931 OV7670_CTL_MTX5
, dev
->sensor_flags
, buf
);
935 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
936 OV7670_CTL_MTXS
, dev
->sensor_flags
, buf
);
943 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
944 OV7670_CTL_MTX1
, dev
->sensor_flags
, buf
);
949 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
950 OV7670_CTL_MTX5
, dev
->sensor_flags
, buf
);
954 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
955 OV7670_CTL_MTXS
, dev
->sensor_flags
, buf
);
959 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
960 OV7670_CTL_EDGE
, dev
->sensor_flags
, buf
);
967 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
968 OV7670_CTL_GAM1
, dev
->sensor_flags
, buf
);
975 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
976 OV7670_CTL_GAM5
, dev
->sensor_flags
, buf
);
983 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
984 OV7670_CTL_GAM9
, dev
->sensor_flags
, buf
);
990 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3,
991 OV7670_CTL_GAM13
, dev
->sensor_flags
, buf
);
995 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
996 OV7670_CTL_SLOP
, dev
->sensor_flags
, buf
);
1000 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1001 OV7670_CTL_COM11
, dev
->sensor_flags
, buf
);
1005 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1006 OV7670_CTL_COM11
, dev
->sensor_flags
, buf
);
1011 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1012 OV7670_CTL_HAECC1
, dev
->sensor_flags
, buf
);
1016 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1017 OV7670_CTL_COM8
, dev
->sensor_flags
, buf
);
1024 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1025 OV7670_CTL_DBLV
, dev
->sensor_flags
, buf
);
1029 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1030 OV7670_CTL_CLKRC
, dev
->sensor_flags
, buf
);
1034 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1035 OV7670_CTL_EXHCH
, dev
->sensor_flags
, buf
);
1039 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1040 OV7670_CTL_EXHCL
, dev
->sensor_flags
, buf
);
1044 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1045 OV7670_CTL_DM_LNL
, dev
->sensor_flags
, buf
);
1049 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1050 OV7670_CTL_DM_LNH
, dev
->sensor_flags
, buf
);
1059 UDIA_ERROR("R/W for sensor register failed. Ret code = %d\n", ret
);
1064 * @brief OV7670 Auto-Flip
1066 * @param dev Pointer to the device
1067 * @param vflip Flag to indicate whether or not Camera is currently flipped
1069 * @return Zero (success) or negative (USB-error value)
1072 int ov7670_auto_flip(struct usb_microdia
*dev
, __u8 vflip
)
1077 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1078 OV7670_CTL_MVFP
, dev
->sensor_flags
, buf
);
1083 buf
[0] = buf
[0] & (0xff ^ OV7670_VFLIP_BIT
);
1085 buf
[0] = buf
[0] | OV7670_VFLIP_BIT
;
1086 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1087 OV7670_CTL_MVFP
, dev
->sensor_flags
, buf
);