xref: /openbmc/linux/drivers/media/usb/cx231xx/cx231xx-pcb-cfg.h (revision 58e16d792a6a8c6b750f637a4649967fcac853dc)
1*74ba9207SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
20c0d06caSMauro Carvalho Chehab /*
30c0d06caSMauro Carvalho Chehab    cx231xx-pcb-cfg.h - driver for Conexant
40c0d06caSMauro Carvalho Chehab 		Cx23100/101/102 USB video capture devices
50c0d06caSMauro Carvalho Chehab 
60c0d06caSMauro Carvalho Chehab    Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
70c0d06caSMauro Carvalho Chehab 
80c0d06caSMauro Carvalho Chehab  */
90c0d06caSMauro Carvalho Chehab 
100c0d06caSMauro Carvalho Chehab #ifndef _PCB_CONFIG_H_
110c0d06caSMauro Carvalho Chehab #define _PCB_CONFIG_H_
120c0d06caSMauro Carvalho Chehab 
130c0d06caSMauro Carvalho Chehab #include <linux/init.h>
140c0d06caSMauro Carvalho Chehab #include <linux/module.h>
150c0d06caSMauro Carvalho Chehab 
160c0d06caSMauro Carvalho Chehab /***************************************************************************
170c0d06caSMauro Carvalho Chehab 				* Class Information *
180c0d06caSMauro Carvalho Chehab ***************************************************************************/
190c0d06caSMauro Carvalho Chehab #define CLASS_DEFAULT       0xFF
200c0d06caSMauro Carvalho Chehab 
210c0d06caSMauro Carvalho Chehab enum VENDOR_REQUEST_TYPE {
220c0d06caSMauro Carvalho Chehab 	/* Set/Get I2C */
230c0d06caSMauro Carvalho Chehab 	VRT_SET_I2C0 = 0x0,
240c0d06caSMauro Carvalho Chehab 	VRT_SET_I2C1 = 0x1,
250c0d06caSMauro Carvalho Chehab 	VRT_SET_I2C2 = 0x2,
260c0d06caSMauro Carvalho Chehab 	VRT_GET_I2C0 = 0x4,
270c0d06caSMauro Carvalho Chehab 	VRT_GET_I2C1 = 0x5,
280c0d06caSMauro Carvalho Chehab 	VRT_GET_I2C2 = 0x6,
290c0d06caSMauro Carvalho Chehab 
300c0d06caSMauro Carvalho Chehab 	/* Set/Get GPIO */
310c0d06caSMauro Carvalho Chehab 	VRT_SET_GPIO = 0x8,
320c0d06caSMauro Carvalho Chehab 	VRT_GET_GPIO = 0x9,
330c0d06caSMauro Carvalho Chehab 
340c0d06caSMauro Carvalho Chehab 	/* Set/Get GPIE */
350c0d06caSMauro Carvalho Chehab 	VRT_SET_GPIE = 0xA,
360c0d06caSMauro Carvalho Chehab 	VRT_GET_GPIE = 0xB,
370c0d06caSMauro Carvalho Chehab 
380c0d06caSMauro Carvalho Chehab 	/* Set/Get Register Control/Status */
390c0d06caSMauro Carvalho Chehab 	VRT_SET_REGISTER = 0xC,
400c0d06caSMauro Carvalho Chehab 	VRT_GET_REGISTER = 0xD,
410c0d06caSMauro Carvalho Chehab 
420c0d06caSMauro Carvalho Chehab 	/* Get Extended Compat ID Descriptor */
430c0d06caSMauro Carvalho Chehab 	VRT_GET_EXTCID_DESC = 0xFF,
440c0d06caSMauro Carvalho Chehab };
450c0d06caSMauro Carvalho Chehab 
460c0d06caSMauro Carvalho Chehab enum BYTE_ENABLE_MASK {
470c0d06caSMauro Carvalho Chehab 	ENABLE_ONE_BYTE = 0x1,
480c0d06caSMauro Carvalho Chehab 	ENABLE_TWE_BYTE = 0x3,
490c0d06caSMauro Carvalho Chehab 	ENABLE_THREE_BYTE = 0x7,
500c0d06caSMauro Carvalho Chehab 	ENABLE_FOUR_BYTE = 0xF,
510c0d06caSMauro Carvalho Chehab };
520c0d06caSMauro Carvalho Chehab 
530c0d06caSMauro Carvalho Chehab #define SPEED_MASK      0x1
540c0d06caSMauro Carvalho Chehab enum USB_SPEED{
550c0d06caSMauro Carvalho Chehab 	FULL_SPEED = 0x0,	/* 0: full speed */
560c0d06caSMauro Carvalho Chehab 	HIGH_SPEED = 0x1	/* 1: high speed */
570c0d06caSMauro Carvalho Chehab };
580c0d06caSMauro Carvalho Chehab 
590c0d06caSMauro Carvalho Chehab #define TS_MASK         0x6
600c0d06caSMauro Carvalho Chehab enum TS_PORT{
610c0d06caSMauro Carvalho Chehab 	NO_TS_PORT = 0x0,	/* 2'b00: Neither port used. PCB not a Hybrid,
620c0d06caSMauro Carvalho Chehab 				   only offers Analog TV or Video */
630c0d06caSMauro Carvalho Chehab 	TS1_PORT = 0x4,		/* 2'b10: TS1 Input (Hybrid mode :
640c0d06caSMauro Carvalho Chehab 				Digital or External Analog/Compressed source) */
650c0d06caSMauro Carvalho Chehab 	TS1_TS2_PORT = 0x6,	/* 2'b11: TS1 & TS2 Inputs
660c0d06caSMauro Carvalho Chehab 				(Dual inputs from Digital and/or
670c0d06caSMauro Carvalho Chehab 				External Analog/Compressed sources) */
680c0d06caSMauro Carvalho Chehab 	TS1_EXT_CLOCK = 0x6,	/* 2'b11: TS1 & TS2 as selector
690c0d06caSMauro Carvalho Chehab 						to external clock */
700c0d06caSMauro Carvalho Chehab 	TS1VIP_TS2_PORT = 0x2	/* 2'b01: TS1 used as 656/VIP Output,
710c0d06caSMauro Carvalho Chehab 				   TS2 Input (from Compressor) */
720c0d06caSMauro Carvalho Chehab };
730c0d06caSMauro Carvalho Chehab 
740c0d06caSMauro Carvalho Chehab #define EAVP_MASK       0x8
750c0d06caSMauro Carvalho Chehab enum EAV_PRESENT{
760c0d06caSMauro Carvalho Chehab 	NO_EXTERNAL_AV = 0x0,	/* 0: No External A/V inputs
773e4d8f48SMauro Carvalho Chehab 						(no need for i2s block),
780c0d06caSMauro Carvalho Chehab 						Analog Tuner must be present */
790c0d06caSMauro Carvalho Chehab 	EXTERNAL_AV = 0x8	/* 1: External A/V inputs
800c0d06caSMauro Carvalho Chehab 						present (requires i2s blk) */
810c0d06caSMauro Carvalho Chehab };
820c0d06caSMauro Carvalho Chehab 
830c0d06caSMauro Carvalho Chehab #define ATM_MASK        0x30
840c0d06caSMauro Carvalho Chehab enum AT_MODE{
850c0d06caSMauro Carvalho Chehab 	DIF_TUNER = 0x30,	/* 2'b11: IF Tuner (requires use of DIF) */
860c0d06caSMauro Carvalho Chehab 	BASEBAND_SOUND = 0x20,	/* 2'b10: Baseband Composite &
870c0d06caSMauro Carvalho Chehab 						Sound-IF Signals present */
880c0d06caSMauro Carvalho Chehab 	NO_TUNER = 0x10		/* 2'b0x: No Analog Tuner present */
890c0d06caSMauro Carvalho Chehab };
900c0d06caSMauro Carvalho Chehab 
910c0d06caSMauro Carvalho Chehab #define PWR_SEL_MASK    0x40
920c0d06caSMauro Carvalho Chehab enum POWE_TYPE{
930c0d06caSMauro Carvalho Chehab 	SELF_POWER = 0x0,	/* 0: self power */
940c0d06caSMauro Carvalho Chehab 	BUS_POWER = 0x40	/* 1: bus power */
950c0d06caSMauro Carvalho Chehab };
960c0d06caSMauro Carvalho Chehab 
970c0d06caSMauro Carvalho Chehab enum USB_POWE_TYPE{
980c0d06caSMauro Carvalho Chehab 	USB_SELF_POWER = 0,
990c0d06caSMauro Carvalho Chehab 	USB_BUS_POWER
1000c0d06caSMauro Carvalho Chehab };
1010c0d06caSMauro Carvalho Chehab 
1020c0d06caSMauro Carvalho Chehab #define BO_0_MASK       0x80
1030c0d06caSMauro Carvalho Chehab enum AVDEC_STATUS{
1040c0d06caSMauro Carvalho Chehab 	AVDEC_DISABLE = 0x0,	/* 0: A/V Decoder Disabled */
1050c0d06caSMauro Carvalho Chehab 	AVDEC_ENABLE = 0x80	/* 1: A/V Decoder Enabled */
1060c0d06caSMauro Carvalho Chehab };
1070c0d06caSMauro Carvalho Chehab 
1080c0d06caSMauro Carvalho Chehab #define BO_1_MASK       0x100
1090c0d06caSMauro Carvalho Chehab 
1100c0d06caSMauro Carvalho Chehab #define BUSPOWER_MASK   0xC4	/* for Polaris spec 0.8 */
1110c0d06caSMauro Carvalho Chehab #define SELFPOWER_MASK  0x86
1120c0d06caSMauro Carvalho Chehab 
1130c0d06caSMauro Carvalho Chehab /***************************************************************************/
1140c0d06caSMauro Carvalho Chehab #define NOT_DECIDE_YET  0xFE
1150c0d06caSMauro Carvalho Chehab #define NOT_SUPPORTED   0xFF
1160c0d06caSMauro Carvalho Chehab 
1170c0d06caSMauro Carvalho Chehab /***************************************************************************
1180c0d06caSMauro Carvalho Chehab 				* for mod field use *
1190c0d06caSMauro Carvalho Chehab ***************************************************************************/
1200c0d06caSMauro Carvalho Chehab #define MOD_DIGITAL     0x1
1210c0d06caSMauro Carvalho Chehab #define MOD_ANALOG      0x2
1220c0d06caSMauro Carvalho Chehab #define MOD_DIF         0x4
1230c0d06caSMauro Carvalho Chehab #define MOD_EXTERNAL    0x8
1240c0d06caSMauro Carvalho Chehab #define CAP_ALL_MOD     0x0f
1250c0d06caSMauro Carvalho Chehab 
1260c0d06caSMauro Carvalho Chehab /***************************************************************************
1270c0d06caSMauro Carvalho Chehab 				* source define *
1280c0d06caSMauro Carvalho Chehab ***************************************************************************/
1290c0d06caSMauro Carvalho Chehab #define SOURCE_DIGITAL          0x1
1300c0d06caSMauro Carvalho Chehab #define SOURCE_ANALOG           0x2
1310c0d06caSMauro Carvalho Chehab #define SOURCE_DIF              0x4
1320c0d06caSMauro Carvalho Chehab #define SOURCE_EXTERNAL         0x8
1330c0d06caSMauro Carvalho Chehab #define SOURCE_TS_BDA			0x10
1340c0d06caSMauro Carvalho Chehab #define SOURCE_TS_ENCODE		0x20
1350c0d06caSMauro Carvalho Chehab #define SOURCE_TS_EXTERNAL	0x40
1360c0d06caSMauro Carvalho Chehab 
1370c0d06caSMauro Carvalho Chehab /***************************************************************************
1380c0d06caSMauro Carvalho Chehab 				* interface information define *
1390c0d06caSMauro Carvalho Chehab ***************************************************************************/
1400c0d06caSMauro Carvalho Chehab struct INTERFACE_INFO {
1410c0d06caSMauro Carvalho Chehab 	u8 interrupt_index;
1420c0d06caSMauro Carvalho Chehab 	u8 ts1_index;
1430c0d06caSMauro Carvalho Chehab 	u8 ts2_index;
1440c0d06caSMauro Carvalho Chehab 	u8 audio_index;
1450c0d06caSMauro Carvalho Chehab 	u8 video_index;
1460c0d06caSMauro Carvalho Chehab 	u8 vanc_index;		/* VBI */
1470c0d06caSMauro Carvalho Chehab 	u8 hanc_index;		/* Sliced CC */
1480c0d06caSMauro Carvalho Chehab 	u8 ir_index;
1490c0d06caSMauro Carvalho Chehab };
1500c0d06caSMauro Carvalho Chehab 
1510c0d06caSMauro Carvalho Chehab enum INDEX_INTERFACE_INFO{
1520c0d06caSMauro Carvalho Chehab 	INDEX_INTERRUPT = 0x0,
1530c0d06caSMauro Carvalho Chehab 	INDEX_TS1,
1540c0d06caSMauro Carvalho Chehab 	INDEX_TS2,
1550c0d06caSMauro Carvalho Chehab 	INDEX_AUDIO,
1560c0d06caSMauro Carvalho Chehab 	INDEX_VIDEO,
1570c0d06caSMauro Carvalho Chehab 	INDEX_VANC,
1580c0d06caSMauro Carvalho Chehab 	INDEX_HANC,
1590c0d06caSMauro Carvalho Chehab 	INDEX_IR,
1600c0d06caSMauro Carvalho Chehab };
1610c0d06caSMauro Carvalho Chehab 
1620c0d06caSMauro Carvalho Chehab /***************************************************************************
1630c0d06caSMauro Carvalho Chehab 				* configuration information define *
1640c0d06caSMauro Carvalho Chehab ***************************************************************************/
1650c0d06caSMauro Carvalho Chehab struct CONFIG_INFO {
1660c0d06caSMauro Carvalho Chehab 	u8 config_index;
1670c0d06caSMauro Carvalho Chehab 	struct INTERFACE_INFO interface_info;
1680c0d06caSMauro Carvalho Chehab };
1690c0d06caSMauro Carvalho Chehab 
1700c0d06caSMauro Carvalho Chehab struct pcb_config {
1710c0d06caSMauro Carvalho Chehab 	u8 index;
1720c0d06caSMauro Carvalho Chehab 	u8 type;		/* bus power or self power,
1730c0d06caSMauro Carvalho Chehab 					   self power--0, bus_power--1 */
1740c0d06caSMauro Carvalho Chehab 	u8 speed;		/* usb speed, 2.0--1, 1.1--0 */
1750c0d06caSMauro Carvalho Chehab 	u8 mode;		/* digital , anlog, dif or external A/V */
1760c0d06caSMauro Carvalho Chehab 	u32 ts1_source;		/* three source -- BDA,External,encode */
1770c0d06caSMauro Carvalho Chehab 	u32 ts2_source;
1780c0d06caSMauro Carvalho Chehab 	u32 analog_source;
1790c0d06caSMauro Carvalho Chehab 	u8 digital_index;	/* bus-power used */
1800c0d06caSMauro Carvalho Chehab 	u8 analog_index;	/* bus-power used */
1810c0d06caSMauro Carvalho Chehab 	u8 dif_index;		/* bus-power used */
1820c0d06caSMauro Carvalho Chehab 	u8 external_index;	/* bus-power used */
1830c0d06caSMauro Carvalho Chehab 	u8 config_num;		/* current config num, 0,1,2,
1840c0d06caSMauro Carvalho Chehab 						   for self-power, always 0 */
1850c0d06caSMauro Carvalho Chehab 	struct CONFIG_INFO hs_config_info[3];
1860c0d06caSMauro Carvalho Chehab 	struct CONFIG_INFO fs_config_info[3];
1870c0d06caSMauro Carvalho Chehab };
1880c0d06caSMauro Carvalho Chehab 
1890c0d06caSMauro Carvalho Chehab enum INDEX_PCB_CONFIG{
1900c0d06caSMauro Carvalho Chehab 	INDEX_SELFPOWER_DIGITAL_ONLY = 0x0,
1910c0d06caSMauro Carvalho Chehab 	INDEX_SELFPOWER_DUAL_DIGITAL,
1920c0d06caSMauro Carvalho Chehab 	INDEX_SELFPOWER_ANALOG_ONLY,
1930c0d06caSMauro Carvalho Chehab 	INDEX_SELFPOWER_DUAL,
1940c0d06caSMauro Carvalho Chehab 	INDEX_SELFPOWER_TRIPLE,
1950c0d06caSMauro Carvalho Chehab 	INDEX_SELFPOWER_COMPRESSOR,
1960c0d06caSMauro Carvalho Chehab 	INDEX_BUSPOWER_DIGITAL_ONLY,
1970c0d06caSMauro Carvalho Chehab 	INDEX_BUSPOWER_ANALOG_ONLY,
1980c0d06caSMauro Carvalho Chehab 	INDEX_BUSPOWER_DIF_ONLY,
1990c0d06caSMauro Carvalho Chehab 	INDEX_BUSPOWER_EXTERNAL_ONLY,
2000c0d06caSMauro Carvalho Chehab 	INDEX_BUSPOWER_EXTERNAL_ANALOG,
2010c0d06caSMauro Carvalho Chehab 	INDEX_BUSPOWER_EXTERNAL_DIF,
2020c0d06caSMauro Carvalho Chehab 	INDEX_BUSPOWER_EXTERNAL_DIGITAL,
2030c0d06caSMauro Carvalho Chehab 	INDEX_BUSPOWER_DIGITAL_ANALOG,
2040c0d06caSMauro Carvalho Chehab 	INDEX_BUSPOWER_DIGITAL_DIF,
2050c0d06caSMauro Carvalho Chehab 	INDEX_BUSPOWER_DIGITAL_ANALOG_EXTERNAL,
2060c0d06caSMauro Carvalho Chehab 	INDEX_BUSPOWER_DIGITAL_DIF_EXTERNAL,
2070c0d06caSMauro Carvalho Chehab };
2080c0d06caSMauro Carvalho Chehab 
2090c0d06caSMauro Carvalho Chehab /***************************************************************************/
2100c0d06caSMauro Carvalho Chehab struct cx231xx;
2110c0d06caSMauro Carvalho Chehab 
21252841e5eSMauro Carvalho Chehab int initialize_cx231xx(struct cx231xx *p_dev);
2130c0d06caSMauro Carvalho Chehab 
2140c0d06caSMauro Carvalho Chehab #endif
215