1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 29a0bf528SMauro Carvalho Chehab #ifndef DIBX000_COMMON_H 39a0bf528SMauro Carvalho Chehab #define DIBX000_COMMON_H 49a0bf528SMauro Carvalho Chehab 59a0bf528SMauro Carvalho Chehab enum dibx000_i2c_interface { 69a0bf528SMauro Carvalho Chehab DIBX000_I2C_INTERFACE_TUNER = 0, 79a0bf528SMauro Carvalho Chehab DIBX000_I2C_INTERFACE_GPIO_1_2 = 1, 89a0bf528SMauro Carvalho Chehab DIBX000_I2C_INTERFACE_GPIO_3_4 = 2, 99a0bf528SMauro Carvalho Chehab DIBX000_I2C_INTERFACE_GPIO_6_7 = 3 109a0bf528SMauro Carvalho Chehab }; 119a0bf528SMauro Carvalho Chehab 129a0bf528SMauro Carvalho Chehab struct dibx000_i2c_master { 139a0bf528SMauro Carvalho Chehab #define DIB3000MC 1 149a0bf528SMauro Carvalho Chehab #define DIB7000 2 159a0bf528SMauro Carvalho Chehab #define DIB7000P 11 169a0bf528SMauro Carvalho Chehab #define DIB7000MC 12 179a0bf528SMauro Carvalho Chehab #define DIB8000 13 189a0bf528SMauro Carvalho Chehab u16 device_rev; 199a0bf528SMauro Carvalho Chehab 209a0bf528SMauro Carvalho Chehab enum dibx000_i2c_interface selected_interface; 219a0bf528SMauro Carvalho Chehab 229a0bf528SMauro Carvalho Chehab /* struct i2c_adapter tuner_i2c_adap; */ 239a0bf528SMauro Carvalho Chehab struct i2c_adapter gated_tuner_i2c_adap; 249a0bf528SMauro Carvalho Chehab struct i2c_adapter master_i2c_adap_gpio12; 259a0bf528SMauro Carvalho Chehab struct i2c_adapter master_i2c_adap_gpio34; 269a0bf528SMauro Carvalho Chehab struct i2c_adapter master_i2c_adap_gpio67; 279a0bf528SMauro Carvalho Chehab 289a0bf528SMauro Carvalho Chehab struct i2c_adapter *i2c_adap; 299a0bf528SMauro Carvalho Chehab u8 i2c_addr; 309a0bf528SMauro Carvalho Chehab 319a0bf528SMauro Carvalho Chehab u16 base_reg; 329a0bf528SMauro Carvalho Chehab 339a0bf528SMauro Carvalho Chehab /* for the I2C transfer */ 349a0bf528SMauro Carvalho Chehab struct i2c_msg msg[34]; 359a0bf528SMauro Carvalho Chehab u8 i2c_write_buffer[8]; 369a0bf528SMauro Carvalho Chehab u8 i2c_read_buffer[2]; 379a0bf528SMauro Carvalho Chehab struct mutex i2c_buffer_lock; 389a0bf528SMauro Carvalho Chehab }; 399a0bf528SMauro Carvalho Chehab 409a0bf528SMauro Carvalho Chehab extern int dibx000_init_i2c_master(struct dibx000_i2c_master *mst, 419a0bf528SMauro Carvalho Chehab u16 device_rev, struct i2c_adapter *i2c_adap, 429a0bf528SMauro Carvalho Chehab u8 i2c_addr); 439a0bf528SMauro Carvalho Chehab extern struct i2c_adapter *dibx000_get_i2c_adapter(struct dibx000_i2c_master 449a0bf528SMauro Carvalho Chehab *mst, 459a0bf528SMauro Carvalho Chehab enum dibx000_i2c_interface 469a0bf528SMauro Carvalho Chehab intf, int gating); 479a0bf528SMauro Carvalho Chehab extern void dibx000_exit_i2c_master(struct dibx000_i2c_master *mst); 489a0bf528SMauro Carvalho Chehab extern void dibx000_reset_i2c_master(struct dibx000_i2c_master *mst); 499a0bf528SMauro Carvalho Chehab extern int dibx000_i2c_set_speed(struct i2c_adapter *i2c_adap, u16 speed); 509a0bf528SMauro Carvalho Chehab 519a0bf528SMauro Carvalho Chehab #define BAND_LBAND 0x01 529a0bf528SMauro Carvalho Chehab #define BAND_UHF 0x02 539a0bf528SMauro Carvalho Chehab #define BAND_VHF 0x04 549a0bf528SMauro Carvalho Chehab #define BAND_SBAND 0x08 559a0bf528SMauro Carvalho Chehab #define BAND_FM 0x10 569a0bf528SMauro Carvalho Chehab #define BAND_CBAND 0x20 579a0bf528SMauro Carvalho Chehab 589a0bf528SMauro Carvalho Chehab #define BAND_OF_FREQUENCY(freq_kHz) ((freq_kHz) <= 170000 ? BAND_CBAND : \ 599a0bf528SMauro Carvalho Chehab (freq_kHz) <= 115000 ? BAND_FM : \ 609a0bf528SMauro Carvalho Chehab (freq_kHz) <= 250000 ? BAND_VHF : \ 619a0bf528SMauro Carvalho Chehab (freq_kHz) <= 863000 ? BAND_UHF : \ 629a0bf528SMauro Carvalho Chehab (freq_kHz) <= 2000000 ? BAND_LBAND : BAND_SBAND ) 639a0bf528SMauro Carvalho Chehab 649a0bf528SMauro Carvalho Chehab struct dibx000_agc_config { 659a0bf528SMauro Carvalho Chehab /* defines the capabilities of this AGC-setting - using the BAND_-defines */ 669a0bf528SMauro Carvalho Chehab u8 band_caps; 679a0bf528SMauro Carvalho Chehab 689a0bf528SMauro Carvalho Chehab u16 setup; 699a0bf528SMauro Carvalho Chehab 709a0bf528SMauro Carvalho Chehab u16 inv_gain; 719a0bf528SMauro Carvalho Chehab u16 time_stabiliz; 729a0bf528SMauro Carvalho Chehab 739a0bf528SMauro Carvalho Chehab u8 alpha_level; 749a0bf528SMauro Carvalho Chehab u16 thlock; 759a0bf528SMauro Carvalho Chehab 769a0bf528SMauro Carvalho Chehab u8 wbd_inv; 779a0bf528SMauro Carvalho Chehab u16 wbd_ref; 789a0bf528SMauro Carvalho Chehab u8 wbd_sel; 799a0bf528SMauro Carvalho Chehab u8 wbd_alpha; 809a0bf528SMauro Carvalho Chehab 819a0bf528SMauro Carvalho Chehab u16 agc1_max; 829a0bf528SMauro Carvalho Chehab u16 agc1_min; 839a0bf528SMauro Carvalho Chehab u16 agc2_max; 849a0bf528SMauro Carvalho Chehab u16 agc2_min; 859a0bf528SMauro Carvalho Chehab 869a0bf528SMauro Carvalho Chehab u8 agc1_pt1; 879a0bf528SMauro Carvalho Chehab u8 agc1_pt2; 889a0bf528SMauro Carvalho Chehab u8 agc1_pt3; 899a0bf528SMauro Carvalho Chehab 909a0bf528SMauro Carvalho Chehab u8 agc1_slope1; 919a0bf528SMauro Carvalho Chehab u8 agc1_slope2; 929a0bf528SMauro Carvalho Chehab 939a0bf528SMauro Carvalho Chehab u8 agc2_pt1; 949a0bf528SMauro Carvalho Chehab u8 agc2_pt2; 959a0bf528SMauro Carvalho Chehab 969a0bf528SMauro Carvalho Chehab u8 agc2_slope1; 979a0bf528SMauro Carvalho Chehab u8 agc2_slope2; 989a0bf528SMauro Carvalho Chehab 999a0bf528SMauro Carvalho Chehab u8 alpha_mant; 1009a0bf528SMauro Carvalho Chehab u8 alpha_exp; 1019a0bf528SMauro Carvalho Chehab 1029a0bf528SMauro Carvalho Chehab u8 beta_mant; 1039a0bf528SMauro Carvalho Chehab u8 beta_exp; 1049a0bf528SMauro Carvalho Chehab 1059a0bf528SMauro Carvalho Chehab u8 perform_agc_softsplit; 1069a0bf528SMauro Carvalho Chehab 1079a0bf528SMauro Carvalho Chehab struct { 1089a0bf528SMauro Carvalho Chehab u16 min; 1099a0bf528SMauro Carvalho Chehab u16 max; 1109a0bf528SMauro Carvalho Chehab u16 min_thres; 1119a0bf528SMauro Carvalho Chehab u16 max_thres; 1129a0bf528SMauro Carvalho Chehab } split; 1139a0bf528SMauro Carvalho Chehab }; 1149a0bf528SMauro Carvalho Chehab 1159a0bf528SMauro Carvalho Chehab struct dibx000_bandwidth_config { 1169a0bf528SMauro Carvalho Chehab u32 internal; 1179a0bf528SMauro Carvalho Chehab u32 sampling; 1189a0bf528SMauro Carvalho Chehab 1199a0bf528SMauro Carvalho Chehab u8 pll_prediv; 1209a0bf528SMauro Carvalho Chehab u8 pll_ratio; 1219a0bf528SMauro Carvalho Chehab u8 pll_range; 1229a0bf528SMauro Carvalho Chehab u8 pll_reset; 1239a0bf528SMauro Carvalho Chehab u8 pll_bypass; 1249a0bf528SMauro Carvalho Chehab 1259a0bf528SMauro Carvalho Chehab u8 enable_refdiv; 1269a0bf528SMauro Carvalho Chehab u8 bypclk_div; 1279a0bf528SMauro Carvalho Chehab u8 IO_CLK_en_core; 1289a0bf528SMauro Carvalho Chehab u8 ADClkSrc; 1299a0bf528SMauro Carvalho Chehab u8 modulo; 1309a0bf528SMauro Carvalho Chehab 1319a0bf528SMauro Carvalho Chehab u16 sad_cfg; 1329a0bf528SMauro Carvalho Chehab 1339a0bf528SMauro Carvalho Chehab u32 ifreq; 1349a0bf528SMauro Carvalho Chehab u32 timf; 1359a0bf528SMauro Carvalho Chehab 1369a0bf528SMauro Carvalho Chehab u32 xtal_hz; 1379a0bf528SMauro Carvalho Chehab }; 1389a0bf528SMauro Carvalho Chehab 1399a0bf528SMauro Carvalho Chehab enum dibx000_adc_states { 1409a0bf528SMauro Carvalho Chehab DIBX000_SLOW_ADC_ON = 0, 1419a0bf528SMauro Carvalho Chehab DIBX000_SLOW_ADC_OFF, 1429a0bf528SMauro Carvalho Chehab DIBX000_ADC_ON, 1439a0bf528SMauro Carvalho Chehab DIBX000_ADC_OFF, 1449a0bf528SMauro Carvalho Chehab DIBX000_VBG_ENABLE, 1459a0bf528SMauro Carvalho Chehab DIBX000_VBG_DISABLE, 1469a0bf528SMauro Carvalho Chehab }; 1479a0bf528SMauro Carvalho Chehab 1489a0bf528SMauro Carvalho Chehab #define BANDWIDTH_TO_KHZ(v) ((v) / 1000) 1499a0bf528SMauro Carvalho Chehab #define BANDWIDTH_TO_HZ(v) ((v) * 1000) 1509a0bf528SMauro Carvalho Chehab 1519a0bf528SMauro Carvalho Chehab /* Chip output mode. */ 1529a0bf528SMauro Carvalho Chehab #define OUTMODE_HIGH_Z 0 1539a0bf528SMauro Carvalho Chehab #define OUTMODE_MPEG2_PAR_GATED_CLK 1 1549a0bf528SMauro Carvalho Chehab #define OUTMODE_MPEG2_PAR_CONT_CLK 2 1559a0bf528SMauro Carvalho Chehab #define OUTMODE_MPEG2_SERIAL 7 1569a0bf528SMauro Carvalho Chehab #define OUTMODE_DIVERSITY 4 1579a0bf528SMauro Carvalho Chehab #define OUTMODE_MPEG2_FIFO 5 1589a0bf528SMauro Carvalho Chehab #define OUTMODE_ANALOG_ADC 6 1599a0bf528SMauro Carvalho Chehab 1609a0bf528SMauro Carvalho Chehab #define INPUT_MODE_OFF 0x11 1619a0bf528SMauro Carvalho Chehab #define INPUT_MODE_DIVERSITY 0x12 1629a0bf528SMauro Carvalho Chehab #define INPUT_MODE_MPEG 0x13 1639a0bf528SMauro Carvalho Chehab 1649a0bf528SMauro Carvalho Chehab enum frontend_tune_state { 1659a0bf528SMauro Carvalho Chehab CT_TUNER_START = 10, 1669a0bf528SMauro Carvalho Chehab CT_TUNER_STEP_0, 1679a0bf528SMauro Carvalho Chehab CT_TUNER_STEP_1, 1689a0bf528SMauro Carvalho Chehab CT_TUNER_STEP_2, 1699a0bf528SMauro Carvalho Chehab CT_TUNER_STEP_3, 1709a0bf528SMauro Carvalho Chehab CT_TUNER_STEP_4, 1719a0bf528SMauro Carvalho Chehab CT_TUNER_STEP_5, 1729a0bf528SMauro Carvalho Chehab CT_TUNER_STEP_6, 1739a0bf528SMauro Carvalho Chehab CT_TUNER_STEP_7, 1749a0bf528SMauro Carvalho Chehab CT_TUNER_STOP, 1759a0bf528SMauro Carvalho Chehab 1769a0bf528SMauro Carvalho Chehab CT_AGC_START = 20, 1779a0bf528SMauro Carvalho Chehab CT_AGC_STEP_0, 1789a0bf528SMauro Carvalho Chehab CT_AGC_STEP_1, 1799a0bf528SMauro Carvalho Chehab CT_AGC_STEP_2, 1809a0bf528SMauro Carvalho Chehab CT_AGC_STEP_3, 1819a0bf528SMauro Carvalho Chehab CT_AGC_STEP_4, 1829a0bf528SMauro Carvalho Chehab CT_AGC_STOP, 1839a0bf528SMauro Carvalho Chehab 1849a0bf528SMauro Carvalho Chehab CT_DEMOD_START = 30, 1859a0bf528SMauro Carvalho Chehab CT_DEMOD_STEP_1, 1869a0bf528SMauro Carvalho Chehab CT_DEMOD_STEP_2, 1879a0bf528SMauro Carvalho Chehab CT_DEMOD_STEP_3, 1889a0bf528SMauro Carvalho Chehab CT_DEMOD_STEP_4, 1899a0bf528SMauro Carvalho Chehab CT_DEMOD_STEP_5, 1909a0bf528SMauro Carvalho Chehab CT_DEMOD_STEP_6, 1919a0bf528SMauro Carvalho Chehab CT_DEMOD_STEP_7, 1929a0bf528SMauro Carvalho Chehab CT_DEMOD_STEP_8, 1939a0bf528SMauro Carvalho Chehab CT_DEMOD_STEP_9, 1949a0bf528SMauro Carvalho Chehab CT_DEMOD_STEP_10, 195173a64cbSPatrick Boettcher CT_DEMOD_STEP_11, 196173a64cbSPatrick Boettcher CT_DEMOD_SEARCH_NEXT = 51, 1979a0bf528SMauro Carvalho Chehab CT_DEMOD_STEP_LOCKED, 1989a0bf528SMauro Carvalho Chehab CT_DEMOD_STOP, 1999a0bf528SMauro Carvalho Chehab 2009a0bf528SMauro Carvalho Chehab CT_DONE = 100, 2019a0bf528SMauro Carvalho Chehab CT_SHUTDOWN, 2029a0bf528SMauro Carvalho Chehab 2039a0bf528SMauro Carvalho Chehab }; 2049a0bf528SMauro Carvalho Chehab 2059a0bf528SMauro Carvalho Chehab struct dvb_frontend_parametersContext { 2069a0bf528SMauro Carvalho Chehab #define CHANNEL_STATUS_PARAMETERS_UNKNOWN 0x01 2079a0bf528SMauro Carvalho Chehab #define CHANNEL_STATUS_PARAMETERS_SET 0x02 2089a0bf528SMauro Carvalho Chehab u8 status; 2099a0bf528SMauro Carvalho Chehab u32 tune_time_estimation[2]; 2109a0bf528SMauro Carvalho Chehab s32 tps_available; 2119a0bf528SMauro Carvalho Chehab u16 tps[9]; 2129a0bf528SMauro Carvalho Chehab }; 2139a0bf528SMauro Carvalho Chehab 2149a0bf528SMauro Carvalho Chehab #define FE_STATUS_TUNE_FAILED 0 2159a0bf528SMauro Carvalho Chehab #define FE_STATUS_TUNE_TIMED_OUT -1 2169a0bf528SMauro Carvalho Chehab #define FE_STATUS_TUNE_TIME_TOO_SHORT -2 2179a0bf528SMauro Carvalho Chehab #define FE_STATUS_TUNE_PENDING -3 2189a0bf528SMauro Carvalho Chehab #define FE_STATUS_STD_SUCCESS -4 2199a0bf528SMauro Carvalho Chehab #define FE_STATUS_FFT_SUCCESS -5 2209a0bf528SMauro Carvalho Chehab #define FE_STATUS_DEMOD_SUCCESS -6 2219a0bf528SMauro Carvalho Chehab #define FE_STATUS_LOCKED -7 2229a0bf528SMauro Carvalho Chehab #define FE_STATUS_DATA_LOCKED -8 2239a0bf528SMauro Carvalho Chehab 2249a0bf528SMauro Carvalho Chehab #define FE_CALLBACK_TIME_NEVER 0xffffffff 2259a0bf528SMauro Carvalho Chehab 2269a0bf528SMauro Carvalho Chehab #define DATA_BUS_ACCESS_MODE_8BIT 0x01 2279a0bf528SMauro Carvalho Chehab #define DATA_BUS_ACCESS_MODE_16BIT 0x02 2289a0bf528SMauro Carvalho Chehab #define DATA_BUS_ACCESS_MODE_NO_ADDRESS_INCREMENT 0x10 2299a0bf528SMauro Carvalho Chehab 2309a0bf528SMauro Carvalho Chehab struct dibGPIOFunction { 2319a0bf528SMauro Carvalho Chehab #define BOARD_GPIO_COMPONENT_BUS_ADAPTER 1 2329a0bf528SMauro Carvalho Chehab #define BOARD_GPIO_COMPONENT_DEMOD 2 2339a0bf528SMauro Carvalho Chehab u8 component; 2349a0bf528SMauro Carvalho Chehab 2359a0bf528SMauro Carvalho Chehab #define BOARD_GPIO_FUNCTION_BOARD_ON 1 2369a0bf528SMauro Carvalho Chehab #define BOARD_GPIO_FUNCTION_BOARD_OFF 2 2379a0bf528SMauro Carvalho Chehab #define BOARD_GPIO_FUNCTION_COMPONENT_ON 3 2389a0bf528SMauro Carvalho Chehab #define BOARD_GPIO_FUNCTION_COMPONENT_OFF 4 2399a0bf528SMauro Carvalho Chehab #define BOARD_GPIO_FUNCTION_SUBBAND_PWM 5 2409a0bf528SMauro Carvalho Chehab #define BOARD_GPIO_FUNCTION_SUBBAND_GPIO 6 2419a0bf528SMauro Carvalho Chehab u8 function; 2429a0bf528SMauro Carvalho Chehab 2439a0bf528SMauro Carvalho Chehab /* mask, direction and value are used specify which GPIO to change GPIO0 2449a0bf528SMauro Carvalho Chehab * is LSB and possible GPIO31 is MSB. The same bit-position as in the 2459a0bf528SMauro Carvalho Chehab * mask is used for the direction and the value. Direction == 1 is OUT, 2469a0bf528SMauro Carvalho Chehab * 0 == IN. For direction "OUT" value is either 1 or 0, for direction IN 2479a0bf528SMauro Carvalho Chehab * value has no meaning. 2489a0bf528SMauro Carvalho Chehab * 2499a0bf528SMauro Carvalho Chehab * In case of BOARD_GPIO_FUNCTION_PWM mask is giving the GPIO to be 2509a0bf528SMauro Carvalho Chehab * used to do the PWM. Direction gives the PWModulator to be used. 2519a0bf528SMauro Carvalho Chehab * Value gives the PWM value in device-dependent scale. 2529a0bf528SMauro Carvalho Chehab */ 2539a0bf528SMauro Carvalho Chehab u32 mask; 2549a0bf528SMauro Carvalho Chehab u32 direction; 2559a0bf528SMauro Carvalho Chehab u32 value; 2569a0bf528SMauro Carvalho Chehab }; 2579a0bf528SMauro Carvalho Chehab 2589a0bf528SMauro Carvalho Chehab #define MAX_NB_SUBBANDS 8 2599a0bf528SMauro Carvalho Chehab struct dibSubbandSelection { 2609a0bf528SMauro Carvalho Chehab u8 size; /* Actual number of subbands. */ 2619a0bf528SMauro Carvalho Chehab struct { 2629a0bf528SMauro Carvalho Chehab u16 f_mhz; 2639a0bf528SMauro Carvalho Chehab struct dibGPIOFunction gpio; 2649a0bf528SMauro Carvalho Chehab } subband[MAX_NB_SUBBANDS]; 2659a0bf528SMauro Carvalho Chehab }; 2669a0bf528SMauro Carvalho Chehab 2679a0bf528SMauro Carvalho Chehab #define DEMOD_TIMF_SET 0x00 2689a0bf528SMauro Carvalho Chehab #define DEMOD_TIMF_GET 0x01 2699a0bf528SMauro Carvalho Chehab #define DEMOD_TIMF_UPDATE 0x02 2709a0bf528SMauro Carvalho Chehab 2719a0bf528SMauro Carvalho Chehab #define MPEG_ON_DIBTX 1 2729a0bf528SMauro Carvalho Chehab #define DIV_ON_DIBTX 2 2739a0bf528SMauro Carvalho Chehab #define ADC_ON_DIBTX 3 2749a0bf528SMauro Carvalho Chehab #define DEMOUT_ON_HOSTBUS 4 2759a0bf528SMauro Carvalho Chehab #define DIBTX_ON_HOSTBUS 5 2769a0bf528SMauro Carvalho Chehab #define MPEG_ON_HOSTBUS 6 2779a0bf528SMauro Carvalho Chehab 2789a0bf528SMauro Carvalho Chehab #endif 279