#include #include #include #include #include #include #include #include //#include "i2c.h" #include "tp2828.h" typedef unsigned char FH_UINT8; typedef unsigned short FH_UINT16; typedef unsigned long long u64; typedef unsigned int u32; typedef int s32; typedef unsigned short u16; typedef short s16; typedef unsigned char u8; typedef char s8; typedef unsigned int UINT32; typedef unsigned long long int UINT64; typedef int SINT32; typedef unsigned short int UINT16; typedef unsigned char UINT8; typedef unsigned int bool; #define FALSE (1 == 0) #define TRUE (1 == 1) #define NULL ((void *)0) #define false (1 == 0) #define true (1 == 1) #define ENABLE (1 == 1) #define DISABLE (1 == 0) #define BIT(__n) (1<<(__n)) /* static void delay_200us() { int t=6620; while(t--); } */ static void viu_mdelay(int ms) { #if 1 sleep(1); #else int s=5 * ms; while(s--) delay_200us(); #endif } #define TP2802A_I2C_ADDR 0x44 struct i2c_dev { int fd; FH_UINT16 i2c_devid; UINT32 reserved; }; struct i2c_dev *chip; struct i2c_dev s_chip; int viu_tpi2c_hw_init(struct i2c_dev **dev) { chip = &s_chip; s_chip.i2c_devid = TP2802A_I2C_ADDR; s_chip.fd = open("/dev/i2c-0", O_RDWR | O_NONBLOCK); return 0; } u16 tp28xx_byte_read(struct i2c_dev *chip, u16 addr) { struct i2c_rdwr_ioctl_data i2c_data; struct i2c_msg msgs[2] = {{0}}; FH_UINT8 reg[4] = {0}; FH_UINT8 val[4] = {0}; i2c_data.nmsgs = 2; //i2c_data.msgs = (struct i2c_msg *)malloc(i2c_data.nmsgs * sizeof(struct i2c_msg)); i2c_data.msgs = msgs; reg[0] = addr & 0xff; i2c_data.msgs[0].len = 1; i2c_data.msgs[1].len = 1; i2c_data.msgs[0].addr = chip->i2c_devid; /* */ i2c_data.msgs[0].flags = 0; /* write */ i2c_data.msgs[0].buf = reg; i2c_data.msgs[1].addr = chip->i2c_devid; /* */ i2c_data.msgs[1].flags = I2C_M_RD; /* read */ i2c_data.msgs[1].buf = val; ioctl(chip->fd, I2C_RDWR, &i2c_data); printf("tp28xx_byte_read addr, *data:[0x%x][0x%x]\n", addr, val[0]); return val[0]; } int tp28xx_byte_write(struct i2c_dev *chip, u16 addr, u16 data) { struct i2c_rdwr_ioctl_data i2c_data; struct i2c_msg msgs[1] = {{0}}; FH_UINT8 tmp[4]; int ret; printf("tp28xx_byte_write( 0x%x,0x%x);\n", addr, data); i2c_data.nmsgs = 1; i2c_data.msgs = (struct i2c_msg *)&msgs; tmp[0] = addr & 0xff; tmp[1] = data & 0xff; i2c_data.msgs[0].len = 2; i2c_data.msgs[0].addr = chip->i2c_devid; /* */ i2c_data.msgs[0].flags = 0; /* write */ i2c_data.msgs[0].buf = tmp; ret = ioctl(chip->fd, I2C_RDWR, &i2c_data); return ret; } void tp2802_write_table(struct i2c_dev *dev,unsigned char addr, unsigned char *tbl_ptr, unsigned char tbl_cnt) { unsigned char i = 0; for(i = 0; i < tbl_cnt; i ++) { tp28xx_byte_write(dev, (addr + i), *(tbl_ptr + i)); } } #define BT1120_HEADER 0x00 //reg0x02 bit3 0=double head #define BT656_HEADER_8BIT 0x08 //reg0x02 bit3 1=single head, #define OUTPUT_MODE_16BIT 0x00 #define OUTPUT_MODE_8BIT 0x80 #define OUTCLK_148M 0x1 #define OUTCLK_78M 0x0 static int rx_mode = PTZ_RX_TVI_CMD; static int multi_sample_en=0; static int multi_sample_ch0_fpsmode=TP2802_1080P25; static int multi_sample_ch1_fpsmode=TP2802_720P25; static int blue_screen_open=0; #if 0 //bt656 ddr 1 ch 5m static int sav_head = BT656_HEADER_8BIT; static int bt_outputmode = OUTPUT_MODE_8BIT; static int fpsmode = TP2802_8M15;//3840x2160 //static int fpsmode = TP2802_5M20;//2592x1944 static int stdard = STD_TVI; static int output = DDR_1CH; static int out_clk_frq = OUTCLK_148M; static int vin_clk_frq = OUTCLK_148M; static int half_mode_en=0; #endif ///////////cvbs//////////////////// #if 0 //bt656 sdr 1 ch cvbs static int sav_head = BT656_HEADER_8BIT; static int bt_outputmode = OUTPUT_MODE_8BIT; static int fpsmode = TP2802_PAL; static int stdard = STD_TVI; static int output = SDR_1CH; static int out_clk_frq = OUTCLK_78M; static int vin_clk_frq = OUTCLK_78M; static int half_mode_en=0; #endif #if 0 //bt656 ddr 2 ch cvbs static int sav_head = BT656_HEADER_8BIT; static int bt_outputmode = OUTPUT_MODE_8BIT; static int fpsmode = TP2802_PAL; static int stdard = STD_TVI; static int output = DDR_2CH; static int out_clk_frq = OUTCLK_78M; static int vin_clk_frq = OUTCLK_78M; static int half_mode_en=0; #endif #if 0 //bt656 ddr 4 ch cvbs static int sav_head = BT656_HEADER_8BIT; static int bt_outputmode = OUTPUT_MODE_8BIT; static int fpsmode = TP2802_PAL; static int stdard = STD_TVI; static int output = DDR_4CH; static int out_clk_frq = OUTCLK_148M; static int vin_clk_frq = OUTCLK_78M; static int half_mode_en=0; #endif ///////////720p//////////////////// #if 1 //bt656 sdr 1 ch 720p static int sav_head = BT656_HEADER_8BIT; static int bt_outputmode = OUTPUT_MODE_8BIT; static int fpsmode = TP2802_720P25; static int stdard = STD_TVI; static int output = SDR_1CH; static int out_clk_frq = OUTCLK_78M; static int vin_clk_frq = OUTCLK_78M; static int half_mode_en=0; #endif #if 0 //bt656 ddr 2 ch 720p static int sav_head = BT656_HEADER_8BIT; static int bt_outputmode = OUTPUT_MODE_8BIT; static int fpsmode = TP2802_720P25; static int stdard = STD_TVI; static int output = DDR_2CH; static int out_clk_frq = OUTCLK_78M; static int vin_clk_frq = OUTCLK_78M; static int half_mode_en=0; #endif #if 0 //bt656 ddr 4 ch 720p static int sav_head = BT656_HEADER_8BIT; static int bt_outputmode = OUTPUT_MODE_8BIT; static int fpsmode = TP2802_720P25; static int stdard = STD_TVI; static int output = DDR_4CH; static int out_clk_frq = OUTCLK_148M; static int vin_clk_frq = OUTCLK_78M; static int half_mode_en=0; #endif ////////1080p//////////////// #if 0 //bt656 ddr 1 ch 1080p static int sav_head = BT656_HEADER_8BIT; static int bt_outputmode = OUTPUT_MODE_8BIT; static int fpsmode = TP2802_1080P25; static int stdard = STD_TVI; static int output = DDR_1CH; static int out_clk_frq = OUTCLK_78M; static int vin_clk_frq = OUTCLK_148M; static int half_mode_en=0; #endif #if 0 //bt656 sdr 1 ch 1080p static int sav_head = BT656_HEADER_8BIT; static int bt_outputmode = OUTPUT_MODE_8BIT; static int fpsmode = TP2802_1080P25; static int stdard = STD_TVI; static int output = SDR_1CH; static int out_clk_frq = OUTCLK_148M; static int vin_clk_frq = OUTCLK_148M; static int half_mode_en=0; #endif #if 0 //bt656 ddr 2 ch 1080p static int sav_head = BT656_HEADER_8BIT; static int bt_outputmode = OUTPUT_MODE_8BIT; static int fpsmode = TP2802_1080P25; static int stdard = STD_TVI; static int output = DDR_2CH; static int out_clk_frq = OUTCLK_148M; static int vin_clk_frq = OUTCLK_148M; static int half_mode_en=0; #endif #if 0 //bt656 ddr 4 ch 1080p lite static int sav_head = BT656_HEADER_8BIT; static int bt_outputmode = OUTPUT_MODE_8BIT; static int fpsmode = TP2802_1080P25; static int stdard = STD_TVI; static int output = DDR_4CH; static int out_clk_frq = OUTCLK_148M; static int vin_clk_frq = OUTCLK_148M; static int half_mode_en=1; #endif #if 0 //bt1120 16bit.need 78M sdr1ch mode static int sav_head = BT656_HEADER_8BIT; static int bt_outputmode = OUTPUT_MODE_16BIT; static int fpsmode = TP2802_1080P25; static int stdard = STD_TVI; static int output = SDR_1CH; static int out_clk_frq = OUTCLK_78M; static int vin_clk_frq = OUTCLK_148M; #endif static unsigned int id; static const unsigned char SYS_MODE[5]= {0x01,0x02,0x04,0x08,0x0f}; //{ch1,ch2,ch3,ch4,ch_all} static const unsigned char SYS_AND[5] = {0xfe,0xfd,0xfb,0xf7,0xf0}; //static const unsigned char DDR_2CH_MUX[5] = {0x01,0x02,0x40,0x80,0xc3}; //default Vin1&2@port1 Vin3&4@port2 static const unsigned char TP2826_DDR2CH_MUX[5]= {0x01,0x02,0x04,0x08,0x0f}; //{ch1,ch2,ch3,ch4,ch_all} static const unsigned char CLK_MODE[4]= {0x01,0x10,0x01,0x10}; //for SDR_1CH/DDR_1CH output only static const unsigned char CLK_ADDR[4]= {0xfa,0xfa,0xfb,0xfb}; static const unsigned char CLK_AND[4] = {0xf8,0x8f,0xf8,0x8f}; static const unsigned char SDR1_SEL[4]= {0x00,0x11,0x22,0x33}; // //static const unsigned char DDR1_SEL[4]= {0x40,0x51,0x62,0x73}; // static const unsigned char TP2827C_DDR1_SEL[4]= {0x04,0x15,0x26,0x37}; // static const unsigned char DAT_ADDR[4]= {0xf6,0xf7,0xf8,0xf9}; static void tp2828_case_setting(struct i2c_dev * chip, unsigned char ch) { printf("tp2828_case_setting\n"); int val=0; if(out_clk_frq == OUTCLK_78M){ tp28xx_byte_write(chip, 0xFA, 0x99); tp28xx_byte_write(chip, 0xFB, 0x99); } if(vin_clk_frq == OUTCLK_78M){ tp28xx_byte_write(chip, 0xF5, 0x0f); } if(bt_outputmode == OUTPUT_MODE_16BIT) { tp28xx_byte_write(chip, 0xF6, 0x00); tp28xx_byte_write(chip, 0xF8, 0x44); tp28xx_byte_write(chip, 0xFA, 0xcb); tp28xx_byte_write(chip, 0xFB, 0xed); } if(multi_sample_en){ tp28xx_byte_write(chip, 0x46, 0x02); tp28xx_byte_write(chip, 0x47, 0x02); tp28xx_byte_write(chip, 0xF2, 0x02); tp28xx_byte_write(chip, 0xF3, 0x01); tp28xx_byte_write(chip, 0xF4, 0x60); tp28xx_byte_write(chip, 0xF5, 0x02); tp28xx_byte_write(chip, 0xF6, 0x10); tp28xx_byte_write(chip, 0xF7, 0x11); tp28xx_byte_write(chip, 0xF8, 0x32); tp28xx_byte_write(chip, 0xF9, 0x33); tp28xx_byte_write(chip, 0xFA, 0x88); tp28xx_byte_write(chip, 0xFB, 0x88); } if(output == DDR_2CH && out_clk_frq == OUTCLK_78M) { tp28xx_byte_write(chip, 0xF6, 0x10); // tp28xx_byte_write(chip, 0xF7, 0x10); // tp28xx_byte_write(chip, 0xF8, 0x10); // tp28xx_byte_write(chip, 0xF9, 0x10); // tp28xx_byte_write(chip, 0x50, 0x81); // tp28xx_byte_write(chip, 0x51, 0x81); // tp28xx_byte_write(chip, 0x52, 0x81); // tp28xx_byte_write(chip, 0x53, 0x81); // } if(half_mode_en) { val = tp28xx_byte_read(chip, 0x35); val |= 0x40; tp28xx_byte_write(chip, 0x35, val); } tp28xx_byte_write(chip, 0x4e, 0x05);//clk enable tp28xx_byte_write(chip, 0x4d, 0x0f);//pin output control } static void tp2802_set_reg_page(struct i2c_dev * chip, unsigned char ch) { switch(ch) { case CH_1: tp28xx_byte_write(chip, 0x40, 0x00); break; // VIN1 registers case CH_2: tp28xx_byte_write(chip, 0x40, 0x01); break; // VIN2 registers case CH_3: tp28xx_byte_write(chip, 0x40, 0x02); break; // VIN3 registers case CH_4: tp28xx_byte_write(chip, 0x40, 0x03); break; // VIN4 registers case CH_ALL: tp28xx_byte_write(chip, 0x40, 0x04); break; // Write All VIN1-4 registers case AUDIO_PAGE: tp28xx_byte_write(chip, 0x40, 0x40); break; // Audio case DATA_PAGE: tp28xx_byte_write(chip, 0x40, 0x10); break; // PTZ data default: tp28xx_byte_write(chip, 0x40, 0x04); break; } } static void tp2802_set_work_mode_1080p25(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_1080p25_raster, 9); } static void tp2802_set_work_mode_1080p30(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_1080p30_raster, 9); } static void tp2802_set_work_mode_720p25(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_720p25_raster, 9); } static void tp2802_set_work_mode_720p30(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_720p30_raster, 9); } static void tp2802_set_work_mode_720p50(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_720p50_raster, 9); } static void tp2802_set_work_mode_720p60(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_720p60_raster, 9); } static void tp2802_set_work_mode_PAL(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_PAL_raster, 9); } static void tp2802_set_work_mode_NTSC(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_NTSC_raster, 9); } static void tp2802_set_work_mode_3M(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_3M_raster, 9); } static void tp2802_set_work_mode_5M(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_5M_raster, 9); } static void tp2802_set_work_mode_4M(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_4M_raster, 9); } static void tp2802_set_work_mode_3M20(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_3M20_raster, 9); } static void tp2802_set_work_mode_4M12(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_4M12_raster, 9); } static void tp2802_set_work_mode_6M10(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_6M10_raster, 9); } /* static void tp2802_set_work_mode_QHDH30(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_QHDH30_raster, 9); } */ /* static void tp2802_set_work_mode_QHDH25(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_QHDH25_raster, 9); } */ static void tp2802_set_work_mode_QHD15(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_QHD15_raster, 9); } /* static void tp2802_set_work_mode_QXGAH30(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_QXGAH30_raster, 9); } */ /* static void tp2802_set_work_mode_QXGAH25(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_QXGAH25_raster, 9); } */ static void tp2802_set_work_mode_QHD30(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_QHD30_raster, 9); } static void tp2802_set_work_mode_QHD25(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_QHD25_raster, 9); } static void tp2802_set_work_mode_QXGA30(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_QXGA30_raster, 9); } static void tp2802_set_work_mode_QXGA25(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_QXGA25_raster, 9); } /* static void tp2802_set_work_mode_4M30(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_4M30_raster, 9); } static void tp2802_set_work_mode_4M25(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_4M25_raster, 9); } */ static void tp2802_set_work_mode_5M20(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_5M20_raster, 9); } /* static void tp2802_set_work_mode_5MH20(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_5MH20_raster, 9); } */ /* static void tp2802_set_work_mode_4MH30(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_4MH30_raster, 9); } static void tp2802_set_work_mode_4MH25(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_4MH25_raster, 9); } */ static void tp2802_set_work_mode_8M15(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_8M15_raster, 9); } /* static void tp2802_set_work_mode_8MH15(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_8MH15_raster, 9); } */ static void tp2802_set_work_mode_8M12(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_8M12_raster, 9); } /* static void tp2802_set_work_mode_8MH12(struct i2c_dev * chip) { // Start address 0x15, Size = 9B tp2802_write_table(chip, 0x15, tbl_tp2802_8MH12_raster, 9); } */ /* static void TP2826_RX_init(struct i2c_dev * chip) { printf("TP2826_RX_init in.\n"); tp28xx_byte_write(chip, 0xc9, 0x00); tp28xx_byte_write(chip, 0xca, 0x00); tp28xx_byte_write(chip, 0xcb, 0x06); tp28xx_byte_write(chip, 0xcc, 0x07); tp28xx_byte_write(chip, 0xcd, 0x08); tp28xx_byte_write(chip, 0xce, 0x09); //line6,7,8,9 tp28xx_byte_write(chip, 0xcf, 0x03); tp28xx_byte_write(chip, 0xd0, 0x48); tp28xx_byte_write(chip, 0xd1, 0x34); //39 clock per bit 0.526us tp28xx_byte_write(chip, 0xd2, 0x60); tp28xx_byte_write(chip, 0xd3, 0x10); tp28xx_byte_write(chip, 0xd4, 0x04); // tp28xx_byte_write(chip, 0xd5, 0xf0); tp28xx_byte_write(chip, 0xd6, 0xd8); tp28xx_byte_write(chip, 0xd7, 0x17); //24bit } */ static void TP2829_RX_init(struct i2c_dev * chip, unsigned char mod) { int i, index=0; unsigned char regA7=0x00; unsigned char regA8=0x00; //regC9~D7 static const unsigned char PTZ_RX_dat[][15]= { {0x00,0x00,0x07,0x08,0x00,0x00,0x04,0x00,0x00,0x60,0x10,0x06,0xbe,0x39,0x27}, //TVI command {0x00,0x00,0x07,0x08,0x09,0x0a,0x04,0x00,0x00,0x60,0x10,0x06,0xbe,0x39,0x27}, //TVI burst {0x00,0x00,0x06,0x07,0x08,0x09,0x05,0xbf,0x11,0x60,0x0b,0x04,0xf0,0xd8,0x2f}, //ACP1 0.525 {0x00,0x00,0x06,0x07,0x08,0x09,0x02,0xdf,0x88,0x60,0x10,0x04,0xf0,0xd8,0x17}, //ACP2 0.6 //{0x00,0x00,0x06,0x07,0x08,0x09,0x04,0xec,0xe9,0x60,0x10,0x04,0xf0,0xd8,0x17}, //ACP3 0.35 {0x00,0x00,0x07,0x08,0x09,0x0a,0x09,0xd9,0xd3,0x60,0x08,0x04,0xf0,0xd8,0x2f}, //ACP3 0.35 {0x00,0x00,0x06,0x07,0x08,0x09,0x03,0x52,0x53,0x60,0x10,0x04,0xf0,0xd8,0x17} //ACP1 0.525 }; if(PTZ_RX_TVI_CMD == mod) { index = 0; regA7 = 0x03; regA8 = 0x00; } else if(PTZ_RX_TVI_BURST == mod) { index = 1; regA7 = 0x03; regA8 = 0x00; } else if(PTZ_RX_ACP1 == mod) { index = 2; regA7 = 0x03; regA8 = 0x00; } else if(PTZ_RX_ACP2 == mod) { index = 3; regA7 = 0x27; regA8 = 0x0f; } else if(PTZ_RX_ACP3 == mod) { index = 4; regA7 = 0x03; regA8 = 0x00; } else if(PTZ_RX_TEST == mod) { index = 5; regA7 = 0x03; regA8 = 0x00; } for(i = 0; i < 15; i++) { tp28xx_byte_write(chip, 0xc9+i, PTZ_RX_dat[index][i]); tp28xx_byte_write(chip, 0xa8, regA8); tp28xx_byte_write(chip, 0xa7, regA7); } tp28xx_byte_write(chip, 0xc6, 0x19); tp28xx_byte_write(chip, 0xc8, 0x21); } void TP2829_PLL_Reset( struct i2c_dev * chip) { int i=0; int val=0; tp28xx_byte_write(chip, 0x40, 0x04); tp28xx_byte_write(chip, 0x3b, 0x20); tp28xx_byte_write(chip, 0x3d, 0xe0); tp28xx_byte_write(chip, 0x3d, 0x60); tp28xx_byte_write(chip, 0x3b, 0x25); tp28xx_byte_write(chip, 0x40, 0x40); tp28xx_byte_write(chip, 0x7a, 0x20); tp28xx_byte_write(chip, 0x3c, 0x20); tp28xx_byte_write(chip, 0x3c, 0x00); tp28xx_byte_write(chip, 0x7a, 0x25); tp28xx_byte_write(chip, 0x40, 0x00); if(DDR_2CH == output|| DDR_4CH == output || DDR_1CH == output) tp28xx_byte_write(chip, 0x44, 0x07); else tp28xx_byte_write(chip, 0x44, 0x17); tp28xx_byte_write(chip, 0x43, 0x12); tp28xx_byte_write(chip, 0x45, 0x09); for(i = 0; i < 6; i++ ) { viu_mdelay(1000); val = tp28xx_byte_read(chip, 0x01); printf("detect ad status:0x%x\n",val); tp28xx_byte_read(chip, 0x02); tp28xx_byte_read(chip, 0x03); //if(0x08 & val) break; } } /* static void TP2829_output(struct i2c_dev * chip) { unsigned int tmp; tp28xx_byte_write(chip, 0xF5, 0x00); tp28xx_byte_write(chip, 0xF1, 0x00); tp28xx_byte_write(chip, 0x4D, 0x0f); tp28xx_byte_write(chip, 0x4E, 0x0f); tp28xx_byte_write(chip, 0x4f, 0x03); if( SDR_1CH == output ) { tp28xx_byte_write(chip, 0xFA, 0x88); tp28xx_byte_write(chip, 0xFB, 0x88); tp28xx_byte_write(chip, 0xF4, 0x80); //output clock 148.5M tp28xx_byte_write(chip, 0xF6, 0x00); tp28xx_byte_write(chip, 0xF7, 0x11); tp28xx_byte_write(chip, 0xF8, 0x22); tp28xx_byte_write(chip, 0xF9, 0x33); tp28xx_byte_write(chip, 0x50, 0x00); // tp28xx_byte_write(chip, 0x51, 0x00); // tp28xx_byte_write(chip, 0x52, 0x00); // tp28xx_byte_write(chip, 0x53, 0x00); // tp28xx_byte_write(chip, 0xF3, 0x77); tp28xx_byte_write(chip, 0xF2, 0x77); if(TP2802_720P25V2 == fpsmode || TP2802_720P30V2 == fpsmode || TP2802_PAL == fpsmode || TP2802_NTSC == fpsmode ) { tmp = tp28xx_byte_read(chip, 0xFA); tmp &= 0x88; tmp |= 0x11; tp28xx_byte_write(chip, 0xFA, tmp); tmp = tp28xx_byte_read(chip, 0xFB); tmp &= 0x88; tmp |= 0x11; tp28xx_byte_write(chip, 0xFB, tmp); } else if(FLAG_HALF_MODE == (fpsmode & FLAG_HALF_MODE) ) { tmp = tp28xx_byte_read(chip, 0xFA); tmp &= 0x88; tmp |= 0x43; tp28xx_byte_write(chip, 0xFA, tmp); tmp = tp28xx_byte_read(chip, 0xFB); tmp &= 0x88; tmp |= 0x65; tp28xx_byte_write(chip, 0xFB, tmp); } } else if(SDR_2CH == output) { tp28xx_byte_write(chip, 0xFA, 0x88); tp28xx_byte_write(chip, 0xFB, 0x88); tp28xx_byte_write(chip, 0xF4, 0x80); //output clock 148.5M tp28xx_byte_write(chip, 0xF6, 0x10); tp28xx_byte_write(chip, 0xF7, 0x23); tp28xx_byte_write(chip, 0xF8, 0x10); tp28xx_byte_write(chip, 0xF9, 0x23); tp28xx_byte_write(chip, 0x50, 0x00); // tp28xx_byte_write(chip, 0x51, 0x00); // tp28xx_byte_write(chip, 0x52, 0x00); // tp28xx_byte_write(chip, 0x53, 0x00); // tp28xx_byte_write(chip, 0xF3, 0x77); tp28xx_byte_write(chip, 0xF2, 0x77); } else if(DDR_2CH == output) { tp28xx_byte_write(chip, 0xFA, 0x88); tp28xx_byte_write(chip, 0xFB, 0x88); //tp28xx_byte_write(chip, 0x45, 0x54); //PLL 297M tp28xx_byte_write(chip, 0xF4, 0xa0); //output clock 148.5M tp28xx_byte_write(chip, 0xF6, 0x10); // tp28xx_byte_write(chip, 0xF7, 0x23); // tp28xx_byte_write(chip, 0xF8, 0x10); // tp28xx_byte_write(chip, 0xF9, 0x23); // tp28xx_byte_write(chip, 0x50, 0x00); // tp28xx_byte_write(chip, 0x51, 0x00); // tp28xx_byte_write(chip, 0x52, 0x00); // tp28xx_byte_write(chip, 0x53, 0x00); // tp28xx_byte_write(chip, 0xF3, 0x77); tp28xx_byte_write(chip, 0xF2, 0x77); } else if(DDR_4CH == output) { tp28xx_byte_write(chip, 0xFA, 0x88); tp28xx_byte_write(chip, 0xFB, 0x88); //tp28xx_byte_write(chip, 0x45, 0x54); //PLL 297M tp28xx_byte_write(chip, 0xF4, 0xa0); //output clock 148.5M tp28xx_byte_write(chip, 0xF6, 0x10); // tp28xx_byte_write(chip, 0xF7, 0x10); // tp28xx_byte_write(chip, 0xF8, 0x10); // tp28xx_byte_write(chip, 0xF9, 0x10); // tp28xx_byte_write(chip, 0x50, 0xB2); // tp28xx_byte_write(chip, 0x51, 0xB2); // tp28xx_byte_write(chip, 0x52, 0xB2); // tp28xx_byte_write(chip, 0x53, 0xB2); // tp28xx_byte_write(chip, 0xF3, 0x77); tp28xx_byte_write(chip, 0xF2, 0x77); } else if( DDR_1CH == output ) { tp28xx_byte_write(chip, 0xFA, 0x88); tp28xx_byte_write(chip, 0xFB, 0x88); //tp28xx_byte_write(chip, 0x45, 0x54); //PLL 297M tp28xx_byte_write(chip, 0xF4, 0xa0); //output clock 148.5M tp28xx_byte_write(chip, 0xF6, 0x04); tp28xx_byte_write(chip, 0xF7, 0x15); tp28xx_byte_write(chip, 0xF8, 0x26); tp28xx_byte_write(chip, 0xF9, 0x37); tp28xx_byte_write(chip, 0x50, 0x00); // tp28xx_byte_write(chip, 0x51, 0x00); // tp28xx_byte_write(chip, 0x52, 0x00); // tp28xx_byte_write(chip, 0x53, 0x00); // tp28xx_byte_write(chip, 0xF3, 0x77); tp28xx_byte_write(chip, 0xF2, 0x77); } } */ static void TP2828_output(struct i2c_dev * chip) { unsigned int tmp; tp28xx_byte_write(chip, 0xF5, 0x00); tp28xx_byte_write(chip, 0xF1, 0x14); tp28xx_byte_write(chip, 0x4D, 0x07); tp28xx_byte_write(chip, 0x4E, 0x05); tp28xx_byte_write(chip, 0x4f, 0x03); if( SDR_1CH == output ) { tp28xx_byte_write(chip, 0xFA, 0x88); tp28xx_byte_write(chip, 0xFB, 0x88); //tp28xx_byte_write(chip, 0x45, 0x09); //PLL 148.5M tp28xx_byte_write(chip, 0xF4, 0x80); //output clock 148.5M tp28xx_byte_write(chip, 0xF6, 0x00); tp28xx_byte_write(chip, 0xF7, 0x11); tp28xx_byte_write(chip, 0xF8, 0x22); tp28xx_byte_write(chip, 0xF9, 0x33); tp28xx_byte_write(chip, 0x50, 0x00); // tp28xx_byte_write(chip, 0x51, 0x00); // tp28xx_byte_write(chip, 0x52, 0x00); // tp28xx_byte_write(chip, 0x53, 0x00); // tp28xx_byte_write(chip, 0xF3, 0x01); tp28xx_byte_write(chip, 0xF2, 0x03); if(TP2802_720P25V2 == fpsmode || TP2802_720P30V2 == fpsmode || TP2802_PAL == fpsmode || TP2802_NTSC == fpsmode ) { tmp = tp28xx_byte_read(chip, 0xFA); tmp &= 0x88; tmp |= 0x11; tp28xx_byte_write(chip, 0xFA, tmp); tmp = tp28xx_byte_read(chip, 0xFB); tmp &= 0x88; tmp |= 0x11; tp28xx_byte_write(chip, 0xFB, tmp); } else if(FLAG_HALF_MODE == (fpsmode & FLAG_HALF_MODE) ) { tmp = tp28xx_byte_read(chip, 0xFA); tmp &= 0x88; tmp |= 0x43; tp28xx_byte_write(chip, 0xFA, tmp); tmp = tp28xx_byte_read(chip, 0xFB); tmp &= 0x88; tmp |= 0x65; tp28xx_byte_write(chip, 0xFB, tmp); } } else if(SDR_2CH == output) { tp28xx_byte_write(chip, 0xFA, 0x88); tp28xx_byte_write(chip, 0xFB, 0x88); //tp28xx_byte_write(chip, 0x45, 0x09); //PLL 148.5M tp28xx_byte_write(chip, 0xF4, 0x80); //output clock 148.5M tp28xx_byte_write(chip, 0xF6, 0x10); tp28xx_byte_write(chip, 0xF7, 0x10); tp28xx_byte_write(chip, 0xF8, 0x23); tp28xx_byte_write(chip, 0xF9, 0x23); tp28xx_byte_write(chip, 0x50, 0x00); // tp28xx_byte_write(chip, 0x51, 0x00); // tp28xx_byte_write(chip, 0x52, 0x00); // tp28xx_byte_write(chip, 0x53, 0x00); // tp28xx_byte_write(chip, 0xF3, 0x00); tp28xx_byte_write(chip, 0xF2, 0x00); } else if(DDR_2CH == output) { tp28xx_byte_write(chip, 0xFA, 0x88); tp28xx_byte_write(chip, 0xFB, 0x88); tp28xx_byte_write(chip, 0x45, 0x09); //PLL 297M tp28xx_byte_write(chip, 0xF4, 0xa0); //output clock 148.5M tp28xx_byte_write(chip, 0xF6, 0x10); // tp28xx_byte_write(chip, 0xF7, 0x10); // tp28xx_byte_write(chip, 0xF8, 0x23); // tp28xx_byte_write(chip, 0xF9, 0x23); // tp28xx_byte_write(chip, 0x50, 0x00); // tp28xx_byte_write(chip, 0x51, 0x00); // tp28xx_byte_write(chip, 0x52, 0x00); // tp28xx_byte_write(chip, 0x53, 0x00); // tp28xx_byte_write(chip, 0xF3, 0x00); tp28xx_byte_write(chip, 0xF2, 0x00); } else if(DDR_4CH == output) { tp28xx_byte_write(chip, 0xFA, 0x88); tp28xx_byte_write(chip, 0xFB, 0x88); tp28xx_byte_write(chip, 0x45, 0x09); //PLL 297M tp28xx_byte_write(chip, 0xF4, 0xa0); //output clock 148.5M tp28xx_byte_write(chip, 0xF6, 0x10); // tp28xx_byte_write(chip, 0xF7, 0x10); // tp28xx_byte_write(chip, 0xF8, 0x10); // tp28xx_byte_write(chip, 0xF9, 0x10); // tp28xx_byte_write(chip, 0x50, 0xB2); // tp28xx_byte_write(chip, 0x51, 0xB2); // tp28xx_byte_write(chip, 0x52, 0xB2); // tp28xx_byte_write(chip, 0x53, 0xB2); // tp28xx_byte_write(chip, 0xF3, 0x00); tp28xx_byte_write(chip, 0xF2, 0x00); } else if( DDR_1CH == output ) { tp28xx_byte_write(chip, 0xFA, 0x88); tp28xx_byte_write(chip, 0xFB, 0x88); tp28xx_byte_write(chip, 0x45, 0x09); //PLL 297M tp28xx_byte_write(chip, 0xF4, 0xa0); //output clock 148.5M tp28xx_byte_write(chip, 0xF6, 0x04); tp28xx_byte_write(chip, 0xF7, 0x15); tp28xx_byte_write(chip, 0xF8, 0x26); tp28xx_byte_write(chip, 0xF9, 0x37); tp28xx_byte_write(chip, 0x50, 0x00); // tp28xx_byte_write(chip, 0x51, 0x00); // tp28xx_byte_write(chip, 0x52, 0x00); // tp28xx_byte_write(chip, 0x53, 0x00); // tp28xx_byte_write(chip, 0xF3, 0x00); tp28xx_byte_write(chip, 0xF2, 0x00); } } static void TP2829_reset_default(struct i2c_dev * chip, unsigned char ch) { unsigned int tmp; //tp28xx_byte_write(chip, 0x26, 0x04); tp28xx_byte_write(chip, 0x07, 0xc0); tp28xx_byte_write(chip, 0x0b, 0xc0); tp28xx_byte_write(chip, 0x21, 0x84); tp28xx_byte_write(chip, 0x38, 0x00); tp28xx_byte_write(chip, 0x39, 0x1C); tp28xx_byte_write(chip, 0x3a, 0x32); tp28xx_byte_write(chip, 0x3B, 0x26); tmp = tp28xx_byte_read(chip, 0x26); tmp &= 0xfe; tp28xx_byte_write(chip, 0x26, tmp); tmp = tp28xx_byte_read(chip, 0x06); tmp &= 0xfb; tp28xx_byte_write(chip, 0x06, tmp); } ////////////////////////////////////////////////////////////// static void TP2829_NTSC_DataSet(struct i2c_dev * chip) { unsigned char tmp; //tp28xx_byte_write(chip, 0x07, 0xc0); tp28xx_byte_write(chip, 0x0b, 0xc0); tp28xx_byte_write(chip, 0x0c, 0x13); tp28xx_byte_write(chip, 0x0d, 0x50); tp28xx_byte_write(chip, 0x20, 0x40); tp28xx_byte_write(chip, 0x21, 0x84); tp28xx_byte_write(chip, 0x22, 0x36); tp28xx_byte_write(chip, 0x23, 0x3c); tp28xx_byte_write(chip, 0x25, 0xff); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x27, 0x2d); tp28xx_byte_write(chip, 0x28, 0x00); tp28xx_byte_write(chip, 0x2b, 0x70); tp28xx_byte_write(chip, 0x2c, 0x2a); tp28xx_byte_write(chip, 0x2d, 0x68); tp28xx_byte_write(chip, 0x2e, 0x57); tp28xx_byte_write(chip, 0x30, 0x62); tp28xx_byte_write(chip, 0x31, 0xbb); tp28xx_byte_write(chip, 0x32, 0x96); tp28xx_byte_write(chip, 0x33, 0xc0); //tp28xx_byte_write(chip, 0x35, 0x25); tp28xx_byte_write(chip, 0x38, 0x00); tp28xx_byte_write(chip, 0x39, 0x04); tp28xx_byte_write(chip, 0x3a, 0x32); tp28xx_byte_write(chip, 0x3B, 0x26); tp28xx_byte_write(chip, 0x18, 0x12); tp28xx_byte_write(chip, 0x13, 0x00); tmp = tp28xx_byte_read(chip, 0x14); tmp &= 0x9f; tp28xx_byte_write(chip, 0x14, tmp); } static void TP2829_PAL_DataSet(struct i2c_dev * chip) { unsigned char tmp; //tp28xx_byte_write(chip, 0x07, 0xc0); tp28xx_byte_write(chip, 0x0b, 0xc0); tp28xx_byte_write(chip, 0x0c, 0x13); tp28xx_byte_write(chip, 0x0d, 0x51); tp28xx_byte_write(chip, 0x20, 0x48); tp28xx_byte_write(chip, 0x21, 0x84); tp28xx_byte_write(chip, 0x22, 0x37); tp28xx_byte_write(chip, 0x23, 0x3f); tp28xx_byte_write(chip, 0x25, 0xff); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x27, 0x2d); tp28xx_byte_write(chip, 0x28, 0x00); tp28xx_byte_write(chip, 0x2b, 0x70); tp28xx_byte_write(chip, 0x2c, 0x2a); tp28xx_byte_write(chip, 0x2d, 0x64); tp28xx_byte_write(chip, 0x2e, 0x56); tp28xx_byte_write(chip, 0x30, 0x7a); tp28xx_byte_write(chip, 0x31, 0x4a); tp28xx_byte_write(chip, 0x32, 0x4d); tp28xx_byte_write(chip, 0x33, 0xf0); //tp28xx_byte_write(chip, 0x35, 0x25); tp28xx_byte_write(chip, 0x38, 0x00); tp28xx_byte_write(chip, 0x39, 0x04); tp28xx_byte_write(chip, 0x3a, 0x32); tp28xx_byte_write(chip, 0x3B, 0x26); tp28xx_byte_write(chip, 0x18, 0x17); tp28xx_byte_write(chip, 0x13, 0x00); tmp = tp28xx_byte_read(chip, 0x14); tmp &= 0x9f; tp28xx_byte_write(chip, 0x14, tmp); } static void TP2829_V1_DataSet(struct i2c_dev * chip) { unsigned char tmp; //tp28xx_byte_write(chip, 0x07, 0xc0); tp28xx_byte_write(chip, 0x0b, 0xc0); tp28xx_byte_write(chip, 0x0c, 0x03); tp28xx_byte_write(chip, 0x0d, 0x50); tp28xx_byte_write(chip, 0x20, 0x30); tp28xx_byte_write(chip, 0x21, 0x84); tp28xx_byte_write(chip, 0x22, 0x36); tp28xx_byte_write(chip, 0x23, 0x3c); tp28xx_byte_write(chip, 0x25, 0xff); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x27, 0x2d); tp28xx_byte_write(chip, 0x28, 0x00); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2c, 0x0a); tp28xx_byte_write(chip, 0x2d, 0x30); tp28xx_byte_write(chip, 0x2e, 0x70); tp28xx_byte_write(chip, 0x30, 0x48); tp28xx_byte_write(chip, 0x31, 0xbb); tp28xx_byte_write(chip, 0x32, 0x2e); tp28xx_byte_write(chip, 0x33, 0x90); //tp28xx_byte_write(chip, 0x35, 0x05); tp28xx_byte_write(chip, 0x38, 0x00); tp28xx_byte_write(chip, 0x39, 0x1c); tp28xx_byte_write(chip, 0x3a, 0x32); tp28xx_byte_write(chip, 0x3B, 0x26); tp28xx_byte_write(chip, 0x13, 0x00); tmp = tp28xx_byte_read(chip, 0x14); tmp &= 0x9f; tp28xx_byte_write(chip, 0x14, tmp); } static void TP2829_V2_DataSet(struct i2c_dev * chip) { unsigned char tmp; //tp28xx_byte_write(chip, 0x07, 0xc0); tp28xx_byte_write(chip, 0x0b, 0xc0); tp28xx_byte_write(chip, 0x0c, 0x13); tp28xx_byte_write(chip, 0x0d, 0x50); tp28xx_byte_write(chip, 0x20, 0x30); tp28xx_byte_write(chip, 0x21, 0x84); tp28xx_byte_write(chip, 0x22, 0x36); tp28xx_byte_write(chip, 0x23, 0x3c); tp28xx_byte_write(chip, 0x25, 0xff); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x27, 0x2d); tp28xx_byte_write(chip, 0x28, 0x00); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2c, 0x0a); tp28xx_byte_write(chip, 0x2d, 0x30); tp28xx_byte_write(chip, 0x2e, 0x70); tp28xx_byte_write(chip, 0x30, 0x48); tp28xx_byte_write(chip, 0x31, 0xbb); tp28xx_byte_write(chip, 0x32, 0x2e); tp28xx_byte_write(chip, 0x33, 0x90); //tp28xx_byte_write(chip, 0x35, 0x25); tp28xx_byte_write(chip, 0x38, 0x00); tp28xx_byte_write(chip, 0x39, 0x18); tp28xx_byte_write(chip, 0x3a, 0x32); tp28xx_byte_write(chip, 0x3B, 0x26); tp28xx_byte_write(chip, 0x13, 0x00); tmp = tp28xx_byte_read(chip, 0x14); tmp &= 0x9f; tp28xx_byte_write(chip, 0x14, tmp); } /////HDA QHD30 static void TP2829_AQHDP30_DataSet(struct i2c_dev * chip) { unsigned char tmp; #if 0 tmp = tp28xx_byte_read(chip, 0x14); tmp |= 0x40; tp28xx_byte_write(chip, 0x14, tmp); #else tmp = tp28xx_byte_read(chip, 0x14); tmp &= 0x9f; tp28xx_byte_write(chip, 0x14, tmp); tmp = tp28xx_byte_read(chip, 0x1c); tmp |= 0x80; tp28xx_byte_write(chip, 0x1c, tmp); tp28xx_byte_write(chip, 0x0d, 0x70); #endif tp28xx_byte_write(chip, 0x13, 0x00); tp28xx_byte_write(chip, 0x15, 0x23); tp28xx_byte_write(chip, 0x16, 0x16); tp28xx_byte_write(chip, 0x18, 0x32); tp28xx_byte_write(chip, 0x20, 0x80); tp28xx_byte_write(chip, 0x21, 0x86); tp28xx_byte_write(chip, 0x22, 0x36); tp28xx_byte_write(chip, 0x25, 0xff); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x27, 0xad); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2d, 0xa0); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0x48); tp28xx_byte_write(chip, 0x31, 0x6a); tp28xx_byte_write(chip, 0x32, 0xbe); tp28xx_byte_write(chip, 0x33, 0x80); //tp28xx_byte_write(chip, 0x35, 0x15); tp28xx_byte_write(chip, 0x39, 0x40); } /////HDA QHD25 static void TP2829_AQHDP25_DataSet(struct i2c_dev * chip) { unsigned char tmp; #if 0 tmp = tp28xx_byte_read(chip, 0x14); tmp |= 0x40; tp28xx_byte_write(chip, 0x14, tmp); #else tmp = tp28xx_byte_read(chip, 0x14); tmp &= 0x9f; tp28xx_byte_write(chip, 0x14, tmp); tmp = tp28xx_byte_read(chip, 0x1c); tmp |= 0x80; tp28xx_byte_write(chip, 0x1c, tmp); tp28xx_byte_write(chip, 0x0d, 0x70); #endif tp28xx_byte_write(chip, 0x13, 0x00); tp28xx_byte_write(chip, 0x15, 0x23); tp28xx_byte_write(chip, 0x16, 0x16); tp28xx_byte_write(chip, 0x18, 0x32); tp28xx_byte_write(chip, 0x20, 0x80); tp28xx_byte_write(chip, 0x21, 0x86); tp28xx_byte_write(chip, 0x22, 0x36); tp28xx_byte_write(chip, 0x25, 0xff); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x27, 0xad); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2d, 0xa0); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0x48); tp28xx_byte_write(chip, 0x31, 0x6f); tp28xx_byte_write(chip, 0x32, 0xb5); tp28xx_byte_write(chip, 0x33, 0x80); //tp28xx_byte_write(chip, 0x35, 0x15); tp28xx_byte_write(chip, 0x39, 0x40); } /////HDA QXGA30 static void TP2829_AQXGAP30_DataSet(struct i2c_dev * chip) { unsigned char tmp; tmp = tp28xx_byte_read(chip, 0x14); tmp |= 0x40; tp28xx_byte_write(chip, 0x14, tmp); tp28xx_byte_write(chip, 0x13, 0x00); //tp28xx_byte_write(chip, 0x07, 0xc0); tp28xx_byte_write(chip, 0x0b, 0xc0); tp28xx_byte_write(chip, 0x0c, 0x03); tp28xx_byte_write(chip, 0x0d, 0x50); tp28xx_byte_write(chip, 0x20, 0x90); tp28xx_byte_write(chip, 0x21, 0x86); tp28xx_byte_write(chip, 0x22, 0x36); tp28xx_byte_write(chip, 0x23, 0x3c); tp28xx_byte_write(chip, 0x25, 0xff); tp28xx_byte_write(chip, 0x26, 0x01); tp28xx_byte_write(chip, 0x27, 0xad); tp28xx_byte_write(chip, 0x28, 0x00); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2c, 0x0a); tp28xx_byte_write(chip, 0x2d, 0xa0); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0x48); tp28xx_byte_write(chip, 0x31, 0x68); tp28xx_byte_write(chip, 0x32, 0xbe); tp28xx_byte_write(chip, 0x33, 0x80); tp28xx_byte_write(chip, 0x38, 0x40); tp28xx_byte_write(chip, 0x39, 0x40); tp28xx_byte_write(chip, 0x3a, 0x12); tp28xx_byte_write(chip, 0x3b, 0x26); } /////HDA QXGA25 static void TP2829_AQXGAP25_DataSet(struct i2c_dev * chip) { unsigned char tmp; tmp = tp28xx_byte_read(chip, 0x14); tmp |= 0x60; tp28xx_byte_write(chip, 0x14, tmp); tp28xx_byte_write(chip, 0x13, 0x00); //tp28xx_byte_write(chip, 0x07, 0xc0); tp28xx_byte_write(chip, 0x0b, 0xc0); tp28xx_byte_write(chip, 0x0c, 0x03); tp28xx_byte_write(chip, 0x0d, 0x50); tp28xx_byte_write(chip, 0x20, 0x90); tp28xx_byte_write(chip, 0x21, 0x86); tp28xx_byte_write(chip, 0x22, 0x36); tp28xx_byte_write(chip, 0x23, 0x3c); tp28xx_byte_write(chip, 0x25, 0xff); tp28xx_byte_write(chip, 0x26, 0x01); tp28xx_byte_write(chip, 0x27, 0xad); tp28xx_byte_write(chip, 0x28, 0x00); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2c, 0x0a); tp28xx_byte_write(chip, 0x2d, 0xa0); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0x48); tp28xx_byte_write(chip, 0x31, 0x6c); tp28xx_byte_write(chip, 0x32, 0xbe); tp28xx_byte_write(chip, 0x33, 0x80); tp28xx_byte_write(chip, 0x38, 0x40); tp28xx_byte_write(chip, 0x39, 0x40); tp28xx_byte_write(chip, 0x3a, 0x12); tp28xx_byte_write(chip, 0x3b, 0x26); } /////HDC QHD30 static void TP2829_CQHDP30_DataSet(struct i2c_dev * chip) { unsigned char tmp; tmp = tp28xx_byte_read(chip, 0x14); tmp &= 0x9f; tp28xx_byte_write(chip, 0x14, tmp); tp28xx_byte_write(chip, 0x13, 0x40); tp28xx_byte_write(chip, 0x15, 0x13); tp28xx_byte_write(chip, 0x16, 0xfa); tp28xx_byte_write(chip, 0x18, 0x38); tp28xx_byte_write(chip, 0x1c, 0x0c); tp28xx_byte_write(chip, 0x1d, 0x80); tp28xx_byte_write(chip, 0x20, 0x50); tp28xx_byte_write(chip, 0x21, 0x86); tp28xx_byte_write(chip, 0x22, 0x38); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x27, 0xda); tp28xx_byte_write(chip, 0x2d, 0x6c); tp28xx_byte_write(chip, 0x2e, 0x50); tp28xx_byte_write(chip, 0x30, 0x75); tp28xx_byte_write(chip, 0x31, 0x39); tp28xx_byte_write(chip, 0x32, 0xc0); tp28xx_byte_write(chip, 0x33, 0x31); tp28xx_byte_write(chip, 0x39, 0x48); } /////HDC QHD25 static void TP2829_CQHDP25_DataSet(struct i2c_dev * chip) { unsigned char tmp; tmp = tp28xx_byte_read(chip, 0x14); tmp &= 0x9f; tp28xx_byte_write(chip, 0x14, tmp); tp28xx_byte_write(chip, 0x13, 0x40); tp28xx_byte_write(chip, 0x15, 0x13); tp28xx_byte_write(chip, 0x16, 0xd8); tp28xx_byte_write(chip, 0x18, 0x30); tp28xx_byte_write(chip, 0x1c, 0x0c); tp28xx_byte_write(chip, 0x1d, 0x80); tp28xx_byte_write(chip, 0x20, 0x50); tp28xx_byte_write(chip, 0x21, 0x86); tp28xx_byte_write(chip, 0x22, 0x38); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x27, 0xda); tp28xx_byte_write(chip, 0x2d, 0x6c); tp28xx_byte_write(chip, 0x2e, 0x50); tp28xx_byte_write(chip, 0x30, 0x75); tp28xx_byte_write(chip, 0x31, 0x39); tp28xx_byte_write(chip, 0x32, 0xc0); tp28xx_byte_write(chip, 0x33, 0x3b); tp28xx_byte_write(chip, 0x39, 0x48); } ///////HDA QHD15 static void TP2829_AQHDP15_DataSet(struct i2c_dev * chip) { unsigned char tmp; tmp = tp28xx_byte_read(chip, 0x14); tmp |= 0x40; tp28xx_byte_write(chip, 0x14, tmp); tp28xx_byte_write(chip, 0x13, 0x00); tp28xx_byte_write(chip, 0x20, 0x38); tp28xx_byte_write(chip, 0x21, 0x46); tp28xx_byte_write(chip, 0x25, 0xfe); tp28xx_byte_write(chip, 0x26, 0x01); tp28xx_byte_write(chip, 0x2d, 0x44); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0x29); tp28xx_byte_write(chip, 0x31, 0x68); tp28xx_byte_write(chip, 0x32, 0x78); tp28xx_byte_write(chip, 0x33, 0x10); tp28xx_byte_write(chip, 0x38, 0x40); tp28xx_byte_write(chip, 0x39, 0x40); tp28xx_byte_write(chip, 0x3a, 0x12); } /////HDA QXGA18 static void TP2829_AQXGAP18_DataSet(struct i2c_dev * chip) { unsigned char tmp; tmp = tp28xx_byte_read(chip, 0x14); tmp |= 0x40; tp28xx_byte_write(chip, 0x14, tmp); tp28xx_byte_write(chip, 0x13, 0x00); tp28xx_byte_write(chip, 0x15, 0x13); tp28xx_byte_write(chip, 0x16, 0x10); tp28xx_byte_write(chip, 0x18, 0x68); tp28xx_byte_write(chip, 0x20, 0x48); tp28xx_byte_write(chip, 0x21, 0x46); tp28xx_byte_write(chip, 0x25, 0xfe); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2d, 0x52); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0x29); tp28xx_byte_write(chip, 0x31, 0x65); tp28xx_byte_write(chip, 0x32, 0x2b); tp28xx_byte_write(chip, 0x33, 0xd0); tp28xx_byte_write(chip, 0x38, 0x40); tp28xx_byte_write(chip, 0x39, 0x40); tp28xx_byte_write(chip, 0x3a, 0x12); } /////TVI QHD30/QHD25 static void TP2829_QHDP30_25_DataSet(struct i2c_dev * chip) { unsigned char tmp; tp28xx_byte_write(chip, 0x13, 0x00); tmp = tp28xx_byte_read(chip, 0x14); tmp &= 0x9f; tp28xx_byte_write(chip, 0x14, tmp); //tp28xx_byte_write(chip, 0x07, 0xc0); tp28xx_byte_write(chip, 0x0b, 0xc0); tp28xx_byte_write(chip, 0x0c, 0x03); tp28xx_byte_write(chip, 0x0d, 0x50); tp28xx_byte_write(chip, 0x15, 0x23); tp28xx_byte_write(chip, 0x16, 0x1b); tp28xx_byte_write(chip, 0x18, 0x38); tp28xx_byte_write(chip, 0x20, 0x50); tp28xx_byte_write(chip, 0x21, 0x84); tp28xx_byte_write(chip, 0x22, 0x36); tp28xx_byte_write(chip, 0x23, 0x3c); tp28xx_byte_write(chip, 0x25, 0xff); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x27, 0xad); tp28xx_byte_write(chip, 0x28, 0x00); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2c, 0x0a); tp28xx_byte_write(chip, 0x2d, 0x58); tp28xx_byte_write(chip, 0x2e, 0x70); tp28xx_byte_write(chip, 0x30, 0x74); tp28xx_byte_write(chip, 0x31, 0x58); tp28xx_byte_write(chip, 0x32, 0x9f); tp28xx_byte_write(chip, 0x33, 0x60); //tp28xx_byte_write(chip, 0x35, 0x05); tp28xx_byte_write(chip, 0x38, 0x40); tp28xx_byte_write(chip, 0x39, 0x48); tp28xx_byte_write(chip, 0x3a, 0x12); tp28xx_byte_write(chip, 0x3b, 0x26); } /////TVI 5M20 static void TP2829_5MP20_DataSet(struct i2c_dev * chip) { unsigned char tmp; //tp28xx_byte_write(chip, 0x07, 0xc0); tp28xx_byte_write(chip, 0x0b, 0xc0); tp28xx_byte_write(chip, 0x0c, 0x03); tp28xx_byte_write(chip, 0x0d, 0x50); tp28xx_byte_write(chip, 0x20, 0x50); tp28xx_byte_write(chip, 0x21, 0x84); tp28xx_byte_write(chip, 0x22, 0x36); tp28xx_byte_write(chip, 0x23, 0x3c); tp28xx_byte_write(chip, 0x25, 0xff); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x27, 0xad); tp28xx_byte_write(chip, 0x28, 0x00); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2c, 0x0a); tp28xx_byte_write(chip, 0x2d, 0x54); tp28xx_byte_write(chip, 0x2e, 0x70); tp28xx_byte_write(chip, 0x30, 0x74); tp28xx_byte_write(chip, 0x31, 0xa7); tp28xx_byte_write(chip, 0x32, 0x18); tp28xx_byte_write(chip, 0x33, 0x50); //tp28xx_byte_write(chip, 0x35, 0x05); tp28xx_byte_write(chip, 0x38, 0x40); tp28xx_byte_write(chip, 0x39, 0x48); tp28xx_byte_write(chip, 0x3a, 0x12); tp28xx_byte_write(chip, 0x3b, 0x26); tp28xx_byte_write(chip, 0x13, 0x00); tmp = tp28xx_byte_read(chip, 0x14); tmp &= 0x9f; tp28xx_byte_write(chip, 0x14, tmp); } /////HDA 5M20 static void TP2829_A5MP20_DataSet(struct i2c_dev * chip) { unsigned char tmp; #if 0 tmp = tp28xx_byte_read(chip, 0x14); tmp |= 0x40; tp28xx_byte_write(chip, 0x14, tmp); #else tmp = tp28xx_byte_read(chip, 0x14); tmp &= 0x9f; tp28xx_byte_write(chip, 0x14, tmp); tmp = tp28xx_byte_read(chip, 0x1c); tmp |= 0x80; tp28xx_byte_write(chip, 0x1c, tmp); tp28xx_byte_write(chip, 0x0d, 0x70); #endif tp28xx_byte_write(chip, 0x20, 0x80); tp28xx_byte_write(chip, 0x21, 0x86); tp28xx_byte_write(chip, 0x22, 0x36); tp28xx_byte_write(chip, 0x25, 0xff); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x27, 0xad); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2d, 0xA0); tp28xx_byte_write(chip, 0x2e, 0x70); tp28xx_byte_write(chip, 0x30, 0x48); tp28xx_byte_write(chip, 0x31, 0x77); tp28xx_byte_write(chip, 0x32, 0x0e); tp28xx_byte_write(chip, 0x33, 0xa0); tp28xx_byte_write(chip, 0x39, 0x48); } /////TVI 8M15 static void TP2829_8MP15_DataSet(struct i2c_dev * chip) { unsigned char tmp; //tp28xx_byte_write(chip, 0x07, 0xc0); tp28xx_byte_write(chip, 0x0b, 0xc0); tp28xx_byte_write(chip, 0x0c, 0x03); tp28xx_byte_write(chip, 0x0d, 0x50); tp28xx_byte_write(chip, 0x20, 0x60); tp28xx_byte_write(chip, 0x21, 0x84); tp28xx_byte_write(chip, 0x22, 0x36); tp28xx_byte_write(chip, 0x23, 0x3c); tp28xx_byte_write(chip, 0x25, 0xff); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x27, 0xad); tp28xx_byte_write(chip, 0x28, 0x00); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2c, 0x0a); tp28xx_byte_write(chip, 0x2d, 0x58); tp28xx_byte_write(chip, 0x2e, 0x70); tp28xx_byte_write(chip, 0x30, 0x74); tp28xx_byte_write(chip, 0x31, 0x59); tp28xx_byte_write(chip, 0x32, 0xbd); tp28xx_byte_write(chip, 0x33, 0x60); //tp28xx_byte_write(chip, 0x35, 0x05); tp28xx_byte_write(chip, 0x38, 0x40); tp28xx_byte_write(chip, 0x39, 0x48); tp28xx_byte_write(chip, 0x3a, 0x12); tp28xx_byte_write(chip, 0x3b, 0x26); tp28xx_byte_write(chip, 0x13, 0x00); tmp = tp28xx_byte_read(chip, 0x14); tmp &= 0x9f; tp28xx_byte_write(chip, 0x14, tmp); } ///////HDA 5M12.5 static void TP2829_A5MP12_DataSet(struct i2c_dev * chip) { unsigned char tmp; tmp = tp28xx_byte_read(chip, 0x14); tmp |= 0x40; tp28xx_byte_write(chip, 0x14, tmp); tp28xx_byte_write(chip, 0x13, 0x00); tp28xx_byte_write(chip, 0x20, 0x38); tp28xx_byte_write(chip, 0x21, 0x46); tp28xx_byte_write(chip, 0x25, 0xfe); tp28xx_byte_write(chip, 0x26, 0x01); tp28xx_byte_write(chip, 0x2d, 0x44); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0x29); tp28xx_byte_write(chip, 0x31, 0x68); tp28xx_byte_write(chip, 0x32, 0x72); tp28xx_byte_write(chip, 0x33, 0xb0); tp28xx_byte_write(chip, 0x16, 0x10); tp28xx_byte_write(chip, 0x18, 0x1a); tp28xx_byte_write(chip, 0x1d, 0xb8); tp28xx_byte_write(chip, 0x36, 0xbc); tp28xx_byte_write(chip, 0x38, 0x40); tp28xx_byte_write(chip, 0x39, 0x40); tp28xx_byte_write(chip, 0x3a, 0x12); } /////////////////////////////////////////////////////////////////// static void TP2829_A720P30_DataSet(struct i2c_dev * chip) { unsigned char tmp; tmp = tp28xx_byte_read(chip, 0x02); tmp |= 0x04; tp28xx_byte_write(chip, 0x02, tmp); tp28xx_byte_write(chip, 0x0d, 0x70); tp28xx_byte_write(chip, 0x20, 0x40); tp28xx_byte_write(chip, 0x21, 0x46); tp28xx_byte_write(chip, 0x25, 0xfe); tp28xx_byte_write(chip, 0x26, 0x01); tp28xx_byte_write(chip, 0x2c, 0x3a); tp28xx_byte_write(chip, 0x2d, 0x5a); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0x9d); tp28xx_byte_write(chip, 0x31, 0xca); tp28xx_byte_write(chip, 0x32, 0x01); tp28xx_byte_write(chip, 0x33, 0xd0); } static void TP2829_A720P25_DataSet(struct i2c_dev * chip) { unsigned char tmp; tmp = tp28xx_byte_read(chip, 0x02); tmp |= 0x04; tp28xx_byte_write(chip, 0x02, tmp); tp28xx_byte_write(chip, 0x0d, 0x71); tp28xx_byte_write(chip, 0x20, 0x40); tp28xx_byte_write(chip, 0x21, 0x46); tp28xx_byte_write(chip, 0x25, 0xfe); tp28xx_byte_write(chip, 0x26, 0x01); tp28xx_byte_write(chip, 0x2c, 0x3a); tp28xx_byte_write(chip, 0x2d, 0x5a); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0x9e); tp28xx_byte_write(chip, 0x31, 0x20); tp28xx_byte_write(chip, 0x32, 0x10); tp28xx_byte_write(chip, 0x33, 0x90); } static void TP2829_A1080P30_DataSet(struct i2c_dev * chip) { unsigned char tmp; tmp = tp28xx_byte_read(chip, 0x02); tmp |= 0x04; tp28xx_byte_write(chip, 0x02, tmp); tp28xx_byte_write(chip, 0x15, 0x01); tp28xx_byte_write(chip, 0x16, 0xf0); tp28xx_byte_write(chip, 0x0d, 0x72); tp28xx_byte_write(chip, 0x20, 0x38); tp28xx_byte_write(chip, 0x21, 0x46); tp28xx_byte_write(chip, 0x25, 0xfe); tp28xx_byte_write(chip, 0x26, 0x0d); tp28xx_byte_write(chip, 0x2c, 0x3a); tp28xx_byte_write(chip, 0x2d, 0x54); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0xa5); tp28xx_byte_write(chip, 0x31, 0x95); tp28xx_byte_write(chip, 0x32, 0xe0); tp28xx_byte_write(chip, 0x33, 0x60); } static void TP2829_A1080P25_DataSet(struct i2c_dev * chip) { unsigned char tmp; tmp = tp28xx_byte_read(chip, 0x02); tmp |= 0x04; tp28xx_byte_write(chip, 0x02, tmp); tp28xx_byte_write(chip, 0x15, 0x01); tp28xx_byte_write(chip, 0x16, 0xf0); tp28xx_byte_write(chip, 0x0d, 0x73); tp28xx_byte_write(chip, 0x20, 0x3c); tp28xx_byte_write(chip, 0x21, 0x46); tp28xx_byte_write(chip, 0x25, 0xfe); tp28xx_byte_write(chip, 0x26, 0x0d); tp28xx_byte_write(chip, 0x2c, 0x3a); tp28xx_byte_write(chip, 0x2d, 0x54); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0xa5); tp28xx_byte_write(chip, 0x31, 0x86); tp28xx_byte_write(chip, 0x32, 0xfb); tp28xx_byte_write(chip, 0x33, 0x60); } static void TP2829_1080P60_DataSet(struct i2c_dev * chip) { unsigned char tmp; //tp28xx_byte_write(chip, 0x07, 0xc0); tp28xx_byte_write(chip, 0x0b, 0xc0); tp28xx_byte_write(chip, 0x0c, 0x03); tp28xx_byte_write(chip, 0x0d, 0x50); tp28xx_byte_write(chip, 0x15, 0x03); tp28xx_byte_write(chip, 0x16, 0xf0); tp28xx_byte_write(chip, 0x17, 0x80); tp28xx_byte_write(chip, 0x18, 0x12); tp28xx_byte_write(chip, 0x19, 0x38); tp28xx_byte_write(chip, 0x1a, 0x47); tp28xx_byte_write(chip, 0x1c, 0x08); tp28xx_byte_write(chip, 0x1d, 0x96); tp28xx_byte_write(chip, 0x20, 0x50); tp28xx_byte_write(chip, 0x21, 0x84); tp28xx_byte_write(chip, 0x22, 0x36); tp28xx_byte_write(chip, 0x23, 0x3c); tp28xx_byte_write(chip, 0x25, 0xff); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x27, 0xad); tp28xx_byte_write(chip, 0x28, 0x00); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2c, 0x0a); tp28xx_byte_write(chip, 0x2d, 0x40); tp28xx_byte_write(chip, 0x2e, 0x70); tp28xx_byte_write(chip, 0x30, 0x74); tp28xx_byte_write(chip, 0x31, 0x9b); tp28xx_byte_write(chip, 0x32, 0xa5); tp28xx_byte_write(chip, 0x33, 0xe0); //tp28xx_byte_write(chip, 0x35, 0x05); tp28xx_byte_write(chip, 0x38, 0x40); tp28xx_byte_write(chip, 0x39, 0x48); tp28xx_byte_write(chip, 0x3a, 0x12); tp28xx_byte_write(chip, 0x3b, 0x26); tp28xx_byte_write(chip, 0x13, 0x00); tmp = tp28xx_byte_read(chip, 0x14); tmp &= 0x9f; tp28xx_byte_write(chip, 0x14, tmp); } //HDC 8M15 static void TP2829_C8MP15_DataSet(struct i2c_dev * chip) { unsigned char tmp; tmp = tp28xx_byte_read(chip, 0x14); tmp &= 0x9f; tp28xx_byte_write(chip, 0x14, tmp); tp28xx_byte_write(chip, 0x13, 0x40); tp28xx_byte_write(chip, 0x20, 0x50); tp28xx_byte_write(chip, 0x21, 0x86); tp28xx_byte_write(chip, 0x22, 0x38); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x27, 0xda); tp28xx_byte_write(chip, 0x2d, 0x84); tp28xx_byte_write(chip, 0x2e, 0x50); tp28xx_byte_write(chip, 0x30, 0x75); tp28xx_byte_write(chip, 0x31, 0x39); tp28xx_byte_write(chip, 0x32, 0xc0); tp28xx_byte_write(chip, 0x33, 0x31); tp28xx_byte_write(chip, 0x39, 0x48); } /////HDC 8M12 static void TP2829_C8MP12_DataSet(struct i2c_dev * chip) { unsigned char tmp; tp28xx_byte_write(chip, 0x0c, 0x03); tp28xx_byte_write(chip, 0x0d, 0x50); tmp = tp28xx_byte_read(chip, 0x14); tmp &= 0x9f; tp28xx_byte_write(chip, 0x14, tmp); tp28xx_byte_write(chip, 0x13, 0x40); tp28xx_byte_write(chip, 0x15, 0x23); tp28xx_byte_write(chip, 0x16, 0xf8); tp28xx_byte_write(chip, 0x18, 0x50); tp28xx_byte_write(chip, 0x20, 0x68); tp28xx_byte_write(chip, 0x21, 0x84); tp28xx_byte_write(chip, 0x22, 0x36); tp28xx_byte_write(chip, 0x22, 0x3c); tp28xx_byte_write(chip, 0x25, 0xff); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x27, 0xda); tp28xx_byte_write(chip, 0x28, 0x00); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2c, 0x0a); tp28xx_byte_write(chip, 0x2d, 0x84); tp28xx_byte_write(chip, 0x2e, 0x50); tp28xx_byte_write(chip, 0x30, 0x75); tp28xx_byte_write(chip, 0x31, 0x39); tp28xx_byte_write(chip, 0x32, 0xc0); tp28xx_byte_write(chip, 0x33, 0x32); tp28xx_byte_write(chip, 0x38, 0x40); tp28xx_byte_write(chip, 0x39, 0x48); tp28xx_byte_write(chip, 0x3a, 0x12); tp28xx_byte_write(chip, 0x3b, 0x26); } /////HDA 8M15 static void TP2829_A8MP15_DataSet(struct i2c_dev * chip) { unsigned char tmp; tmp = tp28xx_byte_read(chip, 0x14); tmp |= 0x40; tp28xx_byte_write(chip, 0x14, tmp); tp28xx_byte_write(chip, 0x13, 0x00); tp28xx_byte_write(chip, 0x15, 0x13); tp28xx_byte_write(chip, 0x16, 0x74); //tp28xx_byte_write(chip, 0x18, 0x32); tp28xx_byte_write(chip, 0x20, 0x50); //tp28xx_byte_write(chip, 0x21, 0x86); //tp28xx_byte_write(chip, 0x22, 0x36); //tp28xx_byte_write(chip, 0x25, 0xff); tp28xx_byte_write(chip, 0x26, 0x05); tp28xx_byte_write(chip, 0x27, 0xad); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2d, 0x58); tp28xx_byte_write(chip, 0x2e, 0x48); tp28xx_byte_write(chip, 0x30, 0x48); tp28xx_byte_write(chip, 0x31, 0x68); tp28xx_byte_write(chip, 0x32, 0x43); tp28xx_byte_write(chip, 0x33, 0x00); //tp28xx_byte_write(chip, 0x35, 0x15); tp28xx_byte_write(chip, 0x39, 0x40); } static void tp282x_SYSCLK_V2(struct i2c_dev * chip, unsigned char ch) { unsigned char tmp, i; if(SDR_2CH == output || DDR_4CH == output) { } else if(DDR_2CH == output ) { if( TP2828 == id ) { tmp = tp28xx_byte_read(chip,0x46); tmp |= TP2826_DDR2CH_MUX[ch]; tp28xx_byte_write(chip, 0x46, tmp); tmp = tp28xx_byte_read(chip,0x47); tmp |= TP2826_DDR2CH_MUX[ch]; tp28xx_byte_write(chip, 0x47, tmp); tmp = tp28xx_byte_read(chip,0x49); tmp |= TP2826_DDR2CH_MUX[ch]; tp28xx_byte_write(chip, 0x49, tmp); /* tmp = tp28xx_byte_read(chip,0x46); tmp |= SYS_MODE[ch]; tp28xx_byte_write(chip, 0x46, tmp); if(CH_1 == ch || CH_2 == ch) { tmp = tp28xx_byte_read(chip,0x47); tmp |= SYS_MODE[ch]; tp28xx_byte_write(chip, 0x47, tmp); } else if(CH_3 == ch || CH_4 == ch) { tmp = tp28xx_byte_read(chip,0x49); tmp |= SYS_MODE[ch]; tp28xx_byte_write(chip, 0x49, tmp); } else //ch_all { tp28xx_byte_write(chip, 0x47, 0x03); tp28xx_byte_write(chip, 0x49, 0x0c); } */ } } else if(SDR_1CH == output) { if(TP2828 == id) { if( ch >= CH_ALL) { for(i = 0; i < 2; i++) //two ports { tmp = tp28xx_byte_read(chip,CLK_ADDR[i*2]); tmp &= CLK_AND[i*2]; tmp |= CLK_MODE[i*2]; tp28xx_byte_write(chip, CLK_ADDR[i*2], tmp); } } else { tmp = tp28xx_byte_read(chip,CLK_ADDR[(ch%2)*2]); tmp &= CLK_AND[(ch%2)*2]; tmp |= CLK_MODE[(ch%2)*2]; tp28xx_byte_write(chip, CLK_ADDR[(ch%2)*2], tmp); } } } else if(DDR_1CH == output) { if(TP2828 == id) { if( ch >= CH_ALL) { for(i = 0; i < 2; i++) //two ports { tmp = tp28xx_byte_read(chip,CLK_ADDR[i*2]); tmp &= CLK_AND[i*2]; tmp |= CLK_MODE[i*2]; tp28xx_byte_write(chip, CLK_ADDR[i*2], tmp); //tp28xx_byte_write(chip, 0xf6+i*2, SDR1_SEL[i]); tp28xx_byte_write(chip, DAT_ADDR[i*2], SDR1_SEL[i]); } } else { tmp = tp28xx_byte_read(chip,CLK_ADDR[(ch%2)*2]); tmp &= CLK_AND[(ch%2)*2]; tmp |= CLK_MODE[(ch%2)*2]; tp28xx_byte_write(chip, CLK_ADDR[(ch%2)*2], tmp); //tp28xx_byte_write(chip, 0xf6+(ch%2)*2, SDR1_SEL[ch]); tp28xx_byte_write(chip, DAT_ADDR[(ch%2)*2], SDR1_SEL[ch]); } } } } static void tp282x_SYSCLK_V1(struct i2c_dev * chip, unsigned char ch) { unsigned char tmp, i; if(SDR_2CH == output || DDR_4CH == output) { if( id >= TP2822 ) { tmp = tp28xx_byte_read(chip, 0x35); //to match 3M/5M tmp |= 0x40; //tp28xx_byte_write(chip, 0x35, tmp); } } else if(DDR_2CH == output ) { if( TP2828 == id) { tmp = tp28xx_byte_read(chip,0x46); tmp &= ~TP2826_DDR2CH_MUX[ch]; tp28xx_byte_write(chip, 0x46, tmp); tmp = tp28xx_byte_read(chip,0x47); tmp &= ~TP2826_DDR2CH_MUX[ch]; tp28xx_byte_write(chip, 0x47, tmp); tmp = tp28xx_byte_read(chip,0x49); tmp &= ~TP2826_DDR2CH_MUX[ch]; tp28xx_byte_write(chip, 0x49, tmp); /* tmp = tp28xx_byte_read(chip,0x46); tmp &= ~SYS_MODE[ch]; tp28xx_byte_write(chip, 0x46, tmp); if(CH_1 == ch || CH_2 == ch) { tmp = tp28xx_byte_read(chip,0x47); tmp &= ~SYS_MODE[ch]; tp28xx_byte_write(chip, 0x47, tmp); } else if(CH_3 == ch || CH_4 == ch) { tmp = tp28xx_byte_read(chip,0x49); tmp &= ~SYS_MODE[ch]; tp28xx_byte_write(chip, 0x49, tmp); } else //ch_all { tp28xx_byte_write(chip, 0x47, 0x00); tp28xx_byte_write(chip, 0x49, 0x00); } */ } } else if(SDR_1CH == output) { if(TP2826 == id || TP2826C == id || TP2828 == id) { if( ch >= CH_ALL) { for(i = 0; i < 2; i++) //two ports { tmp = tp28xx_byte_read(chip,CLK_ADDR[i*2]); tmp &= CLK_AND[i*2]; tp28xx_byte_write(chip, CLK_ADDR[i*2], tmp); } } else { tmp = tp28xx_byte_read(chip,CLK_ADDR[(ch%2)*2]); tmp &= CLK_AND[(ch%2)*2]; tp28xx_byte_write(chip, CLK_ADDR[(ch%2)*2], tmp); } } } else if(DDR_1CH == output) { if(TP2826 == id || TP2826C == id || TP2828 == id) { if( ch >= CH_ALL) { for(i = 0; i < 2; i++) //two ports { tmp = tp28xx_byte_read(chip,CLK_ADDR[i*2]); tmp &= CLK_AND[i*2]; tp28xx_byte_write(chip, CLK_ADDR[i*2], tmp); //tp28xx_byte_write(chip, 0xf6+i*2, SDR1_SEL[i]); tp28xx_byte_write(chip, DAT_ADDR[i*2], SDR1_SEL[i]); } } else { tmp = tp28xx_byte_read(chip,CLK_ADDR[(ch%2)*2]); tmp &= CLK_AND[(ch%2)*2]; tp28xx_byte_write(chip, CLK_ADDR[(ch%2)*2], tmp); //tp28xx_byte_write(chip, 0xf6+(ch%2)*2, SDR1_SEL[ch]); tp28xx_byte_write(chip, DAT_ADDR[(ch%2)*2], SDR1_SEL[ch]); } } } } static void tp282x_SYSCLK_V3(struct i2c_dev * chip, unsigned char ch) { unsigned char tmp, i; if(DDR_1CH == output) { if(TP2826C == id || TP2828 == id) { if( ch >= CH_ALL) { for(i = 0; i < 2; i++) //two ports { tmp = tp28xx_byte_read(chip,CLK_ADDR[i*2]); tmp &= CLK_AND[i*2]; tp28xx_byte_write(chip, CLK_ADDR[i*2], tmp); tp28xx_byte_write(chip, DAT_ADDR[i*2], TP2827C_DDR1_SEL[i]); } } else { tmp = tp28xx_byte_read(chip,CLK_ADDR[(ch%2)*2]); tmp &= CLK_AND[(ch%2)*2]; tp28xx_byte_write(chip, CLK_ADDR[(ch%2)*2], tmp); tp28xx_byte_write(chip, DAT_ADDR[(ch%2)*2], TP2827C_DDR1_SEL[ch]); } } } else if(DDR_2CH == output) { if(TP2826 == id || TP2826C == id || TP2828 == id) { tmp = tp28xx_byte_read(chip, 0x35); tmp |= 0x40; tp28xx_byte_write(chip, 0x35, tmp); tmp = tp28xx_byte_read(chip,0x46); tmp &= ~TP2826_DDR2CH_MUX[ch]; tp28xx_byte_write(chip, 0x46, tmp); tmp = tp28xx_byte_read(chip,0x47); tmp &= ~TP2826_DDR2CH_MUX[ch]; tp28xx_byte_write(chip, 0x47, tmp); tmp = tp28xx_byte_read(chip,0x49); tmp &= ~TP2826_DDR2CH_MUX[ch]; tp28xx_byte_write(chip, 0x49, tmp); /* tmp = tp28xx_byte_read(chip,0x46); tmp &= ~SYS_MODE[ch]; tp28xx_byte_write(chip, 0x46, tmp); if(CH_1 == ch || CH_2 == ch) { tmp = tp28xx_byte_read(chip,0x47); tmp &= ~SYS_MODE[ch]; tp28xx_byte_write(chip, 0x47, tmp); } else if(CH_3 == ch || CH_4 == ch) { tmp = tp28xx_byte_read(chip,0x49); tmp &= ~SYS_MODE[ch]; tp28xx_byte_write(chip, 0x49, tmp); } else //ch_all { tp28xx_byte_write(chip, 0x47, 0x00); tp28xx_byte_write(chip, 0x49, 0x00); } */ } } else if(SDR_1CH == output) { if(TP2826 == id || TP2826C == id || TP2828 == id) { tmp = tp28xx_byte_read(chip, 0x35); // tmp |= 0x40; tp28xx_byte_write(chip, 0x35, tmp); if( ch >= CH_ALL) { for(i = 0; i < 2; i++) //two ports { tmp = tp28xx_byte_read(chip,CLK_ADDR[i*2]); tmp &= CLK_AND[i*2]; tp28xx_byte_write(chip, CLK_ADDR[i*2], tmp); } } else { tmp = tp28xx_byte_read(chip,CLK_ADDR[(ch%2)*2]); tmp &= CLK_AND[(ch%2)*2]; tp28xx_byte_write(chip, CLK_ADDR[(ch%2)*2], tmp); } } } } static void TP2826_C1080P25_DataSet(struct i2c_dev * chip) { tp28xx_byte_write(chip, 0x13, 0x40); tp28xx_byte_write(chip, 0x20, 0x50); tp28xx_byte_write(chip, 0x26, 0x01); tp28xx_byte_write(chip, 0x27, 0x5a); tp28xx_byte_write(chip, 0x28, 0x04); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2d, 0x54); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0x41); tp28xx_byte_write(chip, 0x31, 0x82); tp28xx_byte_write(chip, 0x32, 0x27); tp28xx_byte_write(chip, 0x33, 0xa2); } static void TP2826_C720P25_DataSet(struct i2c_dev * chip) { tp28xx_byte_write(chip, 0x13, 0x40); tp28xx_byte_write(chip, 0x20, 0x3a); tp28xx_byte_write(chip, 0x26, 0x01); tp28xx_byte_write(chip, 0x27, 0x5a); tp28xx_byte_write(chip, 0x28, 0x04); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2d, 0x36); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0x48); tp28xx_byte_write(chip, 0x31, 0x67); tp28xx_byte_write(chip, 0x32, 0x6f); tp28xx_byte_write(chip, 0x33, 0x33); } static void TP2826_C720P50_DataSet(struct i2c_dev * chip) { tp28xx_byte_write(chip, 0x13, 0x40); tp28xx_byte_write(chip, 0x20, 0x3a); tp28xx_byte_write(chip, 0x26, 0x01); tp28xx_byte_write(chip, 0x27, 0x5a); tp28xx_byte_write(chip, 0x28, 0x04); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2d, 0x42); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0x41); tp28xx_byte_write(chip, 0x31, 0x82); tp28xx_byte_write(chip, 0x32, 0x27); tp28xx_byte_write(chip, 0x33, 0xa3); } static void TP2826_C1080P30_DataSet(struct i2c_dev * chip) { tp28xx_byte_write(chip, 0x13, 0x40); tp28xx_byte_write(chip, 0x20, 0x3c); tp28xx_byte_write(chip, 0x26, 0x01); tp28xx_byte_write(chip, 0x27, 0x5a); tp28xx_byte_write(chip, 0x28, 0x04); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2d, 0x4c); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0x41); tp28xx_byte_write(chip, 0x31, 0x82); tp28xx_byte_write(chip, 0x32, 0x27); tp28xx_byte_write(chip, 0x33, 0xa4); } static void TP2826_C720P30_DataSet(struct i2c_dev * chip) { tp28xx_byte_write(chip, 0x13, 0x40); tp28xx_byte_write(chip, 0x20, 0x30); tp28xx_byte_write(chip, 0x26, 0x01); tp28xx_byte_write(chip, 0x27, 0x5a); tp28xx_byte_write(chip, 0x28, 0x04); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2d, 0x37); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0x48); tp28xx_byte_write(chip, 0x31, 0x67); tp28xx_byte_write(chip, 0x32, 0x6f); tp28xx_byte_write(chip, 0x33, 0x30); } static void TP2826_C720P60_DataSet(struct i2c_dev * chip) { tp28xx_byte_write(chip, 0x13, 0x40); tp28xx_byte_write(chip, 0x20, 0x30); tp28xx_byte_write(chip, 0x26, 0x01); tp28xx_byte_write(chip, 0x27, 0x5a); tp28xx_byte_write(chip, 0x28, 0x04); tp28xx_byte_write(chip, 0x2b, 0x60); tp28xx_byte_write(chip, 0x2d, 0x37); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0x41); tp28xx_byte_write(chip, 0x31, 0x82); tp28xx_byte_write(chip, 0x32, 0x27); tp28xx_byte_write(chip, 0x33, 0xa0); } static void TP2826_A720P60_DataSet(struct i2c_dev * chip) { unsigned char tmp; tmp = tp28xx_byte_read(chip, 0x14); tmp |= 0x60; tp28xx_byte_write(chip, 0x14, tmp); tp28xx_byte_write(chip, 0x20, 0x38); tp28xx_byte_write(chip, 0x21, 0x46); tp28xx_byte_write(chip, 0x25, 0xfe); tp28xx_byte_write(chip, 0x26, 0x01); tp28xx_byte_write(chip, 0x2d, 0x44); tp28xx_byte_write(chip, 0x2e, 0x40); tp28xx_byte_write(chip, 0x30, 0x29); tp28xx_byte_write(chip, 0x31, 0x62); tp28xx_byte_write(chip, 0x32, 0x78); tp28xx_byte_write(chip, 0x33, 0x10); //tp28xx_byte_write(chip, 0x3B, 0x05); } static int tp2802_set_video_mode(struct i2c_dev * chip, unsigned char mode, unsigned char ch, unsigned char std) { int err=0; unsigned int tmp; if(STD_HDA_DEFAULT == std) std = STD_HDA; // Set Page Register to the appropriate Channel tp2802_set_reg_page(chip, ch); //if(id >= TP2822) tp28xx_byte_write(chip, 0x35, 0x05); //switch(mode) switch(mode&(~FLAG_HALF_MODE)) { case TP2802_HALF1080P25: //tp28xx_byte_write(chip, 0x35, 0x45); case TP2802_1080P25: if(id >= TP2822) tp28xx_byte_write(chip, 0x35, 0x05); tp2802_set_work_mode_1080p25(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_V1_DataSet(chip); { tp28xx_byte_write(chip, 0x55, 0xb5); tp28xx_byte_write(chip, 0x6e, 0xb5); tp28xx_byte_write(chip, 0x8b, 0xff); tp28xx_byte_write(chip, 0x8c, 0xb5); tp28xx_byte_write(chip, 0x8e, 0xf3); tp28xx_byte_write(chip, 0x91, 0xff); tp28xx_byte_write(chip, 0x92, 0x55); tp28xx_byte_write(chip, 0x93, 0x07); tp28xx_byte_write(chip, 0x94, 0xc4); tp28xx_byte_write(chip, 0x95, 0x58); } if( STD_HDA == std) { if(TP2828 == id || TP2829 == id) { TP2829_A1080P25_DataSet(chip); } } else if(STD_HDC == std || STD_HDC_DEFAULT == std) { if(TP2828 == id || TP2829 == id) { TP2826_C1080P25_DataSet(chip); } if(STD_HDC == std) //HDC 1080p25 position adjust { tp28xx_byte_write(chip, 0x15, 0x13); tp28xx_byte_write(chip, 0x16, 0x84); if( TP2828 == id || TP2829 == id) { tp28xx_byte_write(chip, 0x15, 0x13); tp28xx_byte_write(chip, 0x16, 0x60); tp28xx_byte_write(chip, 0x17, 0x80); tp28xx_byte_write(chip, 0x18, 0x29); tp28xx_byte_write(chip, 0x19, 0x38); tp28xx_byte_write(chip, 0x1A, 0x47); //tp28xx_byte_write(chip, 0x1C, 0x0a); //tp28xx_byte_write(chip, 0x1D, 0x50); tp28xx_byte_write(chip, 0x1C, 0x09); tp28xx_byte_write(chip, 0x1D, 0x60); } } } tp282x_SYSCLK_V1(chip, ch); break; case TP2802_HALF1080P30: //tp28xx_byte_write(chip, 0x35, 0x45); case TP2802_1080P30: if(id >= TP2822) tp28xx_byte_write(chip, 0x35, 0x05); tp2802_set_work_mode_1080p30(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_V1_DataSet(chip); if(TP2829 == id) TP2829_V1_DataSet(chip); if( STD_HDA == std) { if(TP2828 == id || TP2829 == id) { TP2829_A1080P30_DataSet(chip); } } else if(STD_HDC == std || STD_HDC_DEFAULT == std) { if(TP2828 == id || TP2829 == id) { TP2826_C1080P30_DataSet(chip); } if(STD_HDC == std) //HDC 1080p30 position adjust { tp28xx_byte_write(chip, 0x15, 0x13); tp28xx_byte_write(chip, 0x16, 0x44); if(TP2827 == id || TP2826 == id || TP2816 == id || TP2827C == id || TP2826C == id || TP2828 == id || TP2829 == id) { tp28xx_byte_write(chip, 0x15, 0x13); tp28xx_byte_write(chip, 0x16, 0x60); tp28xx_byte_write(chip, 0x17, 0x80); tp28xx_byte_write(chip, 0x18, 0x29); tp28xx_byte_write(chip, 0x19, 0x38); tp28xx_byte_write(chip, 0x1A, 0x47); tp28xx_byte_write(chip, 0x1C, 0x09); tp28xx_byte_write(chip, 0x1D, 0x60); } } } tp282x_SYSCLK_V1(chip, ch); break; case TP2802_HALF720P25: //tp28xx_byte_write(chip, 0x35, 0x45); case TP2802_720P25: if(id >= TP2822) tp28xx_byte_write(chip, 0x35, 0x05); tp2802_set_work_mode_720p25(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tmp |=0x02; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_V1_DataSet(chip); if(TP2829 == id) TP2829_V1_DataSet(chip); tp282x_SYSCLK_V1(chip, ch); break; case TP2802_HALF720P30: //tp28xx_byte_write(chip, 0x35, 0x45); case TP2802_720P30: if(id >= TP2822) tp28xx_byte_write(chip, 0x35, 0x05); tp2802_set_work_mode_720p30(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tmp |=0x02; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_V1_DataSet(chip); if(TP2829 == id) TP2829_V1_DataSet(chip); tp282x_SYSCLK_V1(chip, ch); break; case TP2802_HALF720P50: //tp28xx_byte_write(chip, 0x35, 0x45); case TP2802_720P50: if(id >= TP2822) tp28xx_byte_write(chip, 0x35, 0x05); tp2802_set_work_mode_720p50(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tmp |=0x02; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_V1_DataSet(chip); if(TP2829 == id) TP2829_V1_DataSet(chip); if(STD_HDA == std) { } else if(STD_HDC == std || STD_HDC_DEFAULT == std) { if(TP2828 == id || TP2829 == id) { TP2826_C720P50_DataSet(chip); } if(STD_HDC == std) //HDC 720p50 position adjust { tp28xx_byte_write(chip, 0x16, 0x40); if( TP2828 == id || TP2829 == id) { tp28xx_byte_write(chip, 0x15, 0x13); tp28xx_byte_write(chip, 0x16, 0x0a); tp28xx_byte_write(chip, 0x17, 0x00); tp28xx_byte_write(chip, 0x18, 0x19); tp28xx_byte_write(chip, 0x19, 0xd0); tp28xx_byte_write(chip, 0x1A, 0x25); tp28xx_byte_write(chip, 0x1C, 0x06); tp28xx_byte_write(chip, 0x1D, 0x7a); } } } tp282x_SYSCLK_V1(chip, ch); break; case TP2802_HALF720P60: //tp28xx_byte_write(chip, 0x35, 0x45); case TP2802_720P60: if(id >= TP2822) tp28xx_byte_write(chip, 0x35, 0x05); tp2802_set_work_mode_720p60(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tmp |=0x02; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_V1_DataSet(chip); if(TP2829 == id) TP2829_V1_DataSet(chip); if(STD_HDA == std) { if(TP2828 == id || TP2829 == id) { TP2826_A720P60_DataSet(chip); } } else if(STD_HDC == std || STD_HDC_DEFAULT == std) { if(TP2828 == id || TP2829 == id) { TP2826_C720P60_DataSet(chip); } if(STD_HDC == std) //HDC 720p60 position adjust { tp28xx_byte_write(chip, 0x16, 0x02); if(TP2828 == id || TP2829 == id) { tp28xx_byte_write(chip, 0x15, 0x13); tp28xx_byte_write(chip, 0x16, 0x08); tp28xx_byte_write(chip, 0x17, 0x00); tp28xx_byte_write(chip, 0x18, 0x19); tp28xx_byte_write(chip, 0x19, 0xd0); tp28xx_byte_write(chip, 0x1A, 0x25); tp28xx_byte_write(chip, 0x1C, 0x06); tp28xx_byte_write(chip, 0x1D, 0x72); } } } tp282x_SYSCLK_V1(chip, ch); break; case TP2802_720P30V2: if(id >= TP2822) tp28xx_byte_write(chip, 0x35, 0x25); tp2802_set_work_mode_720p60(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tmp |=0x02; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp |= SYS_MODE[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_V2_DataSet(chip); if(TP2829 == id) TP2829_V2_DataSet(chip); if(STD_HDA == std) { if(TP2828 == id || TP2829 == id) { TP2829_A720P30_DataSet(chip); } } else if(STD_HDC == std || STD_HDC_DEFAULT == std) { if(TP2828 == id || TP2829 == id) { TP2826_C720P30_DataSet(chip); } if(STD_HDC == std) //HDC 720p30 position adjust { tp28xx_byte_write(chip, 0x16, 0x02); if( TP2828 == id || TP2829 == id) { tp28xx_byte_write(chip, 0x15, 0x13); tp28xx_byte_write(chip, 0x16, 0x08); tp28xx_byte_write(chip, 0x17, 0x00); tp28xx_byte_write(chip, 0x18, 0x19); tp28xx_byte_write(chip, 0x19, 0xd0); tp28xx_byte_write(chip, 0x1A, 0x25); tp28xx_byte_write(chip, 0x1C, 0x06); tp28xx_byte_write(chip, 0x1D, 0x72); } } } tp282x_SYSCLK_V2(chip, ch); break; case TP2802_720P25V2: if(id >= TP2822) tp28xx_byte_write(chip, 0x35, 0x25); tp2802_set_work_mode_720p50(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tmp |=0x02; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp |= SYS_MODE[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_V2_DataSet(chip); if(TP2829 == id) TP2829_V2_DataSet(chip); if(STD_HDA == std) { if(TP2828 == id || TP2829 == id) { TP2829_A720P25_DataSet(chip); } } else if(STD_HDC == std || STD_HDC_DEFAULT == std) { if(TP2828 == id || TP2829 == id) { TP2826_C720P25_DataSet(chip); } if(STD_HDC == std) //HDC 720p25 position adjust { tp28xx_byte_write(chip, 0x16, 0x40); if(TP2828 == id || TP2829 == id) { tp28xx_byte_write(chip, 0x15, 0x13); tp28xx_byte_write(chip, 0x16, 0x0a); tp28xx_byte_write(chip, 0x17, 0x00); tp28xx_byte_write(chip, 0x18, 0x19); tp28xx_byte_write(chip, 0x19, 0xd0); tp28xx_byte_write(chip, 0x1A, 0x25); tp28xx_byte_write(chip, 0x1C, 0x06); tp28xx_byte_write(chip, 0x1D, 0x7a); } } } tp282x_SYSCLK_V2(chip, ch); break; case TP2802_PAL: tp28xx_byte_write(chip, 0x35, 0x25); tp2802_set_work_mode_PAL(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tmp |=0x07; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp |= SYS_MODE[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_PAL_DataSet(chip); if(TP2829 == id) TP2829_PAL_DataSet(chip); tp282x_SYSCLK_V1(chip, ch); break; case TP2802_NTSC: tp28xx_byte_write(chip, 0x35, 0x25); tp2802_set_work_mode_NTSC(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tmp |=0x07; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp |= SYS_MODE[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_NTSC_DataSet(chip); if(TP2829 == id) TP2829_NTSC_DataSet(chip); tp282x_SYSCLK_V2(chip, ch); break; case TP2802_3M18: tp28xx_byte_write(chip, 0x35, 0x16); tp28xx_byte_write(chip, 0x36, 0x30); tp2802_set_work_mode_3M(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_V1_DataSet(chip); if(TP2829 == id) TP2829_V1_DataSet(chip); tp282x_SYSCLK_V1(chip, ch); break; case TP2802_5M12: tp28xx_byte_write(chip, 0x35, 0x17); tp28xx_byte_write(chip, 0x36, 0xD0); tp2802_set_work_mode_5M(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_V1_DataSet(chip); if(TP2829 == id) TP2829_V1_DataSet(chip); if( STD_HDA == std) { if(TP2828 == id || TP2829 == id) { TP2829_A5MP12_DataSet(chip); } } tp282x_SYSCLK_V1(chip, ch); break; case TP2802_4M15: tp28xx_byte_write(chip, 0x35, 0x16); tp28xx_byte_write(chip, 0x36, 0x72); tp2802_set_work_mode_4M(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_V1_DataSet(chip); if(TP2829 == id) TP2829_V1_DataSet(chip); tp282x_SYSCLK_V1(chip, ch); break; case TP2802_3M20: tp28xx_byte_write(chip, 0x35, 0x16); tp28xx_byte_write(chip, 0x36, 0x72); tp2802_set_work_mode_3M20(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_V1_DataSet(chip); if(TP2829 == id) TP2829_V1_DataSet(chip); tp28xx_byte_write(chip, 0x2d, 0x26); tp282x_SYSCLK_V1(chip, ch); break; case TP2802_4M12: tp28xx_byte_write(chip, 0x35, 0x17); tp28xx_byte_write(chip, 0x36, 0x08); tp2802_set_work_mode_4M12(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_V1_DataSet(chip); if(TP2829 == id) TP2829_V1_DataSet(chip); tp282x_SYSCLK_V1(chip, ch); break; case TP2802_6M10: tp28xx_byte_write(chip, 0x35, 0x17); tp28xx_byte_write(chip, 0x36, 0xbc); tp2802_set_work_mode_6M10(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_V1_DataSet(chip); if(TP2829 == id) TP2829_V1_DataSet(chip); tp282x_SYSCLK_V1(chip, ch); break; case TP2802_QHD30: tp28xx_byte_write(chip, 0x35, 0x15); tp28xx_byte_write(chip, 0x36, 0xdc); //tp2802_set_work_mode_4MH30(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) {tp2802_set_work_mode_QHD30(chip); TP2829_QHDP30_25_DataSet(chip);} if(TP2829 == id) {tp2802_set_work_mode_QHD30(chip); TP2829_QHDP30_25_DataSet(chip);} if( STD_HDA == std) { if(TP2828 == id) TP2829_AQHDP30_DataSet(chip); if(TP2829 == id) TP2829_AQHDP30_DataSet(chip); } else if(STD_HDC == std || STD_HDC_DEFAULT == std) { if(TP2828 == id) TP2829_CQHDP30_DataSet(chip); if(TP2829 == id) TP2829_CQHDP30_DataSet(chip); } tp282x_SYSCLK_V3(chip, ch); break; case TP2802_QHD25: tp28xx_byte_write(chip, 0x35, 0x15); tp28xx_byte_write(chip, 0x36, 0xdc); //tp2802_set_work_mode_4MH25(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) {tp2802_set_work_mode_QHD25(chip); TP2829_QHDP30_25_DataSet(chip);} if(TP2829 == id) {tp2802_set_work_mode_QHD25(chip); TP2829_QHDP30_25_DataSet(chip);} if( STD_HDA == std) { if(TP2828 == id) TP2829_AQHDP25_DataSet(chip); if(TP2829 == id) TP2829_AQHDP25_DataSet(chip); } else if(STD_HDC == std || STD_HDC_DEFAULT == std) { if(TP2828 == id) TP2829_CQHDP25_DataSet(chip); if(TP2829 == id) TP2829_CQHDP25_DataSet(chip); } tp282x_SYSCLK_V3(chip, ch); break; case TP2802_QHD15: tp28xx_byte_write(chip, 0x35, 0x15); tp28xx_byte_write(chip, 0x36, 0xdc); tp2802_set_work_mode_QHD15(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_V1_DataSet(chip); if(TP2829 == id) TP2829_V1_DataSet(chip); if( STD_HDA == std) { if(TP2828 == id || TP2829 == id) { TP2829_AQHDP15_DataSet(chip); } } tp282x_SYSCLK_V1(chip, ch); break; case TP2802_QXGA18: tp28xx_byte_write(chip, 0x35, 0x16); tp28xx_byte_write(chip, 0x36, 0x72); tp2802_set_work_mode_3M(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) TP2829_V1_DataSet(chip); if(TP2829 == id) TP2829_V1_DataSet(chip); if( STD_HDA == std ) { if(TP2828 == id || TP2829 == id) { TP2829_AQXGAP18_DataSet(chip); } } tp282x_SYSCLK_V1(chip, ch); break; case TP2802_QXGA25: tp28xx_byte_write(chip, 0x35, 0x16); tp28xx_byte_write(chip, 0x36, 0x72); //tp2802_set_work_mode_QXGAH25(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) {tp2802_set_work_mode_QXGA25(chip); TP2829_AQXGAP25_DataSet(chip);} if(TP2829 == id) {tp2802_set_work_mode_QXGA25(chip); TP2829_AQXGAP25_DataSet(chip);} tp282x_SYSCLK_V3(chip, ch); break; case TP2802_QXGA30: tp28xx_byte_write(chip, 0x35, 0x16); tp28xx_byte_write(chip, 0x36, 0x71); //tp2802_set_work_mode_QXGAH30(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) {tp2802_set_work_mode_QXGA30(chip); TP2829_AQXGAP30_DataSet(chip);} if(TP2829 == id) {tp2802_set_work_mode_QXGA30(chip); TP2829_AQXGAP30_DataSet(chip);} tp282x_SYSCLK_V3(chip, ch); break; case TP2802_5M20: tp28xx_byte_write(chip, 0x35, 0x17); tp28xx_byte_write(chip, 0x36, 0xbc); //tp2802_set_work_mode_QXGAH30(chip); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) {tp2802_set_work_mode_5M20(chip); TP2829_5MP20_DataSet(chip);} if(TP2829 == id) {tp2802_set_work_mode_5M20(chip); TP2829_5MP20_DataSet(chip);} if( STD_HDA == std) { if(TP2828 == id) TP2829_A5MP20_DataSet(chip); if(TP2829 == id) TP2829_A5MP20_DataSet(chip); } tp282x_SYSCLK_V3(chip, ch); //soft reset if(STD_TVI == std) { tmp = tp28xx_byte_read(chip, 0x06); tmp |=0x80; tp28xx_byte_write(chip, 0x06, tmp); } break; case TP2802_8M15: tp28xx_byte_write(chip, 0x35, 0x18); tp28xx_byte_write(chip, 0x36, 0xca); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) {tp2802_set_work_mode_8M15(chip); TP2829_8MP15_DataSet(chip);} if(TP2829 == id) {tp2802_set_work_mode_8M15(chip); TP2829_8MP15_DataSet(chip);} if( STD_HDA == std) { if(TP2828 == id) TP2829_A8MP15_DataSet(chip); if(TP2829 == id) TP2829_A8MP15_DataSet(chip); } else if(STD_HDC == std || STD_HDC_DEFAULT == std) { if(TP2828 == id) TP2829_C8MP15_DataSet(chip); if(TP2829 == id) TP2829_C8MP15_DataSet(chip); } tp282x_SYSCLK_V3(chip, ch); break; case TP2802_8M12: tp28xx_byte_write(chip, 0x35, 0x18); tp28xx_byte_write(chip, 0x36, 0xca); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) {tp2802_set_work_mode_8M12(chip); TP2829_8MP15_DataSet(chip);} if(TP2829 == id) {tp2802_set_work_mode_8M12(chip); TP2829_8MP15_DataSet(chip);} if( STD_HDA == std) { } else if(STD_HDC_DEFAULT == std) { if(TP2828 == id) TP2829_C8MP12_DataSet(chip); if(TP2829 == id) TP2829_C8MP12_DataSet(chip); } else if(STD_HDC == std) { if(TP2828 == id || TP2829 == id) { TP2829_C8MP12_DataSet(chip); tp28xx_byte_write(chip, 0x1c, 0x13); tp28xx_byte_write(chip, 0x1d, 0x10); } } tp282x_SYSCLK_V3(chip, ch); break; case TP2802_1080P60: tp28xx_byte_write(chip, 0x35, 0x05); tmp = tp28xx_byte_read(chip, 0x02); tmp &=0xF8; tp28xx_byte_write(chip, 0x02, tmp); tmp = tp28xx_byte_read(chip, 0xf5); tmp &= SYS_AND[ch]; tp28xx_byte_write(chip, 0xf5, tmp); if(TP2828 == id) {TP2829_1080P60_DataSet(chip);} if(TP2829 == id) {TP2829_1080P60_DataSet(chip);} tp282x_SYSCLK_V3(chip, ch); break; default: err = -1; break; } // already set the reg0x35 in SYSCLK_V1/V2/V3 according to output mode. //if(mode&FLAG_HALF_MODE) //{ // tmp = tp28xx_byte_read(chip, 0x35); // tmp |=0x40; // tp28xx_byte_write(chip, 0x35, tmp); //} return err; } static void TP28xx_ChannelID(struct i2c_dev * chip) { tp28xx_byte_write(chip, 0x40, 0x00); tp28xx_byte_write(chip, 0x34, 0x10); tp28xx_byte_write(chip, 0x40, 0x01); tp28xx_byte_write(chip, 0x34, 0x11); if(DDR_4CH == output) { tp28xx_byte_write(chip, 0x40, 0x02); tp28xx_byte_write(chip, 0x34, 0x12); tp28xx_byte_write(chip, 0x40, 0x03); tp28xx_byte_write(chip, 0x34, 0x13); } else { tp28xx_byte_write(chip, 0x40, 0x02); tp28xx_byte_write(chip, 0x34, 0x10); tp28xx_byte_write(chip, 0x40, 0x03); tp28xx_byte_write(chip, 0x34, 0x11); } tp28xx_byte_write(chip, 0x40, 0x00); } static void tp2802_comm_init( struct i2c_dev * chip) { unsigned int val; int i=0; tp2802_set_reg_page(chip, CH_ALL); if(TP2828 == id ) { TP2829_reset_default(chip, CH_ALL); TP2828_output(chip); if(SDR_1CH == output) { tp28xx_byte_write(chip, 0x02, 0x40|sav_head|bt_outputmode); //BT1120/BT656 header } else { tp28xx_byte_write(chip, 0x02, 0x40|sav_head|bt_outputmode); //BT656 header } if(multi_sample_en){ tp2802_set_video_mode(chip, multi_sample_ch0_fpsmode, CH_1, stdard); tp2802_set_video_mode(chip, multi_sample_ch1_fpsmode, CH_2, stdard); }else{ tp2802_set_video_mode(chip, fpsmode, CH_ALL, stdard); } tp2828_case_setting(chip,CH_ALL); TP2829_RX_init(chip, rx_mode); for(i=0;i<4;i++) { viu_mdelay(500); tp2802_set_reg_page(chip, CH_1); val = tp28xx_byte_read(chip, 0x01); printf("detect ad status:0x%x\n",val); tp28xx_byte_read(chip, 0x02); tp28xx_byte_read(chip, 0x03); if(multi_sample_en){ tp2802_set_reg_page(chip, CH_2); val = tp28xx_byte_read(chip, 0x01); printf("ch1 detect ad status:0x%x\n",val); tp28xx_byte_read(chip, 0x02); tp28xx_byte_read(chip, 0x03); } } TP28xx_ChannelID(chip); } } void dump_tp_reg(struct i2c_dev * chip) { unsigned char tmp=0; int i=0; viu_mdelay(1000); printf("dump ch0 reg============\n"); tp2802_set_reg_page(chip, CH_1); for(i=0;i<=0xff;i++){ tmp = tp28xx_byte_read(chip,i); if(i%16==0) printf("0x%02x| ",i); printf("%02x ",tmp); if(i%16==15) printf("\n"); } if(multi_sample_en){ printf("dump ch1 reg============\n"); tp2802_set_reg_page(chip, CH_2); for(i=0;i<=0xff;i++){ tmp = tp28xx_byte_read(chip,i); } } } int tp2802_module_init(int mux) { int val = 0; int i=0; viu_tpi2c_hw_init(&chip); printf("tp2828_module_init:mux:%d\n",mux); //page reset tp28xx_byte_write(chip, 0x40, 0x00); //output disable tp28xx_byte_write(chip, 0x4d, 0x00); tp28xx_byte_write(chip, 0x4e, 0x00); //PLL reset val = tp28xx_byte_read(chip, 0x44); tp28xx_byte_write(chip, 0x44, val|0x40); viu_mdelay(1000); tp28xx_byte_write(chip, 0x44, val); val = tp28xx_byte_read(chip, 0xfe); if(0x28 == val) printf("Detected TP28xx \n"); else printf("Invalid chip %2x\n", val); id = tp28xx_byte_read(chip, 0xff); id <<=8; id+=tp28xx_byte_read(chip, 0xfd); TP2829_PLL_Reset(chip); printf("Detected ID&revision %04x\n", id); id = TP2828; tp2802_comm_init(chip); dump_tp_reg(chip); for(i=0;i<5;i++) { viu_mdelay(500); val = tp28xx_byte_read(chip, 0x01); printf("detect ad status:0x%x\n",val); tp28xx_byte_read(chip, 0x02); tp28xx_byte_read(chip, 0x03); } if(blue_screen_open){ val = tp28xx_byte_read(chip, 0x2a); val = val|BIT(2)|BIT(3); tp28xx_byte_write(chip, 0x2a, val); } printf("TP2828 Driver Init Successful!\n"); return 0; }