162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci   cx231xx-pcb-cfg.h - driver for Conexant
462306a36Sopenharmony_ci		Cx23100/101/102 USB video capture devices
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci   Copyright (C) 2008 <srinivasa.deevi at conexant dot com>
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#ifndef _PCB_CONFIG_H_
1162306a36Sopenharmony_ci#define _PCB_CONFIG_H_
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#include <linux/init.h>
1462306a36Sopenharmony_ci#include <linux/module.h>
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci/***************************************************************************
1762306a36Sopenharmony_ci				* Class Information *
1862306a36Sopenharmony_ci***************************************************************************/
1962306a36Sopenharmony_ci#define CLASS_DEFAULT       0xFF
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_cienum VENDOR_REQUEST_TYPE {
2262306a36Sopenharmony_ci	/* Set/Get I2C */
2362306a36Sopenharmony_ci	VRT_SET_I2C0 = 0x0,
2462306a36Sopenharmony_ci	VRT_SET_I2C1 = 0x1,
2562306a36Sopenharmony_ci	VRT_SET_I2C2 = 0x2,
2662306a36Sopenharmony_ci	VRT_GET_I2C0 = 0x4,
2762306a36Sopenharmony_ci	VRT_GET_I2C1 = 0x5,
2862306a36Sopenharmony_ci	VRT_GET_I2C2 = 0x6,
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci	/* Set/Get GPIO */
3162306a36Sopenharmony_ci	VRT_SET_GPIO = 0x8,
3262306a36Sopenharmony_ci	VRT_GET_GPIO = 0x9,
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci	/* Set/Get GPIE */
3562306a36Sopenharmony_ci	VRT_SET_GPIE = 0xA,
3662306a36Sopenharmony_ci	VRT_GET_GPIE = 0xB,
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci	/* Set/Get Register Control/Status */
3962306a36Sopenharmony_ci	VRT_SET_REGISTER = 0xC,
4062306a36Sopenharmony_ci	VRT_GET_REGISTER = 0xD,
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci	/* Get Extended Compat ID Descriptor */
4362306a36Sopenharmony_ci	VRT_GET_EXTCID_DESC = 0xFF,
4462306a36Sopenharmony_ci};
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_cienum BYTE_ENABLE_MASK {
4762306a36Sopenharmony_ci	ENABLE_ONE_BYTE = 0x1,
4862306a36Sopenharmony_ci	ENABLE_TWE_BYTE = 0x3,
4962306a36Sopenharmony_ci	ENABLE_THREE_BYTE = 0x7,
5062306a36Sopenharmony_ci	ENABLE_FOUR_BYTE = 0xF,
5162306a36Sopenharmony_ci};
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci#define SPEED_MASK      0x1
5462306a36Sopenharmony_cienum USB_SPEED{
5562306a36Sopenharmony_ci	FULL_SPEED = 0x0,	/* 0: full speed */
5662306a36Sopenharmony_ci	HIGH_SPEED = 0x1	/* 1: high speed */
5762306a36Sopenharmony_ci};
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci#define TS_MASK         0x6
6062306a36Sopenharmony_cienum TS_PORT{
6162306a36Sopenharmony_ci	NO_TS_PORT = 0x0,	/* 2'b00: Neither port used. PCB not a Hybrid,
6262306a36Sopenharmony_ci				   only offers Analog TV or Video */
6362306a36Sopenharmony_ci	TS1_PORT = 0x4,		/* 2'b10: TS1 Input (Hybrid mode :
6462306a36Sopenharmony_ci				Digital or External Analog/Compressed source) */
6562306a36Sopenharmony_ci	TS1_TS2_PORT = 0x6,	/* 2'b11: TS1 & TS2 Inputs
6662306a36Sopenharmony_ci				(Dual inputs from Digital and/or
6762306a36Sopenharmony_ci				External Analog/Compressed sources) */
6862306a36Sopenharmony_ci	TS1_EXT_CLOCK = 0x6,	/* 2'b11: TS1 & TS2 as selector
6962306a36Sopenharmony_ci						to external clock */
7062306a36Sopenharmony_ci	TS1VIP_TS2_PORT = 0x2	/* 2'b01: TS1 used as 656/VIP Output,
7162306a36Sopenharmony_ci				   TS2 Input (from Compressor) */
7262306a36Sopenharmony_ci};
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci#define EAVP_MASK       0x8
7562306a36Sopenharmony_cienum EAV_PRESENT{
7662306a36Sopenharmony_ci	NO_EXTERNAL_AV = 0x0,	/* 0: No External A/V inputs
7762306a36Sopenharmony_ci						(no need for i2s block),
7862306a36Sopenharmony_ci						Analog Tuner must be present */
7962306a36Sopenharmony_ci	EXTERNAL_AV = 0x8	/* 1: External A/V inputs
8062306a36Sopenharmony_ci						present (requires i2s blk) */
8162306a36Sopenharmony_ci};
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci#define ATM_MASK        0x30
8462306a36Sopenharmony_cienum AT_MODE{
8562306a36Sopenharmony_ci	DIF_TUNER = 0x30,	/* 2'b11: IF Tuner (requires use of DIF) */
8662306a36Sopenharmony_ci	BASEBAND_SOUND = 0x20,	/* 2'b10: Baseband Composite &
8762306a36Sopenharmony_ci						Sound-IF Signals present */
8862306a36Sopenharmony_ci	NO_TUNER = 0x10		/* 2'b0x: No Analog Tuner present */
8962306a36Sopenharmony_ci};
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci#define PWR_SEL_MASK    0x40
9262306a36Sopenharmony_cienum POWE_TYPE{
9362306a36Sopenharmony_ci	SELF_POWER = 0x0,	/* 0: self power */
9462306a36Sopenharmony_ci	BUS_POWER = 0x40	/* 1: bus power */
9562306a36Sopenharmony_ci};
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_cienum USB_POWE_TYPE{
9862306a36Sopenharmony_ci	USB_SELF_POWER = 0,
9962306a36Sopenharmony_ci	USB_BUS_POWER
10062306a36Sopenharmony_ci};
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci#define BO_0_MASK       0x80
10362306a36Sopenharmony_cienum AVDEC_STATUS{
10462306a36Sopenharmony_ci	AVDEC_DISABLE = 0x0,	/* 0: A/V Decoder Disabled */
10562306a36Sopenharmony_ci	AVDEC_ENABLE = 0x80	/* 1: A/V Decoder Enabled */
10662306a36Sopenharmony_ci};
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci#define BO_1_MASK       0x100
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ci#define BUSPOWER_MASK   0xC4	/* for Polaris spec 0.8 */
11162306a36Sopenharmony_ci#define SELFPOWER_MASK  0x86
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci/***************************************************************************/
11462306a36Sopenharmony_ci#define NOT_DECIDE_YET  0xFE
11562306a36Sopenharmony_ci#define NOT_SUPPORTED   0xFF
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci/***************************************************************************
11862306a36Sopenharmony_ci				* for mod field use *
11962306a36Sopenharmony_ci***************************************************************************/
12062306a36Sopenharmony_ci#define MOD_DIGITAL     0x1
12162306a36Sopenharmony_ci#define MOD_ANALOG      0x2
12262306a36Sopenharmony_ci#define MOD_DIF         0x4
12362306a36Sopenharmony_ci#define MOD_EXTERNAL    0x8
12462306a36Sopenharmony_ci#define CAP_ALL_MOD     0x0f
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci/***************************************************************************
12762306a36Sopenharmony_ci				* source define *
12862306a36Sopenharmony_ci***************************************************************************/
12962306a36Sopenharmony_ci#define SOURCE_DIGITAL          0x1
13062306a36Sopenharmony_ci#define SOURCE_ANALOG           0x2
13162306a36Sopenharmony_ci#define SOURCE_DIF              0x4
13262306a36Sopenharmony_ci#define SOURCE_EXTERNAL         0x8
13362306a36Sopenharmony_ci#define SOURCE_TS_BDA			0x10
13462306a36Sopenharmony_ci#define SOURCE_TS_ENCODE		0x20
13562306a36Sopenharmony_ci#define SOURCE_TS_EXTERNAL	0x40
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ci/***************************************************************************
13862306a36Sopenharmony_ci				* interface information define *
13962306a36Sopenharmony_ci***************************************************************************/
14062306a36Sopenharmony_cistruct INTERFACE_INFO {
14162306a36Sopenharmony_ci	u8 interrupt_index;
14262306a36Sopenharmony_ci	u8 ts1_index;
14362306a36Sopenharmony_ci	u8 ts2_index;
14462306a36Sopenharmony_ci	u8 audio_index;
14562306a36Sopenharmony_ci	u8 video_index;
14662306a36Sopenharmony_ci	u8 vanc_index;		/* VBI */
14762306a36Sopenharmony_ci	u8 hanc_index;		/* Sliced CC */
14862306a36Sopenharmony_ci	u8 ir_index;
14962306a36Sopenharmony_ci};
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_cienum INDEX_INTERFACE_INFO{
15262306a36Sopenharmony_ci	INDEX_INTERRUPT = 0x0,
15362306a36Sopenharmony_ci	INDEX_TS1,
15462306a36Sopenharmony_ci	INDEX_TS2,
15562306a36Sopenharmony_ci	INDEX_AUDIO,
15662306a36Sopenharmony_ci	INDEX_VIDEO,
15762306a36Sopenharmony_ci	INDEX_VANC,
15862306a36Sopenharmony_ci	INDEX_HANC,
15962306a36Sopenharmony_ci	INDEX_IR,
16062306a36Sopenharmony_ci};
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ci/***************************************************************************
16362306a36Sopenharmony_ci				* configuration information define *
16462306a36Sopenharmony_ci***************************************************************************/
16562306a36Sopenharmony_cistruct CONFIG_INFO {
16662306a36Sopenharmony_ci	u8 config_index;
16762306a36Sopenharmony_ci	struct INTERFACE_INFO interface_info;
16862306a36Sopenharmony_ci};
16962306a36Sopenharmony_ci
17062306a36Sopenharmony_cistruct pcb_config {
17162306a36Sopenharmony_ci	u8 index;
17262306a36Sopenharmony_ci	u8 type;		/* bus power or self power,
17362306a36Sopenharmony_ci					   self power--0, bus_power--1 */
17462306a36Sopenharmony_ci	u8 speed;		/* usb speed, 2.0--1, 1.1--0 */
17562306a36Sopenharmony_ci	u8 mode;		/* digital , anlog, dif or external A/V */
17662306a36Sopenharmony_ci	u32 ts1_source;		/* three source -- BDA,External,encode */
17762306a36Sopenharmony_ci	u32 ts2_source;
17862306a36Sopenharmony_ci	u32 analog_source;
17962306a36Sopenharmony_ci	u8 digital_index;	/* bus-power used */
18062306a36Sopenharmony_ci	u8 analog_index;	/* bus-power used */
18162306a36Sopenharmony_ci	u8 dif_index;		/* bus-power used */
18262306a36Sopenharmony_ci	u8 external_index;	/* bus-power used */
18362306a36Sopenharmony_ci	u8 config_num;		/* current config num, 0,1,2,
18462306a36Sopenharmony_ci						   for self-power, always 0 */
18562306a36Sopenharmony_ci	struct CONFIG_INFO hs_config_info[3];
18662306a36Sopenharmony_ci	struct CONFIG_INFO fs_config_info[3];
18762306a36Sopenharmony_ci};
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_cienum INDEX_PCB_CONFIG{
19062306a36Sopenharmony_ci	INDEX_SELFPOWER_DIGITAL_ONLY = 0x0,
19162306a36Sopenharmony_ci	INDEX_SELFPOWER_DUAL_DIGITAL,
19262306a36Sopenharmony_ci	INDEX_SELFPOWER_ANALOG_ONLY,
19362306a36Sopenharmony_ci	INDEX_SELFPOWER_DUAL,
19462306a36Sopenharmony_ci	INDEX_SELFPOWER_TRIPLE,
19562306a36Sopenharmony_ci	INDEX_SELFPOWER_COMPRESSOR,
19662306a36Sopenharmony_ci	INDEX_BUSPOWER_DIGITAL_ONLY,
19762306a36Sopenharmony_ci	INDEX_BUSPOWER_ANALOG_ONLY,
19862306a36Sopenharmony_ci	INDEX_BUSPOWER_DIF_ONLY,
19962306a36Sopenharmony_ci	INDEX_BUSPOWER_EXTERNAL_ONLY,
20062306a36Sopenharmony_ci	INDEX_BUSPOWER_EXTERNAL_ANALOG,
20162306a36Sopenharmony_ci	INDEX_BUSPOWER_EXTERNAL_DIF,
20262306a36Sopenharmony_ci	INDEX_BUSPOWER_EXTERNAL_DIGITAL,
20362306a36Sopenharmony_ci	INDEX_BUSPOWER_DIGITAL_ANALOG,
20462306a36Sopenharmony_ci	INDEX_BUSPOWER_DIGITAL_DIF,
20562306a36Sopenharmony_ci	INDEX_BUSPOWER_DIGITAL_ANALOG_EXTERNAL,
20662306a36Sopenharmony_ci	INDEX_BUSPOWER_DIGITAL_DIF_EXTERNAL,
20762306a36Sopenharmony_ci};
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ci/***************************************************************************/
21062306a36Sopenharmony_cistruct cx231xx;
21162306a36Sopenharmony_ci
21262306a36Sopenharmony_ciint initialize_cx231xx(struct cx231xx *p_dev);
21362306a36Sopenharmony_ci
21462306a36Sopenharmony_ci#endif
215