162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Driver for the ov7660 sensor
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2009 Erik Andrén
662306a36Sopenharmony_ci * Copyright (C) 2007 Ilyes Gouta. Based on the m5603x Linux Driver Project.
762306a36Sopenharmony_ci * Copyright (C) 2005 m5603x Linux Driver Project <m5602@x3ng.com.br>
862306a36Sopenharmony_ci *
962306a36Sopenharmony_ci * Portions of code to USB interface and ALi driver software,
1062306a36Sopenharmony_ci * Copyright (c) 2006 Willem Duinker
1162306a36Sopenharmony_ci * v4l2 interface modeled after the V4L2 driver
1262306a36Sopenharmony_ci * for SN9C10x PC Camera Controllers
1362306a36Sopenharmony_ci */
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#ifndef M5602_OV7660_H_
1662306a36Sopenharmony_ci#define M5602_OV7660_H_
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci#include "m5602_sensor.h"
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci#define OV7660_GAIN		0x00
2162306a36Sopenharmony_ci#define OV7660_BLUE_GAIN	0x01
2262306a36Sopenharmony_ci#define OV7660_RED_GAIN		0x02
2362306a36Sopenharmony_ci#define OV7660_VREF		0x03
2462306a36Sopenharmony_ci#define OV7660_COM1		0x04
2562306a36Sopenharmony_ci#define OV7660_BAVE		0x05
2662306a36Sopenharmony_ci#define OV7660_GEAVE		0x06
2762306a36Sopenharmony_ci#define OV7660_AECHH		0x07
2862306a36Sopenharmony_ci#define OV7660_RAVE		0x08
2962306a36Sopenharmony_ci#define OV7660_COM2		0x09
3062306a36Sopenharmony_ci#define OV7660_PID		0x0a
3162306a36Sopenharmony_ci#define OV7660_VER		0x0b
3262306a36Sopenharmony_ci#define OV7660_COM3		0x0c
3362306a36Sopenharmony_ci#define OV7660_COM4		0x0d
3462306a36Sopenharmony_ci#define OV7660_COM5		0x0e
3562306a36Sopenharmony_ci#define OV7660_COM6		0x0f
3662306a36Sopenharmony_ci#define OV7660_AECH		0x10
3762306a36Sopenharmony_ci#define OV7660_CLKRC		0x11
3862306a36Sopenharmony_ci#define OV7660_COM7		0x12
3962306a36Sopenharmony_ci#define OV7660_COM8		0x13
4062306a36Sopenharmony_ci#define OV7660_COM9		0x14
4162306a36Sopenharmony_ci#define OV7660_COM10		0x15
4262306a36Sopenharmony_ci#define OV7660_RSVD16		0x16
4362306a36Sopenharmony_ci#define OV7660_HSTART		0x17
4462306a36Sopenharmony_ci#define OV7660_HSTOP		0x18
4562306a36Sopenharmony_ci#define OV7660_VSTART		0x19
4662306a36Sopenharmony_ci#define OV7660_VSTOP		0x1a
4762306a36Sopenharmony_ci#define OV7660_PSHFT		0x1b
4862306a36Sopenharmony_ci#define OV7660_MIDH		0x1c
4962306a36Sopenharmony_ci#define OV7660_MIDL		0x1d
5062306a36Sopenharmony_ci#define OV7660_MVFP		0x1e
5162306a36Sopenharmony_ci#define OV7660_LAEC		0x1f
5262306a36Sopenharmony_ci#define OV7660_BOS		0x20
5362306a36Sopenharmony_ci#define OV7660_GBOS		0x21
5462306a36Sopenharmony_ci#define OV7660_GROS		0x22
5562306a36Sopenharmony_ci#define OV7660_ROS		0x23
5662306a36Sopenharmony_ci#define OV7660_AEW		0x24
5762306a36Sopenharmony_ci#define OV7660_AEB		0x25
5862306a36Sopenharmony_ci#define OV7660_VPT		0x26
5962306a36Sopenharmony_ci#define OV7660_BBIAS		0x27
6062306a36Sopenharmony_ci#define OV7660_GbBIAS		0x28
6162306a36Sopenharmony_ci#define OV7660_RSVD29		0x29
6262306a36Sopenharmony_ci#define OV7660_RBIAS		0x2c
6362306a36Sopenharmony_ci#define OV7660_HREF		0x32
6462306a36Sopenharmony_ci#define OV7660_ADC		0x37
6562306a36Sopenharmony_ci#define OV7660_OFON		0x39
6662306a36Sopenharmony_ci#define OV7660_TSLB		0x3a
6762306a36Sopenharmony_ci#define OV7660_COM12		0x3c
6862306a36Sopenharmony_ci#define OV7660_COM13		0x3d
6962306a36Sopenharmony_ci#define OV7660_LCC1		0x62
7062306a36Sopenharmony_ci#define OV7660_LCC2		0x63
7162306a36Sopenharmony_ci#define OV7660_LCC3		0x64
7262306a36Sopenharmony_ci#define OV7660_LCC4		0x65
7362306a36Sopenharmony_ci#define OV7660_LCC5		0x66
7462306a36Sopenharmony_ci#define OV7660_HV		0x69
7562306a36Sopenharmony_ci#define OV7660_RSVDA1		0xa1
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci#define OV7660_DEFAULT_GAIN		0x0e
7862306a36Sopenharmony_ci#define OV7660_DEFAULT_RED_GAIN		0x80
7962306a36Sopenharmony_ci#define OV7660_DEFAULT_BLUE_GAIN	0x80
8062306a36Sopenharmony_ci#define OV7660_DEFAULT_SATURATION	0x00
8162306a36Sopenharmony_ci#define OV7660_DEFAULT_EXPOSURE		0x20
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci/* Kernel module parameters */
8462306a36Sopenharmony_ciextern int force_sensor;
8562306a36Sopenharmony_ciextern bool dump_sensor;
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ciint ov7660_probe(struct sd *sd);
8862306a36Sopenharmony_ciint ov7660_init(struct sd *sd);
8962306a36Sopenharmony_ciint ov7660_init_controls(struct sd *sd);
9062306a36Sopenharmony_ciint ov7660_start(struct sd *sd);
9162306a36Sopenharmony_ciint ov7660_stop(struct sd *sd);
9262306a36Sopenharmony_civoid ov7660_disconnect(struct sd *sd);
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_cistatic const struct m5602_sensor ov7660 = {
9562306a36Sopenharmony_ci	.name = "ov7660",
9662306a36Sopenharmony_ci	.i2c_slave_id = 0x42,
9762306a36Sopenharmony_ci	.i2c_regW = 1,
9862306a36Sopenharmony_ci	.probe = ov7660_probe,
9962306a36Sopenharmony_ci	.init = ov7660_init,
10062306a36Sopenharmony_ci	.init_controls = ov7660_init_controls,
10162306a36Sopenharmony_ci	.start = ov7660_start,
10262306a36Sopenharmony_ci	.stop = ov7660_stop,
10362306a36Sopenharmony_ci	.disconnect = ov7660_disconnect,
10462306a36Sopenharmony_ci};
10562306a36Sopenharmony_ci#endif
106