18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Support for the Broadcom BCM3510 ATSC demodulator (1st generation Air2PC) 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2001-5, B2C2 inc. 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * GPL/Linux driver written by Patrick Boettcher <patrick.boettcher@posteo.de> 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci#ifndef __BCM3510_PRIV_H__ 108c2ecf20Sopenharmony_ci#define __BCM3510_PRIV_H__ 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#define PACKED __attribute__((packed)) 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#undef err 158c2ecf20Sopenharmony_ci#define err(format, arg...) printk(KERN_ERR "bcm3510: " format "\n" , ## arg) 168c2ecf20Sopenharmony_ci#undef info 178c2ecf20Sopenharmony_ci#define info(format, arg...) printk(KERN_INFO "bcm3510: " format "\n" , ## arg) 188c2ecf20Sopenharmony_ci#undef warn 198c2ecf20Sopenharmony_ci#define warn(format, arg...) printk(KERN_WARNING "bcm3510: " format "\n" , ## arg) 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci#define PANASONIC_FIRST_IF_BASE_IN_KHz 1407500 238c2ecf20Sopenharmony_ci#define BCM3510_SYMBOL_RATE 5381000 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_citypedef union { 268c2ecf20Sopenharmony_ci u8 raw; 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci struct { 298c2ecf20Sopenharmony_ci u8 CTL :8; 308c2ecf20Sopenharmony_ci } TSTCTL_2e; 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci u8 LDCERC_4e; 338c2ecf20Sopenharmony_ci u8 LDUERC_4f; 348c2ecf20Sopenharmony_ci u8 LD_BER0_65; 358c2ecf20Sopenharmony_ci u8 LD_BER1_66; 368c2ecf20Sopenharmony_ci u8 LD_BER2_67; 378c2ecf20Sopenharmony_ci u8 LD_BER3_68; 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci struct { 408c2ecf20Sopenharmony_ci u8 RESET :1; 418c2ecf20Sopenharmony_ci u8 IDLE :1; 428c2ecf20Sopenharmony_ci u8 STOP :1; 438c2ecf20Sopenharmony_ci u8 HIRQ0 :1; 448c2ecf20Sopenharmony_ci u8 HIRQ1 :1; 458c2ecf20Sopenharmony_ci u8 na0 :1; 468c2ecf20Sopenharmony_ci u8 HABAV :1; 478c2ecf20Sopenharmony_ci u8 na1 :1; 488c2ecf20Sopenharmony_ci } HCTL1_a0; 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci struct { 518c2ecf20Sopenharmony_ci u8 na0 :1; 528c2ecf20Sopenharmony_ci u8 IDLMSK :1; 538c2ecf20Sopenharmony_ci u8 STMSK :1; 548c2ecf20Sopenharmony_ci u8 I0MSK :1; 558c2ecf20Sopenharmony_ci u8 I1MSK :1; 568c2ecf20Sopenharmony_ci u8 na1 :1; 578c2ecf20Sopenharmony_ci u8 HABMSK :1; 588c2ecf20Sopenharmony_ci u8 na2 :1; 598c2ecf20Sopenharmony_ci } HCTLMSK_a1; 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci struct { 628c2ecf20Sopenharmony_ci u8 RESET :1; 638c2ecf20Sopenharmony_ci u8 IDLE :1; 648c2ecf20Sopenharmony_ci u8 STOP :1; 658c2ecf20Sopenharmony_ci u8 RUN :1; 668c2ecf20Sopenharmony_ci u8 HABAV :1; 678c2ecf20Sopenharmony_ci u8 MEMAV :1; 688c2ecf20Sopenharmony_ci u8 ALDONE :1; 698c2ecf20Sopenharmony_ci u8 REIRQ :1; 708c2ecf20Sopenharmony_ci } APSTAT1_a2; 718c2ecf20Sopenharmony_ci 728c2ecf20Sopenharmony_ci struct { 738c2ecf20Sopenharmony_ci u8 RSTMSK :1; 748c2ecf20Sopenharmony_ci u8 IMSK :1; 758c2ecf20Sopenharmony_ci u8 SMSK :1; 768c2ecf20Sopenharmony_ci u8 RMSK :1; 778c2ecf20Sopenharmony_ci u8 HABMSK :1; 788c2ecf20Sopenharmony_ci u8 MAVMSK :1; 798c2ecf20Sopenharmony_ci u8 ALDMSK :1; 808c2ecf20Sopenharmony_ci u8 REMSK :1; 818c2ecf20Sopenharmony_ci } APMSK1_a3; 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ci u8 APSTAT2_a4; 848c2ecf20Sopenharmony_ci u8 APMSK2_a5; 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_ci struct { 878c2ecf20Sopenharmony_ci u8 HABADR :7; 888c2ecf20Sopenharmony_ci u8 na :1; 898c2ecf20Sopenharmony_ci } HABADR_a6; 908c2ecf20Sopenharmony_ci 918c2ecf20Sopenharmony_ci u8 HABDATA_a7; 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_ci struct { 948c2ecf20Sopenharmony_ci u8 HABR :1; 958c2ecf20Sopenharmony_ci u8 LDHABR :1; 968c2ecf20Sopenharmony_ci u8 APMSK :1; 978c2ecf20Sopenharmony_ci u8 HMSK :1; 988c2ecf20Sopenharmony_ci u8 LDMSK :1; 998c2ecf20Sopenharmony_ci u8 na :3; 1008c2ecf20Sopenharmony_ci } HABSTAT_a8; 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_ci u8 MADRH_a9; 1038c2ecf20Sopenharmony_ci u8 MADRL_aa; 1048c2ecf20Sopenharmony_ci u8 MDATA_ab; 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_ci struct { 1078c2ecf20Sopenharmony_ci#define JDEC_WAIT_AT_RAM 0x7 1088c2ecf20Sopenharmony_ci#define JDEC_EEPROM_LOAD_WAIT 0x4 1098c2ecf20Sopenharmony_ci u8 JDEC :3; 1108c2ecf20Sopenharmony_ci u8 na :5; 1118c2ecf20Sopenharmony_ci } JDEC_ca; 1128c2ecf20Sopenharmony_ci 1138c2ecf20Sopenharmony_ci struct { 1148c2ecf20Sopenharmony_ci u8 REV :4; 1158c2ecf20Sopenharmony_ci u8 LAYER :4; 1168c2ecf20Sopenharmony_ci } REVID_e0; 1178c2ecf20Sopenharmony_ci 1188c2ecf20Sopenharmony_ci struct { 1198c2ecf20Sopenharmony_ci u8 unk0 :1; 1208c2ecf20Sopenharmony_ci u8 CNTCTL :1; 1218c2ecf20Sopenharmony_ci u8 BITCNT :1; 1228c2ecf20Sopenharmony_ci u8 unk1 :1; 1238c2ecf20Sopenharmony_ci u8 RESYNC :1; 1248c2ecf20Sopenharmony_ci u8 unk2 :3; 1258c2ecf20Sopenharmony_ci } BERCTL_fa; 1268c2ecf20Sopenharmony_ci 1278c2ecf20Sopenharmony_ci struct { 1288c2ecf20Sopenharmony_ci u8 CSEL0 :1; 1298c2ecf20Sopenharmony_ci u8 CLKED0 :1; 1308c2ecf20Sopenharmony_ci u8 CSEL1 :1; 1318c2ecf20Sopenharmony_ci u8 CLKED1 :1; 1328c2ecf20Sopenharmony_ci u8 CLKLEV :1; 1338c2ecf20Sopenharmony_ci u8 SPIVAR :1; 1348c2ecf20Sopenharmony_ci u8 na :2; 1358c2ecf20Sopenharmony_ci } TUNSET_fc; 1368c2ecf20Sopenharmony_ci 1378c2ecf20Sopenharmony_ci struct { 1388c2ecf20Sopenharmony_ci u8 CLK :1; 1398c2ecf20Sopenharmony_ci u8 DATA :1; 1408c2ecf20Sopenharmony_ci u8 CS0 :1; 1418c2ecf20Sopenharmony_ci u8 CS1 :1; 1428c2ecf20Sopenharmony_ci u8 AGCSEL :1; 1438c2ecf20Sopenharmony_ci u8 na0 :1; 1448c2ecf20Sopenharmony_ci u8 TUNSEL :1; 1458c2ecf20Sopenharmony_ci u8 na1 :1; 1468c2ecf20Sopenharmony_ci } TUNCTL_fd; 1478c2ecf20Sopenharmony_ci 1488c2ecf20Sopenharmony_ci u8 TUNSEL0_fe; 1498c2ecf20Sopenharmony_ci u8 TUNSEL1_ff; 1508c2ecf20Sopenharmony_ci 1518c2ecf20Sopenharmony_ci} bcm3510_register_value; 1528c2ecf20Sopenharmony_ci 1538c2ecf20Sopenharmony_ci/* HAB commands */ 1548c2ecf20Sopenharmony_ci 1558c2ecf20Sopenharmony_ci/* version */ 1568c2ecf20Sopenharmony_ci#define CMD_GET_VERSION_INFO 0x3D 1578c2ecf20Sopenharmony_ci#define MSGID_GET_VERSION_INFO 0x15 1588c2ecf20Sopenharmony_cistruct bcm3510_hab_cmd_get_version_info { 1598c2ecf20Sopenharmony_ci u8 microcode_version; 1608c2ecf20Sopenharmony_ci u8 script_version; 1618c2ecf20Sopenharmony_ci u8 config_version; 1628c2ecf20Sopenharmony_ci u8 demod_version; 1638c2ecf20Sopenharmony_ci} PACKED; 1648c2ecf20Sopenharmony_ci 1658c2ecf20Sopenharmony_ci#define BCM3510_DEF_MICROCODE_VERSION 0x0E 1668c2ecf20Sopenharmony_ci#define BCM3510_DEF_SCRIPT_VERSION 0x06 1678c2ecf20Sopenharmony_ci#define BCM3510_DEF_CONFIG_VERSION 0x01 1688c2ecf20Sopenharmony_ci#define BCM3510_DEF_DEMOD_VERSION 0xB1 1698c2ecf20Sopenharmony_ci 1708c2ecf20Sopenharmony_ci/* acquire */ 1718c2ecf20Sopenharmony_ci#define CMD_ACQUIRE 0x38 1728c2ecf20Sopenharmony_ci 1738c2ecf20Sopenharmony_ci#define MSGID_EXT_TUNER_ACQUIRE 0x0A 1748c2ecf20Sopenharmony_cistruct bcm3510_hab_cmd_ext_acquire { 1758c2ecf20Sopenharmony_ci struct { 1768c2ecf20Sopenharmony_ci u8 MODE :4; 1778c2ecf20Sopenharmony_ci u8 BW :1; 1788c2ecf20Sopenharmony_ci u8 FA :1; 1798c2ecf20Sopenharmony_ci u8 NTSCSWEEP :1; 1808c2ecf20Sopenharmony_ci u8 OFFSET :1; 1818c2ecf20Sopenharmony_ci } PACKED ACQUIRE0; /* control_byte */ 1828c2ecf20Sopenharmony_ci 1838c2ecf20Sopenharmony_ci struct { 1848c2ecf20Sopenharmony_ci u8 IF_FREQ :3; 1858c2ecf20Sopenharmony_ci u8 zero0 :1; 1868c2ecf20Sopenharmony_ci u8 SYM_RATE :3; 1878c2ecf20Sopenharmony_ci u8 zero1 :1; 1888c2ecf20Sopenharmony_ci } PACKED ACQUIRE1; /* sym_if */ 1898c2ecf20Sopenharmony_ci 1908c2ecf20Sopenharmony_ci u8 IF_OFFSET0; /* IF_Offset_10hz */ 1918c2ecf20Sopenharmony_ci u8 IF_OFFSET1; 1928c2ecf20Sopenharmony_ci u8 SYM_OFFSET0; /* SymbolRateOffset */ 1938c2ecf20Sopenharmony_ci u8 SYM_OFFSET1; 1948c2ecf20Sopenharmony_ci u8 NTSC_OFFSET0; /* NTSC_Offset_10hz */ 1958c2ecf20Sopenharmony_ci u8 NTSC_OFFSET1; 1968c2ecf20Sopenharmony_ci} PACKED; 1978c2ecf20Sopenharmony_ci 1988c2ecf20Sopenharmony_ci#define MSGID_INT_TUNER_ACQUIRE 0x0B 1998c2ecf20Sopenharmony_cistruct bcm3510_hab_cmd_int_acquire { 2008c2ecf20Sopenharmony_ci struct { 2018c2ecf20Sopenharmony_ci u8 MODE :4; 2028c2ecf20Sopenharmony_ci u8 BW :1; 2038c2ecf20Sopenharmony_ci u8 FA :1; 2048c2ecf20Sopenharmony_ci u8 NTSCSWEEP :1; 2058c2ecf20Sopenharmony_ci u8 OFFSET :1; 2068c2ecf20Sopenharmony_ci } PACKED ACQUIRE0; /* control_byte */ 2078c2ecf20Sopenharmony_ci 2088c2ecf20Sopenharmony_ci struct { 2098c2ecf20Sopenharmony_ci u8 IF_FREQ :3; 2108c2ecf20Sopenharmony_ci u8 zero0 :1; 2118c2ecf20Sopenharmony_ci u8 SYM_RATE :3; 2128c2ecf20Sopenharmony_ci u8 zero1 :1; 2138c2ecf20Sopenharmony_ci } PACKED ACQUIRE1; /* sym_if */ 2148c2ecf20Sopenharmony_ci 2158c2ecf20Sopenharmony_ci u8 TUNER_FREQ0; 2168c2ecf20Sopenharmony_ci u8 TUNER_FREQ1; 2178c2ecf20Sopenharmony_ci u8 TUNER_FREQ2; 2188c2ecf20Sopenharmony_ci u8 TUNER_FREQ3; 2198c2ecf20Sopenharmony_ci u8 IF_OFFSET0; /* IF_Offset_10hz */ 2208c2ecf20Sopenharmony_ci u8 IF_OFFSET1; 2218c2ecf20Sopenharmony_ci u8 SYM_OFFSET0; /* SymbolRateOffset */ 2228c2ecf20Sopenharmony_ci u8 SYM_OFFSET1; 2238c2ecf20Sopenharmony_ci u8 NTSC_OFFSET0; /* NTSC_Offset_10hz */ 2248c2ecf20Sopenharmony_ci u8 NTSC_OFFSET1; 2258c2ecf20Sopenharmony_ci} PACKED; 2268c2ecf20Sopenharmony_ci 2278c2ecf20Sopenharmony_ci/* modes */ 2288c2ecf20Sopenharmony_ci#define BCM3510_QAM16 = 0x01 2298c2ecf20Sopenharmony_ci#define BCM3510_QAM32 = 0x02 2308c2ecf20Sopenharmony_ci#define BCM3510_QAM64 = 0x03 2318c2ecf20Sopenharmony_ci#define BCM3510_QAM128 = 0x04 2328c2ecf20Sopenharmony_ci#define BCM3510_QAM256 = 0x05 2338c2ecf20Sopenharmony_ci#define BCM3510_8VSB = 0x0B 2348c2ecf20Sopenharmony_ci#define BCM3510_16VSB = 0x0D 2358c2ecf20Sopenharmony_ci 2368c2ecf20Sopenharmony_ci/* IF_FREQS */ 2378c2ecf20Sopenharmony_ci#define BCM3510_IF_TERRESTRIAL 0x0 2388c2ecf20Sopenharmony_ci#define BCM3510_IF_CABLE 0x1 2398c2ecf20Sopenharmony_ci#define BCM3510_IF_USE_CMD 0x7 2408c2ecf20Sopenharmony_ci 2418c2ecf20Sopenharmony_ci/* SYM_RATE */ 2428c2ecf20Sopenharmony_ci#define BCM3510_SR_8VSB 0x0 /* 5381119 s/sec */ 2438c2ecf20Sopenharmony_ci#define BCM3510_SR_256QAM 0x1 /* 5360537 s/sec */ 2448c2ecf20Sopenharmony_ci#define BCM3510_SR_16QAM 0x2 /* 5056971 s/sec */ 2458c2ecf20Sopenharmony_ci#define BCM3510_SR_MISC 0x3 /* 5000000 s/sec */ 2468c2ecf20Sopenharmony_ci#define BCM3510_SR_USE_CMD 0x7 2478c2ecf20Sopenharmony_ci 2488c2ecf20Sopenharmony_ci/* special symbol rate */ 2498c2ecf20Sopenharmony_ci#define CMD_SET_VALUE_NOT_LISTED 0x2d 2508c2ecf20Sopenharmony_ci#define MSGID_SET_SYMBOL_RATE_NOT_LISTED 0x0c 2518c2ecf20Sopenharmony_cistruct bcm3510_hab_cmd_set_sr_not_listed { 2528c2ecf20Sopenharmony_ci u8 HOST_SYM_RATE0; 2538c2ecf20Sopenharmony_ci u8 HOST_SYM_RATE1; 2548c2ecf20Sopenharmony_ci u8 HOST_SYM_RATE2; 2558c2ecf20Sopenharmony_ci u8 HOST_SYM_RATE3; 2568c2ecf20Sopenharmony_ci} PACKED; 2578c2ecf20Sopenharmony_ci 2588c2ecf20Sopenharmony_ci/* special IF */ 2598c2ecf20Sopenharmony_ci#define MSGID_SET_IF_FREQ_NOT_LISTED 0x0d 2608c2ecf20Sopenharmony_cistruct bcm3510_hab_cmd_set_if_freq_not_listed { 2618c2ecf20Sopenharmony_ci u8 HOST_IF_FREQ0; 2628c2ecf20Sopenharmony_ci u8 HOST_IF_FREQ1; 2638c2ecf20Sopenharmony_ci u8 HOST_IF_FREQ2; 2648c2ecf20Sopenharmony_ci u8 HOST_IF_FREQ3; 2658c2ecf20Sopenharmony_ci} PACKED; 2668c2ecf20Sopenharmony_ci 2678c2ecf20Sopenharmony_ci/* auto reacquire */ 2688c2ecf20Sopenharmony_ci#define CMD_AUTO_PARAM 0x2a 2698c2ecf20Sopenharmony_ci#define MSGID_AUTO_REACQUIRE 0x0e 2708c2ecf20Sopenharmony_cistruct bcm3510_hab_cmd_auto_reacquire { 2718c2ecf20Sopenharmony_ci u8 ACQ :1; /* on/off*/ 2728c2ecf20Sopenharmony_ci u8 unused :7; 2738c2ecf20Sopenharmony_ci} PACKED; 2748c2ecf20Sopenharmony_ci 2758c2ecf20Sopenharmony_ci#define MSGID_SET_RF_AGC_SEL 0x12 2768c2ecf20Sopenharmony_cistruct bcm3510_hab_cmd_set_agc { 2778c2ecf20Sopenharmony_ci u8 LVL :1; 2788c2ecf20Sopenharmony_ci u8 unused :6; 2798c2ecf20Sopenharmony_ci u8 SEL :1; 2808c2ecf20Sopenharmony_ci} PACKED; 2818c2ecf20Sopenharmony_ci 2828c2ecf20Sopenharmony_ci#define MSGID_SET_AUTO_INVERSION 0x14 2838c2ecf20Sopenharmony_cistruct bcm3510_hab_cmd_auto_inversion { 2848c2ecf20Sopenharmony_ci u8 AI :1; 2858c2ecf20Sopenharmony_ci u8 unused :7; 2868c2ecf20Sopenharmony_ci} PACKED; 2878c2ecf20Sopenharmony_ci 2888c2ecf20Sopenharmony_ci 2898c2ecf20Sopenharmony_ci/* bert control */ 2908c2ecf20Sopenharmony_ci#define CMD_STATE_CONTROL 0x12 2918c2ecf20Sopenharmony_ci#define MSGID_BERT_CONTROL 0x0e 2928c2ecf20Sopenharmony_ci#define MSGID_BERT_SET 0xfa 2938c2ecf20Sopenharmony_cistruct bcm3510_hab_cmd_bert_control { 2948c2ecf20Sopenharmony_ci u8 BE :1; 2958c2ecf20Sopenharmony_ci u8 unused :7; 2968c2ecf20Sopenharmony_ci} PACKED; 2978c2ecf20Sopenharmony_ci 2988c2ecf20Sopenharmony_ci#define MSGID_TRI_STATE 0x2e 2998c2ecf20Sopenharmony_cistruct bcm3510_hab_cmd_tri_state { 3008c2ecf20Sopenharmony_ci u8 RE :1; /* a/d ram port pins */ 3018c2ecf20Sopenharmony_ci u8 PE :1; /* baud clock pin */ 3028c2ecf20Sopenharmony_ci u8 AC :1; /* a/d clock pin */ 3038c2ecf20Sopenharmony_ci u8 BE :1; /* baud clock pin */ 3048c2ecf20Sopenharmony_ci u8 unused :4; 3058c2ecf20Sopenharmony_ci} PACKED; 3068c2ecf20Sopenharmony_ci 3078c2ecf20Sopenharmony_ci 3088c2ecf20Sopenharmony_ci/* tune */ 3098c2ecf20Sopenharmony_ci#define CMD_TUNE 0x38 3108c2ecf20Sopenharmony_ci#define MSGID_TUNE 0x16 3118c2ecf20Sopenharmony_cistruct bcm3510_hab_cmd_tune_ctrl_data_pair { 3128c2ecf20Sopenharmony_ci struct { 3138c2ecf20Sopenharmony_ci#define BITS_8 0x07 3148c2ecf20Sopenharmony_ci#define BITS_7 0x06 3158c2ecf20Sopenharmony_ci#define BITS_6 0x05 3168c2ecf20Sopenharmony_ci#define BITS_5 0x04 3178c2ecf20Sopenharmony_ci#define BITS_4 0x03 3188c2ecf20Sopenharmony_ci#define BITS_3 0x02 3198c2ecf20Sopenharmony_ci#define BITS_2 0x01 3208c2ecf20Sopenharmony_ci#define BITS_1 0x00 3218c2ecf20Sopenharmony_ci u8 size :3; 3228c2ecf20Sopenharmony_ci u8 unk :2; 3238c2ecf20Sopenharmony_ci u8 clk_off :1; 3248c2ecf20Sopenharmony_ci u8 cs0 :1; 3258c2ecf20Sopenharmony_ci u8 cs1 :1; 3268c2ecf20Sopenharmony_ci 3278c2ecf20Sopenharmony_ci } PACKED ctrl; 3288c2ecf20Sopenharmony_ci 3298c2ecf20Sopenharmony_ci u8 data; 3308c2ecf20Sopenharmony_ci} PACKED; 3318c2ecf20Sopenharmony_ci 3328c2ecf20Sopenharmony_cistruct bcm3510_hab_cmd_tune { 3338c2ecf20Sopenharmony_ci u8 length; 3348c2ecf20Sopenharmony_ci u8 clock_width; 3358c2ecf20Sopenharmony_ci u8 misc; 3368c2ecf20Sopenharmony_ci u8 TUNCTL_state; 3378c2ecf20Sopenharmony_ci 3388c2ecf20Sopenharmony_ci struct bcm3510_hab_cmd_tune_ctrl_data_pair ctl_dat[16]; 3398c2ecf20Sopenharmony_ci} PACKED; 3408c2ecf20Sopenharmony_ci 3418c2ecf20Sopenharmony_ci#define CMD_STATUS 0x38 3428c2ecf20Sopenharmony_ci#define MSGID_STATUS1 0x08 3438c2ecf20Sopenharmony_cistruct bcm3510_hab_cmd_status1 { 3448c2ecf20Sopenharmony_ci struct { 3458c2ecf20Sopenharmony_ci u8 EQ_MODE :4; 3468c2ecf20Sopenharmony_ci u8 reserved :2; 3478c2ecf20Sopenharmony_ci u8 QRE :1; /* if QSE and the spectrum is inversed */ 3488c2ecf20Sopenharmony_ci u8 QSE :1; /* automatic spectral inversion */ 3498c2ecf20Sopenharmony_ci } PACKED STATUS0; 3508c2ecf20Sopenharmony_ci 3518c2ecf20Sopenharmony_ci struct { 3528c2ecf20Sopenharmony_ci u8 RECEIVER_LOCK :1; 3538c2ecf20Sopenharmony_ci u8 FEC_LOCK :1; 3548c2ecf20Sopenharmony_ci u8 OUT_PLL_LOCK :1; 3558c2ecf20Sopenharmony_ci u8 reserved :5; 3568c2ecf20Sopenharmony_ci } PACKED STATUS1; 3578c2ecf20Sopenharmony_ci 3588c2ecf20Sopenharmony_ci struct { 3598c2ecf20Sopenharmony_ci u8 reserved :2; 3608c2ecf20Sopenharmony_ci u8 BW :1; 3618c2ecf20Sopenharmony_ci u8 NTE :1; /* NTSC filter sweep enabled */ 3628c2ecf20Sopenharmony_ci u8 AQI :1; /* currently acquiring */ 3638c2ecf20Sopenharmony_ci u8 FA :1; /* fast acquisition */ 3648c2ecf20Sopenharmony_ci u8 ARI :1; /* auto reacquire */ 3658c2ecf20Sopenharmony_ci u8 TI :1; /* programming the tuner */ 3668c2ecf20Sopenharmony_ci } PACKED STATUS2; 3678c2ecf20Sopenharmony_ci u8 STATUS3; 3688c2ecf20Sopenharmony_ci u8 SNR_EST0; 3698c2ecf20Sopenharmony_ci u8 SNR_EST1; 3708c2ecf20Sopenharmony_ci u8 TUNER_FREQ0; 3718c2ecf20Sopenharmony_ci u8 TUNER_FREQ1; 3728c2ecf20Sopenharmony_ci u8 TUNER_FREQ2; 3738c2ecf20Sopenharmony_ci u8 TUNER_FREQ3; 3748c2ecf20Sopenharmony_ci u8 SYM_RATE0; 3758c2ecf20Sopenharmony_ci u8 SYM_RATE1; 3768c2ecf20Sopenharmony_ci u8 SYM_RATE2; 3778c2ecf20Sopenharmony_ci u8 SYM_RATE3; 3788c2ecf20Sopenharmony_ci u8 SYM_OFFSET0; 3798c2ecf20Sopenharmony_ci u8 SYM_OFFSET1; 3808c2ecf20Sopenharmony_ci u8 SYM_ERROR0; 3818c2ecf20Sopenharmony_ci u8 SYM_ERROR1; 3828c2ecf20Sopenharmony_ci u8 IF_FREQ0; 3838c2ecf20Sopenharmony_ci u8 IF_FREQ1; 3848c2ecf20Sopenharmony_ci u8 IF_FREQ2; 3858c2ecf20Sopenharmony_ci u8 IF_FREQ3; 3868c2ecf20Sopenharmony_ci u8 IF_OFFSET0; 3878c2ecf20Sopenharmony_ci u8 IF_OFFSET1; 3888c2ecf20Sopenharmony_ci u8 IF_ERROR0; 3898c2ecf20Sopenharmony_ci u8 IF_ERROR1; 3908c2ecf20Sopenharmony_ci u8 NTSC_FILTER0; 3918c2ecf20Sopenharmony_ci u8 NTSC_FILTER1; 3928c2ecf20Sopenharmony_ci u8 NTSC_FILTER2; 3938c2ecf20Sopenharmony_ci u8 NTSC_FILTER3; 3948c2ecf20Sopenharmony_ci u8 NTSC_OFFSET0; 3958c2ecf20Sopenharmony_ci u8 NTSC_OFFSET1; 3968c2ecf20Sopenharmony_ci u8 NTSC_ERROR0; 3978c2ecf20Sopenharmony_ci u8 NTSC_ERROR1; 3988c2ecf20Sopenharmony_ci u8 INT_AGC_LEVEL0; 3998c2ecf20Sopenharmony_ci u8 INT_AGC_LEVEL1; 4008c2ecf20Sopenharmony_ci u8 EXT_AGC_LEVEL0; 4018c2ecf20Sopenharmony_ci u8 EXT_AGC_LEVEL1; 4028c2ecf20Sopenharmony_ci} PACKED; 4038c2ecf20Sopenharmony_ci 4048c2ecf20Sopenharmony_ci#define MSGID_STATUS2 0x14 4058c2ecf20Sopenharmony_cistruct bcm3510_hab_cmd_status2 { 4068c2ecf20Sopenharmony_ci struct { 4078c2ecf20Sopenharmony_ci u8 EQ_MODE :4; 4088c2ecf20Sopenharmony_ci u8 reserved :2; 4098c2ecf20Sopenharmony_ci u8 QRE :1; 4108c2ecf20Sopenharmony_ci u8 QSR :1; 4118c2ecf20Sopenharmony_ci } PACKED STATUS0; 4128c2ecf20Sopenharmony_ci struct { 4138c2ecf20Sopenharmony_ci u8 RL :1; 4148c2ecf20Sopenharmony_ci u8 FL :1; 4158c2ecf20Sopenharmony_ci u8 OL :1; 4168c2ecf20Sopenharmony_ci u8 reserved :5; 4178c2ecf20Sopenharmony_ci } PACKED STATUS1; 4188c2ecf20Sopenharmony_ci u8 SYMBOL_RATE0; 4198c2ecf20Sopenharmony_ci u8 SYMBOL_RATE1; 4208c2ecf20Sopenharmony_ci u8 SYMBOL_RATE2; 4218c2ecf20Sopenharmony_ci u8 SYMBOL_RATE3; 4228c2ecf20Sopenharmony_ci u8 LDCERC0; 4238c2ecf20Sopenharmony_ci u8 LDCERC1; 4248c2ecf20Sopenharmony_ci u8 LDCERC2; 4258c2ecf20Sopenharmony_ci u8 LDCERC3; 4268c2ecf20Sopenharmony_ci u8 LDUERC0; 4278c2ecf20Sopenharmony_ci u8 LDUERC1; 4288c2ecf20Sopenharmony_ci u8 LDUERC2; 4298c2ecf20Sopenharmony_ci u8 LDUERC3; 4308c2ecf20Sopenharmony_ci u8 LDBER0; 4318c2ecf20Sopenharmony_ci u8 LDBER1; 4328c2ecf20Sopenharmony_ci u8 LDBER2; 4338c2ecf20Sopenharmony_ci u8 LDBER3; 4348c2ecf20Sopenharmony_ci struct { 4358c2ecf20Sopenharmony_ci u8 MODE_TYPE :4; /* acquire mode 0 */ 4368c2ecf20Sopenharmony_ci u8 reservd :4; 4378c2ecf20Sopenharmony_ci } MODE_TYPE; 4388c2ecf20Sopenharmony_ci u8 SNR_EST0; 4398c2ecf20Sopenharmony_ci u8 SNR_EST1; 4408c2ecf20Sopenharmony_ci u8 SIGNAL; 4418c2ecf20Sopenharmony_ci} PACKED; 4428c2ecf20Sopenharmony_ci 4438c2ecf20Sopenharmony_ci#define CMD_SET_RF_BW_NOT_LISTED 0x3f 4448c2ecf20Sopenharmony_ci#define MSGID_SET_RF_BW_NOT_LISTED 0x11 4458c2ecf20Sopenharmony_ci/* TODO */ 4468c2ecf20Sopenharmony_ci 4478c2ecf20Sopenharmony_ci#endif 448