summaryrefslogtreecommitdiffstats
path: root/drivers/media/usb/gspca/stv06xx/stv06xx_pb0100.h
blob: c5a6614577de0a14b4b547c938ba3c0b556cb1ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Copyright (c) 2001 Jean-Fredric Clere, Nikolas Zimmermann, Georg Acher
 *		      Mark Cave-Ayland, Carlo E Prelz, Dick Streefland
 * Copyright (c) 2002, 2003 Tuukka Toivonen
 * Copyright (c) 2008 Erik Andrén
 *
 * P/N 861037:      Sensor HDCS1000        ASIC STV0600
 * P/N 861050-0010: Sensor HDCS1000        ASIC STV0600
 * P/N 861050-0020: Sensor Photobit PB100  ASIC STV0600-1 - QuickCam Express
 * P/N 861055:      Sensor ST VV6410       ASIC STV0610   - LEGO cam
 * P/N 861075-0040: Sensor HDCS1000        ASIC
 * P/N 961179-0700: Sensor ST VV6410       ASIC STV0602   - Dexxa WebCam USB
 * P/N 861040-0000: Sensor ST VV6410       ASIC STV0610   - QuickCam Web
 */

#ifndef STV06XX_PB0100_H_
#define STV06XX_PB0100_H_

#include "stv06xx_sensor.h"

/* mode priv field flags */
#define PB0100_CROP_TO_VGA	0x01
#define PB0100_SUBSAMPLE	0x02

/* I2C Registers */
#define PB_IDENT		0x00	/* Chip Version */
#define PB_RSTART		0x01	/* Row Window Start */
#define PB_CSTART		0x02	/* Column Window Start */
#define PB_RWSIZE		0x03	/* Row Window Size */
#define PB_CWSIZE		0x04	/* Column  Window Size */
#define PB_CFILLIN		0x05	/* Column Fill-In */
#define PB_VBL			0x06	/* Vertical Blank Count */
#define PB_CONTROL		0x07	/* Control Mode */
#define PB_FINTTIME		0x08	/* Integration Time/Frame Unit Count */
#define PB_RINTTIME		0x09	/* Integration Time/Row Unit Count */
#define PB_ROWSPEED		0x0a	/* Row Speed Control */
#define PB_ABORTFRAME		0x0b	/* Abort Frame */
#define PB_R12			0x0c	/* Reserved */
#define PB_RESET		0x0d	/* Reset */
#define PB_EXPGAIN		0x0e	/* Exposure Gain Command */
#define PB_R15			0x0f	/* Expose0 */
#define PB_R16			0x10	/* Expose1 */
#define PB_R17			0x11	/* Expose2 */
#define PB_R18			0x12	/* Low0_DAC */
#define PB_R19			0x13	/* Low1_DAC */
#define PB_R20			0x14	/* Low2_DAC */
#define PB_R21			0x15	/* Threshold11 */
#define PB_R22			0x16	/* Threshold0x */
#define PB_UPDATEINT		0x17	/* Update Interval */
#define PB_R24			0x18	/* High_DAC */
#define PB_R25			0x19	/* Trans0H */
#define PB_R26			0x1a	/* Trans1L */
#define PB_R27			0x1b	/* Trans1H */
#define PB_R28			0x1c	/* Trans2L */
#define PB_R29			0x1d	/* Reserved */
#define PB_R30			0x1e	/* Reserved */
#define PB_R31			0x1f	/* Wait to Read */
#define PB_PREADCTRL		0x20	/* Pixel Read Control Mode */
#define PB_R33			0x21	/* IREF_VLN */
#define PB_R34			0x22	/* IREF_VLP */
#define PB_R35			0x23	/* IREF_VLN_INTEG */
#define PB_R36			0x24	/* IREF_MASTER */
#define PB_R37			0x25	/* IDACP */
#define PB_R38			0x26	/* IDACN */
#define PB_R39			0x27	/* DAC_Control_Reg */
#define PB_R40			0x28	/* VCL */
#define PB_R41			0x29	/* IREF_VLN_ADCIN */
#define PB_R42			0x2a	/* Reserved */
#define PB_G1GAIN		0x2b	/* Green 1 Gain */
#define PB_BGAIN		0x2c	/* Blue Gain */
#define PB_RGAIN		0x2d	/* Red Gain */
#define PB_G2GAIN		0x2e	/* Green 2 Gain */
#define PB_R47			0x2f	/* Dark Row Address */
#define PB_R48			0x30	/* Dark Row Options */
#define PB_R49			0x31	/* Reserved */
#define PB_R50			0x32	/* Image Test Data */
#define PB_ADCMAXGAIN		0x33	/* Maximum Gain */
#define PB_ADCMINGAIN		0x34	/* Minimum Gain */
#define PB_ADCGLOBALGAIN	0x35	/* Global Gain */
#define PB_R54			0x36	/* Maximum Frame */
#define PB_R55			0x37	/* Minimum Frame */
#define PB_R56			0x38	/* Reserved */
#define PB_VOFFSET		0x39	/* VOFFSET */
#define PB_R58			0x3a	/* Snap-Shot Sequence Trigger */
#define PB_ADCGAINH		0x3b	/* VREF_HI */
#define PB_ADCGAINL		0x3c	/* VREF_LO */
#define PB_R61			0x3d	/* Reserved */
#define PB_R62			0x3e	/* Reserved */
#define PB_R63			0x3f	/* Reserved */
#define PB_R64			0x40	/* Red/Blue Gain */
#define PB_R65			0x41	/* Green 2/Green 1 Gain */
#define PB_R66			0x42	/* VREF_HI/LO */
#define PB_R67			0x43	/* Integration Time/Row Unit Count */
#define PB_R240			0xf0	/* ADC Test */
#define PB_R241			0xf1    /* Chip Enable */
#define PB_R242			0xf2	/* Reserved */

static int pb0100_probe(struct sd *sd);
static int pb0100_start(struct sd *sd);
static int pb0100_init(struct sd *sd);
static int pb0100_init_controls(struct sd *sd);
static int pb0100_stop(struct sd *sd);
static int pb0100_dump(struct sd *sd);

/* V4L2 controls supported by the driver */
static int pb0100_set_gain(struct gspca_dev *gspca_dev, __s32 val);
static int pb0100_set_red_balance(struct gspca_dev *gspca_dev, __s32 val);
static int pb0100_set_blue_balance(struct gspca_dev *gspca_dev, __s32 val);
static int pb0100_set_exposure(struct gspca_dev *gspca_dev, __s32 val);
static int pb0100_set_autogain(struct gspca_dev *gspca_dev, __s32 val);
static int pb0100_set_autogain_target(struct gspca_dev *gspca_dev, __s32 val);

const struct stv06xx_sensor stv06xx_sensor_pb0100 = {
	.name = "PB-0100",
	.i2c_flush = 1,
	.i2c_addr = 0xba,
	.i2c_len = 2,

	.min_packet_size = { 635, 847 },
	.max_packet_size = { 847, 923 },

	.init = pb0100_init,
	.init_controls = pb0100_init_controls,
	.probe = pb0100_probe,
	.start = pb0100_start,
	.stop = pb0100_stop,
	.dump = pb0100_dump,
};

#endif