xref: /OK3568_Linux_fs/kernel/drivers/media/i2c/jaguar1_drv/jaguar1_video.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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