1*a10e763bSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 20c0d06caSMauro Carvalho Chehab /* 30c0d06caSMauro Carvalho Chehab * Driver for the ov7660 sensor 40c0d06caSMauro Carvalho Chehab * 50c0d06caSMauro Carvalho Chehab * Copyright (C) 2009 Erik Andrén 60c0d06caSMauro Carvalho Chehab * Copyright (C) 2007 Ilyes Gouta. Based on the m5603x Linux Driver Project. 70c0d06caSMauro Carvalho Chehab * Copyright (C) 2005 m5603x Linux Driver Project <m5602@x3ng.com.br> 80c0d06caSMauro Carvalho Chehab * 90c0d06caSMauro Carvalho Chehab * Portions of code to USB interface and ALi driver software, 100c0d06caSMauro Carvalho Chehab * Copyright (c) 2006 Willem Duinker 110c0d06caSMauro Carvalho Chehab * v4l2 interface modeled after the V4L2 driver 120c0d06caSMauro Carvalho Chehab * for SN9C10x PC Camera Controllers 130c0d06caSMauro Carvalho Chehab */ 140c0d06caSMauro Carvalho Chehab 150c0d06caSMauro Carvalho Chehab #ifndef M5602_OV7660_H_ 160c0d06caSMauro Carvalho Chehab #define M5602_OV7660_H_ 170c0d06caSMauro Carvalho Chehab 180c0d06caSMauro Carvalho Chehab #include "m5602_sensor.h" 190c0d06caSMauro Carvalho Chehab 200c0d06caSMauro Carvalho Chehab #define OV7660_GAIN 0x00 210c0d06caSMauro Carvalho Chehab #define OV7660_BLUE_GAIN 0x01 220c0d06caSMauro Carvalho Chehab #define OV7660_RED_GAIN 0x02 230c0d06caSMauro Carvalho Chehab #define OV7660_VREF 0x03 240c0d06caSMauro Carvalho Chehab #define OV7660_COM1 0x04 250c0d06caSMauro Carvalho Chehab #define OV7660_BAVE 0x05 260c0d06caSMauro Carvalho Chehab #define OV7660_GEAVE 0x06 270c0d06caSMauro Carvalho Chehab #define OV7660_AECHH 0x07 280c0d06caSMauro Carvalho Chehab #define OV7660_RAVE 0x08 290c0d06caSMauro Carvalho Chehab #define OV7660_COM2 0x09 300c0d06caSMauro Carvalho Chehab #define OV7660_PID 0x0a 310c0d06caSMauro Carvalho Chehab #define OV7660_VER 0x0b 320c0d06caSMauro Carvalho Chehab #define OV7660_COM3 0x0c 330c0d06caSMauro Carvalho Chehab #define OV7660_COM4 0x0d 340c0d06caSMauro Carvalho Chehab #define OV7660_COM5 0x0e 350c0d06caSMauro Carvalho Chehab #define OV7660_COM6 0x0f 360c0d06caSMauro Carvalho Chehab #define OV7660_AECH 0x10 370c0d06caSMauro Carvalho Chehab #define OV7660_CLKRC 0x11 380c0d06caSMauro Carvalho Chehab #define OV7660_COM7 0x12 390c0d06caSMauro Carvalho Chehab #define OV7660_COM8 0x13 400c0d06caSMauro Carvalho Chehab #define OV7660_COM9 0x14 410c0d06caSMauro Carvalho Chehab #define OV7660_COM10 0x15 420c0d06caSMauro Carvalho Chehab #define OV7660_RSVD16 0x16 430c0d06caSMauro Carvalho Chehab #define OV7660_HSTART 0x17 440c0d06caSMauro Carvalho Chehab #define OV7660_HSTOP 0x18 450c0d06caSMauro Carvalho Chehab #define OV7660_VSTART 0x19 460c0d06caSMauro Carvalho Chehab #define OV7660_VSTOP 0x1a 470c0d06caSMauro Carvalho Chehab #define OV7660_PSHFT 0x1b 480c0d06caSMauro Carvalho Chehab #define OV7660_MIDH 0x1c 490c0d06caSMauro Carvalho Chehab #define OV7660_MIDL 0x1d 500c0d06caSMauro Carvalho Chehab #define OV7660_MVFP 0x1e 510c0d06caSMauro Carvalho Chehab #define OV7660_LAEC 0x1f 520c0d06caSMauro Carvalho Chehab #define OV7660_BOS 0x20 530c0d06caSMauro Carvalho Chehab #define OV7660_GBOS 0x21 540c0d06caSMauro Carvalho Chehab #define OV7660_GROS 0x22 550c0d06caSMauro Carvalho Chehab #define OV7660_ROS 0x23 560c0d06caSMauro Carvalho Chehab #define OV7660_AEW 0x24 570c0d06caSMauro Carvalho Chehab #define OV7660_AEB 0x25 580c0d06caSMauro Carvalho Chehab #define OV7660_VPT 0x26 590c0d06caSMauro Carvalho Chehab #define OV7660_BBIAS 0x27 600c0d06caSMauro Carvalho Chehab #define OV7660_GbBIAS 0x28 610c0d06caSMauro Carvalho Chehab #define OV7660_RSVD29 0x29 620c0d06caSMauro Carvalho Chehab #define OV7660_RBIAS 0x2c 630c0d06caSMauro Carvalho Chehab #define OV7660_HREF 0x32 640c0d06caSMauro Carvalho Chehab #define OV7660_ADC 0x37 650c0d06caSMauro Carvalho Chehab #define OV7660_OFON 0x39 660c0d06caSMauro Carvalho Chehab #define OV7660_TSLB 0x3a 670c0d06caSMauro Carvalho Chehab #define OV7660_COM12 0x3c 680c0d06caSMauro Carvalho Chehab #define OV7660_COM13 0x3d 690c0d06caSMauro Carvalho Chehab #define OV7660_LCC1 0x62 700c0d06caSMauro Carvalho Chehab #define OV7660_LCC2 0x63 710c0d06caSMauro Carvalho Chehab #define OV7660_LCC3 0x64 720c0d06caSMauro Carvalho Chehab #define OV7660_LCC4 0x65 730c0d06caSMauro Carvalho Chehab #define OV7660_LCC5 0x66 740c0d06caSMauro Carvalho Chehab #define OV7660_HV 0x69 750c0d06caSMauro Carvalho Chehab #define OV7660_RSVDA1 0xa1 760c0d06caSMauro Carvalho Chehab 770c0d06caSMauro Carvalho Chehab #define OV7660_DEFAULT_GAIN 0x0e 780c0d06caSMauro Carvalho Chehab #define OV7660_DEFAULT_RED_GAIN 0x80 790c0d06caSMauro Carvalho Chehab #define OV7660_DEFAULT_BLUE_GAIN 0x80 800c0d06caSMauro Carvalho Chehab #define OV7660_DEFAULT_SATURATION 0x00 810c0d06caSMauro Carvalho Chehab #define OV7660_DEFAULT_EXPOSURE 0x20 820c0d06caSMauro Carvalho Chehab 830c0d06caSMauro Carvalho Chehab /* Kernel module parameters */ 840c0d06caSMauro Carvalho Chehab extern int force_sensor; 850c0d06caSMauro Carvalho Chehab extern bool dump_sensor; 860c0d06caSMauro Carvalho Chehab 870c0d06caSMauro Carvalho Chehab int ov7660_probe(struct sd *sd); 880c0d06caSMauro Carvalho Chehab int ov7660_init(struct sd *sd); 89c84e412fSHans de Goede int ov7660_init_controls(struct sd *sd); 900c0d06caSMauro Carvalho Chehab int ov7660_start(struct sd *sd); 910c0d06caSMauro Carvalho Chehab int ov7660_stop(struct sd *sd); 920c0d06caSMauro Carvalho Chehab void ov7660_disconnect(struct sd *sd); 930c0d06caSMauro Carvalho Chehab 940c0d06caSMauro Carvalho Chehab static const struct m5602_sensor ov7660 = { 950c0d06caSMauro Carvalho Chehab .name = "ov7660", 960c0d06caSMauro Carvalho Chehab .i2c_slave_id = 0x42, 970c0d06caSMauro Carvalho Chehab .i2c_regW = 1, 980c0d06caSMauro Carvalho Chehab .probe = ov7660_probe, 990c0d06caSMauro Carvalho Chehab .init = ov7660_init, 100c84e412fSHans de Goede .init_controls = ov7660_init_controls, 1010c0d06caSMauro Carvalho Chehab .start = ov7660_start, 1020c0d06caSMauro Carvalho Chehab .stop = ov7660_stop, 1030c0d06caSMauro Carvalho Chehab .disconnect = ov7660_disconnect, 1040c0d06caSMauro Carvalho Chehab }; 1050c0d06caSMauro Carvalho Chehab #endif 106