19a0bf528SMauro Carvalho Chehab /* 29a0bf528SMauro Carvalho Chehab Auvitek AU8522 QAM/8VSB demodulator driver 39a0bf528SMauro Carvalho Chehab 49a0bf528SMauro Carvalho Chehab Copyright (C) 2008 Steven Toth <stoth@linuxtv.org> 59a0bf528SMauro Carvalho Chehab Copyright (C) 2008 Devin Heitmueller <dheitmueller@linuxtv.org> 69a0bf528SMauro Carvalho Chehab Copyright (C) 2005-2008 Auvitek International, Ltd. 79a0bf528SMauro Carvalho Chehab 89a0bf528SMauro Carvalho Chehab This program is free software; you can redistribute it and/or modify 99a0bf528SMauro Carvalho Chehab it under the terms of the GNU General Public License as published by 109a0bf528SMauro Carvalho Chehab the Free Software Foundation; either version 2 of the License, or 119a0bf528SMauro Carvalho Chehab (at your option) any later version. 129a0bf528SMauro Carvalho Chehab 139a0bf528SMauro Carvalho Chehab This program is distributed in the hope that it will be useful, 149a0bf528SMauro Carvalho Chehab but WITHOUT ANY WARRANTY; without even the implied warranty of 159a0bf528SMauro Carvalho Chehab MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 169a0bf528SMauro Carvalho Chehab GNU General Public License for more details. 179a0bf528SMauro Carvalho Chehab 189a0bf528SMauro Carvalho Chehab You should have received a copy of the GNU General Public License 199a0bf528SMauro Carvalho Chehab along with this program; if not, write to the Free Software 209a0bf528SMauro Carvalho Chehab Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 219a0bf528SMauro Carvalho Chehab 229a0bf528SMauro Carvalho Chehab */ 239a0bf528SMauro Carvalho Chehab 249a0bf528SMauro Carvalho Chehab #include <linux/kernel.h> 259a0bf528SMauro Carvalho Chehab #include <linux/init.h> 269a0bf528SMauro Carvalho Chehab #include <linux/module.h> 279a0bf528SMauro Carvalho Chehab #include <linux/string.h> 289a0bf528SMauro Carvalho Chehab #include <linux/slab.h> 299a0bf528SMauro Carvalho Chehab #include <linux/delay.h> 309a0bf528SMauro Carvalho Chehab #include <linux/videodev2.h> 319a0bf528SMauro Carvalho Chehab #include <media/v4l2-device.h> 325a4bdb4bSHans Verkuil #include <media/v4l2-ctrls.h> 339a0bf528SMauro Carvalho Chehab #include <linux/i2c.h> 349a0bf528SMauro Carvalho Chehab #include "dvb_frontend.h" 359a0bf528SMauro Carvalho Chehab #include "au8522.h" 369a0bf528SMauro Carvalho Chehab #include "tuner-i2c.h" 379a0bf528SMauro Carvalho Chehab 389a0bf528SMauro Carvalho Chehab #define AU8522_ANALOG_MODE 0 399a0bf528SMauro Carvalho Chehab #define AU8522_DIGITAL_MODE 1 4038fe3510SMauro Carvalho Chehab #define AU8522_SUSPEND_MODE 2 419a0bf528SMauro Carvalho Chehab 429a0bf528SMauro Carvalho Chehab struct au8522_state { 439a0bf528SMauro Carvalho Chehab struct i2c_client *c; 449a0bf528SMauro Carvalho Chehab struct i2c_adapter *i2c; 459a0bf528SMauro Carvalho Chehab 469a0bf528SMauro Carvalho Chehab u8 operational_mode; 479a0bf528SMauro Carvalho Chehab 489a0bf528SMauro Carvalho Chehab /* Used for sharing of the state between analog and digital mode */ 499a0bf528SMauro Carvalho Chehab struct tuner_i2c_props i2c_props; 509a0bf528SMauro Carvalho Chehab struct list_head hybrid_tuner_instance_list; 519a0bf528SMauro Carvalho Chehab 529a0bf528SMauro Carvalho Chehab /* configuration settings */ 539a0bf528SMauro Carvalho Chehab const struct au8522_config *config; 549a0bf528SMauro Carvalho Chehab 559a0bf528SMauro Carvalho Chehab struct dvb_frontend frontend; 569a0bf528SMauro Carvalho Chehab 579a0bf528SMauro Carvalho Chehab u32 current_frequency; 589a0bf528SMauro Carvalho Chehab fe_modulation_t current_modulation; 599a0bf528SMauro Carvalho Chehab 609a0bf528SMauro Carvalho Chehab u32 fe_status; 619a0bf528SMauro Carvalho Chehab unsigned int led_state; 629a0bf528SMauro Carvalho Chehab 639a0bf528SMauro Carvalho Chehab /* Analog settings */ 649a0bf528SMauro Carvalho Chehab struct v4l2_subdev sd; 659a0bf528SMauro Carvalho Chehab v4l2_std_id std; 669a0bf528SMauro Carvalho Chehab int vid_input; 679a0bf528SMauro Carvalho Chehab int aud_input; 689a0bf528SMauro Carvalho Chehab u32 id; 699a0bf528SMauro Carvalho Chehab u32 rev; 705a4bdb4bSHans Verkuil struct v4l2_ctrl_handler hdl; 719a0bf528SMauro Carvalho Chehab }; 729a0bf528SMauro Carvalho Chehab 739a0bf528SMauro Carvalho Chehab /* These are routines shared by both the VSB/QAM demodulator and the analog 749a0bf528SMauro Carvalho Chehab decoder */ 759a0bf528SMauro Carvalho Chehab int au8522_writereg(struct au8522_state *state, u16 reg, u8 data); 769a0bf528SMauro Carvalho Chehab u8 au8522_readreg(struct au8522_state *state, u16 reg); 779a0bf528SMauro Carvalho Chehab int au8522_init(struct dvb_frontend *fe); 789a0bf528SMauro Carvalho Chehab int au8522_sleep(struct dvb_frontend *fe); 799a0bf528SMauro Carvalho Chehab 809a0bf528SMauro Carvalho Chehab int au8522_get_state(struct au8522_state **state, struct i2c_adapter *i2c, 819a0bf528SMauro Carvalho Chehab u8 client_address); 829a0bf528SMauro Carvalho Chehab void au8522_release_state(struct au8522_state *state); 839a0bf528SMauro Carvalho Chehab int au8522_i2c_gate_ctrl(struct dvb_frontend *fe, int enable); 849a0bf528SMauro Carvalho Chehab int au8522_analog_i2c_gate_ctrl(struct dvb_frontend *fe, int enable); 859a0bf528SMauro Carvalho Chehab int au8522_led_ctrl(struct au8522_state *state, int led); 869a0bf528SMauro Carvalho Chehab 879a0bf528SMauro Carvalho Chehab /* REGISTERS */ 889a0bf528SMauro Carvalho Chehab #define AU8522_INPUT_CONTROL_REG081H 0x081 899a0bf528SMauro Carvalho Chehab #define AU8522_PGA_CONTROL_REG082H 0x082 909a0bf528SMauro Carvalho Chehab #define AU8522_CLAMPING_CONTROL_REG083H 0x083 919a0bf528SMauro Carvalho Chehab 929a0bf528SMauro Carvalho Chehab #define AU8522_MODULE_CLOCK_CONTROL_REG0A3H 0x0A3 939a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_0_REG0A4H 0x0A4 949a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_1_REG0A5H 0x0A5 959a0bf528SMauro Carvalho Chehab #define AU8522_AGC_CONTROL_RANGE_REG0A6H 0x0A6 969a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_GAIN_CONTROL_REG0A7H 0x0A7 979a0bf528SMauro Carvalho Chehab #define AU8522_TUNER_AGC_RF_STOP_REG0A8H 0x0A8 989a0bf528SMauro Carvalho Chehab #define AU8522_TUNER_AGC_RF_START_REG0A9H 0x0A9 999a0bf528SMauro Carvalho Chehab #define AU8522_TUNER_RF_AGC_DEFAULT_REG0AAH 0x0AA 1009a0bf528SMauro Carvalho Chehab #define AU8522_TUNER_AGC_IF_STOP_REG0ABH 0x0AB 1019a0bf528SMauro Carvalho Chehab #define AU8522_TUNER_AGC_IF_START_REG0ACH 0x0AC 1029a0bf528SMauro Carvalho Chehab #define AU8522_TUNER_AGC_IF_DEFAULT_REG0ADH 0x0AD 1039a0bf528SMauro Carvalho Chehab #define AU8522_TUNER_AGC_STEP_REG0AEH 0x0AE 1049a0bf528SMauro Carvalho Chehab #define AU8522_TUNER_GAIN_STEP_REG0AFH 0x0AF 1059a0bf528SMauro Carvalho Chehab 1069a0bf528SMauro Carvalho Chehab /* Receiver registers */ 1079a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGTHRD1_REG0B0H 0x0B0 1089a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGAGC1H_REG0B1H 0x0B1 1099a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGSHIFT1_REG0B2H 0x0B2 1109a0bf528SMauro Carvalho Chehab #define AU8522_TOREGAGC1_REG0B3H 0x0B3 1119a0bf528SMauro Carvalho Chehab #define AU8522_TOREGASHIFT1_REG0B4H 0x0B4 1129a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGBBH_REG0B5H 0x0B5 1139a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGBBM_REG0B6H 0x0B6 1149a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGBBL_REG0B7H 0x0B7 1159a0bf528SMauro Carvalho Chehab /* 0xB8 TO 0xD7 are the filter coefficients */ 1169a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGTHRD2_REG0D8H 0x0D8 1179a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGAGC2H_REG0D9H 0x0D9 1189a0bf528SMauro Carvalho Chehab #define AU8522_TOREGAGC2_REG0DAH 0x0DA 1199a0bf528SMauro Carvalho Chehab #define AU8522_TOREGSHIFT2_REG0DBH 0x0DB 1209a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGPILOTH_REG0DCH 0x0DC 1219a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGPILOTM_REG0DDH 0x0DD 1229a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGPILOTL_REG0DEH 0x0DE 1239a0bf528SMauro Carvalho Chehab #define AU8522_TOREGFREQ_REG0DFH 0x0DF 1249a0bf528SMauro Carvalho Chehab 1259a0bf528SMauro Carvalho Chehab #define AU8522_RX_PGA_RFOUT_REG0EBH 0x0EB 1269a0bf528SMauro Carvalho Chehab #define AU8522_RX_PGA_IFOUT_REG0ECH 0x0EC 1279a0bf528SMauro Carvalho Chehab #define AU8522_RX_PGA_PGAOUT_REG0EDH 0x0ED 1289a0bf528SMauro Carvalho Chehab 1299a0bf528SMauro Carvalho Chehab #define AU8522_CHIP_MODE_REG0FEH 0x0FE 1309a0bf528SMauro Carvalho Chehab 1319a0bf528SMauro Carvalho Chehab /* I2C bus control registers */ 1329a0bf528SMauro Carvalho Chehab #define AU8522_I2C_CONTROL_REG0_REG090H 0x090 1339a0bf528SMauro Carvalho Chehab #define AU8522_I2C_CONTROL_REG1_REG091H 0x091 1349a0bf528SMauro Carvalho Chehab #define AU8522_I2C_STATUS_REG092H 0x092 1359a0bf528SMauro Carvalho Chehab #define AU8522_I2C_WR_DATA0_REG093H 0x093 1369a0bf528SMauro Carvalho Chehab #define AU8522_I2C_WR_DATA1_REG094H 0x094 1379a0bf528SMauro Carvalho Chehab #define AU8522_I2C_WR_DATA2_REG095H 0x095 1389a0bf528SMauro Carvalho Chehab #define AU8522_I2C_WR_DATA3_REG096H 0x096 1399a0bf528SMauro Carvalho Chehab #define AU8522_I2C_WR_DATA4_REG097H 0x097 1409a0bf528SMauro Carvalho Chehab #define AU8522_I2C_WR_DATA5_REG098H 0x098 1419a0bf528SMauro Carvalho Chehab #define AU8522_I2C_WR_DATA6_REG099H 0x099 1429a0bf528SMauro Carvalho Chehab #define AU8522_I2C_WR_DATA7_REG09AH 0x09A 1439a0bf528SMauro Carvalho Chehab #define AU8522_I2C_RD_DATA0_REG09BH 0x09B 1449a0bf528SMauro Carvalho Chehab #define AU8522_I2C_RD_DATA1_REG09CH 0x09C 1459a0bf528SMauro Carvalho Chehab #define AU8522_I2C_RD_DATA2_REG09DH 0x09D 1469a0bf528SMauro Carvalho Chehab #define AU8522_I2C_RD_DATA3_REG09EH 0x09E 1479a0bf528SMauro Carvalho Chehab #define AU8522_I2C_RD_DATA4_REG09FH 0x09F 1489a0bf528SMauro Carvalho Chehab #define AU8522_I2C_RD_DATA5_REG0A0H 0x0A0 1499a0bf528SMauro Carvalho Chehab #define AU8522_I2C_RD_DATA6_REG0A1H 0x0A1 1509a0bf528SMauro Carvalho Chehab #define AU8522_I2C_RD_DATA7_REG0A2H 0x0A2 1519a0bf528SMauro Carvalho Chehab 1529a0bf528SMauro Carvalho Chehab #define AU8522_ENA_USB_REG101H 0x101 1539a0bf528SMauro Carvalho Chehab 1549a0bf528SMauro Carvalho Chehab #define AU8522_I2S_CTRL_0_REG110H 0x110 1559a0bf528SMauro Carvalho Chehab #define AU8522_I2S_CTRL_1_REG111H 0x111 1569a0bf528SMauro Carvalho Chehab #define AU8522_I2S_CTRL_2_REG112H 0x112 1579a0bf528SMauro Carvalho Chehab 1589a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGFFECONTROL_REG121H 0x121 1599a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGDFECONTROL_REG122H 0x122 1609a0bf528SMauro Carvalho Chehab 1619a0bf528SMauro Carvalho Chehab #define AU8522_CARRFREQOFFSET0_REG201H 0x201 1629a0bf528SMauro Carvalho Chehab #define AU8522_CARRFREQOFFSET1_REG202H 0x202 1639a0bf528SMauro Carvalho Chehab 1649a0bf528SMauro Carvalho Chehab #define AU8522_DECIMATION_GAIN_REG21AH 0x21A 1659a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGIFSLP_REG21BH 0x21B 1669a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGTHRDL2_REG21CH 0x21C 1679a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGSTEP3DB_REG21DH 0x21D 1689a0bf528SMauro Carvalho Chehab #define AU8522_DAGC_GAIN_ADJUSTMENT_REG21EH 0x21E 1699a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGPLLMODE_REG21FH 0x21F 1709a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGCSTHRD_REG220H 0x220 1719a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGCRLOCKDMAX_REG221H 0x221 1729a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGCRPERIODMASK_REG222H 0x222 1739a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGCRLOCK0THH_REG223H 0x223 1749a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGCRLOCK1THH_REG224H 0x224 1759a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGCRLOCK0THL_REG225H 0x225 1769a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGCRLOCK1THL_REG226H 0x226 1779a0bf528SMauro Carvalho Chehab #define AU_FRMREGPLLACQPHASESCL_REG227H 0x227 1789a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGFREQFBCTRL_REG228H 0x228 1799a0bf528SMauro Carvalho Chehab 1809a0bf528SMauro Carvalho Chehab /* Analog TV Decoder */ 1819a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_STATUS_REG000H 0x000 1829a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_INT_STATUS_REG001H 0x001 1839a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_MACROVISION_STATUS_REG002H 0x002 1849a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_SHARPNESSREG009H 0x009 1859a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_BRIGHTNESS_REG00AH 0x00A 1869a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_CONTRAST_REG00BH 0x00B 1879a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_SATURATION_CB_REG00CH 0x00C 1889a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_SATURATION_CR_REG00DH 0x00D 1899a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_HUE_H_REG00EH 0x00E 1909a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_HUE_L_REG00FH 0x00F 1919a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_INT_MASK_REG010H 0x010 1929a0bf528SMauro Carvalho Chehab #define AU8522_VIDEO_MODE_REG011H 0x011 1939a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_PGA_REG012H 0x012 1949a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_MODE_REG015H 0x015 1959a0bf528SMauro Carvalho Chehab #define AU8522_REG016H 0x016 1969a0bf528SMauro Carvalho Chehab #define AU8522_TVDED_DBG_MODE_REG060H 0x060 1979a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL1_REG061H 0x061 1989a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL2_REG062H 0x062 1999a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VCR_DET_LLIM_REG063H 0x063 2009a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VCR_DET_HLIM_REG064H 0x064 2019a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_VDIF_THR1_REG065H 0x065 2029a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_VDIF_THR2_REG066H 0x066 2039a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_VDIF_THR3_REG067H 0x067 2049a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_NOTCH_THR_REG068H 0x068 2059a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_HDIF_THR1_REG069H 0x069 2069a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_HDIF_THR2_REG06AH 0x06A 2079a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_HDIF_THR3_REG06BH 0x06B 2089a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_DCDIF_THR1_REG06CH 0x06C 2099a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_DCDIF_THR2_REG06DH 0x06D 2109a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_DCDIF_THR3_REG06EH 0x06E 2119a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_UV_SEP_THR_REG06FH 0x06F 2129a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_DC_THR1_NTSC_REG070H 0x070 2139a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_DC_THR2_NTSC_REG073H 0x073 2149a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_DCAGC_CTRL_REG077H 0x077 2159a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_PIC_START_ADJ_REG078H 0x078 2169a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_AGC_HIGH_LIMIT_REG079H 0x079 2179a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_MACROVISION_SYNC_THR_REG07AH 0x07A 2189a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_INTRP_CTRL_REG07BH 0x07B 2199a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_PLL_STATUS_REG07EH 0x07E 2209a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FSC_FREQ_REG07FH 0x07F 2219a0bf528SMauro Carvalho Chehab 2229a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_AGC_LOW_LIMIT_REG0E4H 0x0E4 2239a0bf528SMauro Carvalho Chehab #define AU8522_TOREGAAGC_REG0E5H 0x0E5 2249a0bf528SMauro Carvalho Chehab 2259a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_CHROMA_AGC_REG401H 0x401 2269a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_CHROMA_SFT_REG402H 0x402 2279a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R410 0x410 2289a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R411 0x411 2299a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R412 0x412 2309a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R413 0x413 2319a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R414 0x414 2329a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R415 0x415 2339a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R416 0x416 2349a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R417 0x417 2359a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R418 0x418 2369a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R419 0x419 2379a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R41A 0x41A 2389a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R41B 0x41B 2399a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R41C 0x41C 2409a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R41D 0x41D 2419a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R41E 0x41E 2429a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R41F 0x41F 2439a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R420 0x420 2449a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R421 0x421 2459a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R422 0x422 2469a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R423 0x423 2479a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R424 0x424 2489a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R425 0x425 2499a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R426 0x426 2509a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R427 0x427 2519a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R428 0x428 2529a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R429 0x429 2539a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R42A 0x42A 2549a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R42B 0x42B 2559a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R42C 0x42C 2569a0bf528SMauro Carvalho Chehab #define AU8522_FILTER_COEF_R42D 0x42D 2579a0bf528SMauro Carvalho Chehab 2589a0bf528SMauro Carvalho Chehab /* VBI Control Registers */ 2599a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_RX_FIFO_CONTAIN_REG004H 0x004 2609a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_TX_FIFO_CONTAIN_REG005H 0x005 2619a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_RX_FIFO_READ_REG006H 0x006 2629a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_FIFO_STATUS_REG007H 0x007 2639a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_CTRL_H_REG017H 0x017 2649a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_CTRL_L_REG018H 0x018 2659a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_USER_TOTAL_BITS_REG019H 0x019 2669a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_USER_TUNIT_H_REG01AH 0x01A 2679a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_USER_TUNIT_L_REG01BH 0x01B 2689a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_USER_THRESH1_REG01CH 0x01C 2699a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_USER_FRAME_PAT2_REG01EH 0x01E 2709a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_USER_FRAME_PAT1_REG01FH 0x01F 2719a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_USER_FRAME_PAT0_REG020H 0x020 2729a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_USER_FRAME_MASK2_REG021H 0x021 2739a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_USER_FRAME_MASK1_REG022H 0x022 2749a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_USER_FRAME_MASK0_REG023H 0x023 2759a0bf528SMauro Carvalho Chehab 2769a0bf528SMauro Carvalho Chehab #define AU8522_REG071H 0x071 2779a0bf528SMauro Carvalho Chehab #define AU8522_REG072H 0x072 2789a0bf528SMauro Carvalho Chehab #define AU8522_REG074H 0x074 2799a0bf528SMauro Carvalho Chehab #define AU8522_REG075H 0x075 2809a0bf528SMauro Carvalho Chehab 2819a0bf528SMauro Carvalho Chehab /* Digital Demodulator Registers */ 2829a0bf528SMauro Carvalho Chehab #define AU8522_FRAME_COUNT0_REG084H 0x084 2839a0bf528SMauro Carvalho Chehab #define AU8522_RS_STATUS_G0_REG085H 0x085 2849a0bf528SMauro Carvalho Chehab #define AU8522_RS_STATUS_B0_REG086H 0x086 2859a0bf528SMauro Carvalho Chehab #define AU8522_RS_STATUS_E_REG087H 0x087 2869a0bf528SMauro Carvalho Chehab #define AU8522_DEMODULATION_STATUS_REG088H 0x088 2879a0bf528SMauro Carvalho Chehab #define AU8522_TOREGTRESTATUS_REG0E6H 0x0E6 2889a0bf528SMauro Carvalho Chehab #define AU8522_TSPORT_CONTROL_REG10BH 0x10B 2899a0bf528SMauro Carvalho Chehab #define AU8522_TSTHES_REG10CH 0x10C 2909a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGDFEKEEP_REG301H 0x301 2919a0bf528SMauro Carvalho Chehab #define AU8522_DFE_AVERAGE_REG302H 0x302 2929a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGEQLERRWIN_REG303H 0x303 2939a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGFFEKEEP_REG304H 0x304 2949a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGDFECONTROL1_REG305H 0x305 2959a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGEQLERRLOW_REG306H 0x306 2969a0bf528SMauro Carvalho Chehab 2979a0bf528SMauro Carvalho Chehab #define AU8522_REG42EH 0x42E 2989a0bf528SMauro Carvalho Chehab #define AU8522_REG42FH 0x42F 2999a0bf528SMauro Carvalho Chehab #define AU8522_REG430H 0x430 3009a0bf528SMauro Carvalho Chehab #define AU8522_REG431H 0x431 3019a0bf528SMauro Carvalho Chehab #define AU8522_REG432H 0x432 3029a0bf528SMauro Carvalho Chehab #define AU8522_REG433H 0x433 3039a0bf528SMauro Carvalho Chehab #define AU8522_REG434H 0x434 3049a0bf528SMauro Carvalho Chehab #define AU8522_REG435H 0x435 3059a0bf528SMauro Carvalho Chehab #define AU8522_REG436H 0x436 3069a0bf528SMauro Carvalho Chehab 3079a0bf528SMauro Carvalho Chehab /* GPIO Registers */ 3089a0bf528SMauro Carvalho Chehab #define AU8522_GPIO_CONTROL_REG0E0H 0x0E0 3099a0bf528SMauro Carvalho Chehab #define AU8522_GPIO_STATUS_REG0E1H 0x0E1 3109a0bf528SMauro Carvalho Chehab #define AU8522_GPIO_DATA_REG0E2H 0x0E2 3119a0bf528SMauro Carvalho Chehab 3129a0bf528SMauro Carvalho Chehab /* Audio Control Registers */ 3139a0bf528SMauro Carvalho Chehab #define AU8522_AUDIOAGC_REG0EEH 0x0EE 3149a0bf528SMauro Carvalho Chehab #define AU8522_AUDIO_STATUS_REG0F0H 0x0F0 3159a0bf528SMauro Carvalho Chehab #define AU8522_AUDIO_MODE_REG0F1H 0x0F1 3169a0bf528SMauro Carvalho Chehab #define AU8522_AUDIO_VOLUME_L_REG0F2H 0x0F2 3179a0bf528SMauro Carvalho Chehab #define AU8522_AUDIO_VOLUME_R_REG0F3H 0x0F3 3189a0bf528SMauro Carvalho Chehab #define AU8522_AUDIO_VOLUME_REG0F4H 0x0F4 3199a0bf528SMauro Carvalho Chehab #define AU8522_FRMREGAUPHASE_REG0F7H 0x0F7 3209a0bf528SMauro Carvalho Chehab #define AU8522_REG0F9H 0x0F9 3219a0bf528SMauro Carvalho Chehab 3229a0bf528SMauro Carvalho Chehab #define AU8522_AUDIOAGC2_REG605H 0x605 3239a0bf528SMauro Carvalho Chehab #define AU8522_AUDIOFREQ_REG606H 0x606 3249a0bf528SMauro Carvalho Chehab 3259a0bf528SMauro Carvalho Chehab 3269a0bf528SMauro Carvalho Chehab /**************************************************************/ 3279a0bf528SMauro Carvalho Chehab 3289a0bf528SMauro Carvalho Chehab /* Format control 1 */ 3299a0bf528SMauro Carvalho Chehab 3309a0bf528SMauro Carvalho Chehab /* VCR Mode 7-6 */ 3319a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL1_REG061H_VCR_MODE_YES 0x80 3329a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL1_REG061H_VCR_MODE_NO 0x40 3339a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL1_REG061H_VCR_MODE_AUTO 0x00 3349a0bf528SMauro Carvalho Chehab /* Field len 5-4 */ 3359a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL1_REG061H_FIELD_LEN_625 0x20 3369a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL1_REG061H_FIELD_LEN_525 0x10 3379a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL1_REG061H_FIELD_LEN_AUTO 0x00 3389a0bf528SMauro Carvalho Chehab /* Line len (us) 3-2 */ 3399a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL1_REG061H_LINE_LEN_64_000 0x0b 3409a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL1_REG061H_LINE_LEN_63_492 0x08 3419a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL1_REG061H_LINE_LEN_63_556 0x04 3429a0bf528SMauro Carvalho Chehab /* Subcarrier freq 1-0 */ 3439a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL1_REG061H_SUBCARRIER_NTSC_AUTO 0x03 3449a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL1_REG061H_SUBCARRIER_NTSC_443 0x02 3459a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL1_REG061H_SUBCARRIER_NTSC_MN 0x01 3469a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL1_REG061H_SUBCARRIER_NTSC_50 0x00 3479a0bf528SMauro Carvalho Chehab 3489a0bf528SMauro Carvalho Chehab /* Format control 2 */ 3499a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_AUTODETECT 0x00 3509a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_NTSC 0x01 3519a0bf528SMauro Carvalho Chehab 3529a0bf528SMauro Carvalho Chehab 3539a0bf528SMauro Carvalho Chehab #define AU8522_INPUT_CONTROL_REG081H_ATSC 0xC4 3549a0bf528SMauro Carvalho Chehab #define AU8522_INPUT_CONTROL_REG081H_ATVRF 0xC4 3559a0bf528SMauro Carvalho Chehab #define AU8522_INPUT_CONTROL_REG081H_ATVRF13 0xC4 3569a0bf528SMauro Carvalho Chehab #define AU8522_INPUT_CONTROL_REG081H_J83B64 0xC4 3579a0bf528SMauro Carvalho Chehab #define AU8522_INPUT_CONTROL_REG081H_J83B256 0xC4 3589a0bf528SMauro Carvalho Chehab #define AU8522_INPUT_CONTROL_REG081H_CVBS 0x20 3599a0bf528SMauro Carvalho Chehab #define AU8522_INPUT_CONTROL_REG081H_CVBS_CH1 0xA2 3609a0bf528SMauro Carvalho Chehab #define AU8522_INPUT_CONTROL_REG081H_CVBS_CH2 0xA0 3619a0bf528SMauro Carvalho Chehab #define AU8522_INPUT_CONTROL_REG081H_CVBS_CH3 0x69 3629a0bf528SMauro Carvalho Chehab #define AU8522_INPUT_CONTROL_REG081H_CVBS_CH4 0x68 3639a0bf528SMauro Carvalho Chehab #define AU8522_INPUT_CONTROL_REG081H_CVBS_CH4_SIF 0x28 3649a0bf528SMauro Carvalho Chehab /* CH1 AS Y,CH3 AS C */ 3659a0bf528SMauro Carvalho Chehab #define AU8522_INPUT_CONTROL_REG081H_SVIDEO_CH13 0x23 3669a0bf528SMauro Carvalho Chehab /* CH2 AS Y,CH4 AS C */ 3679a0bf528SMauro Carvalho Chehab #define AU8522_INPUT_CONTROL_REG081H_SVIDEO_CH24 0x20 3689a0bf528SMauro Carvalho Chehab #define AU8522_MODULE_CLOCK_CONTROL_REG0A3H_ATSC 0x0C 3699a0bf528SMauro Carvalho Chehab #define AU8522_MODULE_CLOCK_CONTROL_REG0A3H_J83B64 0x09 3709a0bf528SMauro Carvalho Chehab #define AU8522_MODULE_CLOCK_CONTROL_REG0A3H_J83B256 0x09 3719a0bf528SMauro Carvalho Chehab #define AU8522_MODULE_CLOCK_CONTROL_REG0A3H_CVBS 0x12 3729a0bf528SMauro Carvalho Chehab #define AU8522_MODULE_CLOCK_CONTROL_REG0A3H_ATVRF 0x1A 3739a0bf528SMauro Carvalho Chehab #define AU8522_MODULE_CLOCK_CONTROL_REG0A3H_ATVRF13 0x1A 3749a0bf528SMauro Carvalho Chehab #define AU8522_MODULE_CLOCK_CONTROL_REG0A3H_SVIDEO 0x02 3759a0bf528SMauro Carvalho Chehab 3769a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_0_REG0A4H_CLEAR 0x00 3779a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_0_REG0A4H_SVIDEO 0x9C 3789a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_0_REG0A4H_CVBS 0x9D 3799a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_0_REG0A4H_ATSC 0xE8 3809a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_0_REG0A4H_J83B256 0xCA 3819a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_0_REG0A4H_J83B64 0xCA 3829a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_0_REG0A4H_ATVRF 0xDD 3839a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_0_REG0A4H_ATVRF13 0xDD 3849a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_0_REG0A4H_PAL 0xDD 3859a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_0_REG0A4H_FM 0xDD 3869a0bf528SMauro Carvalho Chehab 3879a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_1_REG0A5H_ATSC 0x80 3889a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_1_REG0A5H_J83B256 0x80 3899a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_1_REG0A5H_J83B64 0x80 3909a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_1_REG0A5H_DONGLE_ATSC 0x40 3919a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_1_REG0A5H_DONGLE_J83B256 0x40 3929a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_1_REG0A5H_DONGLE_J83B64 0x40 3939a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_1_REG0A5H_DONGLE_CLEAR 0x00 3949a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_1_REG0A5H_ATVRF 0x01 3959a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_1_REG0A5H_ATVRF13 0x01 3969a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_1_REG0A5H_SVIDEO 0x04 3979a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_1_REG0A5H_CVBS 0x01 3989a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_1_REG0A5H_PWM 0x03 3999a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_1_REG0A5H_IIS 0x09 4009a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_1_REG0A5H_PAL 0x01 4019a0bf528SMauro Carvalho Chehab #define AU8522_SYSTEM_MODULE_CONTROL_1_REG0A5H_FM 0x01 4029a0bf528SMauro Carvalho Chehab 4039a0bf528SMauro Carvalho Chehab /* STILL NEED TO BE REFACTORED @@@@@@@@@@@@@@ */ 4049a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_CONTRAST_REG00BH_CVBS 0x79 4059a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_SATURATION_CB_REG00CH_CVBS 0x80 4069a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_SATURATION_CR_REG00DH_CVBS 0x80 4079a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_HUE_H_REG00EH_CVBS 0x00 4089a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_HUE_L_REG00FH_CVBS 0x00 4099a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_PGA_REG012H_CVBS 0x0F 4109a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_MODE_REG015H_CVBS 0x00 4119a0bf528SMauro Carvalho Chehab #define AU8522_REG016H_CVBS 0x00 4129a0bf528SMauro Carvalho Chehab #define AU8522_TVDED_DBG_MODE_REG060H_CVBS 0x00 4139a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VCR_DET_LLIM_REG063H_CVBS 0x19 4149a0bf528SMauro Carvalho Chehab #define AU8522_REG0F9H_AUDIO 0x20 4159a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VCR_DET_HLIM_REG064H_CVBS 0xA7 4169a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_VDIF_THR1_REG065H_CVBS 0x0A 4179a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_VDIF_THR2_REG066H_CVBS 0x32 4189a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_VDIF_THR3_REG067H_CVBS 0x19 4199a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_NOTCH_THR_REG068H_CVBS 0x23 4209a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_HDIF_THR1_REG069H_CVBS 0x41 4219a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_HDIF_THR2_REG06AH_CVBS 0x0A 4229a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_HDIF_THR3_REG06BH_CVBS 0x32 4239a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_DCDIF_THR1_REG06CH_CVBS 0x34 4249a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_DCDIF_THR1_REG06CH_SVIDEO 0x2a 4259a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_DCDIF_THR2_REG06DH_CVBS 0x05 4269a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_DCDIF_THR2_REG06DH_SVIDEO 0x15 4279a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_DCDIF_THR3_REG06EH_CVBS 0x6E 4289a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_UV_SEP_THR_REG06FH_CVBS 0x0F 4299a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_DC_THR1_NTSC_REG070H_CVBS 0x80 4309a0bf528SMauro Carvalho Chehab #define AU8522_REG071H_CVBS 0x18 4319a0bf528SMauro Carvalho Chehab #define AU8522_REG072H_CVBS 0x30 4329a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_COMB_DC_THR2_NTSC_REG073H_CVBS 0xF0 4339a0bf528SMauro Carvalho Chehab #define AU8522_REG074H_CVBS 0x80 4349a0bf528SMauro Carvalho Chehab #define AU8522_REG075H_CVBS 0xF0 4359a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_DCAGC_CTRL_REG077H_CVBS 0xFB 4369a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_PIC_START_ADJ_REG078H_CVBS 0x04 4379a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_AGC_HIGH_LIMIT_REG079H_CVBS 0x00 4389a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_MACROVISION_SYNC_THR_REG07AH_CVBS 0x00 4399a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_INTRP_CTRL_REG07BH_CVBS 0xEE 4409a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_AGC_LOW_LIMIT_REG0E4H_CVBS 0xFE 4419a0bf528SMauro Carvalho Chehab #define AU8522_TOREGAAGC_REG0E5H_CVBS 0x00 4429a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI6A_REG035H_CVBS 0x40 4439a0bf528SMauro Carvalho Chehab 4449a0bf528SMauro Carvalho Chehab /* Enables Closed captioning */ 4459a0bf528SMauro Carvalho Chehab #define AU8522_TVDEC_VBI_CTRL_H_REG017H_CCON 0x21 446