18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Driver for the ov7660 sensor
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2009 Erik Andrén
68c2ecf20Sopenharmony_ci * Copyright (C) 2007 Ilyes Gouta. Based on the m5603x Linux Driver Project.
78c2ecf20Sopenharmony_ci * Copyright (C) 2005 m5603x Linux Driver Project <m5602@x3ng.com.br>
88c2ecf20Sopenharmony_ci *
98c2ecf20Sopenharmony_ci * Portions of code to USB interface and ALi driver software,
108c2ecf20Sopenharmony_ci * Copyright (c) 2006 Willem Duinker
118c2ecf20Sopenharmony_ci * v4l2 interface modeled after the V4L2 driver
128c2ecf20Sopenharmony_ci * for SN9C10x PC Camera Controllers
138c2ecf20Sopenharmony_ci */
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci#ifndef M5602_OV7660_H_
168c2ecf20Sopenharmony_ci#define M5602_OV7660_H_
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ci#include "m5602_sensor.h"
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci#define OV7660_GAIN		0x00
218c2ecf20Sopenharmony_ci#define OV7660_BLUE_GAIN	0x01
228c2ecf20Sopenharmony_ci#define OV7660_RED_GAIN		0x02
238c2ecf20Sopenharmony_ci#define OV7660_VREF		0x03
248c2ecf20Sopenharmony_ci#define OV7660_COM1		0x04
258c2ecf20Sopenharmony_ci#define OV7660_BAVE		0x05
268c2ecf20Sopenharmony_ci#define OV7660_GEAVE		0x06
278c2ecf20Sopenharmony_ci#define OV7660_AECHH		0x07
288c2ecf20Sopenharmony_ci#define OV7660_RAVE		0x08
298c2ecf20Sopenharmony_ci#define OV7660_COM2		0x09
308c2ecf20Sopenharmony_ci#define OV7660_PID		0x0a
318c2ecf20Sopenharmony_ci#define OV7660_VER		0x0b
328c2ecf20Sopenharmony_ci#define OV7660_COM3		0x0c
338c2ecf20Sopenharmony_ci#define OV7660_COM4		0x0d
348c2ecf20Sopenharmony_ci#define OV7660_COM5		0x0e
358c2ecf20Sopenharmony_ci#define OV7660_COM6		0x0f
368c2ecf20Sopenharmony_ci#define OV7660_AECH		0x10
378c2ecf20Sopenharmony_ci#define OV7660_CLKRC		0x11
388c2ecf20Sopenharmony_ci#define OV7660_COM7		0x12
398c2ecf20Sopenharmony_ci#define OV7660_COM8		0x13
408c2ecf20Sopenharmony_ci#define OV7660_COM9		0x14
418c2ecf20Sopenharmony_ci#define OV7660_COM10		0x15
428c2ecf20Sopenharmony_ci#define OV7660_RSVD16		0x16
438c2ecf20Sopenharmony_ci#define OV7660_HSTART		0x17
448c2ecf20Sopenharmony_ci#define OV7660_HSTOP		0x18
458c2ecf20Sopenharmony_ci#define OV7660_VSTART		0x19
468c2ecf20Sopenharmony_ci#define OV7660_VSTOP		0x1a
478c2ecf20Sopenharmony_ci#define OV7660_PSHFT		0x1b
488c2ecf20Sopenharmony_ci#define OV7660_MIDH		0x1c
498c2ecf20Sopenharmony_ci#define OV7660_MIDL		0x1d
508c2ecf20Sopenharmony_ci#define OV7660_MVFP		0x1e
518c2ecf20Sopenharmony_ci#define OV7660_LAEC		0x1f
528c2ecf20Sopenharmony_ci#define OV7660_BOS		0x20
538c2ecf20Sopenharmony_ci#define OV7660_GBOS		0x21
548c2ecf20Sopenharmony_ci#define OV7660_GROS		0x22
558c2ecf20Sopenharmony_ci#define OV7660_ROS		0x23
568c2ecf20Sopenharmony_ci#define OV7660_AEW		0x24
578c2ecf20Sopenharmony_ci#define OV7660_AEB		0x25
588c2ecf20Sopenharmony_ci#define OV7660_VPT		0x26
598c2ecf20Sopenharmony_ci#define OV7660_BBIAS		0x27
608c2ecf20Sopenharmony_ci#define OV7660_GbBIAS		0x28
618c2ecf20Sopenharmony_ci#define OV7660_RSVD29		0x29
628c2ecf20Sopenharmony_ci#define OV7660_RBIAS		0x2c
638c2ecf20Sopenharmony_ci#define OV7660_HREF		0x32
648c2ecf20Sopenharmony_ci#define OV7660_ADC		0x37
658c2ecf20Sopenharmony_ci#define OV7660_OFON		0x39
668c2ecf20Sopenharmony_ci#define OV7660_TSLB		0x3a
678c2ecf20Sopenharmony_ci#define OV7660_COM12		0x3c
688c2ecf20Sopenharmony_ci#define OV7660_COM13		0x3d
698c2ecf20Sopenharmony_ci#define OV7660_LCC1		0x62
708c2ecf20Sopenharmony_ci#define OV7660_LCC2		0x63
718c2ecf20Sopenharmony_ci#define OV7660_LCC3		0x64
728c2ecf20Sopenharmony_ci#define OV7660_LCC4		0x65
738c2ecf20Sopenharmony_ci#define OV7660_LCC5		0x66
748c2ecf20Sopenharmony_ci#define OV7660_HV		0x69
758c2ecf20Sopenharmony_ci#define OV7660_RSVDA1		0xa1
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ci#define OV7660_DEFAULT_GAIN		0x0e
788c2ecf20Sopenharmony_ci#define OV7660_DEFAULT_RED_GAIN		0x80
798c2ecf20Sopenharmony_ci#define OV7660_DEFAULT_BLUE_GAIN	0x80
808c2ecf20Sopenharmony_ci#define OV7660_DEFAULT_SATURATION	0x00
818c2ecf20Sopenharmony_ci#define OV7660_DEFAULT_EXPOSURE		0x20
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_ci/* Kernel module parameters */
848c2ecf20Sopenharmony_ciextern int force_sensor;
858c2ecf20Sopenharmony_ciextern bool dump_sensor;
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ciint ov7660_probe(struct sd *sd);
888c2ecf20Sopenharmony_ciint ov7660_init(struct sd *sd);
898c2ecf20Sopenharmony_ciint ov7660_init(struct sd *sd);
908c2ecf20Sopenharmony_ciint ov7660_init_controls(struct sd *sd);
918c2ecf20Sopenharmony_ciint ov7660_start(struct sd *sd);
928c2ecf20Sopenharmony_ciint ov7660_stop(struct sd *sd);
938c2ecf20Sopenharmony_civoid ov7660_disconnect(struct sd *sd);
948c2ecf20Sopenharmony_ci
958c2ecf20Sopenharmony_cistatic const struct m5602_sensor ov7660 = {
968c2ecf20Sopenharmony_ci	.name = "ov7660",
978c2ecf20Sopenharmony_ci	.i2c_slave_id = 0x42,
988c2ecf20Sopenharmony_ci	.i2c_regW = 1,
998c2ecf20Sopenharmony_ci	.probe = ov7660_probe,
1008c2ecf20Sopenharmony_ci	.init = ov7660_init,
1018c2ecf20Sopenharmony_ci	.init_controls = ov7660_init_controls,
1028c2ecf20Sopenharmony_ci	.start = ov7660_start,
1038c2ecf20Sopenharmony_ci	.stop = ov7660_stop,
1048c2ecf20Sopenharmony_ci	.disconnect = ov7660_disconnect,
1058c2ecf20Sopenharmony_ci};
1068c2ecf20Sopenharmony_ci#endif
107