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