xref: /openbmc/linux/drivers/media/usb/cx231xx/cx231xx-pcb-cfg.h (revision 58e16d792a6a8c6b750f637a4649967fcac853dc)
1  /* SPDX-License-Identifier: GPL-2.0-or-later */
2  /*
3     cx231xx-pcb-cfg.h - driver for Conexant
4  		Cx23100/101/102 USB video capture devices
5  
6     Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
7  
8   */
9  
10  #ifndef _PCB_CONFIG_H_
11  #define _PCB_CONFIG_H_
12  
13  #include <linux/init.h>
14  #include <linux/module.h>
15  
16  /***************************************************************************
17  				* Class Information *
18  ***************************************************************************/
19  #define CLASS_DEFAULT       0xFF
20  
21  enum VENDOR_REQUEST_TYPE {
22  	/* Set/Get I2C */
23  	VRT_SET_I2C0 = 0x0,
24  	VRT_SET_I2C1 = 0x1,
25  	VRT_SET_I2C2 = 0x2,
26  	VRT_GET_I2C0 = 0x4,
27  	VRT_GET_I2C1 = 0x5,
28  	VRT_GET_I2C2 = 0x6,
29  
30  	/* Set/Get GPIO */
31  	VRT_SET_GPIO = 0x8,
32  	VRT_GET_GPIO = 0x9,
33  
34  	/* Set/Get GPIE */
35  	VRT_SET_GPIE = 0xA,
36  	VRT_GET_GPIE = 0xB,
37  
38  	/* Set/Get Register Control/Status */
39  	VRT_SET_REGISTER = 0xC,
40  	VRT_GET_REGISTER = 0xD,
41  
42  	/* Get Extended Compat ID Descriptor */
43  	VRT_GET_EXTCID_DESC = 0xFF,
44  };
45  
46  enum BYTE_ENABLE_MASK {
47  	ENABLE_ONE_BYTE = 0x1,
48  	ENABLE_TWE_BYTE = 0x3,
49  	ENABLE_THREE_BYTE = 0x7,
50  	ENABLE_FOUR_BYTE = 0xF,
51  };
52  
53  #define SPEED_MASK      0x1
54  enum USB_SPEED{
55  	FULL_SPEED = 0x0,	/* 0: full speed */
56  	HIGH_SPEED = 0x1	/* 1: high speed */
57  };
58  
59  #define TS_MASK         0x6
60  enum TS_PORT{
61  	NO_TS_PORT = 0x0,	/* 2'b00: Neither port used. PCB not a Hybrid,
62  				   only offers Analog TV or Video */
63  	TS1_PORT = 0x4,		/* 2'b10: TS1 Input (Hybrid mode :
64  				Digital or External Analog/Compressed source) */
65  	TS1_TS2_PORT = 0x6,	/* 2'b11: TS1 & TS2 Inputs
66  				(Dual inputs from Digital and/or
67  				External Analog/Compressed sources) */
68  	TS1_EXT_CLOCK = 0x6,	/* 2'b11: TS1 & TS2 as selector
69  						to external clock */
70  	TS1VIP_TS2_PORT = 0x2	/* 2'b01: TS1 used as 656/VIP Output,
71  				   TS2 Input (from Compressor) */
72  };
73  
74  #define EAVP_MASK       0x8
75  enum EAV_PRESENT{
76  	NO_EXTERNAL_AV = 0x0,	/* 0: No External A/V inputs
77  						(no need for i2s block),
78  						Analog Tuner must be present */
79  	EXTERNAL_AV = 0x8	/* 1: External A/V inputs
80  						present (requires i2s blk) */
81  };
82  
83  #define ATM_MASK        0x30
84  enum AT_MODE{
85  	DIF_TUNER = 0x30,	/* 2'b11: IF Tuner (requires use of DIF) */
86  	BASEBAND_SOUND = 0x20,	/* 2'b10: Baseband Composite &
87  						Sound-IF Signals present */
88  	NO_TUNER = 0x10		/* 2'b0x: No Analog Tuner present */
89  };
90  
91  #define PWR_SEL_MASK    0x40
92  enum POWE_TYPE{
93  	SELF_POWER = 0x0,	/* 0: self power */
94  	BUS_POWER = 0x40	/* 1: bus power */
95  };
96  
97  enum USB_POWE_TYPE{
98  	USB_SELF_POWER = 0,
99  	USB_BUS_POWER
100  };
101  
102  #define BO_0_MASK       0x80
103  enum AVDEC_STATUS{
104  	AVDEC_DISABLE = 0x0,	/* 0: A/V Decoder Disabled */
105  	AVDEC_ENABLE = 0x80	/* 1: A/V Decoder Enabled */
106  };
107  
108  #define BO_1_MASK       0x100
109  
110  #define BUSPOWER_MASK   0xC4	/* for Polaris spec 0.8 */
111  #define SELFPOWER_MASK  0x86
112  
113  /***************************************************************************/
114  #define NOT_DECIDE_YET  0xFE
115  #define NOT_SUPPORTED   0xFF
116  
117  /***************************************************************************
118  				* for mod field use *
119  ***************************************************************************/
120  #define MOD_DIGITAL     0x1
121  #define MOD_ANALOG      0x2
122  #define MOD_DIF         0x4
123  #define MOD_EXTERNAL    0x8
124  #define CAP_ALL_MOD     0x0f
125  
126  /***************************************************************************
127  				* source define *
128  ***************************************************************************/
129  #define SOURCE_DIGITAL          0x1
130  #define SOURCE_ANALOG           0x2
131  #define SOURCE_DIF              0x4
132  #define SOURCE_EXTERNAL         0x8
133  #define SOURCE_TS_BDA			0x10
134  #define SOURCE_TS_ENCODE		0x20
135  #define SOURCE_TS_EXTERNAL	0x40
136  
137  /***************************************************************************
138  				* interface information define *
139  ***************************************************************************/
140  struct INTERFACE_INFO {
141  	u8 interrupt_index;
142  	u8 ts1_index;
143  	u8 ts2_index;
144  	u8 audio_index;
145  	u8 video_index;
146  	u8 vanc_index;		/* VBI */
147  	u8 hanc_index;		/* Sliced CC */
148  	u8 ir_index;
149  };
150  
151  enum INDEX_INTERFACE_INFO{
152  	INDEX_INTERRUPT = 0x0,
153  	INDEX_TS1,
154  	INDEX_TS2,
155  	INDEX_AUDIO,
156  	INDEX_VIDEO,
157  	INDEX_VANC,
158  	INDEX_HANC,
159  	INDEX_IR,
160  };
161  
162  /***************************************************************************
163  				* configuration information define *
164  ***************************************************************************/
165  struct CONFIG_INFO {
166  	u8 config_index;
167  	struct INTERFACE_INFO interface_info;
168  };
169  
170  struct pcb_config {
171  	u8 index;
172  	u8 type;		/* bus power or self power,
173  					   self power--0, bus_power--1 */
174  	u8 speed;		/* usb speed, 2.0--1, 1.1--0 */
175  	u8 mode;		/* digital , anlog, dif or external A/V */
176  	u32 ts1_source;		/* three source -- BDA,External,encode */
177  	u32 ts2_source;
178  	u32 analog_source;
179  	u8 digital_index;	/* bus-power used */
180  	u8 analog_index;	/* bus-power used */
181  	u8 dif_index;		/* bus-power used */
182  	u8 external_index;	/* bus-power used */
183  	u8 config_num;		/* current config num, 0,1,2,
184  						   for self-power, always 0 */
185  	struct CONFIG_INFO hs_config_info[3];
186  	struct CONFIG_INFO fs_config_info[3];
187  };
188  
189  enum INDEX_PCB_CONFIG{
190  	INDEX_SELFPOWER_DIGITAL_ONLY = 0x0,
191  	INDEX_SELFPOWER_DUAL_DIGITAL,
192  	INDEX_SELFPOWER_ANALOG_ONLY,
193  	INDEX_SELFPOWER_DUAL,
194  	INDEX_SELFPOWER_TRIPLE,
195  	INDEX_SELFPOWER_COMPRESSOR,
196  	INDEX_BUSPOWER_DIGITAL_ONLY,
197  	INDEX_BUSPOWER_ANALOG_ONLY,
198  	INDEX_BUSPOWER_DIF_ONLY,
199  	INDEX_BUSPOWER_EXTERNAL_ONLY,
200  	INDEX_BUSPOWER_EXTERNAL_ANALOG,
201  	INDEX_BUSPOWER_EXTERNAL_DIF,
202  	INDEX_BUSPOWER_EXTERNAL_DIGITAL,
203  	INDEX_BUSPOWER_DIGITAL_ANALOG,
204  	INDEX_BUSPOWER_DIGITAL_DIF,
205  	INDEX_BUSPOWER_DIGITAL_ANALOG_EXTERNAL,
206  	INDEX_BUSPOWER_DIGITAL_DIF_EXTERNAL,
207  };
208  
209  /***************************************************************************/
210  struct cx231xx;
211  
212  int initialize_cx231xx(struct cx231xx *p_dev);
213  
214  #endif
215