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