1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun /********************************************************************************
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * Copyright (C) 2017 NEXTCHIP Inc. All rights reserved.
5*4882a593Smuzhiyun * Module : video_input.c
6*4882a593Smuzhiyun * Description :
7*4882a593Smuzhiyun * Author :
8*4882a593Smuzhiyun * Date :
9*4882a593Smuzhiyun * Version : Version 1.0
10*4882a593Smuzhiyun *
11*4882a593Smuzhiyun ********************************************************************************
12*4882a593Smuzhiyun * History :
13*4882a593Smuzhiyun *
14*4882a593Smuzhiyun *
15*4882a593Smuzhiyun ********************************************************************************/
16*4882a593Smuzhiyun #include <linux/string.h>
17*4882a593Smuzhiyun #include <linux/delay.h>
18*4882a593Smuzhiyun #include "jaguar1_common.h"
19*4882a593Smuzhiyun #include "jaguar1_video.h"
20*4882a593Smuzhiyun #include "jaguar1_video_eq.h"
21*4882a593Smuzhiyun #include "jaguar1_video_table.h"
22*4882a593Smuzhiyun #include "jaguar1_coax_protocol.h"
23*4882a593Smuzhiyun #include "jaguar1_reg_set_def.h"
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun static unsigned char cur_bank = 0xff;
27*4882a593Smuzhiyun static int print_flag = 0;
28*4882a593Smuzhiyun
29*4882a593Smuzhiyun /**************************************************************************************
30*4882a593Smuzhiyun * Jaguar1 Video Input initialize value get from table
31*4882a593Smuzhiyun ***************************************************************************************/
__NC_VD_VI_Init_Val_Get(NC_VIVO_CH_FORMATDEF def)32*4882a593Smuzhiyun static NC_VD_VI_Init_STR *__NC_VD_VI_Init_Val_Get( NC_VIVO_CH_FORMATDEF def )
33*4882a593Smuzhiyun {
34*4882a593Smuzhiyun NC_VD_VI_Init_STR *pRet = &vd_vi_init_list[def];
35*4882a593Smuzhiyun if( pRet == NULL )
36*4882a593Smuzhiyun {
37*4882a593Smuzhiyun printk("[DRV]vd_vi_init_list Not Supported format Yet!!!(%d)\n",def);
38*4882a593Smuzhiyun }
39*4882a593Smuzhiyun return pRet;
40*4882a593Smuzhiyun }
41*4882a593Smuzhiyun
__NC_VD_VO_Init_Val_Get(NC_VIVO_CH_FORMATDEF def)42*4882a593Smuzhiyun static NC_VD_VO_Init_STR *__NC_VD_VO_Init_Val_Get( NC_VIVO_CH_FORMATDEF def )
43*4882a593Smuzhiyun {
44*4882a593Smuzhiyun NC_VD_VO_Init_STR *pRet = &vd_vo_init_list[def];
45*4882a593Smuzhiyun if( pRet == NULL )
46*4882a593Smuzhiyun {
47*4882a593Smuzhiyun printk("[DRV]vd_vo_init_list Not Supported format Yet!!!(%d)\n",def);
48*4882a593Smuzhiyun }
49*4882a593Smuzhiyun return pRet;
50*4882a593Smuzhiyun }
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun /**************************************************************************************
53*4882a593Smuzhiyun * Jaguar1 Register Setting Function
54*4882a593Smuzhiyun *
55*4882a593Smuzhiyun *
56*4882a593Smuzhiyun ***************************************************************************************/
reg_val_print_flag_set(int set)57*4882a593Smuzhiyun void reg_val_print_flag_set( int set )
58*4882a593Smuzhiyun {
59*4882a593Smuzhiyun print_flag = set;
60*4882a593Smuzhiyun }
61*4882a593Smuzhiyun
reg_val_print_flag_get(void)62*4882a593Smuzhiyun static int reg_val_print_flag_get( void )
63*4882a593Smuzhiyun {
64*4882a593Smuzhiyun return print_flag;
65*4882a593Smuzhiyun }
66*4882a593Smuzhiyun
current_bank_set(unsigned char bank)67*4882a593Smuzhiyun void current_bank_set( unsigned char bank )
68*4882a593Smuzhiyun {
69*4882a593Smuzhiyun cur_bank = bank;
70*4882a593Smuzhiyun }
71*4882a593Smuzhiyun
current_bank_get(void)72*4882a593Smuzhiyun unsigned char current_bank_get( void )
73*4882a593Smuzhiyun {
74*4882a593Smuzhiyun return cur_bank;
75*4882a593Smuzhiyun }
76*4882a593Smuzhiyun
vd_register_set(int dev,unsigned char bank,unsigned char addr,unsigned char val,int pos,int size)77*4882a593Smuzhiyun void vd_register_set( int dev, unsigned char bank, unsigned char addr, unsigned char val, int pos, int size )
78*4882a593Smuzhiyun {
79*4882a593Smuzhiyun unsigned char ReadVal = 0x00;
80*4882a593Smuzhiyun unsigned char Mask = 0x00;
81*4882a593Smuzhiyun unsigned char rstbit = 0x01;
82*4882a593Smuzhiyun unsigned char WriteVal = val;
83*4882a593Smuzhiyun unsigned char cur_bank = 0x00;
84*4882a593Smuzhiyun int ii =0;
85*4882a593Smuzhiyun
86*4882a593Smuzhiyun if( 8 < (pos + size) )
87*4882a593Smuzhiyun {
88*4882a593Smuzhiyun printk("vd_register_set Error!!dev[%d] Bank[0x%02X] Addr[0x%02X] pos[%d] size[%d]\n", dev, bank, addr, pos, size);
89*4882a593Smuzhiyun }
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun // Current Bank Get
92*4882a593Smuzhiyun cur_bank = current_bank_get();
93*4882a593Smuzhiyun if( cur_bank != bank )
94*4882a593Smuzhiyun {
95*4882a593Smuzhiyun JAGUAR1_BANK_CHANGE(bank);
96*4882a593Smuzhiyun current_bank_set(bank);
97*4882a593Smuzhiyun }
98*4882a593Smuzhiyun
99*4882a593Smuzhiyun // If Data Size 8 Bit, Register Read Skip
100*4882a593Smuzhiyun if( !(pos == 0 && size == 8) )
101*4882a593Smuzhiyun {
102*4882a593Smuzhiyun for(ii=0; ii<size; ii++)
103*4882a593Smuzhiyun {
104*4882a593Smuzhiyun Mask = Mask|(rstbit<<(pos+ii));
105*4882a593Smuzhiyun }
106*4882a593Smuzhiyun Mask = ~Mask;
107*4882a593Smuzhiyun WriteVal = WriteVal<<pos;
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun ReadVal = gpio_i2c_read(jaguar1_i2c_addr[dev], addr);
110*4882a593Smuzhiyun ReadVal = ReadVal & Mask;
111*4882a593Smuzhiyun WriteVal = WriteVal | ReadVal;
112*4882a593Smuzhiyun }
113*4882a593Smuzhiyun
114*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], addr, WriteVal);
115*4882a593Smuzhiyun
116*4882a593Smuzhiyun if( reg_val_print_flag_get() )
117*4882a593Smuzhiyun printk("[DRV]%Xx%02X > 0x%02X\n", current_bank_get(), addr, WriteVal);
118*4882a593Smuzhiyun
119*4882a593Smuzhiyun }
120*4882a593Smuzhiyun
121*4882a593Smuzhiyun /**************************************************************************************
122*4882a593Smuzhiyun * Jaguar1 Video Input Setting Function
123*4882a593Smuzhiyun *
124*4882a593Smuzhiyun *
125*4882a593Smuzhiyun ***************************************************************************************/
vd_vi_manual_set_seq1(unsigned char dev,unsigned char ch,void * p_param)126*4882a593Smuzhiyun static void vd_vi_manual_set_seq1( unsigned char dev, unsigned char ch, void *p_param )
127*4882a593Smuzhiyun {
128*4882a593Smuzhiyun /*====================================================================
129*4882a593Smuzhiyun * Bank 1x7c
130*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
131*4882a593Smuzhiyun *| | | | | CLK_AUTO_4 | CLK_AUTO_3 | CLK_AUTO_2 | CLK_AUTO_1 |
132*4882a593Smuzhiyun *====================================================================*/
133*4882a593Smuzhiyun /*====================================================================
134*4882a593Smuzhiyun * Bank 0x14
135*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
136*4882a593Smuzhiyun *| | | | FLD_INV_x | CHID_VIN_x |
137*4882a593Smuzhiyun *====================================================================*/
138*4882a593Smuzhiyun /*====================================================================
139*4882a593Smuzhiyun * Bank 0x14
140*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
141*4882a593Smuzhiyun *| | | | FLD_INV_x | CHID_VIN_x |
142*4882a593Smuzhiyun *====================================================================*/
143*4882a593Smuzhiyun /*====================================================================
144*4882a593Smuzhiyun * Bank 5x32
145*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
146*4882a593Smuzhiyun *| | | FLD_DET_MODE | | | NOVID_DET_A |
147*4882a593Smuzhiyun *====================================================================*/
148*4882a593Smuzhiyun /*====================================================================
149*4882a593Smuzhiyun * Bank 13x30 ~ 33 - SK_ing
150*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
151*4882a593Smuzhiyun *| | |det_en |det_en |det_en |det_en |det_en |det_en |
152*4882a593Smuzhiyun *====================================================================*/
153*4882a593Smuzhiyun /*====================================================================
154*4882a593Smuzhiyun * Bank 9x44
155*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
156*4882a593Smuzhiyun *| | | | | | | |FSC_EXT_EN_1 |
157*4882a593Smuzhiyun *====================================================================*/
158*4882a593Smuzhiyun NC_VD_VI_Init_STR *param = (NC_VD_VI_Init_STR*)p_param;
159*4882a593Smuzhiyun unsigned char val_13x30;
160*4882a593Smuzhiyun unsigned char val_13x31;
161*4882a593Smuzhiyun unsigned char val_13x32;
162*4882a593Smuzhiyun
163*4882a593Smuzhiyun if(ch == 0)
164*4882a593Smuzhiyun REG_SET_1x7C_0_1_clk_auto_1( ch, 0x0 );
165*4882a593Smuzhiyun else if(ch ==1)
166*4882a593Smuzhiyun REG_SET_1x7C_1_1_clk_auto_2( ch, 0x0 );
167*4882a593Smuzhiyun else if(ch ==2)
168*4882a593Smuzhiyun REG_SET_1x7C_2_1_clk_auto_3( ch, 0x0 );
169*4882a593Smuzhiyun else if(ch ==3)
170*4882a593Smuzhiyun REG_SET_1x7C_3_1_clk_auto_4( ch, 0x0 );
171*4882a593Smuzhiyun else
172*4882a593Smuzhiyun printk("[DRV]Clock Auto Set Fail!!:: %x\n", ch);
173*4882a593Smuzhiyun
174*4882a593Smuzhiyun REG_SET_5x32_0_8_NOVIDEO_DET_A( ch, 0x10 );
175*4882a593Smuzhiyun REG_SET_5xB9_0_8_HAFC_LPF_SEL( ch, 0xb2 );
176*4882a593Smuzhiyun
177*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xFF, 0x13);
178*4882a593Smuzhiyun val_13x30 = gpio_i2c_read(jaguar1_i2c_addr[dev], 0x30);
179*4882a593Smuzhiyun val_13x31 = gpio_i2c_read(jaguar1_i2c_addr[dev], 0x31);
180*4882a593Smuzhiyun val_13x32 = gpio_i2c_read(jaguar1_i2c_addr[dev], 0x32);
181*4882a593Smuzhiyun
182*4882a593Smuzhiyun val_13x30 &= (~(1 << (ch + 4)) & (~(1 << ch)));
183*4882a593Smuzhiyun val_13x31 &= (~(1 << (ch + 4)) & (~(1 << ch)));
184*4882a593Smuzhiyun val_13x32 &= (~(1 << ch));
185*4882a593Smuzhiyun
186*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x30, val_13x30);
187*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x31, val_13x31);
188*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x32, val_13x32);
189*4882a593Smuzhiyun
190*4882a593Smuzhiyun REG_SET_9x44_0_8_FSC_EXT_EN( ch, 0x00 );
191*4882a593Smuzhiyun REG_SET_5x6E_0_8_VBLK_END_SEL( ch, param->vblk_end_sel );
192*4882a593Smuzhiyun REG_SET_5x6F_0_8_VBLK_END_EXT( ch, param->vblk_end_ext );
193*4882a593Smuzhiyun
194*4882a593Smuzhiyun }
195*4882a593Smuzhiyun
vd_vi_vafe_set_seq2(unsigned char dev,unsigned char ch)196*4882a593Smuzhiyun static void vd_vi_vafe_set_seq2( unsigned char dev, unsigned char ch )
197*4882a593Smuzhiyun {
198*4882a593Smuzhiyun REG_SET_5x00_0_8_A_CMP_PW_MODE( ch, 0xd0 );
199*4882a593Smuzhiyun REG_SET_5x02_0_8_A_CMP_TIMEUNIT( ch, 0x0c );
200*4882a593Smuzhiyun REG_SET_5x1E_0_8_VAFEMD( ch, 0x00 );
201*4882a593Smuzhiyun REG_SET_5x58_0_8_VAFE1_EQ_BAND_SEL( ch, 0x00 );
202*4882a593Smuzhiyun REG_SET_5x59_0_8_LPF_BYPASS( ch, 0x00 );
203*4882a593Smuzhiyun REG_SET_5x5A_0_8_VAFE_IMP_CNT( ch, 0x00 );
204*4882a593Smuzhiyun REG_SET_5x5B_0_8_VAFE_DUTY( ch, 0x41 );
205*4882a593Smuzhiyun REG_SET_5x5C_0_8_VAFE_B_LPF_SEL( ch, 0x78 );
206*4882a593Smuzhiyun REG_SET_5x94_0_8_PWM_DELAY_H( ch, 0x00 );
207*4882a593Smuzhiyun REG_SET_5x95_0_8_PWM_DELAY_L( ch, 0x00 );
208*4882a593Smuzhiyun REG_SET_5x65_0_8_VAFE_CML_SPEED( ch, 0x80 );
209*4882a593Smuzhiyun
210*4882a593Smuzhiyun }
211*4882a593Smuzhiyun
vd_vi_format_set_seq3(unsigned char dev,unsigned char ch,void * p_param)212*4882a593Smuzhiyun static void vd_vi_format_set_seq3( unsigned char dev, unsigned char ch, void *p_param )
213*4882a593Smuzhiyun {
214*4882a593Smuzhiyun /*============================================================================================
215*4882a593Smuzhiyun * Bank 0x10
216*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
217*4882a593Smuzhiyun *| | BSF_MODE_1 | VIDEO_FORMAT_1 |
218*4882a593Smuzhiyun *============================================================================================*/
219*4882a593Smuzhiyun /*============================================================================================
220*4882a593Smuzhiyun * Bank 0x0c
221*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
222*4882a593Smuzhiyun *| | | | | SPECIAL_MODE |
223*4882a593Smuzhiyun *============================================================================================*/
224*4882a593Smuzhiyun /*============================================================================================
225*4882a593Smuzhiyun * Bank 0x04
226*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
227*4882a593Smuzhiyun *| | | | | SD_MD |
228*4882a593Smuzhiyun *============================================================================================*/
229*4882a593Smuzhiyun /*============================================================================================
230*4882a593Smuzhiyun * Bank 0x08
231*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
232*4882a593Smuzhiyun *| | | | | AHD_MD |
233*4882a593Smuzhiyun *============================================================================================*/
234*4882a593Smuzhiyun /*============================================================================================
235*4882a593Smuzhiyun * Bank 5x69
236*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
237*4882a593Smuzhiyun *| NO_VIDEO_OFF | | OUTPUT PATTERN_ON | MEM_EN | | | | SD_FREQ_SEL |
238*4882a593Smuzhiyun *============================================================================================*/
239*4882a593Smuzhiyun NC_VD_VI_Init_STR *param = (NC_VD_VI_Init_STR*)p_param;
240*4882a593Smuzhiyun
241*4882a593Smuzhiyun if(ch>3)
242*4882a593Smuzhiyun {
243*4882a593Smuzhiyun printk("[DRV] %s CHID Error\n", __func__);
244*4882a593Smuzhiyun return;
245*4882a593Smuzhiyun }
246*4882a593Smuzhiyun
247*4882a593Smuzhiyun REG_SET_0x10_0_8_VD_FMT( ch, param->video_format );
248*4882a593Smuzhiyun REG_SET_0x0C_0_8_SPL_MODE( ch, param->spl_mode );
249*4882a593Smuzhiyun REG_SET_0x04_0_8_SD_MODE( ch, param->sd_mode );
250*4882a593Smuzhiyun REG_SET_0x08_0_8_AHD_MODE( ch, param->ahd_mode );
251*4882a593Smuzhiyun REG_SET_5x69_0_1_SD_FREQ_SEL( ch, param->sd_freq_sel );
252*4882a593Smuzhiyun REG_SET_5x62_0_8_SYNC_SEL( ch, param->sync_sel );
253*4882a593Smuzhiyun
254*4882a593Smuzhiyun }
255*4882a593Smuzhiyun
vd_vi_chroma_set_seq4(unsigned char dev,unsigned char ch,void * p_param)256*4882a593Smuzhiyun static void vd_vi_chroma_set_seq4( unsigned char dev, unsigned char ch, void *p_param )
257*4882a593Smuzhiyun {
258*4882a593Smuzhiyun /*============================================================================================
259*4882a593Smuzhiyun * Bank 0x5c
260*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
261*4882a593Smuzhiyun *| PAL_CM_OFF | | | COLOROFF | C_KILL |
262*4882a593Smuzhiyun *============================================================================================*/
263*4882a593Smuzhiyun /*============================================================================================
264*4882a593Smuzhiyun * Bank 5x28
265*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
266*4882a593Smuzhiyun *| CTI_CORE_MODE | S_POINT | CTI_DELAY_SEL | | | | |
267*4882a593Smuzhiyun *============================================================================================*/
268*4882a593Smuzhiyun /*============================================================================================
269*4882a593Smuzhiyun * Bank 5x25
270*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
271*4882a593Smuzhiyun *| FSC_LOCK_MODE | FSC_LOCK_SPD |
272*4882a593Smuzhiyun *============================================================================================*/
273*4882a593Smuzhiyun /*============================================================================================
274*4882a593Smuzhiyun * Bank 5x90
275*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
276*4882a593Smuzhiyun *| C_LH_SEL_1 | | YL_SEL_1 | COMB_MODE_1 |
277*4882a593Smuzhiyun *============================================================================================*/
278*4882a593Smuzhiyun NC_VD_VI_Init_STR *param = (NC_VD_VI_Init_STR*)p_param;
279*4882a593Smuzhiyun
280*4882a593Smuzhiyun if(ch>3)
281*4882a593Smuzhiyun {
282*4882a593Smuzhiyun printk("[DRV] %s CHID Error\n", __func__);
283*4882a593Smuzhiyun return;
284*4882a593Smuzhiyun }
285*4882a593Smuzhiyun
286*4882a593Smuzhiyun REG_SET_0x5C_0_8_PAL_CM_OFF( ch, param->pal_cm_off );
287*4882a593Smuzhiyun REG_SET_5x28_0_8_S_POINT( ch, param->s_point );
288*4882a593Smuzhiyun REG_SET_5x25_0_8_FSC_LOCK_MODE( ch, param->fsc_lock_mode );
289*4882a593Smuzhiyun REG_SET_5x90_0_8_COMB_MODE( ch, param->comb_mode );
290*4882a593Smuzhiyun
291*4882a593Smuzhiyun }
292*4882a593Smuzhiyun
vd_vi_h_timing_set_seq5(unsigned char dev,unsigned char ch,void * p_param)293*4882a593Smuzhiyun static void vd_vi_h_timing_set_seq5( unsigned char dev, unsigned char ch, void *p_param )
294*4882a593Smuzhiyun {
295*4882a593Smuzhiyun /*============================================================================================
296*4882a593Smuzhiyun * Bank 0x68
297*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
298*4882a593Smuzhiyun *| H_DELAY |
299*4882a593Smuzhiyun *============================================================================================*/
300*4882a593Smuzhiyun /*============================================================================================
301*4882a593Smuzhiyun * Bank 0x60
302*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
303*4882a593Smuzhiyun *| | Y_DELAY |
304*4882a593Smuzhiyun *============================================================================================*/
305*4882a593Smuzhiyun /*============================================================================================
306*4882a593Smuzhiyun * Bank 0x78
307*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
308*4882a593Smuzhiyun *| VBLK_END |
309*4882a593Smuzhiyun *============================================================================================*/
310*4882a593Smuzhiyun /*============================================================================================
311*4882a593Smuzhiyun * Bank 5x38
312*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
313*4882a593Smuzhiyun *| | MASK_ON | MASK_SEL1 (Bank0 0x8E[3:0) |
314*4882a593Smuzhiyun *============================================================================================*/
315*4882a593Smuzhiyun /*============================================================================================
316*4882a593Smuzhiyun * Bank 0x64
317*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
318*4882a593Smuzhiyun *| DF_CDELAY | DF_YDELAY |
319*4882a593Smuzhiyun *============================================================================================*/
320*4882a593Smuzhiyun /*============================================================================================
321*4882a593Smuzhiyun * Bank 0x14
322*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
323*4882a593Smuzhiyun *| | FLD_INV | CHID_VIN |
324*4882a593Smuzhiyun *============================================================================================*/
325*4882a593Smuzhiyun /*============================================================================================
326*4882a593Smuzhiyun * Bank 5x64
327*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
328*4882a593Smuzhiyun *| | | | | MEM_RDP_01 |
329*4882a593Smuzhiyun *============================================================================================*/
330*4882a593Smuzhiyun /*============================================================================================
331*4882a593Smuzhiyun * Bank 5x47
332*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
333*4882a593Smuzhiyun *| CONTROL_MODES |
334*4882a593Smuzhiyun *============================================================================================*/
335*4882a593Smuzhiyun /*============================================================================================
336*4882a593Smuzhiyun * Bank 5xa9
337*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
338*4882a593Smuzhiyun *| SIGNED_ADV_STP_DELAY1 | ADV_STP_DELAY1 |
339*4882a593Smuzhiyun *============================================================================================*/
340*4882a593Smuzhiyun NC_VD_VI_Init_STR *param = (NC_VD_VI_Init_STR*)p_param;
341*4882a593Smuzhiyun
342*4882a593Smuzhiyun if(ch>3)
343*4882a593Smuzhiyun {
344*4882a593Smuzhiyun printk("[DRV] %s CHID Error\n", __func__);
345*4882a593Smuzhiyun return;
346*4882a593Smuzhiyun }
347*4882a593Smuzhiyun
348*4882a593Smuzhiyun REG_SET_0x68_0_8_H_DLY_LSB( ch, param->h_delay_lsb );
349*4882a593Smuzhiyun REG_SET_0x6c_0_8_H_DLY_MSB( ch, param->h_dly_msb);
350*4882a593Smuzhiyun REG_SET_0x60_0_8_Y_DLY( ch, param->y_delay );
351*4882a593Smuzhiyun REG_SET_0x78_0_8_V_BLK_END_A( ch, param->v_blk_end_a );
352*4882a593Smuzhiyun
353*4882a593Smuzhiyun REG_SET_5x38_4_1_H_MASK_ON( ch, param->h_mask_on );
354*4882a593Smuzhiyun REG_SET_5x38_0_4_H_MASK_SEL( ch, param->h_mask_sel );
355*4882a593Smuzhiyun
356*4882a593Smuzhiyun REG_SET_0x64_0_8_V_BLK_END_B( ch, param->v_blk_end_b );
357*4882a593Smuzhiyun REG_SET_0x14_4_1_FLD_INV( ch, param->fld_inv );
358*4882a593Smuzhiyun
359*4882a593Smuzhiyun REG_SET_5x64_0_8_MEM_RDP( ch, param->mem_rdp );
360*4882a593Smuzhiyun REG_SET_5x47_0_8_SYNC_RS( ch, param->sync_rs );
361*4882a593Smuzhiyun REG_SET_5xA9_0_8_V_BLK_END_B( ch, param->v_blk_end_b );
362*4882a593Smuzhiyun
363*4882a593Smuzhiyun }
364*4882a593Smuzhiyun
vd_vi_h_scaler_mode_set_seq6(unsigned char dev,unsigned char ch,void * p_param)365*4882a593Smuzhiyun static void vd_vi_h_scaler_mode_set_seq6( unsigned char dev, unsigned char ch, void *p_param )
366*4882a593Smuzhiyun {
367*4882a593Smuzhiyun /*============================================================================================
368*4882a593Smuzhiyun * Bank 5x53
369*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
370*4882a593Smuzhiyun *| | | PROTECTION_OFF | BT_601_SEL | LINEMEM_MD | | C_DITHER_ON |
371*4882a593Smuzhiyun *============================================================================================*/
372*4882a593Smuzhiyun /*============================================================================================
373*4882a593Smuzhiyun * Bank 9x96
374*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
375*4882a593Smuzhiyun *| | | | CH1_H_DOWN_SCALER_EN | | | CH1_H_SCALER_TRS_SEL | CH1_H_SCALER_ENABLE |
376*4882a593Smuzhiyun *============================================================================================*/
377*4882a593Smuzhiyun /*============================================================================================
378*4882a593Smuzhiyun * Bank 9x97
379*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
380*4882a593Smuzhiyun *| CH1_H_SCALER_MODE | CH1_H_SCALER_RD_MODE | CH1_H_SCALER_AUTO_H_REF | CH1_H_SCALER_AUTO |
381*4882a593Smuzhiyun *============================================================================================*/
382*4882a593Smuzhiyun /*============================================================================================
383*4882a593Smuzhiyun * Bank 9x98
384*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
385*4882a593Smuzhiyun *| CH1_H_SCALER_H_REF_BASE[7:0] |
386*4882a593Smuzhiyun * Bank 9x99
387*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
388*4882a593Smuzhiyun *| CH1_H_SCALER_H_REF_BASE[15:8] |
389*4882a593Smuzhiyun *============================================================================================*/
390*4882a593Smuzhiyun
391*4882a593Smuzhiyun NC_VD_VI_Init_STR *param = (NC_VD_VI_Init_STR*)p_param;
392*4882a593Smuzhiyun
393*4882a593Smuzhiyun if(ch>3)
394*4882a593Smuzhiyun {
395*4882a593Smuzhiyun printk("[DRV] %s CHID Error\n", __func__);
396*4882a593Smuzhiyun return;
397*4882a593Smuzhiyun }
398*4882a593Smuzhiyun
399*4882a593Smuzhiyun REG_SET_5x53_2_2_LINEMEM_MD( ch, param->line_mem_mode );
400*4882a593Smuzhiyun
401*4882a593Smuzhiyun REG_SET_9x96_0_8_H_DOWN_SCALER( ch, param->h_down_scaler );
402*4882a593Smuzhiyun REG_SET_9x97_0_8_H_SCALER_MODE( ch, param->h_scaler_mode );
403*4882a593Smuzhiyun REG_SET_9x98_0_8_REF_BASE_LSB( ch, param->ref_base_lsb );
404*4882a593Smuzhiyun REG_SET_9x99_0_8_REF_BASE_MSB( ch, param->ref_base_msb );
405*4882a593Smuzhiyun REG_SET_9x9E_0_8_H_SCALER_OUTPUT_H_ACTIVE( ch, param->h_scaler_active );
406*4882a593Smuzhiyun }
407*4882a593Smuzhiyun
vd_vi_hpll_set_seq7(unsigned char dev,unsigned char ch,void * p_param)408*4882a593Smuzhiyun static void vd_vi_hpll_set_seq7( unsigned char dev, unsigned char ch, void *p_param )
409*4882a593Smuzhiyun {
410*4882a593Smuzhiyun /*============================================================================================
411*4882a593Smuzhiyun * Bank 5x50
412*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
413*4882a593Smuzhiyun *| | NCO_GDF_COEFF_IV | | NCO_GDF_COEFF_OFF | Y_TEMP_SEL(5T,15T) | HPLL_MASK_ON | CONT_SUB |
414*4882a593Smuzhiyun *============================================================================================*/
415*4882a593Smuzhiyun /*============================================================================================
416*4882a593Smuzhiyun * Bank 5xb8
417*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
418*4882a593Smuzhiyun *| HAFC_BYPASS | HAFC_HCOEFF_SEL | HAFC_OP_MD |
419*4882a593Smuzhiyun *============================================================================================*/
420*4882a593Smuzhiyun /*============================================================================================
421*4882a593Smuzhiyun * Bank 5xbb
422*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
423*4882a593Smuzhiyun *| HPLL_MASK_END |
424*4882a593Smuzhiyun *============================================================================================*/
425*4882a593Smuzhiyun /*============================================================================================
426*4882a593Smuzhiyun * Bank 5xbb
427*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
428*4882a593Smuzhiyun *| HAFC_BYP_TH_S(write) |
429*4882a593Smuzhiyun *============================================================================================*/
430*4882a593Smuzhiyun NC_VD_VI_Init_STR *param = (NC_VD_VI_Init_STR*)p_param;
431*4882a593Smuzhiyun
432*4882a593Smuzhiyun if(ch>3)
433*4882a593Smuzhiyun {
434*4882a593Smuzhiyun printk("[DRV] %s CHID Error\n", __func__);
435*4882a593Smuzhiyun return;
436*4882a593Smuzhiyun }
437*4882a593Smuzhiyun
438*4882a593Smuzhiyun REG_SET_5x50_0_8_HPLL_MASK_ON( ch, param->hpll_mask_on );
439*4882a593Smuzhiyun REG_SET_5xB8_0_8_HAFC_OP_MD( ch, param->hafc_op_md );
440*4882a593Smuzhiyun REG_SET_5xBB_0_8_HAFC_BYP_TH_E( ch, param->hafc_byp_th_e );
441*4882a593Smuzhiyun REG_SET_5xB7_0_8_HAFC_BYP_TH_S( ch, param->hafc_byp_th_s );
442*4882a593Smuzhiyun
443*4882a593Smuzhiyun }
444*4882a593Smuzhiyun
vd_vi_color_set_seq8(unsigned char dev,unsigned char ch,void * p_param,NC_VIVO_CH_FORMATDEF fmt)445*4882a593Smuzhiyun static void vd_vi_color_set_seq8( unsigned char dev, unsigned char ch, void *p_param, NC_VIVO_CH_FORMATDEF fmt )
446*4882a593Smuzhiyun {
447*4882a593Smuzhiyun /*============================================================================================
448*4882a593Smuzhiyun * gpio_i2c_write(jaguar1_i2c_addr[dev], 0x22 + (ch*4), 0x0B ); // Raptor3
449*4882a593Smuzhiyun * Bank 0x5c
450*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
451*4882a593Smuzhiyun *| PAL_CM_OFF | | | COLOROFF | C_KILL |
452*4882a593Smuzhiyun *============================================================================================*/
453*4882a593Smuzhiyun /*============================================================================================
454*4882a593Smuzhiyun * Bank 5x26
455*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
456*4882a593Smuzhiyun *| FSC_LOCK_SENSE |
457*4882a593Smuzhiyun *============================================================================================*/
458*4882a593Smuzhiyun /*============================================================================================
459*4882a593Smuzhiyun * Bank 5xb8
460*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
461*4882a593Smuzhiyun *| HAFC_BYPASS | HAFC_HCOEFF_SEL | HAFC_OP_MD |
462*4882a593Smuzhiyun *============================================================================================*/
463*4882a593Smuzhiyun /*============================================================================================
464*4882a593Smuzhiyun * Bank 9x40
465*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
466*4882a593Smuzhiyun *| FSC_DET_ | FSC_DET_ | FSC_DET_ | FSC_DET_ | FSC_DET_ | FSC_DET_ | | FSC_RST_ |
467*4882a593Smuzhiyun *| AUTO_RST1 | UNLIM1 | AUTO1 | PRESET1 | MODE1 | REFER_AUTO1 | | STRB1 |
468*4882a593Smuzhiyun *============================================================================================*/
469*4882a593Smuzhiyun
470*4882a593Smuzhiyun NC_VD_VI_Init_STR *param = (NC_VD_VI_Init_STR*)p_param;
471*4882a593Smuzhiyun
472*4882a593Smuzhiyun REG_SET_0x20_0_8_BRIGHTNESS( ch, param->brightnees );
473*4882a593Smuzhiyun REG_SET_0x24_0_8_CONTARST( ch, param->contrast );
474*4882a593Smuzhiyun REG_SET_0x28_0_8_BLACK_LEVEL( ch, param->black_level );
475*4882a593Smuzhiyun REG_SET_0x58_0_8_SATURATION_A( ch, param->saturation_a );
476*4882a593Smuzhiyun REG_SET_0x40_0_8_HUE( ch, param->hue );
477*4882a593Smuzhiyun REG_SET_0x44_0_8_U_GAIN( ch, param->u_gain );
478*4882a593Smuzhiyun REG_SET_0x48_0_8_V_GAIN( ch, param->v_gain );
479*4882a593Smuzhiyun REG_SET_0x4C_0_8_U_OFFSET( ch, param->u_offset );
480*4882a593Smuzhiyun REG_SET_0x50_0_8_V_OFFSET( ch, param->v_offset );
481*4882a593Smuzhiyun REG_SET_5x2B_0_8_SATURATION_B( ch, param->saturation_b );
482*4882a593Smuzhiyun REG_SET_5x24_0_8_BURSET_DEC_A( ch, param->burst_dec_a );
483*4882a593Smuzhiyun REG_SET_5x5F_0_8_BURSET_DEC_B( ch, param->burst_dec_b );
484*4882a593Smuzhiyun REG_SET_5xD1_0_8_BURSET_DEC_C( ch, param->burst_dec_c );
485*4882a593Smuzhiyun
486*4882a593Smuzhiyun REG_SET_9x44_0_8_FSC_EXT_EN( ch, 0x00 );
487*4882a593Smuzhiyun REG_SET_9x50_0_8_FSC_EXT_VAL_7_0( ch, 0x30 );
488*4882a593Smuzhiyun REG_SET_9x51_0_8_FSC_EXT_VAL_15_8( ch, 0x6f );
489*4882a593Smuzhiyun REG_SET_9x52_0_8_FSC_EXT_VAL_23_16( ch, 0x67 );
490*4882a593Smuzhiyun REG_SET_9x53_0_8_FSC_EXT_VAL_31_24( ch, 0x48 );
491*4882a593Smuzhiyun
492*4882a593Smuzhiyun if(fmt == TVI_5M_12_5P)
493*4882a593Smuzhiyun {
494*4882a593Smuzhiyun REG_SET_5x26_0_8_FSC_LOCK_SENSE( ch, 0x20 );
495*4882a593Smuzhiyun }
496*4882a593Smuzhiyun else
497*4882a593Smuzhiyun REG_SET_5x26_0_8_FSC_LOCK_SENSE( ch, 0x40 );
498*4882a593Smuzhiyun
499*4882a593Smuzhiyun if(fmt == AHD20_SD_H960_2EX_Btype_NT || fmt == AHD20_SD_H960_2EX_Btype_PAL)
500*4882a593Smuzhiyun {
501*4882a593Smuzhiyun REG_SET_5xB8_0_8_HPLL_MASK_END( ch, 0xb8 );
502*4882a593Smuzhiyun REG_SET_9x40_0_8_FSC_DET_MODE( ch, 0x00);
503*4882a593Smuzhiyun }
504*4882a593Smuzhiyun else
505*4882a593Smuzhiyun {
506*4882a593Smuzhiyun REG_SET_5xB8_0_8_HPLL_MASK_END( ch, 0x39 );
507*4882a593Smuzhiyun REG_SET_9x40_0_8_FSC_DET_MODE( ch, 0x00 );
508*4882a593Smuzhiyun
509*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xff, 0x05 + ch);
510*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xb5, 0x80); // HPLL Locking Ref. Range
511*4882a593Smuzhiyun }
512*4882a593Smuzhiyun
513*4882a593Smuzhiyun }
514*4882a593Smuzhiyun
vd_vi_clock_set_seq9(unsigned char dev,unsigned char ch,void * p_param)515*4882a593Smuzhiyun static void vd_vi_clock_set_seq9( unsigned char dev, unsigned char ch, void *p_param )
516*4882a593Smuzhiyun {
517*4882a593Smuzhiyun /*============================================================================================
518*4882a593Smuzhiyun * Bank 1x84
519*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
520*4882a593Smuzhiyun *| VADC_CLK1_DLY_SEL | VADC_CLK1_SEL |
521*4882a593Smuzhiyun *============================================================================================*/
522*4882a593Smuzhiyun /*============================================================================================
523*4882a593Smuzhiyun * Bank 1x88
524*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
525*4882a593Smuzhiyun *| | | | | | | DEC_PRECLK |
526*4882a593Smuzhiyun * Bank 1x8c
527*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
528*4882a593Smuzhiyun *| | | | | | | DEC_POSTCLK |
529*4882a593Smuzhiyun *============================================================================================*/
530*4882a593Smuzhiyun /*============================================================================================
531*4882a593Smuzhiyun * ADC -> PRE -> POST -> VCLK
532*4882a593Smuzhiyun * ADC_CLK 1x84[3:0]
533*4882a593Smuzhiyun * 0 ~ 3 : 37.125 MHz
534*4882a593Smuzhiyun * 4 ~ 5 : 74.25 MHz
535*4882a593Smuzhiyun * 8 ~ 9 : 148.5 MHz
536*4882a593Smuzhiyun * Pre_Clock 1x88 / Post Clock 1x8C
537*4882a593Smuzhiyun * 0 : 37.125
538*4882a593Smuzhiyun * 1 : 74.25
539*4882a593Smuzhiyun * 2 : 148.5
540*4882a593Smuzhiyun * VCLK 1xCC[7:4]
541*4882a593Smuzhiyun * 4 ~ 5 : 74.25 MHz
542*4882a593Smuzhiyun * 6 ~ 7 : 148.5 MHz
543*4882a593Smuzhiyun *============================================================================================*/
544*4882a593Smuzhiyun
545*4882a593Smuzhiyun NC_VD_VI_Init_STR *param = (NC_VD_VI_Init_STR*)p_param;
546*4882a593Smuzhiyun
547*4882a593Smuzhiyun REG_SET_1x84_0_8_CLK_ADC( ch, param->clk_adc );
548*4882a593Smuzhiyun REG_SET_1x88_0_8_CLK_PRE( ch, param->clk_pre );
549*4882a593Smuzhiyun REG_SET_1x8c_0_8_CLK_POST( ch, param->clk_post );
550*4882a593Smuzhiyun
551*4882a593Smuzhiyun REG_SET_5x01_0_8_CML_MODE( ch, param->cml_mode );
552*4882a593Smuzhiyun REG_SET_5x05_0_8_AGC_OP( ch, param->agc_op );
553*4882a593Smuzhiyun REG_SET_5x1D_0_8_G_SEL( ch, param->g_sel );
554*4882a593Smuzhiyun
555*4882a593Smuzhiyun }
556*4882a593Smuzhiyun
557*4882a593Smuzhiyun //==================================================================================================================
558*4882a593Smuzhiyun
559*4882a593Smuzhiyun /**************************************************************************************
560*4882a593Smuzhiyun * Jaguar1 Video Output Setting Function
561*4882a593Smuzhiyun *
562*4882a593Smuzhiyun *
563*4882a593Smuzhiyun ***************************************************************************************/
vd_vo_seq_set(unsigned char dev,unsigned char ch,void * p_param)564*4882a593Smuzhiyun void vd_vo_seq_set( unsigned char dev, unsigned char ch, void *p_param )
565*4882a593Smuzhiyun {
566*4882a593Smuzhiyun /*
567*4882a593Smuzhiyun * BT656 or BT1120 Set????...
568*4882a593Smuzhiyun * */
569*4882a593Smuzhiyun NC_VD_VO_Init_STR *param = (NC_VD_VO_Init_STR*)p_param;
570*4882a593Smuzhiyun
571*4882a593Smuzhiyun // BANK 1
572*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xFF, 0x01);
573*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xc0 + (ch * 0x02), param->port_seq_ch01[ch]);
574*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xc1 + (ch * 0x02), param->port_seq_ch23[ch]);
575*4882a593Smuzhiyun
576*4882a593Smuzhiyun }
577*4882a593Smuzhiyun
vd_vo_output_seq_set(unsigned char dev,unsigned char port,unsigned char out_ch)578*4882a593Smuzhiyun static void vd_vo_output_seq_set( unsigned char dev, unsigned char port, unsigned char out_ch )
579*4882a593Smuzhiyun {
580*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xFF, 0x01);
581*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xc0 + (port * 0x02), out_ch);
582*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xc1 + (port * 0x02), out_ch);
583*4882a593Smuzhiyun }
584*4882a593Smuzhiyun
vd_vo_port_y_c_merge_set(unsigned char dev,unsigned char ch,void * p_param)585*4882a593Smuzhiyun static void vd_vo_port_y_c_merge_set( unsigned char dev, unsigned char ch, void *p_param)
586*4882a593Smuzhiyun {
587*4882a593Smuzhiyun NC_VD_VO_Init_STR *param = (NC_VD_VO_Init_STR*)p_param;
588*4882a593Smuzhiyun
589*4882a593Smuzhiyun /*============================================================================================
590*4882a593Smuzhiyun * Address: 1xec
591*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
592*4882a593Smuzhiyun *| | | | | | | | MUX_YC_MERGE1 |
593*4882a593Smuzhiyun *============================================================================================*/
594*4882a593Smuzhiyun REG_SET_1xEC_0_8_yc_merge( ch, param->mux_yc_merge );
595*4882a593Smuzhiyun
596*4882a593Smuzhiyun }
597*4882a593Smuzhiyun
vd_vo_port_ch_id_set(unsigned char dev,unsigned char ch,void * p_param)598*4882a593Smuzhiyun static void vd_vo_port_ch_id_set( unsigned char dev, unsigned char ch, void *p_param )
599*4882a593Smuzhiyun {
600*4882a593Smuzhiyun NC_VD_VO_Init_STR *param = (NC_VD_VO_Init_STR*)p_param;
601*4882a593Smuzhiyun unsigned char val_0x14 = 0x00;
602*4882a593Smuzhiyun
603*4882a593Smuzhiyun /*============================================================================================
604*4882a593Smuzhiyun * Address: 0x14
605*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
606*4882a593Smuzhiyun *| | | | FLD_INV_1 | CHID_VIN1 |
607*4882a593Smuzhiyun *============================================================================================*/
608*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xFF, 0x00);
609*4882a593Smuzhiyun val_0x14 = gpio_i2c_read(jaguar1_i2c_addr[dev], 0x14 + ch);
610*4882a593Smuzhiyun val_0x14 = val_0x14 & 0x10;
611*4882a593Smuzhiyun val_0x14 = val_0x14 | param->chid_vin;
612*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x14 + ch, val_0x14);
613*4882a593Smuzhiyun
614*4882a593Smuzhiyun }
615*4882a593Smuzhiyun
vd_vo_mux_mode_set(unsigned char dev,unsigned char ch,void * p_param)616*4882a593Smuzhiyun static void vd_vo_mux_mode_set( unsigned char dev, unsigned char ch, void *p_param )
617*4882a593Smuzhiyun {
618*4882a593Smuzhiyun NC_VD_VO_Init_STR *param = (NC_VD_VO_Init_STR*)p_param;
619*4882a593Smuzhiyun
620*4882a593Smuzhiyun /*============================================================================================
621*4882a593Smuzhiyun * Address: 1xc8
622*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
623*4882a593Smuzhiyun *| | | VCLK_1_EN | VDO_1_EN | VPORT_1_CH_OUT_SEL |
624*4882a593Smuzhiyun *============================================================================================*/
625*4882a593Smuzhiyun REG_SET_1xC8_0_8_out_sel( ch , param->vport_out_sel );
626*4882a593Smuzhiyun
627*4882a593Smuzhiyun }
628*4882a593Smuzhiyun
vd_vo_manual_mode_set(unsigned char dev,unsigned char ch,void * p_param)629*4882a593Smuzhiyun static void vd_vo_manual_mode_set(unsigned char dev, unsigned char ch, void *p_param )
630*4882a593Smuzhiyun {
631*4882a593Smuzhiyun //NC_VD_VO_Init_STR *param = (NC_VD_VO_Init_STR*)p_param;
632*4882a593Smuzhiyun
633*4882a593Smuzhiyun unsigned char val_0x30;
634*4882a593Smuzhiyun unsigned char val_0x31;
635*4882a593Smuzhiyun unsigned char val_0x32;
636*4882a593Smuzhiyun
637*4882a593Smuzhiyun /*============================================================================================
638*4882a593Smuzhiyun * Address: 13x30
639*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
640*4882a593Smuzhiyun *| | | | | NOVIDEO_VFC_INIT_EN[3:0] | | | |
641*4882a593Smuzhiyun *============================================================================================*/
642*4882a593Smuzhiyun /*============================================================================================
643*4882a593Smuzhiyun * Address: 13x31
644*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
645*4882a593Smuzhiyun *| | | AHD_8M_det_en | AHD_5M_det_en | AHD_4M_det_en | AHD_3M_det_en | AHD_2M_det_en | AHD_1M_det_en |
646*4882a593Smuzhiyun *============================================================================================*/
647*4882a593Smuzhiyun /*============================================================================================
648*4882a593Smuzhiyun * Address: 13x32
649*4882a593Smuzhiyun *| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
650*4882a593Smuzhiyun *| | | CVI_8M_det_en | CVI_5M_det_en | CVI_4M_det_en | CVI_3M_det_en | CVI_2M_det_en | CVI_1M_det_en |
651*4882a593Smuzhiyun *============================================================================================*/
652*4882a593Smuzhiyun
653*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xFF, 0x13);
654*4882a593Smuzhiyun val_0x30 = gpio_i2c_read(jaguar1_i2c_addr[dev], 0x30);
655*4882a593Smuzhiyun val_0x31 = gpio_i2c_read(jaguar1_i2c_addr[dev], 0x31);
656*4882a593Smuzhiyun val_0x32 = gpio_i2c_read(jaguar1_i2c_addr[dev], 0x32);
657*4882a593Smuzhiyun
658*4882a593Smuzhiyun val_0x30 &= (~(1 << (ch + 4)) & (~(1 << ch)));
659*4882a593Smuzhiyun val_0x31 &= (~(1 << (ch + 4)) & (~(1 << ch)));
660*4882a593Smuzhiyun val_0x32 &= (~(1 << ch));
661*4882a593Smuzhiyun
662*4882a593Smuzhiyun // 0x00 Set Test
663*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x30, val_0x30);
664*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x31, val_0x31);
665*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x32, val_0x32);
666*4882a593Smuzhiyun
667*4882a593Smuzhiyun }
668*4882a593Smuzhiyun
vd_jaguar1_single_differ_set(unsigned char dev,unsigned char ch,int input)669*4882a593Smuzhiyun static void vd_jaguar1_single_differ_set( unsigned char dev, unsigned char ch, int input )
670*4882a593Smuzhiyun {
671*4882a593Smuzhiyun REG_SET_0x18_0_8_EX_CBAR_ON( ch, 0x13 );
672*4882a593Smuzhiyun
673*4882a593Smuzhiyun if( input == DIFFERENTIAL )
674*4882a593Smuzhiyun {
675*4882a593Smuzhiyun REG_SET_5x00_0_8_CMP( ch, 0xd0 );
676*4882a593Smuzhiyun REG_SET_5x01_0_8_CML( ch, 0x2c );
677*4882a593Smuzhiyun REG_SET_5x1D_0_8_AFE( ch, 0x8c );
678*4882a593Smuzhiyun REG_SET_5x92_0_8_PWM( ch, 0x00 );
679*4882a593Smuzhiyun }
680*4882a593Smuzhiyun else if( input == SINGLE_ENDED )
681*4882a593Smuzhiyun {
682*4882a593Smuzhiyun REG_SET_5x00_0_8_CMP( ch, 0xd0 );
683*4882a593Smuzhiyun REG_SET_5x01_0_8_CML( ch, 0xa2 );
684*4882a593Smuzhiyun //REG_SET_5x1D_0_8_AFE( ch, 0x00 );
685*4882a593Smuzhiyun REG_SET_5x92_0_8_PWM( ch, 0x00 );
686*4882a593Smuzhiyun }
687*4882a593Smuzhiyun else
688*4882a593Smuzhiyun {
689*4882a593Smuzhiyun printk("Jaguar1 Analog Input Setting Fail !!!\n");
690*4882a593Smuzhiyun }
691*4882a593Smuzhiyun
692*4882a593Smuzhiyun }
693*4882a593Smuzhiyun
vd_jaguar1_960p_30P_test_set(unsigned char dev,unsigned char ch)694*4882a593Smuzhiyun static void vd_jaguar1_960p_30P_test_set( unsigned char dev, unsigned char ch )
695*4882a593Smuzhiyun {
696*4882a593Smuzhiyun printk("[drv]vd_jaguar1_960p_30P_test_set >>> ch%d!!\n", ch);
697*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xff, 0x00);
698*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x68 + ch, 0x4E);
699*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x69 + ch, 0x80);
700*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x6a + ch, 0x80);
701*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x6b + ch, 0x80);
702*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x04 + ch, 0x00);
703*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x08 + ch, 0x02);
704*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x0c + ch, 0x00);
705*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x18 + ch, 0x01);
706*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x64 + ch, 0x06);
707*4882a593Smuzhiyun
708*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xff, 0x01);
709*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x84 + ch, 0x04);
710*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x88 + ch, 0x01);
711*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x8c + ch, 0x02);
712*4882a593Smuzhiyun
713*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xff, 0x05 + ch);
714*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x6e, 0x10);
715*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x6f, 0x82);
716*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x76, 0x00);
717*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x77, 0x80);
718*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x78, 0x00);
719*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x79, 0x11);
720*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xB5, 0x80);
721*4882a593Smuzhiyun
722*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xff, 0x11);
723*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x00 + ( ch * 0x20 ), 0x0f);
724*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x01 + ( ch * 0x20 ), 0x00);
725*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x02 + ( ch * 0x20 ), 0x9d);
726*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x03 + ( ch * 0x20 ), 0x05);
727*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x04 + ( ch * 0x20 ), 0x00);
728*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x05 + ( ch * 0x20 ), 0x08);
729*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x06 + ( ch * 0x20 ), 0xca);
730*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x0a + ( ch * 0x20 ), 0x03);
731*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x0b + ( ch * 0x20 ), 0xc0);
732*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x0c + ( ch * 0x20 ), 0x04);
733*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x0d + ( ch * 0x20 ), 0x4b);
734*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x10 + ( ch * 0x20 ), 0x00);
735*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x11 + ( ch * 0x20 ), 0x96);
736*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x12 + ( ch * 0x20 ), 0x00);
737*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x13 + ( ch * 0x20 ), 0x82);
738*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x14 + ( ch * 0x20 ), 0x00);
739*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x15 + ( ch * 0x20 ), 0x30);
740*4882a593Smuzhiyun
741*4882a593Smuzhiyun }
742*4882a593Smuzhiyun
vd_jaguar1_960p_25P_test_set(unsigned char dev,unsigned char ch)743*4882a593Smuzhiyun static void vd_jaguar1_960p_25P_test_set( unsigned char dev, unsigned char ch )
744*4882a593Smuzhiyun {
745*4882a593Smuzhiyun printk("[drv]vd_jaguar1_960p_25P_test_set >>> ch%d!!\n", ch);
746*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xff, 0x00);
747*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x68 + ch, 0x59);
748*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x69 + ch, 0x80);
749*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x6a + ch, 0x80);
750*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x6b + ch, 0x80);
751*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x04 + ch, 0x00);
752*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x08 + ch, 0x03);
753*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x0c + ch, 0x00);
754*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x18 + ch, 0x01);
755*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x64 + ch, 0x06);
756*4882a593Smuzhiyun
757*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xff, 0x01);
758*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x84 + ch, 0x04);
759*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x88 + ch, 0x01);
760*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x8c + ch, 0x02);
761*4882a593Smuzhiyun
762*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xff, 0x05 + ch);
763*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x6e, 0x10);
764*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x6f, 0x82);
765*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x76, 0x00);
766*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x77, 0x80);
767*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x78, 0x00);
768*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x79, 0x11);
769*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xB5, 0x80);
770*4882a593Smuzhiyun
771*4882a593Smuzhiyun // Only AHD20_720P_960P_25P
772*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xff, 0x09);
773*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x53 + (ch * 0x04), 0x52);
774*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x52 + (ch * 0x04), 0xd2);
775*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x51 + (ch * 0x04), 0x1c);
776*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x50 + (ch * 0x04), 0x10);
777*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x44 + ch, 0x01);
778*4882a593Smuzhiyun
779*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0xff, 0x11);
780*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x00 + ( ch * 0x20 ), 0x0f);
781*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x01 + ( ch * 0x20 ), 0x00);
782*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x02 + ( ch * 0x20 ), 0x97);
783*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x03 + ( ch * 0x20 ), 0x05);
784*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x04 + ( ch * 0x20 ), 0x00);
785*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x05 + ( ch * 0x20 ), 0x0a);
786*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x06 + ( ch * 0x20 ), 0x8c);
787*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x0a + ( ch * 0x20 ), 0x03);
788*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x0b + ( ch * 0x20 ), 0xc0);
789*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x0c + ( ch * 0x20 ), 0x04);
790*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x0d + ( ch * 0x20 ), 0x4c);
791*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x10 + ( ch * 0x20 ), 0x00);
792*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x11 + ( ch * 0x20 ), 0x96);
793*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x12 + ( ch * 0x20 ), 0x00);
794*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x13 + ( ch * 0x20 ), 0x82);
795*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x14 + ( ch * 0x20 ), 0x00);
796*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[dev], 0x15 + ( ch * 0x20 ), 0x30);
797*4882a593Smuzhiyun
798*4882a593Smuzhiyun }
799*4882a593Smuzhiyun
800*4882a593Smuzhiyun /*****************************************************************************************************************************************
801*4882a593Smuzhiyun * Jaguar1 Video ioctl function
802*4882a593Smuzhiyun * video vi_vo initialize
803*4882a593Smuzhiyun *
804*4882a593Smuzhiyun ******************************************************************************************************************************************/
vd_jaguar1_vo_ch_seq_set(void * p_param)805*4882a593Smuzhiyun void vd_jaguar1_vo_ch_seq_set( void *p_param)
806*4882a593Smuzhiyun {
807*4882a593Smuzhiyun video_output_init *vo_seq = (video_output_init*)p_param;
808*4882a593Smuzhiyun unsigned char dev = 0;
809*4882a593Smuzhiyun unsigned char port = vo_seq->port;
810*4882a593Smuzhiyun unsigned char out_ch = vo_seq->out_ch;
811*4882a593Smuzhiyun
812*4882a593Smuzhiyun vd_vo_output_seq_set( dev, port, out_ch );
813*4882a593Smuzhiyun }
814*4882a593Smuzhiyun
vd_jaguar1_init_set(void * p_param)815*4882a593Smuzhiyun void vd_jaguar1_init_set( void *p_param )
816*4882a593Smuzhiyun {
817*4882a593Smuzhiyun video_input_init *video_init = (video_input_init*)p_param;
818*4882a593Smuzhiyun unsigned char ch = video_init->ch % 4;
819*4882a593Smuzhiyun unsigned char fmt = video_init->format;
820*4882a593Smuzhiyun int analog_input = video_init->input;
821*4882a593Smuzhiyun
822*4882a593Smuzhiyun video_equalizer_info_s eq_set;
823*4882a593Smuzhiyun NC_VD_COAX_STR coax_init;
824*4882a593Smuzhiyun NC_VD_VI_Init_STR *vi_param;
825*4882a593Smuzhiyun NC_VD_VO_Init_STR *vo_param;
826*4882a593Smuzhiyun
827*4882a593Smuzhiyun int dev = ch / 4 ; //{0x64, 0x60, 0x62, 0x66}//
828*4882a593Smuzhiyun
829*4882a593Smuzhiyun vi_param = __NC_VD_VI_Init_Val_Get(fmt);
830*4882a593Smuzhiyun vo_param = __NC_VD_VO_Init_Val_Get(AHD20_1080P_30P);
831*4882a593Smuzhiyun
832*4882a593Smuzhiyun // Each_Mode_Set
833*4882a593Smuzhiyun REG_SET_0x00_0_8_EACH_SET(ch, 0x10);
834*4882a593Smuzhiyun /*=====================================================
835*4882a593Smuzhiyun * vd_Analog Input Setting
836*4882a593Smuzhiyun *=====================================================*/
837*4882a593Smuzhiyun vd_jaguar1_single_differ_set(dev, ch, analog_input);
838*4882a593Smuzhiyun
839*4882a593Smuzhiyun /*=====================================================
840*4882a593Smuzhiyun * vd_vo Setting
841*4882a593Smuzhiyun *=====================================================*/
842*4882a593Smuzhiyun vd_vo_port_y_c_merge_set( dev, ch, vo_param );
843*4882a593Smuzhiyun vd_vo_mux_mode_set( dev, ch, vo_param );
844*4882a593Smuzhiyun vd_vo_manual_mode_set(dev, ch, vo_param);
845*4882a593Smuzhiyun
846*4882a593Smuzhiyun /*=====================================================
847*4882a593Smuzhiyun * vd_vi Setting
848*4882a593Smuzhiyun *=====================================================*/
849*4882a593Smuzhiyun
850*4882a593Smuzhiyun vd_vi_manual_set_seq1( dev, ch, vi_param );
851*4882a593Smuzhiyun vd_vi_vafe_set_seq2( dev, ch );
852*4882a593Smuzhiyun vd_vi_format_set_seq3( dev, ch, vi_param );
853*4882a593Smuzhiyun vd_vi_chroma_set_seq4( dev, ch, vi_param );
854*4882a593Smuzhiyun vd_vi_h_timing_set_seq5( dev, ch, vi_param );
855*4882a593Smuzhiyun vd_vi_h_scaler_mode_set_seq6( dev, ch, vi_param );
856*4882a593Smuzhiyun
857*4882a593Smuzhiyun vd_vi_hpll_set_seq7( dev, ch, vi_param );
858*4882a593Smuzhiyun vd_vi_color_set_seq8( dev, ch, vi_param, fmt);
859*4882a593Smuzhiyun vd_vo_port_ch_id_set( dev, ch, vo_param );
860*4882a593Smuzhiyun vd_vi_clock_set_seq9( dev, ch, vi_param );
861*4882a593Smuzhiyun
862*4882a593Smuzhiyun /*=====================================================
863*4882a593Smuzhiyun * AHD 1280x960P Test
864*4882a593Smuzhiyun *
865*4882a593Smuzhiyun *=====================================================*/
866*4882a593Smuzhiyun if( fmt == AHD20_720P_960P_30P )
867*4882a593Smuzhiyun {
868*4882a593Smuzhiyun vd_jaguar1_960p_30P_test_set( 0, ch);
869*4882a593Smuzhiyun current_bank_set(0xFF);
870*4882a593Smuzhiyun }
871*4882a593Smuzhiyun else if( fmt == AHD20_720P_960P_25P)
872*4882a593Smuzhiyun {
873*4882a593Smuzhiyun vd_jaguar1_960p_25P_test_set( 0, ch);
874*4882a593Smuzhiyun current_bank_set(0xFF);
875*4882a593Smuzhiyun }
876*4882a593Smuzhiyun else if( fmt == AHD20_SD_H960_2EX_Btype_PAL )
877*4882a593Smuzhiyun {
878*4882a593Smuzhiyun REG_SET_0x70_0_8_V_DELAY( ch, 0x3F );
879*4882a593Smuzhiyun }
880*4882a593Smuzhiyun else if( fmt == AHD20_SD_SH720_PAL || fmt == AHD20_SD_SH720_NT || fmt == AHD20_SD_H1440_PAL || fmt == AHD20_SD_H1440_NT )
881*4882a593Smuzhiyun {
882*4882a593Smuzhiyun REG_SET_0x14_0_8_FLD_INV_CHID(ch, 0x00);
883*4882a593Smuzhiyun REG_SET_0x34_0_8_Y_FIR_MODE(ch, 0x00);
884*4882a593Smuzhiyun REG_SET_1xCC_0_8_VPORT_OCLK_SEL_VPORT_OVCLK_DLY_SEL(ch, 0x40);
885*4882a593Smuzhiyun REG_SET_1xA0_0_8_TM_CLK_EN_SET(ch, 0x10);
886*4882a593Smuzhiyun REG_SET_5x21_0_8_CONT_SUB(ch, 0x24);
887*4882a593Smuzhiyun REG_SET_5x55_0_8_C_MEM_CLK_SEL(ch, 0x00);
888*4882a593Smuzhiyun REG_SET_5x56_0_8_FREQ_MEM_CLK_SEL(ch, 0x00);
889*4882a593Smuzhiyun REG_SET_5x57_0_8_LINE_MEM_CLK_INV(ch, 0x00);
890*4882a593Smuzhiyun REG_SET_5xB5_0_8_HAFC_MASK_SEL(ch, 0x00);
891*4882a593Smuzhiyun REG_SET_5xB8_0_8_HAFC_HCOEFF_SEL(ch, 0x39);
892*4882a593Smuzhiyun REG_SET_0x7C_0_8_HZOOM(ch, 0x8F);
893*4882a593Smuzhiyun }
894*4882a593Smuzhiyun else
895*4882a593Smuzhiyun printk("\n");
896*4882a593Smuzhiyun
897*4882a593Smuzhiyun printk("[drv_vi]ch::%d >>> fmt::%s\n", ch, vi_param->name);
898*4882a593Smuzhiyun
899*4882a593Smuzhiyun /*=====================================================
900*4882a593Smuzhiyun * EQ Stage 0 Setting
901*4882a593Smuzhiyun *
902*4882a593Smuzhiyun *=====================================================*/
903*4882a593Smuzhiyun #if 1
904*4882a593Smuzhiyun eq_set.Ch = ch;
905*4882a593Smuzhiyun eq_set.FmtDef = fmt;
906*4882a593Smuzhiyun eq_set.Cable = CABLE_A;
907*4882a593Smuzhiyun eq_set.Input = SINGLE_ENDED;
908*4882a593Smuzhiyun eq_set.stage = STAGE_0;
909*4882a593Smuzhiyun video_input_eq_val_set( &eq_set );
910*4882a593Smuzhiyun #endif
911*4882a593Smuzhiyun
912*4882a593Smuzhiyun printk("[drv_vi]ch::%d >>> fmt::%s\n", ch, vi_param->name);
913*4882a593Smuzhiyun current_bank_set(0xFF);
914*4882a593Smuzhiyun
915*4882a593Smuzhiyun /*=====================================================
916*4882a593Smuzhiyun * Coaxial Initialize
917*4882a593Smuzhiyun *
918*4882a593Smuzhiyun *=====================================================*/
919*4882a593Smuzhiyun coax_init.ch = ch;
920*4882a593Smuzhiyun coax_init.vivo_fmt = fmt;
921*4882a593Smuzhiyun coax_init.vd_dev = dev;
922*4882a593Smuzhiyun coax_tx_init( &coax_init );
923*4882a593Smuzhiyun if(acp_mode_enable == 0)
924*4882a593Smuzhiyun coax_tx_16bit_init( &coax_init );
925*4882a593Smuzhiyun coax_rx_init( &coax_init );
926*4882a593Smuzhiyun
927*4882a593Smuzhiyun }
928*4882a593Smuzhiyun
vd_jaguar1_get_novideo(video_video_loss_s * vidloss)929*4882a593Smuzhiyun void vd_jaguar1_get_novideo( video_video_loss_s *vidloss )
930*4882a593Smuzhiyun {
931*4882a593Smuzhiyun gpio_i2c_write(jaguar1_i2c_addr[vidloss->devnum], 0xFF, 0x00);
932*4882a593Smuzhiyun vidloss->videoloss = gpio_i2c_read(jaguar1_i2c_addr[vidloss->devnum], 0xA0);
933*4882a593Smuzhiyun }
934*4882a593Smuzhiyun
vd_jaguar1_sw_reset(void * p_param)935*4882a593Smuzhiyun void vd_jaguar1_sw_reset( void *p_param )
936*4882a593Smuzhiyun {
937*4882a593Smuzhiyun //video_input_init *sw_rst = (video_input_init*)p_param;
938*4882a593Smuzhiyun
939*4882a593Smuzhiyun REG_SET_1x81_0_1_VPLL_RST( 0, 0x1 );
940*4882a593Smuzhiyun REG_SET_1x80_0_1_VPLL_C( 0, 0x1 );
941*4882a593Smuzhiyun REG_SET_1x80_0_1_VPLL_C( 0, 0x0 );
942*4882a593Smuzhiyun REG_SET_1x81_0_1_VPLL_RST( 0, 0x0 );
943*4882a593Smuzhiyun printk("[drv]jaguar1_sw_reset complete!!\n");
944*4882a593Smuzhiyun }
945*4882a593Smuzhiyun
946