1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 // Software and any modification/derivatives thereof.
18 // No right, ownership, or interest to MStar Software and any
19 // modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 // supplied together with third party`s software and the use of MStar
23 // Software may require additional licenses from third parties.
24 // Therefore, you hereby agree it is your sole responsibility to separately
25 // obtain any and all third party right and license necessary for your use of
26 // such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 // MStar`s confidential information and you agree to keep MStar`s
30 // confidential information in strictest confidence and not disclose to any
31 // third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 // kind. Any warranties are hereby expressly disclaimed by MStar, including
35 // without limitation, any warranties of merchantability, non-infringement of
36 // intellectual property rights, fitness for a particular purpose, error free
37 // and in conformity with any international standard. You agree to waive any
38 // claim against MStar for any loss, damage, cost or expense that you may
39 // incur related to your use of MStar Software.
40 // In no event shall MStar be liable for any direct, indirect, incidental or
41 // consequential damages, including without limitation, lost of profit or
42 // revenues, lost or damage of data, and unauthorized system use.
43 // You agree that this Section 4 shall still apply without being affected
44 // even if MStar Software has been modified by MStar in accordance with your
45 // request or instruction for your use, except otherwise agreed by both
46 // parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 // services in relation with MStar Software to you for your use of
50 // MStar Software in conjunction with your or your customer`s product
51 // ("Services").
52 // You understand and agree that, except otherwise agreed by both parties in
53 // writing, Services are provided on an "AS IS" basis and the warranty
54 // disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 // or otherwise:
58 // (a) conferring any license or right to use MStar name, trademark, service
59 // mark, symbol or any other identification;
60 // (b) obligating MStar or any of its affiliates to furnish any person,
61 // including without limitation, you and your customers, any assistance
62 // of any kind whatsoever, or any information; or
63 // (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 // of Taiwan, R.O.C., excluding its conflict of law rules.
67 // Any and all dispute arising out hereof or related hereto shall be finally
68 // settled by arbitration referred to the Chinese Arbitration Association,
69 // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 // Rules of the Association by three (3) arbitrators appointed in accordance
71 // with the said Rules.
72 // The place of arbitration shall be in Taipei, Taiwan and the language shall
73 // be English.
74 // The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78 ////////////////////////////////////////////////////////////////////////////////
79 //
80 // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81 // All rights reserved.
82 //
83 // Unless otherwise stipulated in writing, any and all information contained
84 // herein regardless in any format shall remain the sole proprietary of
85 // MStar Semiconductor Inc. and be kept in strict confidence
86 // ("MStar Confidential Information") by the recipient.
87 // Any unauthorized act including without limitation unauthorized disclosure,
88 // copying, use, reproduction, sale, distribution, modification, disassembling,
89 // reverse engineering and compiling of the contents of MStar Confidential
90 // Information is unlawful and strictly prohibited. MStar hereby reserves the
91 // rights to any and all damages, losses, costs and expenses resulting therefrom.
92 //
93 ////////////////////////////////////////////////////////////////////////////////
94 #define MHAL_IP_C
95
96
97 //-------------------------------------------------------------------------------------------------
98 // Include Files
99 //-------------------------------------------------------------------------------------------------
100 // Common Definition
101 #include "MsCommon.h"
102 #include "MsIRQ.h"
103 #include "MsOS.h"
104 #include "mhal_xc_chip_config.h"
105 #include "utopia.h"
106 #include "utopia_dapi.h"
107 // Internal Definition
108 #include "drvXC_IOPort.h"
109 #include "apiXC.h"
110 #include "mvideo_context.h"
111 #include "xc_Analog_Reg.h"
112 #include "mhal_ip.h"
113 #include "apiXC_Adc.h"
114 #include "apiXC_Auto.h"
115 #include "drvXC_ADC_Internal.h"
116 #include "drvXC_HDMI_if.h"
117 #include "apiXC_ModeParse.h"
118 #include "apiXC_PCMonitor.h"
119 #include "drv_sc_ip.h"
120 #include "drv_sc_display.h"
121 #include "drv_sc_isr.h"
122 #if (LD_ENABLE==1)
123 #include "mdrv_ld.h"
124 #include "mdrv_ldalgo.h"
125 #endif
126 #include "mdrv_sc_3d.h"
127 #include "drv_sc_menuload.h"
128 #include "mhal_sc.h"
129 #if FRC_INSIDE
130 #include "mdrv_frc.h"
131 #include "mhal_frc.h"
132 #endif
133 #include "mhal_adc.h"
134 #include "xc_hwreg_utility2.h"
135 #include "hwreg_sc.h"
136 #include "hwreg_ipmux.h"
137 #include "XC_private.h"
138 #include "hwreg_adc_atop.h"
139 #include "hwreg_adc_dtop.h"
140 //-------------------------------------------------------------------------------------------------
141 // Driver Compiler Options
142 //-------------------------------------------------------------------------------------------------
143
144
145 //-------------------------------------------------------------------------------------------------
146 // Local Defines
147 //-------------------------------------------------------------------------------------------------
148 #define DRVSCIP_DBG(x) //x
149
150
151 //-------------------------------------------------------------------------------------------------
152 // Local Structures
153 //-------------------------------------------------------------------------------------------------
154
155
156 //-------------------------------------------------------------------------------------------------
157 // Global Variables
158 //-------------------------------------------------------------------------------------------------
159
160
161
162 //-------------------------------------------------------------------------------------------------
163 // Local Variables
164 //-------------------------------------------------------------------------------------------------
165
166
167 //-------------------------------------------------------------------------------------------------
168 // Debug Functions
169 //-------------------------------------------------------------------------------------------------
170
171
172 //-------------------------------------------------------------------------------------------------
173 // Local Functions
174 //-------------------------------------------------------------------------------------------------
175
176
177 //-------------------------------------------------------------------------------------------------
178 // Global Functions
179 //-------------------------------------------------------------------------------------------------
180
181
182 /******************************************************************************/
183 ///software reset for scaler
184 ///@param u16Sel \b IN
185 ///- software reset VDFE: BIT(15)
186 ///- software reset VDCOMBF: BIT(14)
187 ///- software reset EMCU: BIT(13)
188 ///- software reset GMC: BIT(12)
189 ///- software reset REG: BIT(7)
190 ///- software reset ADC: BIT(6)
191 ///- software reset DIGITAL: BIT(5)
192 ///- software reset SCALER: BIT(4)
193 ///- software reset DISPLAY: BIT(3)
194 ///- software reset OSD: BIT(1)
195 ///- software reset ALL: BIT(0)
196 ///@param u8DelayTime \b IN:
197 ///- software reset delay time
198 /******************************************************************************/
Hal_SC_ip_software_reset(void * pInstance,MS_U8 u8Reset,SCALER_WIN eWindow)199 void Hal_SC_ip_software_reset(void *pInstance, MS_U8 u8Reset, SCALER_WIN eWindow)
200 {
201 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
202 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
203 MS_BOOL bReset = FALSE;
204
205 if(psXCInstPri->u32DeviceID == E_XC_DEVICE0)
206 {
207 MS_U8 u8CLK1Mux = MDrv_ReadByte(REG_CKG_IDCLK1); //Sub window
208 MS_U8 u8CLK2Mux = MDrv_ReadByte(REG_CKG_IDCLK2); //Main window
209
210 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, u8Reset, 0xFF );
211 if (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_19_L, BIT(1)) == BIT(1))
212 {
213 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, BIT(10), BIT(10));
214 bReset = TRUE;
215 }
216 else
217 {
218 printf("reset %s %d mute=%x bwd=%x\n",__FUNCTION__,__LINE__,SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK10_19_L, BIT(1)), SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK46_01_L, 0xFF));
219 }
220 MsOS_DelayTask(1);
221 if(u8Reset == REST_IP_F1) //Sub window
222 {
223 MDrv_WriteByteMask(REG_CKG_IDCLK1, CKG_IDCLK1_XTAL, CKG_IDCLK1_MASK); // Sub window reset to XTAL when ADC input no signal
224 MDrv_WriteByteMask(REG_CKG_IDCLK1, u8CLK1Mux, CKG_IDCLK1_MASK); // Sub window reset to XTAL when ADC input no signal
225 }
226 else if(u8Reset == REST_IP_F2) //Main window
227 {
228 MDrv_WriteByteMask(REG_CKG_IDCLK2, CKG_IDCLK2_XTAL, CKG_IDCLK2_MASK); // Main window reset to XTAL when ADC input no signal
229 MDrv_WriteByteMask(REG_CKG_IDCLK2, u8CLK2Mux, CKG_IDCLK2_MASK); // Main window reset to XTAL when ADC input no signal
230 }
231 else if(u8Reset == REST_IP_ALL) //Main and sub windows
232 {
233 MDrv_WriteByteMask(REG_CKG_IDCLK1, CKG_IDCLK1_XTAL, CKG_IDCLK1_MASK); // Sub window reset to XTAL when ADC input no signal
234 MDrv_WriteByteMask(REG_CKG_IDCLK1, u8CLK1Mux, CKG_IDCLK1_MASK); // Sub window reset to XTAL when ADC input no signal
235 MDrv_WriteByteMask(REG_CKG_IDCLK2, CKG_IDCLK2_XTAL, CKG_IDCLK2_MASK); // Main window reset to XTAL when ADC input no signal
236 MDrv_WriteByteMask(REG_CKG_IDCLK2, u8CLK2Mux, CKG_IDCLK2_MASK); // Main window reset to XTAL when ADC input no signal
237 }
238
239 if (bReset == TRUE)
240 {
241 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, 0, BIT(10) );
242 }
243 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, 0x00, 0xFF );
244 MsOS_DelayTask(1);
245 }
246 else
247 {
248 MS_U8 u8CLK1Mux = MDrv_ReadByte(REG_CKG_S2_IDCLK1); //Sub window
249 MS_U8 u8CLK2Mux = MDrv_ReadByte(REG_CKG_S2_IDCLK2); //Main window
250
251 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, u8Reset, 0xFF );
252 MsOS_DelayTask(1);
253 if(u8Reset == REST_IP_F1) //Sub window
254 {
255 MDrv_WriteByteMask(REG_CKG_S2_IDCLK1, CKG_S2_IDCLK1_XTAL, CKG_S2_IDCLK1_MASK); // Sub window reset to XTAL when ADC input no signal
256 MDrv_WriteByteMask(REG_CKG_S2_IDCLK1, u8CLK1Mux, CKG_S2_IDCLK1_MASK); // Sub window reset to XTAL when ADC input no signal
257 }
258 else if(u8Reset == REST_IP_F2) //Main window
259 {
260 MDrv_WriteByteMask(REG_CKG_S2_IDCLK2, CKG_S2_IDCLK2_XTAL, CKG_S2_IDCLK2_MASK); // Main window reset to XTAL when ADC input no signal
261 MDrv_WriteByteMask(REG_CKG_S2_IDCLK2, u8CLK2Mux, CKG_S2_IDCLK2_MASK); // Main window reset to XTAL when ADC input no signal
262 }
263 else if(u8Reset == REST_IP_ALL) //Main and sub windows
264 {
265 MDrv_WriteByteMask(REG_CKG_S2_IDCLK1, CKG_S2_IDCLK1_XTAL, CKG_S2_IDCLK1_MASK); // Sub window reset to XTAL when ADC input no signal
266 MDrv_WriteByteMask(REG_CKG_S2_IDCLK1, u8CLK1Mux, CKG_S2_IDCLK1_MASK); // Sub window reset to XTAL when ADC input no signal
267 MDrv_WriteByteMask(REG_CKG_S2_IDCLK2, CKG_S2_IDCLK2_XTAL, CKG_S2_IDCLK2_MASK); // Main window reset to XTAL when ADC input no signal
268 MDrv_WriteByteMask(REG_CKG_S2_IDCLK2, u8CLK2Mux, CKG_S2_IDCLK2_MASK); // Main window reset to XTAL when ADC input no signal
269 }
270 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, 0x00, 0xFF );
271 MsOS_DelayTask(1);
272 }
273 }
274
Hal_SC_ip_get_sync_flag(void * pInstance,SCALER_WIN eWindow)275 MS_U8 Hal_SC_ip_get_sync_flag(void *pInstance, SCALER_WIN eWindow)
276 {
277 //MS_U8 u8Bank;
278 MS_U8 u8SyncFlag;
279 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
280 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
281
282 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
283
284 if(eWindow == MAIN_WINDOW)
285 {
286 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
287 //u8SyncFlag = MDrv_ReadByte(L_BK_IP1F2(0x1E));
288 u8SyncFlag = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_1E_L) & 0x00FF;
289 }
290 else
291 {
292 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
293 //u8SyncFlag = MDrv_ReadByte(L_BK_IP1F1(0x1E));
294 u8SyncFlag = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_1E_L) & 0x00FF;
295 }
296 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
297 return u8SyncFlag;
298 }
299
Hal_SC_ip_get_sync_detect_status(void * pInstance,SCALER_WIN eWindow)300 MS_U8 Hal_SC_ip_get_sync_detect_status(void *pInstance, SCALER_WIN eWindow)
301 {
302 MS_U8 u8DetectStatus;
303 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
304 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
305
306 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
307
308 /* mode detect status */
309 if(eWindow == MAIN_WINDOW)
310 {
311 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
312 //u8DetectStatus = MDrv_ReadByte(H_BK_IP1F2(0x1E));
313 u8DetectStatus = (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_1E_L) & 0xFF00)>>8;
314 }
315 else
316 {
317 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
318 //u8DetectStatus = MDrv_ReadByte(H_BK_IP1F1(0x1E));
319 u8DetectStatus = (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_1E_L) & 0xFF00)>>8;
320 }
321
322 //MDrv_WriteByte( BK_SELECT_00, u8Bank );
323 return u8DetectStatus;
324 }
325
Hal_SC_ip_get_input_vsync_polarity(void * pInstance)326 MS_U8 Hal_SC_ip_get_input_vsync_polarity(void *pInstance)
327 {
328 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
329 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
330 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_1E_L) & BIT(8)) ? 1:0;
331 }
332
Hal_SC_ip_get_input_vsync_value(void * pInstance,SCALER_WIN eWindow)333 MS_U8 Hal_SC_ip_get_input_vsync_value(void *pInstance, SCALER_WIN eWindow)
334 {
335 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
336 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
337 return (Hal_SC_ip_get_sync_flag(pInstance, eWindow) & BIT(2)) ? 1:0;
338 }
339
Hal_SC_ip_get_output_vsync_value(void * pInstance,SCALER_WIN eWindow)340 MS_U8 Hal_SC_ip_get_output_vsync_value(void *pInstance, SCALER_WIN eWindow)
341 {
342 // For Active Low case, BIT(0) = 0 means Vsync, so return true means get Vsync
343 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
344 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
345 return (Hal_SC_ip_get_sync_flag(pInstance, eWindow) & BIT(0)) ? 0 : 1;
346 }
347
Hal_SC_ip_set_reg_usr_vspolmd(void * pInstance,MS_U8 u8Enable,SCALER_WIN eWindow)348 void Hal_SC_ip_set_reg_usr_vspolmd(void *pInstance, MS_U8 u8Enable, SCALER_WIN eWindow )
349 {
350 //MS_U8 u8Bank;
351 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
352 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
353 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
354
355 if(eWindow == MAIN_WINDOW)
356 {
357 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
358 //MDrv_WriteRegBit(H_BK_IP1F2(0x21), u8Enable, BIT(4));
359 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_21_L, u8Enable ? BIT(12) : 0, BIT(12));
360 }
361 else
362 {
363 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
364 //MDrv_WriteRegBit(H_BK_IP1F1(0x21), u8Enable, BIT(4));
365 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_21_L, u8Enable ? BIT(12) : 0, BIT(12));
366 }
367
368 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
369 }
370
Hal_SC_ip_init_reg_in_timingchange(void * pInstance,SCALER_WIN eWindow)371 void Hal_SC_ip_init_reg_in_timingchange(void *pInstance, SCALER_WIN eWindow)
372 {
373 //MS_U8 u8Bank;
374 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
375 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
376
377 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
378
379 if(eWindow == MAIN_WINDOW)
380 {
381 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
382 //MDrv_WriteByte(L_BK_IP1F2(0x21), 0x00);
383 //MDrv_WriteByteMask(H_BK_IP1F2(0x21), 0x00 , BIT(0) );
384 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_21_L,0x0000,0x01FF);
385
386 // reset 3D setting
387 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK02_63_L, 0x0000);
388 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_7F_L, 0x00, BIT(15));
389 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_30_L, 0x00, BIT(0));
390 }
391 else
392 {
393 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
394 //MDrv_WriteByte(L_BK_IP1F1(0x21), 0x00);
395 //MDrv_WriteByteMask(H_BK_IP1F1(0x21), 0x00 , BIT(0) );
396 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_21_L,0x0000,0x01FF);
397 }
398
399 // restore coast window to default settings
400 Hal_SC_ip_set_coast_window( pInstance, 0x0C, 0x0C, eWindow );
401
402 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
403 }
404
405 /******************************************************************************/
406 ///This function will return Horizontal period value
407 ///@return
408 ///- MS_U16 Horizontal Period
409 /******************************************************************************/
Hal_SC_ip_get_horizontalPeriod(void * pInstance,SCALER_WIN eWindow)410 MS_U16 Hal_SC_ip_get_horizontalPeriod(void *pInstance, SCALER_WIN eWindow)
411 {
412 //MS_U8 u8Bank;
413 MS_U16 u16HorizontalPeriod;
414 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
415 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
416
417 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
418
419 if(eWindow == MAIN_WINDOW)
420 {
421 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
422 //u16HorizontalPeriod = ( MDrv_Read2Byte( L_BK_IP1F2(0x20)) & MST_H_PERIOD_MASK );
423 u16HorizontalPeriod = ( SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK01_20_L) & MST_H_PERIOD_MASK );
424 }
425 else
426 {
427 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
428 //u16HorizontalPeriod = ( MDrv_Read2Byte( L_BK_IP1F1(0x20)) & MST_H_PERIOD_MASK );
429 u16HorizontalPeriod = ( SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK03_20_L) & MST_H_PERIOD_MASK );
430 }
431
432 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
433
434 return u16HorizontalPeriod;
435 }
436
437
438 /******************************************************************************/
439 ///This function will return Vertical total value
440 ///@return
441 ///- MS_U16 Vertical total
442 /******************************************************************************/
Hal_SC_ip_get_verticaltotal(void * pInstance,SCALER_WIN eWindow)443 MS_U16 Hal_SC_ip_get_verticaltotal(void *pInstance, SCALER_WIN eWindow)
444 {
445 //MS_U8 u8Bank;
446 MS_U16 u16VerticalTotal;
447 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
448 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
449
450 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
451
452 if(eWindow == MAIN_WINDOW)
453 {
454 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
455 //u16VerticalTotal = ( MDrv_Read2Byte( L_BK_IP1F2(0x1f)) & MST_V_TOTAL_MASK );
456 u16VerticalTotal = ( SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK01_1F_L) & MST_V_TOTAL_MASK );
457 }
458 else
459 {
460 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
461 //u16VerticalTotal = ( MDrv_Read2Byte( L_BK_IP1F1(0x1f)) & MST_V_TOTAL_MASK );
462 u16VerticalTotal = ( SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK03_1F_L) & MST_V_TOTAL_MASK );
463 }
464
465 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
466
467 return u16VerticalTotal;
468 }
469 #if 0
470 /******************************************************************************/
471 /// Get the horizontal period of auto postion
472 /// @return the horizontal period of auto postion
473 /******************************************************************************/
474 MS_U16 MDrv_Scaler_GetHorizontalDEStart(void)
475 {
476 MS_U8 u8Bank;
477 MS_U16 u16HorizontalDE;
478
479 u8Bank = MDrv_ReadByte ( BK_SELECT_00 );
480 MDrv_WriteByte ( BK_SELECT_00, REG_BANK_IP1F2 );
481
482 u16HorizontalDE = MDrv_Read2Byte ( L_BK_IP1F2 ( 0x13 ) );
483
484 MDrv_WriteByte ( BK_SELECT_00, u8Bank );
485
486 return u16HorizontalDE;
487 }
488
489
490 /******************************************************************************/
491 /// Get the horizontal period of auto postion
492 /// @return the horizontal period of auto postion
493 /******************************************************************************/
494 MS_U16 MDrv_Scaler_GetHorizontalDE(void)
495 {
496 MS_U8 u8Bank;
497 MS_U16 u16HorizontalDE;
498
499 u8Bank = MDrv_ReadByte ( BK_SELECT_00 );
500 MDrv_WriteByte ( BK_SELECT_00, REG_BANK_IP1F2 );
501
502 u16HorizontalDE = MDrv_Read2Byte ( L_BK_IP1F2 ( 0x15 ) ) -
503 MDrv_Read2Byte ( L_BK_IP1F2 ( 0x13 ) ) + 1;
504
505 MDrv_WriteByte ( BK_SELECT_00, u8Bank );
506
507 return u16HorizontalDE;
508 }
509
510
511 /******************************************************************************/
512 /// Get the vertical period of auto postion
513 /// @return the vertical period of auto postion
514 /******************************************************************************/
515 MS_U16 MDrv_Scaler_GetVerticalDEStart(void)
516 {
517 MS_U8 u8Bank;
518 MS_U16 u16VerticalDE;
519
520 u8Bank = MDrv_ReadByte ( BK_SELECT_00 );
521 MDrv_WriteByte ( BK_SELECT_00, REG_BANK_IP1F2 );
522
523 u16VerticalDE = MDrv_Read2Byte ( L_BK_IP1F2 ( 0x12 ) );
524
525 MDrv_WriteByte ( BK_SELECT_00, u8Bank );
526
527 return u16VerticalDE;
528 }
529
530 /******************************************************************************/
531 /// Get the vertical period of auto postion
532 /// @return the vertical period of auto postion
533 /******************************************************************************/
534 MS_U16 MDrv_Scaler_GetVerticalDEEnd(void)
535 {
536 MS_U8 u8Bank;
537 MS_U16 u16VerticalDE;
538
539 u8Bank = MDrv_ReadByte ( BK_SELECT_00 );
540 MDrv_WriteByte ( BK_SELECT_00, REG_BANK_IP1F2 );
541
542 u16VerticalDE = MDrv_Read2Byte ( L_BK_IP1F2 ( 0x14 ) );
543
544 MDrv_WriteByte ( BK_SELECT_00, u8Bank );
545
546 return u16VerticalDE;
547 }
548
549
550 /******************************************************************************/
551 /// Get the vertical period of auto postion
552 /// @return the vertical period of auto postion
553 /******************************************************************************/
554 MS_U16 MDrv_Scaler_GetVerticalDE(void)
555 {
556 MS_U8 u8Bank;
557 MS_U16 u16VerticalDE;
558
559 u8Bank = MDrv_ReadByte ( BK_SELECT_00 );
560 MDrv_WriteByte ( BK_SELECT_00, REG_BANK_IP1F2 );
561
562 u16VerticalDE = MDrv_Read2Byte ( L_BK_IP1F2 ( 0x14 ) ) -
563 MDrv_Read2Byte ( L_BK_IP1F2 ( 0x12 ) ) + 1;
564
565 // SC_PATCH_02 start ===============================
566 // 2008-07-24.Daniel: Patch Interlace mode
567 if( Hal_SC_ip_get_interlace_status() )
568 {
569 if( u16VerticalDE&1 )
570 u16VerticalDE += 1;
571 }
572 // SC_PATCH_02 end =================================
573
574 MDrv_WriteByte ( BK_SELECT_00, u8Bank );
575
576 return u16VerticalDE;
577 }
578 #endif
579 //=========================================================//
580 // Function : Hal_SC_ip_de_hstart_info
581 // Description:
582 //=========================================================//
Hal_SC_ip_de_hstart_info(void * pInstance,SCALER_WIN eWindow)583 MS_U16 Hal_SC_ip_de_hstart_info(void *pInstance, SCALER_WIN eWindow)
584 {
585 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
586 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
587 if(eWindow == MAIN_WINDOW)
588 return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_13_L, IP_DE_HSTART_MASK);
589 else
590 return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_13_L, IP_DE_HSTART_MASK);
591 }
592 //=========================================================//
593 // Function : Hal_SC_ip_de_hend_info
594 // Description:
595 //=========================================================//
Hal_SC_ip_de_hend_info(void * pInstance,SCALER_WIN eWindow)596 MS_U16 Hal_SC_ip_de_hend_info(void *pInstance, SCALER_WIN eWindow)
597 {
598 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
599 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
600 if(eWindow == MAIN_WINDOW)
601 return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_15_L, IP_DE_HEND_MASK);
602 else
603 return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_15_L, IP_DE_HEND_MASK);
604 }
605
606 //=========================================================//
607 // Function : Hal_SC_ip_de_vstart_info
608 // Description:
609 //=========================================================//
Hal_SC_ip_de_vstart_info(void * pInstance,SCALER_WIN eWindow)610 MS_U16 Hal_SC_ip_de_vstart_info(void *pInstance, SCALER_WIN eWindow)
611 {
612 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
613 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
614 if(eWindow == MAIN_WINDOW)
615 return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_12_L, IP_DE_VSTART_MASK);
616 else
617 return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_12_L, IP_DE_VSTART_MASK);
618 }
619 //=========================================================//
620 // Function : Hal_SC_ip_de_vend_info
621 // Description:
622 //=========================================================//
Hal_SC_ip_de_vend_info(void * pInstance,SCALER_WIN eWindow)623 MS_U16 Hal_SC_ip_de_vend_info(void *pInstance, SCALER_WIN eWindow)
624 {
625 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
626 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
627 if(eWindow == MAIN_WINDOW)
628 return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_14_L, IP_DE_VEND_MASK);
629 else
630 return SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_14_L, IP_DE_VEND_MASK);
631 }
632
633 /******************************************************************************/
634 ///Set H position for PC mode
635 ///@param u16Position \b IN
636 ///- H position
637 /******************************************************************************/
Hal_SC_ip_set_pc_h_position(void * pInstance,MS_U16 u16Position,SCALER_WIN eWindow)638 void Hal_SC_ip_set_pc_h_position (void *pInstance, MS_U16 u16Position, SCALER_WIN eWindow)
639 {
640 //MS_U8 u8Bank;
641 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
642 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
643
644 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
645
646 if(eWindow == MAIN_WINDOW)
647 {
648 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
649 //MDrv_W=rite2Byte(L_BK_IP1F2(0x05), u16Position) ;
650 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_05_L, u16Position) ;
651 }
652 else
653 {
654 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
655 //MDrv_Write2Byte(L_BK_IP1F1(0x05), u16Position) ;
656 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_05_L, u16Position) ;
657 }
658
659 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
660 }
661
662
663 /******************************************************************************/
664 ///Set V position for PC mode
665 ///@param u16Position \b IN
666 ///- V position
667 /******************************************************************************/
Hal_SC_ip_set_pc_v_position(void * pInstance,MS_U16 u16Position,SCALER_WIN eWindow)668 void Hal_SC_ip_set_pc_v_position (void *pInstance, MS_U16 u16Position, SCALER_WIN eWindow )
669 {
670 //MS_U8 u8Bank;
671 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
672 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
673
674 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
675
676 u16Position = (u16Position==0)?1:u16Position;
677
678 if(eWindow == MAIN_WINDOW)
679 {
680 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
681 //MDrv_Write2Byte(L_BK_IP1F2(0x04), u16Position );
682 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_04_L, u16Position) ;
683 }
684 else
685 {
686 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
687 //MDrv_Write2Byte(L_BK_IP1F1(0x04), u16Position );
688 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_04_L, u16Position);
689 }
690
691 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
692 }
693
694 /******************************************************************************/
695 ///Set Macrovision filter
696 ///@param bEnable \b IN
697 ///- ENABLE Filter
698 /******************************************************************************/
Hal_SC_ip_set_ms_filter(void * pInstance,MS_BOOL bEnable,MS_U16 u16FilterRange,SCALER_WIN eWindow)699 void Hal_SC_ip_set_ms_filter(void *pInstance, MS_BOOL bEnable, MS_U16 u16FilterRange, SCALER_WIN eWindow )
700 {
701 //Macrovision filter is not used right now
702 UNUSED(u16FilterRange);
703 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
704 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
705
706 if ( bEnable )
707 {
708 if( eWindow == MAIN_WINDOW )
709 {
710 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_35_L, BIT(12) , BIT(12) | BIT(13) );
711 }
712 else
713 {
714 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_35_L, BIT(12) , BIT(12) | BIT(13) );
715 }
716 }
717 else
718 {
719 if( eWindow == MAIN_WINDOW )
720 {
721 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_35_L, 0x00 , BIT(12) | BIT(13) );
722 }
723 else
724 {
725 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_35_L, 0x00 , BIT(12) | BIT(13) );
726 }
727 }
728
729 }
730
731 /******************************************************************************/
732 ///Set coast window information.
733 ///@param u8Start \b IN
734 ///- Coast start from n HSYNC leading edge
735 ///@param u8End \n IN
736 ///- Coast end at n HSYNC leading edge
737 /******************************************************************************/
Hal_SC_ip_set_coast_window(void * pInstance,MS_U8 u8Start,MS_U8 u8End,SCALER_WIN eWindow)738 void Hal_SC_ip_set_coast_window(void *pInstance, MS_U8 u8Start, MS_U8 u8End, SCALER_WIN eWindow )
739 {
740 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
741 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
742 if( eWindow == MAIN_WINDOW )
743 {
744 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_24_L, u8Start<<8, 0xFF00 );
745 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_25_L, u8End, 0x00FF );
746 }
747 else
748 {
749 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_24_L, u8Start<<8, 0xFF00 );
750 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_25_L, u8End, 0x00FF );
751 }
752 }
753
754
Hal_SC_ip_sog_detect(void * pInstance)755 void Hal_SC_ip_sog_detect(void* pInstance)
756 {
757 MS_U8 u8SOGState;
758 MS_U8 u8SogDetectStatus;
759 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
760 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
761
762 u8SogDetectStatus = HAL_SC_GetSogDetectStatus(pInstance);
763
764 u8SogDetectStatus &= ~(0x0001);
765 u8SOGState = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_02_L)& 0x0070;
766 // check Separated -> Composite -> SOG -> Separated
767 if(u8SOGState & BIT(4))
768 {
769 // in detecting SOG, turn SOG detect off and set back to auto-detect
770 u8SOGState &= ~0x70; // set BIT[6..4] to 0 to turn off SOG detect
771 u8SOGState |= 0x00; // switch to detect separated H/V Sync
772 }
773 else if((u8SOGState & 0x60) == 0x40)
774 {
775 // detecting separated H/V sync, switch to detect composite sync
776 u8SOGState &= ~0x70;
777 u8SOGState |= 0x20; // switch to detect composite sync
778 }
779 else if((u8SOGState & 0x60) == 0x20)
780 {
781 // detecting composite sync, switch to detect SOG
782 u8SogDetectStatus |= (0x0001);
783 u8SOGState |= 0x70; // set BIT[6..4] to 0x7 to turn SOG detect on
784 }
785 else
786 {
787 // detecting separated H/V sync, switch to detect composite sync
788 u8SOGState &= ~0x70;
789 u8SOGState |= 0x40; // switch to detect composite sync
790 }
791
792 HAL_SC_SetSogDetectStatus(pInstance, u8SogDetectStatus);
793 //MDrv_WriteByte(L_BK_IP1F2(0x02), u8SOGState);
794 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_02_L,u8SOGState,0x0070);
795 Hal_SC_ip_software_reset(pInstance, REST_IP_F2, MAIN_WINDOW);
796 Hal_ADC_reset(pInstance, REST_ADC);
797 // adjust ADC bandwidth
798 if((u8SOGState & 0x70) == 0x70)
799 {
800 // SOG
801 //MDrv_WriteRegBit(L_BK_IP1F2(0x03), DISABLE, BIT(5)); // Delay 1/4 input HSYNC
802 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, 0 ,BIT(5));
803 MDrv_WriteRegBit(REG_ADC_ATOP_1C_L, DISABLE, BIT(5));
804 MDrv_WriteByte(REG_ADC_ATOP_1C_H, 0x38); // Turn on SOG input low bandwidth filter
805 MDrv_WriteRegBit(REG_ADC_DTOP_07_L, ENABLE, BIT(6)); // ADC PLL lock source is SOG
806 }
807 else
808 {
809 // Non SOG
810 //MDrv_WriteRegBit(L_BK_IP1F2(0x03), DISABLE, BIT(5)); // No delay input HSYNC
811 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, 0 ,BIT(5));
812 MDrv_WriteRegBit(REG_ADC_ATOP_1C_L, ENABLE, BIT(5));
813 MDrv_WriteByte(REG_ADC_ATOP_1C_H, 0x30); // Turn off SOG input low bandwidth filter
814 MDrv_WriteRegBit(REG_ADC_DTOP_07_L, DISABLE, BIT(6)); // ADC PLL lock source is HSync
815 }
816 }
817
818 /******************************************************************************/
819 ///get interlace detecting result
820 ///@return MS_U8
821 ///- 1:interlace
822 ///- 0:no interlace
823 /******************************************************************************/
Hal_SC_ip_get_interlace_status(void * pInstance,SCALER_WIN eWindow)824 MS_U8 Hal_SC_ip_get_interlace_status (void *pInstance, SCALER_WIN eWindow )
825 {
826 //MS_U8 u8Bank;
827 MS_BOOL bInterlace;
828 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
829 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
830
831 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
832
833 bInterlace = 0;
834
835 if(eWindow == MAIN_WINDOW)
836 {
837 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
838 //if ( MDrv_ReadByte(H_BK_IP1F2(0x1E)) & BIT(3) )
839 if ( SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_1E_L) & BIT(11) )
840 {
841 bInterlace = 1;
842 }
843 }
844 else
845 {
846 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
847 //if ( MDrv_ReadByte(H_BK_IP1F1(0x1E)) & BIT(3) )
848 if ( SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_1E_L) & BIT(11) )
849 {
850 bInterlace = 1;
851 }
852 }
853
854
855 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
856 return bInterlace;
857 }
858
Hal_SC_IPMux_Gen_SpecificTiming(void * pInstance,XC_Internal_TimingType timingtype)859 void Hal_SC_IPMux_Gen_SpecificTiming(void *pInstance, XC_Internal_TimingType timingtype )
860 {
861 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
862 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
863
864 switch (timingtype)
865 {
866 case E_XC_480P:
867 case E_XC_480I:
868 W2BYTE(REG_IPMUX_12_L, 0x02D0); //HDE
869 W2BYTEMSK(REG_IPMUX_13_L, 010, LBMASK); //H front porch
870 W2BYTEMSK(REG_IPMUX_14_L, 0x3E, LBMASK) ; //H sync pulse width
871 W2BYTE(REG_IPMUX_15_L, 0x05F0); //Htotal 0x035A
872 W2BYTE(REG_IPMUX_16_L, 0x01E0) ; //VDE
873 W2BYTEMSK(REG_IPMUX_17_L, 0x06, LBMASK) ; //V front porch
874 W2BYTEMSK(REG_IPMUX_18_L, 0x09, LBMASK) ; //V sync pulse width
875 W2BYTE(REG_IPMUX_19_L, 0x020d) ; //Vtotal
876 break;
877
878 case E_XC_576P:
879 case E_XC_576I:
880 W2BYTE(REG_IPMUX_12_L, 0x02D0); //HDE
881 W2BYTEMSK(REG_IPMUX_13_L, 010, LBMASK); //H front porch
882 W2BYTEMSK(REG_IPMUX_14_L, 0x3E, LBMASK) ; //H sync pulse width
883 W2BYTE(REG_IPMUX_15_L, 0x035A); //Htotal
884 W2BYTE(REG_IPMUX_16_L, 0x0240) ; //VDE
885 W2BYTEMSK(REG_IPMUX_17_L, 0x06, LBMASK) ; //V front porch
886 W2BYTEMSK(REG_IPMUX_18_L, 0x09, LBMASK) ; //V sync pulse width
887 W2BYTE(REG_IPMUX_19_L, 0x0271) ; //Vtotal
888 break;
889
890 case E_XC_720P:
891 case E_XC_720I:
892 W2BYTE(REG_IPMUX_12_L, 0x0500); //HDE
893 W2BYTEMSK(REG_IPMUX_13_L, 0x6E, LBMASK); //H front porch
894 W2BYTEMSK(REG_IPMUX_14_L, 0x28, LBMASK) ; //H sync pulse width
895 W2BYTE(REG_IPMUX_15_L, 0x0690); //Htotal
896 W2BYTE(REG_IPMUX_16_L, 0x02D0) ; //VDE
897 W2BYTEMSK(REG_IPMUX_17_L, 0x05, LBMASK) ; //V front porch
898 W2BYTEMSK(REG_IPMUX_18_L, 0x05, LBMASK) ; //V sync pulse width
899 W2BYTE(REG_IPMUX_19_L, 0x02EE) ; //Vtotal
900 break;
901
902 case E_XC_1080P:
903 case E_XC_1080I:
904
905 W2BYTE(REG_IPMUX_12_L, 0x0780); //HDE
906 W2BYTEMSK(REG_IPMUX_13_L, 0x58, LBMASK); //H front porch
907 W2BYTEMSK(REG_IPMUX_14_L, 0x2C, LBMASK) ; //H sync pulse width
908 W2BYTE(REG_IPMUX_15_L, 0x0898); //Htotal
909 W2BYTE(REG_IPMUX_16_L, 0x0438) ; //VDE
910 W2BYTEMSK(REG_IPMUX_17_L, 0x02, LBMASK) ; //V front porch
911 W2BYTEMSK(REG_IPMUX_18_L, 0x05, LBMASK) ; //V sync pulse width
912 W2BYTE(REG_IPMUX_19_L, 0x0465) ; //Vtotal
913
914 break;
915 case E_XC_OFF:
916 default:
917 break;
918 }
919
920 if((timingtype == E_XC_480I) || (timingtype == E_XC_576I) || (timingtype == E_XC_720I) || (timingtype == E_XC_1080I))
921 {
922 W2BYTEMSK(REG_IPMUX_10_L, BIT(1), BIT(1));
923 }
924 else
925 {
926 W2BYTEMSK(REG_IPMUX_10_L, 0x00, BIT(1));
927 }
928 if ( timingtype == E_XC_OFF)
929 {
930 // Turn off timing gen
931 W2BYTEMSK(REG_IPMUX_10_L, 0x00, BIT(0));
932 }
933 else
934 {
935 W2BYTEMSK(REG_IPMUX_10_L, BIT(15), BIT(15));
936 W2BYTEMSK(REG_IPMUX_10_L, BIT(0), BIT(0));
937 }
938
939
940 }
941
Hal_SC_Check_IP_Gen_Timing(void * pInstance)942 MS_BOOL Hal_SC_Check_IP_Gen_Timing(void *pInstance)
943 {
944 return (MDrv_ReadByte(REG_IPMUX_10_L) & 0x01);
945 }
946
Hal_SC_ip_set_input_source(void * pInstance,MS_U8 u8InputSrcSel,MS_U8 u8SyncSel,MS_U8 u8VideoSel,MS_U8 u8isYPbPr,SCALER_WIN eWindow)947 void Hal_SC_ip_set_input_source(void *pInstance, MS_U8 u8InputSrcSel, MS_U8 u8SyncSel, MS_U8 u8VideoSel, MS_U8 u8isYPbPr, SCALER_WIN eWindow )
948 {
949 MS_U16 u16RegVal;
950 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
951 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
952
953 u16RegVal = (u8InputSrcSel&0x07) |
954 ((u8SyncSel&0x07) << 4) |
955 ((u8VideoSel&0x03) << 8) |
956 ((u8isYPbPr&0x01) << 10);
957
958 if( eWindow == MAIN_WINDOW )
959 {
960 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_02_L, u16RegVal, 0x0777);
961 }
962 else
963 {
964 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_02_L, u16RegVal, 0x0777);
965 }
966
967 }
968
969
hal_ip_set_input_10bit(void * pInstance,MS_BOOL bInput10Bit,SCALER_WIN eWindow)970 void hal_ip_set_input_10bit(void *pInstance, MS_BOOL bInput10Bit, SCALER_WIN eWindow )
971 {
972 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
973 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
974 if( eWindow == MAIN_WINDOW )
975 {
976 if(bInput10Bit)
977 {
978 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, BIT(11), BIT(11));
979 }
980 else //Input is 8bit
981 {
982 //when BIT(11)=0 --> BIT(10)=1, 8bit.5; BIT(10)=0, 8bit.0
983 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, BIT(10), (BIT(11)|BIT(10)) );
984 }
985 }
986 else
987 {
988 if(bInput10Bit)
989 {
990 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_03_L, BIT(11), BIT(11));
991 }
992 else //Input is 8bit
993 {
994 //when BIT(11)=0 --> BIT(10)=1, 8bit.5; BIT(10)=0, 8bit.0
995 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_03_L, BIT(10), (BIT(11)|BIT(10)) );
996 }
997 }
998 }
999
1000
Hal_SC_ip_set_image_wrap(void * pInstance,MS_BOOL bHEnable,MS_BOOL bVEnable,SCALER_WIN eWindow)1001 void Hal_SC_ip_set_image_wrap(void *pInstance, MS_BOOL bHEnable, MS_BOOL bVEnable, SCALER_WIN eWindow )
1002 {
1003 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1004 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1005 if( eWindow == MAIN_WINDOW )
1006 {
1007 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, ((bVEnable<<1)|bHEnable), (BIT(1)|BIT(0)) );
1008 }
1009 else
1010 {
1011 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_03_L, ((bVEnable<<1)|bHEnable), (BIT(1)|BIT(0)) );
1012 }
1013 }
1014
1015
Hal_SC_ip_set_input_sync_reference_edge(void * pInstance,MS_BOOL bHRef,MS_BOOL bVRef,SCALER_WIN eWindow)1016 void Hal_SC_ip_set_input_sync_reference_edge(void *pInstance, MS_BOOL bHRef, MS_BOOL bVRef, SCALER_WIN eWindow )
1017 {
1018 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1019 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1020 if( eWindow == MAIN_WINDOW )
1021 {
1022 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, ((bHRef<<4)|(bVRef<<3)), (BIT(4)|BIT(3)) );
1023 }
1024 else
1025 {
1026 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_03_L, ((bHRef<<4)|(bVRef<<3)), (BIT(4)|BIT(3)) );
1027 }
1028 }
1029
1030
Hal_SC_ip_set_input_vsync_delay(void * pInstance,MS_BOOL bDelay,SCALER_WIN eWindow)1031 void Hal_SC_ip_set_input_vsync_delay(void *pInstance, MS_BOOL bDelay, SCALER_WIN eWindow )
1032 {
1033 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1034 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1035 if( eWindow == MAIN_WINDOW )
1036 {
1037 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, bDelay<<5, BIT(5) );
1038 }
1039 else
1040 {
1041 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_03_L, bDelay<<5, BIT(5) );
1042 }
1043 }
1044
1045
Hal_SC_ip_set_de_only_mode(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)1046 void Hal_SC_ip_set_de_only_mode(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow )
1047 {
1048 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1049 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1050 //Turn on BIT(7) to let H/V Start being programable.
1051 if( eWindow == MAIN_WINDOW )
1052 {
1053 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, (BIT(7)|(bEnable<<6)), (BIT(7)|BIT(6)) );
1054 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_2F_L, bEnable<<4, BIT(4) ); // SW patch for HDMI switch, Auto search HST jistter mask filter force off
1055 if(psXCInstPri->u32DeviceID)
1056 MDrv_WriteRegBit(REG_S2_DE_ONLY_F2, bEnable, S2_DE_ONLY_F2_MASK);
1057 else
1058 MDrv_WriteRegBit(REG_DE_ONLY_F2, bEnable, DE_ONLY_F2_MASK);
1059 }
1060 else
1061 {
1062 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_03_L, (BIT(7)|(bEnable<<6)), (BIT(7)|BIT(6)) );
1063 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_2F_L, bEnable<<4, BIT(4) ); // SW patch for HDMI switch, Auto search HST jistter mask filter force off
1064 if(psXCInstPri->u32DeviceID)
1065 MDrv_WriteRegBit(REG_S2_DE_ONLY_F1, bEnable, S2_DE_ONLY_F1_MASK);
1066 else
1067 MDrv_WriteRegBit(REG_DE_ONLY_F1, bEnable, DE_ONLY_F1_MASK);
1068 }
1069 }
1070
Hal_SC_ip_set_coast_input(void * pInstance,MS_BOOL bInputSel,SCALER_WIN eWindow)1071 void Hal_SC_ip_set_coast_input(void *pInstance, MS_BOOL bInputSel, SCALER_WIN eWindow )
1072 {
1073 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1074 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1075 //BIT(0): Coast Polarity to PAD --TODO
1076 if( eWindow == MAIN_WINDOW )
1077 {
1078 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_24_L, ((bInputSel<<5)|BIT(0)), 0xFF );
1079 }
1080 else
1081 {
1082 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_24_L, ((bInputSel<<5)|BIT(0)), 0xFF );
1083 }
1084 }
1085
Hal_SC_ip_set_DE_Mode_Glitch(void * pInstance,MS_U8 u8Setting,SCALER_WIN eWindow)1086 void Hal_SC_ip_set_DE_Mode_Glitch(void *pInstance, MS_U8 u8Setting , SCALER_WIN eWindow )
1087 {
1088 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1089 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1090 if( eWindow == MAIN_WINDOW )
1091 {
1092 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_27_L, u8Setting, 0xFF );
1093 }
1094 else
1095 {
1096 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_27_L, u8Setting, 0xFF );
1097 }
1098 }
1099
Hal_SC_ip_get_DE_mode_glitch_protect_enabled(void * pInstance,SCALER_WIN eWindow)1100 MS_BOOL Hal_SC_ip_get_DE_mode_glitch_protect_enabled(void *pInstance, SCALER_WIN eWindow)
1101 {
1102 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1103 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1104 if(eWindow == MAIN_WINDOW)
1105 {
1106 return (MS_BOOL)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_27_L, BIT(2)) >> 2);
1107 }
1108 else
1109 {
1110 return (MS_BOOL)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_27_L, BIT(2)) >> 2);
1111 }
1112 }
1113
Hal_SC_ip_set_input_sync_sample_mode(void * pInstance,MS_BOOL bMode,SCALER_WIN eWindow)1114 void Hal_SC_ip_set_input_sync_sample_mode(void *pInstance, MS_BOOL bMode, SCALER_WIN eWindow )
1115 {
1116 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1117 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1118 if( eWindow == MAIN_WINDOW )
1119 {
1120 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_26_L, (bMode<<2), BIT(2) );
1121 }
1122 else
1123 {
1124 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_26_L, (bMode<<2), BIT(2) );
1125 }
1126 }
1127
Hal_SC_ip_set_de_bypass_mode(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)1128 void Hal_SC_ip_set_de_bypass_mode(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow )
1129 {
1130 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1131 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1132 if( eWindow == MAIN_WINDOW )
1133 {
1134 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_2F_L, (bEnable<<15), BIT(15) );
1135 }
1136 else
1137 {
1138 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_2F_L, (bEnable<<15), BIT(15) );
1139 }
1140 }
1141
Hal_SC_ip_set_de_lock_mode(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)1142 void Hal_SC_ip_set_de_lock_mode(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow )
1143 {
1144 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1145 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1146
1147 MS_BOOL bLastLockMode = FALSE;
1148
1149 if( eWindow == MAIN_WINDOW )
1150 {
1151
1152 if(SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_1D_L, BIT(6) ))
1153 {
1154 bLastLockMode = TRUE;
1155 }
1156
1157 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_1D_L, (bEnable<<6), BIT(6) );
1158
1159 if(bLastLockMode != bEnable)
1160 {
1161 //change mode, then sw reset
1162 Hal_SC_ip_software_reset(pInstance, REST_IP_F2, MAIN_WINDOW);
1163 }
1164
1165 }
1166 else
1167 {
1168 if(SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_1D_L, BIT(6) ))
1169 {
1170 bLastLockMode = TRUE;
1171 }
1172
1173 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_1D_L, (bEnable<<6), BIT(6) );
1174
1175 if(bLastLockMode != bEnable)
1176 {
1177 //change mode, then sw reset
1178 Hal_SC_ip_software_reset(pInstance, REST_IP_F1, MAIN_WINDOW);
1179 }
1180
1181 }
1182 }
1183
Hal_SC_get_hsd_pixel_count(void * pInstance,SCALER_WIN eWindow)1184 MS_U16 Hal_SC_get_hsd_pixel_count(void *pInstance, SCALER_WIN eWindow )
1185 {
1186 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1187 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1188 if( eWindow == MAIN_WINDOW )
1189 {
1190 return SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK02_3E_L, BITMASK(11 : 0) );
1191 }
1192 else
1193 {
1194 return SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK04_3E_L, BITMASK(11 : 0) );
1195 }
1196 }
1197
Hal_SC_get_vsd_line_count(void * pInstance,SCALER_WIN eWindow)1198 MS_U16 Hal_SC_get_vsd_line_count(void *pInstance, SCALER_WIN eWindow )
1199 {
1200 MS_U16 u16Count;
1201 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1202 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1203 if( eWindow == MAIN_WINDOW )
1204 {
1205 u16Count = SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK02_3F_L, BITMASK(10 : 0) );
1206 }
1207 else
1208 {
1209 u16Count = SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK04_3F_L, BITMASK(10 : 0) );
1210 }
1211 if(MDrv_XC_PCMonitor_Get_Vtotal(pInstance, eWindow) > DOUBLEHD_1080X2P_VSIZE)
1212 {
1213 u16Count |= 0x800; //Complement for HW bits missing
1214 }
1215 return u16Count;
1216 }
1217
Hal_SC_ip_set_post_glitch_removal(void * pInstance,MS_BOOL bEnble,MS_U8 u8Range,SCALER_WIN eWindow)1218 void Hal_SC_ip_set_post_glitch_removal(void *pInstance, MS_BOOL bEnble, MS_U8 u8Range, SCALER_WIN eWindow )
1219 {
1220 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1221 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1222 if( eWindow == MAIN_WINDOW )
1223 {
1224 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_26_L, ((bEnble<<7)|((u8Range&0x07)<<4)), 0xF0 );
1225 }
1226 else
1227 {
1228 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_26_L, ((bEnble<<7)|((u8Range&0x07)<<4)), 0xF0 );
1229 }
1230 }
1231
Hal_SC_ip_get_post_glitch_removal(void * pInstance,SCALER_WIN eWindow)1232 MS_U8 Hal_SC_ip_get_post_glitch_removal(void *pInstance, SCALER_WIN eWindow)
1233 {
1234 MS_BOOL bEnable = FALSE;
1235 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1236 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1237
1238 if( eWindow == MAIN_WINDOW )
1239 {
1240 bEnable = (MS_BOOL)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_26_L, BIT(7)) >> 7);
1241 if (bEnable)
1242 {
1243 return (MS_U8)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_26_L, BIT(6)|BIT(5)|BIT(4)) >> 4);
1244 }
1245 else
1246 {
1247 return 0;
1248 }
1249 }
1250 else
1251 {
1252 bEnable = (MS_BOOL)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_26_L, BIT(7)) >> 7);
1253 if (bEnable)
1254 {
1255 return (MS_U8)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_26_L, BIT(6)|BIT(5)|BIT(4)) >> 4);
1256 }
1257 else
1258 {
1259 return 0;
1260 }
1261 }
1262 }
1263
1264 //////////////////////////////////
1265 // Capture window
Hal_SC_ip_get_capture_window(void * pInstance,MS_WINDOW_TYPE * capture_win,SCALER_WIN eWindow)1266 void Hal_SC_ip_get_capture_window(void *pInstance, MS_WINDOW_TYPE* capture_win,SCALER_WIN eWindow)
1267 {
1268
1269 //MS_U8 u8Bank;
1270 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1271 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1272
1273 //u8Bank = MDrv_ReadByte(BK_SELECT_00);
1274
1275 if( eWindow == MAIN_WINDOW )
1276 {
1277 // MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
1278
1279 /*capture_win->y = MDrv_Read2Byte( L_BK_IP1F2(0x04) ) ; // Vstart
1280 capture_win->x = MDrv_Read2Byte( L_BK_IP1F2(0x05) ) ; // Hstart
1281 capture_win->height= MDrv_Read2Byte( L_BK_IP1F2(0x06) ) ; // Vsize
1282 capture_win->width= MDrv_Read2Byte( L_BK_IP1F2(0x07) ) ; // Hsize
1283 */
1284 capture_win->y = SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK01_04_L ) ; // Vstart
1285 capture_win->x = SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK01_05_L ) ; // Hstart
1286 capture_win->height= SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK01_06_L ) ; // Vsize
1287 capture_win->width= SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_07_L , 0x3FFF) ; // Hsize
1288 }
1289 else
1290 {
1291 //MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
1292
1293 capture_win->y = SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK03_04_L ) ; // Vstart
1294 capture_win->x = SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK03_05_L ) ; // Hstart
1295 capture_win->height= SC_R2BYTE( psXCInstPri->u32DeviceID, REG_SC_BK03_06_L ) ; // Vsize
1296 capture_win->width= SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_07_L, 0x3FFF ) ; // Hsize
1297 }
1298
1299 //MDrv_WriteByte(BK_SELECT_00, u8Bank);
1300 }
1301
1302 #if 0
1303 static void Hal_SC_ip_set_capture_window(MS_U32 u32Reg, MS_U16 u16Value , SCALER_WIN eWindow)
1304 {
1305 if( eWindow == MAIN_WINDOW )
1306 {
1307 // There are 11bits for each setting of capture window
1308 SC_W2BYTEMSK( u32Reg , u16Value , 0x07FF );
1309 }
1310 else
1311 {
1312 MS_ASSERT(0);
1313 }
1314 }
1315 #endif
1316
Hal_SC_ip_set_capture_v_start(void * pInstance,MS_U16 u16Vstart,SCALER_WIN eWindow)1317 void Hal_SC_ip_set_capture_v_start(void *pInstance, MS_U16 u16Vstart , SCALER_WIN eWindow)
1318 {
1319 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1320 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1321 if(eWindow == MAIN_WINDOW)
1322 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_04_L, u16Vstart, 0x1FFF);
1323 else
1324 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_04_L, u16Vstart, 0x1FFF);
1325 }
1326
Hal_SC_ip_set_capture_v_start_with_Menuload(void * pInstance,MS_U16 u16Vstart,SCALER_WIN eWindow)1327 void Hal_SC_ip_set_capture_v_start_with_Menuload(void *pInstance, MS_U16 u16Vstart , SCALER_WIN eWindow)
1328 {
1329 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1330 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1331
1332 if(MDrv_XC_MLoad_GetStatus(pInstance) == E_MLOAD_ENABLED)
1333 {
1334 _MLOAD_ENTRY(pInstance);
1335
1336 if(eWindow == MAIN_WINDOW)
1337 {
1338 MDrv_XC_MLoad_set_trigger_sync(pInstance, MLOAD_TRIGGER_BY_IP_MAIN_SYNC);
1339 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK01_04_L, u16Vstart, 0x1FFF);
1340 }
1341 else
1342 {
1343 MDrv_XC_MLoad_set_trigger_sync(pInstance, MLOAD_TRIGGER_BY_IP_SUB_SYNC);
1344 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK03_04_L, u16Vstart, 0x1FFF);
1345 }
1346 if (!MDrv_XC_MLoad_Fire(pInstance, TRUE))
1347 {
1348 printf("Error: Set MLoad Fire Error!!!!\n ");
1349 }
1350 MDrv_XC_MLoad_set_trigger_sync(pInstance, MLOAD_TRIGGER_BY_OP_SYNC);
1351
1352 _MLOAD_RETURN(pInstance);
1353 }
1354 else
1355 {
1356 if(eWindow == MAIN_WINDOW)
1357 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_04_L, u16Vstart, 0x1FFF);
1358 else
1359 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_04_L, u16Vstart, 0x1FFF);
1360 }
1361 }
1362
Hal_SC_ip_set_capture_h_start(void * pInstance,MS_U16 u16Hstart,SCALER_WIN eWindow)1363 void Hal_SC_ip_set_capture_h_start(void *pInstance, MS_U16 u16Hstart , SCALER_WIN eWindow)
1364 {
1365 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1366 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1367 if(eWindow == MAIN_WINDOW)
1368 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_05_L, u16Hstart, 0x1FFF);
1369 else
1370 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_05_L, u16Hstart, 0x1FFF);
1371 }
1372
Hal_SC_ip_set_capture_h_start_with_Menuload(void * pInstance,MS_U16 u16Hstart,SCALER_WIN eWindow)1373 void Hal_SC_ip_set_capture_h_start_with_Menuload(void *pInstance, MS_U16 u16Hstart , SCALER_WIN eWindow)
1374 {
1375 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1376 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1377
1378 if(MDrv_XC_MLoad_GetStatus(pInstance) == E_MLOAD_ENABLED)
1379 {
1380 _MLOAD_ENTRY(pInstance);
1381
1382 if(eWindow == MAIN_WINDOW)
1383 {
1384 MDrv_XC_MLoad_set_trigger_sync(pInstance, MLOAD_TRIGGER_BY_IP_MAIN_SYNC);
1385 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK01_05_L, u16Hstart, 0x1FFF);
1386 }
1387 else
1388 {
1389 MDrv_XC_MLoad_set_trigger_sync(pInstance, MLOAD_TRIGGER_BY_IP_SUB_SYNC);
1390 MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK03_05_L, u16Hstart, 0x1FFF);
1391 }
1392 if (!MDrv_XC_MLoad_Fire(pInstance, TRUE))
1393 {
1394 printf("Error: Set MLoad Fire Error!!!!\n ");
1395 }
1396 MDrv_XC_MLoad_set_trigger_sync(pInstance, MLOAD_TRIGGER_BY_OP_SYNC);
1397
1398 _MLOAD_RETURN(pInstance);
1399 }
1400 else
1401 {
1402 if(eWindow == MAIN_WINDOW)
1403 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_05_L, u16Hstart, 0x1FFF);
1404 else
1405 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_05_L, u16Hstart, 0x1FFF);
1406 }
1407 }
1408
Hal_SC_ip_set_capture_v_size(void * pInstance,MS_U16 u16Vsize,SCALER_WIN eWindow)1409 void Hal_SC_ip_set_capture_v_size(void *pInstance, MS_U16 u16Vsize , SCALER_WIN eWindow)
1410 {
1411 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1412 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1413 if(eWindow == MAIN_WINDOW)
1414 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_06_L, u16Vsize, 0x1FFF);
1415 else
1416 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_06_L, u16Vsize, 0x1FFF);
1417 }
1418
Hal_SC_ip_set_capture_h_size(void * pInstance,MS_U16 u16Hsize,SCALER_WIN eWindow)1419 void Hal_SC_ip_set_capture_h_size(void *pInstance, MS_U16 u16Hsize , SCALER_WIN eWindow)
1420 {
1421 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1422 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1423 if(eWindow == MAIN_WINDOW)
1424 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_07_L, u16Hsize, 0x3FFF);
1425 else
1426 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_07_L, u16Hsize, 0x3FFF);
1427 }
1428
Hal_SC_ip_set_fir_down_sample_divider(void * pInstance,MS_U8 u8Enable,MS_U16 u16OverSampleCount,SCALER_WIN eWindow)1429 void Hal_SC_ip_set_fir_down_sample_divider(void *pInstance, MS_U8 u8Enable, MS_U16 u16OverSampleCount,SCALER_WIN eWindow)
1430 {
1431 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1432 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1433 if( eWindow == MAIN_WINDOW )
1434 {
1435 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_0D_L, (u8Enable?( BIT(7) | (u16OverSampleCount & 0xF ) ):0) , (BIT(7) | BIT(0) |BIT(1) | BIT(2) |BIT(3)) );
1436 }
1437 else
1438 {
1439 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_0D_L, (u8Enable?( BIT(7) | (u16OverSampleCount & 0xF ) ):0) , (BIT(7) | BIT(0) |BIT(1) | BIT(2) |BIT(3)) );
1440 }
1441 }
1442
Hal_XC_MApi_XC_IPAutoNoSignal_GetCaps(void)1443 MS_BOOL Hal_XC_MApi_XC_IPAutoNoSignal_GetCaps(void)
1444 {
1445 return TRUE;
1446 }
1447
Hal_SC_ip_set_IPAutoNoSignal(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)1448 void Hal_SC_ip_set_IPAutoNoSignal(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow )
1449 {
1450 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1451 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1452 if (eWindow == MAIN_WINDOW)
1453 {
1454 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_0B_L, bEnable? BIT(4)|BIT(5):0, BIT(4)|BIT(5));
1455 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_1D_L, bEnable? BIT(12):0, BIT(12));
1456 }
1457 else
1458 {
1459 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_0B_L, bEnable? BIT(4)|BIT(5):0, BIT(4)|BIT(5));
1460 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_1D_L, bEnable? BIT(12):0, BIT(12));
1461 }
1462 }
1463
Hal_SC_ip_get_IPAutoNoSignal(void * pInstance,SCALER_WIN eWindow)1464 MS_BOOL Hal_SC_ip_get_IPAutoNoSignal(void *pInstance, SCALER_WIN eWindow )
1465 {
1466 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1467 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1468 if (eWindow == MAIN_WINDOW)
1469 {
1470 return ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_1D_L, BIT(12) ) )? TRUE:FALSE;
1471 }
1472 else
1473 {
1474 return ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_1D_L, BIT(12) ) )? TRUE:FALSE;
1475 }
1476 }
1477
Hal_SC_ip_enable_turnoff_OP1_for_AutoNoSignal(void * pInstance,MS_BOOL bEnable)1478 void Hal_SC_ip_enable_turnoff_OP1_for_AutoNoSignal(void *pInstance, MS_BOOL bEnable)
1479 {
1480 SC_W2BYTEMSK(0, REG_SC_BK20_24_L, bEnable? BIT(10):0, BIT(10));
1481 }
1482
1483 //////////////////////////////////
1484 // Auto gain
Hal_SC_ip_set_auto_gain_function(void * pInstance,MS_U8 u8Enable,SCALER_WIN eWindow)1485 void Hal_SC_ip_set_auto_gain_function(void *pInstance, MS_U8 u8Enable, SCALER_WIN eWindow)
1486 {
1487 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1488 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1489 if( eWindow == MAIN_WINDOW )
1490 {
1491 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_0E_L, (u8Enable?(BIT(0) | BIT(4)):0) , (BIT(0) | BIT(4)) );
1492 }
1493 else
1494 {
1495 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_0E_L, (u8Enable?(BIT(0) | BIT(4)):0) , (BIT(0) | BIT(4)) );
1496 }
1497 }
1498
Hal_SC_ip_is_auto_gain_result_ready(void * pInstance,SCALER_WIN eWindow)1499 MS_BOOL Hal_SC_ip_is_auto_gain_result_ready(void *pInstance, SCALER_WIN eWindow)
1500 {
1501 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1502 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1503 if( eWindow == MAIN_WINDOW )
1504 {
1505 return ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_0E_L, BIT(1) ) )? TRUE:FALSE;
1506 }
1507 else
1508 {
1509 return ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_0E_L, BIT(1) ) )? TRUE:FALSE;
1510 }
1511 }
1512
1513 // bit 0 : B min
1514 // bit 1 : G min
1515 // bit 2 : R min
Hal_SC_ip_auto_gain_min_value_status(void * pInstance,SCALER_WIN eWindow)1516 MS_U8 Hal_SC_ip_auto_gain_min_value_status(void *pInstance, SCALER_WIN eWindow)
1517 {
1518 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1519 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1520 if( eWindow == MAIN_WINDOW )
1521 {
1522 return ( (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_0E_L, ( BIT(10) | BIT(9) | BIT(8) ) ) ) >> 8 );
1523 }
1524 else
1525 {
1526 return ( (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_0E_L, ( BIT(10) | BIT(9) | BIT(8) ) ) ) >> 8 );
1527 }
1528 }
1529
1530 // Make sure
1531 // bit 0 : B max
1532 // bit 1 : G max
1533 // bit 2 : R max
Hal_SC_ip_auto_gain_max_value_status(void * pInstance,SCALER_WIN eWindow)1534 MS_U8 Hal_SC_ip_auto_gain_max_value_status(void *pInstance, SCALER_WIN eWindow)
1535 {
1536 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1537 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1538 if( eWindow == MAIN_WINDOW )
1539 {
1540 return ( (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_0E_L, ( BIT(5) | BIT(6) | BIT(7) ) ) ) >> 5 );
1541 }
1542 else
1543 {
1544 return ( (SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_0E_L, ( BIT(5) | BIT(6) | BIT(7) ) ) ) >> 5 );
1545 }
1546 }
1547
1548 //////////////////////////////////
1549 // Auto phase
Hal_SC_ip_get_auto_phase_value(void * pInstance,SCALER_WIN eWindow)1550 MS_U32 Hal_SC_ip_get_auto_phase_value(void *pInstance, SCALER_WIN eWindow)
1551 {
1552 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1553 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1554 if( eWindow == MAIN_WINDOW )
1555 {
1556 return ( SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_1A_L) );
1557 }
1558 else
1559 {
1560 return ( SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_1A_L) );
1561 }
1562 }
1563
Hal_SC_ip_is_auto_phase_result_ready(void * pInstance,SCALER_WIN eWindow)1564 MS_BOOL Hal_SC_ip_is_auto_phase_result_ready(void *pInstance, SCALER_WIN eWindow)
1565 {
1566 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1567 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1568 if( eWindow == MAIN_WINDOW )
1569 {
1570 return ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_19_L, BIT(1) ) )? TRUE:FALSE;
1571 }
1572 else
1573 {
1574 return ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_19_L, BIT(1) ) )? TRUE:FALSE;
1575 }
1576 }
1577
1578 //////////////////////////////////
1579 // Auto position
Hal_SC_ip_is_auto_position_result_ready(void * pInstance,SCALER_WIN eWindow)1580 MS_BOOL Hal_SC_ip_is_auto_position_result_ready(void *pInstance, SCALER_WIN eWindow)
1581 {
1582 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1583 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1584 if( eWindow == MAIN_WINDOW )
1585 {
1586 return ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_10_L, BIT(1) ) )? TRUE:FALSE;
1587 }
1588 else
1589 {
1590 return ( SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_10_L, BIT(1) ) )? TRUE:FALSE;
1591 }
1592 }
Hal_SC_ip_set_auto_position_function(void * pInstance,MS_U8 u8Enable,SCALER_WIN eWindow)1593 void Hal_SC_ip_set_auto_position_function(void *pInstance, MS_U8 u8Enable, SCALER_WIN eWindow)
1594 {
1595 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1596 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1597 if( eWindow == MAIN_WINDOW )
1598 {
1599 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_10_L, (u8Enable?BIT(0):0) , BIT(0) );
1600 }
1601 else
1602 {
1603 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_10_L, (u8Enable?BIT(0):0) , BIT(0) );
1604 }
1605 }
1606
1607 // Threshold is from 2'b0000 ~ 2'b1111
Hal_SC_ip_set_valid_data_threshold(void * pInstance,MS_U8 u8Threshold,SCALER_WIN eWindow)1608 void Hal_SC_ip_set_valid_data_threshold(void *pInstance, MS_U8 u8Threshold, SCALER_WIN eWindow )
1609 {
1610 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1611 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1612 if( eWindow == MAIN_WINDOW )
1613 {
1614 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_10_L, (u8Threshold & 0x0F) << 12 , 0xF000 );
1615 }
1616 else
1617 {
1618 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_10_L, (u8Threshold & 0x0F) << 12 , 0xF000 );
1619 }
1620 }
1621
1622 #if 0
1623 static MS_U16 Hal_SC_ip_get_auto_position(MS_U32 u32Reg, SCALER_WIN eWindow)
1624 {
1625 if( eWindow == MAIN_WINDOW )
1626 {
1627 return ( SC_R2BYTE(u32Reg) & 0xFFF );
1628 }
1629 else
1630 {
1631 MS_ASSERT(0);
1632 return 0;
1633 }
1634 }
1635 #endif
1636
Hal_SC_ip_get_auto_position_v_start(void * pInstance,SCALER_WIN eWindow)1637 MS_U16 Hal_SC_ip_get_auto_position_v_start(void *pInstance, SCALER_WIN eWindow )
1638 {
1639 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1640 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1641 if(eWindow == MAIN_WINDOW)
1642 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_12_L) & 0xFFF);
1643 else
1644 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_12_L) & 0xFFF);
1645 }
1646
Hal_SC_ip_get_auto_position_h_start(void * pInstance,SCALER_WIN eWindow)1647 MS_U16 Hal_SC_ip_get_auto_position_h_start(void *pInstance, SCALER_WIN eWindow )
1648 {
1649 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1650 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1651 if(eWindow == MAIN_WINDOW)
1652 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_13_L) & 0xFFF);
1653 else
1654 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_13_L) & 0xFFF);
1655 }
1656
Hal_SC_ip_get_auto_position_v_end(void * pInstance,SCALER_WIN eWindow)1657 MS_U16 Hal_SC_ip_get_auto_position_v_end(void *pInstance, SCALER_WIN eWindow )
1658 {
1659 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1660 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1661 if(eWindow == MAIN_WINDOW)
1662 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_14_L) & 0xFFF);
1663 else
1664 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_14_L) & 0xFFF);
1665 }
1666
Hal_SC_ip_get_auto_position_h_end(void * pInstance,SCALER_WIN eWindow)1667 MS_U16 Hal_SC_ip_get_auto_position_h_end(void *pInstance, SCALER_WIN eWindow )
1668 {
1669 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1670 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1671 if(eWindow == MAIN_WINDOW)
1672 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_15_L) & 0xFFF);
1673 else
1674 return (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_15_L) & 0xFFF);
1675 }
1676
1677 //////////////////////////////////
1678 // Auto range
Hal_SC_ip_set_auto_range_function(void * pInstance,MS_U8 u8Enable,SCALER_WIN eWindow)1679 void Hal_SC_ip_set_auto_range_function(void *pInstance, MS_U8 u8Enable, SCALER_WIN eWindow )
1680 {
1681 #if 0
1682 if (u8Enable)
1683 {
1684 // Debug mode.
1685 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_60_L, 0xFF00 , 0xFF00); // Bit(15) is enable.
1686 }
1687 else
1688 {
1689 // Debug mode.
1690 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_60_L, 0x0000 , 0xFF00); // Bit(15) is enable.
1691 }
1692 #endif
1693 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1694 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1695
1696 if(eWindow == MAIN_WINDOW)
1697 {
1698 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK01_29_L, (u8Enable?BIT(8):0) , BIT(8) );
1699 }
1700 else
1701 {
1702 SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK03_29_L, (u8Enable?BIT(8):0) , BIT(8) );
1703 }
1704 }
1705
Hal_SC_ip_set_auto_range_window(void * pInstance,MS_U16 u16Vstart,MS_U16 u16Hstart,MS_U16 u16Vsize,MS_U16 u16Hsize,SCALER_WIN eWindow)1706 void Hal_SC_ip_set_auto_range_window(void *pInstance, MS_U16 u16Vstart, MS_U16 u16Hstart, MS_U16 u16Vsize , MS_U16 u16Hsize, SCALER_WIN eWindow)
1707 {
1708 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1709 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1710 if( eWindow == MAIN_WINDOW )
1711 {
1712 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_2A_L, u16Vstart ); //vstart
1713 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_2B_L, u16Hstart ); //hstart
1714 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_2C_L, u16Vsize ); //vsize
1715 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_2D_L, u16Hsize ); //hsize
1716 }
1717 else
1718 {
1719 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_2A_L, u16Vstart ); //vstart
1720 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_2B_L, u16Hstart ); //hstart
1721 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_2C_L, u16Vsize ); //vsize
1722 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_2D_L, u16Hsize ); //hsize
1723 }
1724
1725 }
1726
HAL_SC_ip_get_ipmux(void * pInstance)1727 MS_U8 HAL_SC_ip_get_ipmux(void *pInstance)
1728 {
1729 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1730 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1731 return (MS_U8)MDrv_ReadByte(REG_IPMUX_01_L)&0xF0;
1732 }
HAL_SC_ip_set_ipmux(void * pInstance,MS_U8 u8Val)1733 void HAL_SC_ip_set_ipmux(void *pInstance, MS_U8 u8Val)
1734 {
1735 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1736 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1737 MDrv_WriteByteMask(REG_IPMUX_01_L, u8Val,0x00F0);
1738 }
1739
HAL_SC_ip_get_ipclk(void * pInstance)1740 MS_U8 HAL_SC_ip_get_ipclk(void *pInstance)
1741 {
1742 return (MS_U8)MDrv_ReadByte(0x1E3F)&0x3F;
1743 }
1744
HAL_SC_ip_set_ipclk(void * pInstance,MS_U8 u8Val)1745 void HAL_SC_ip_set_ipclk(void *pInstance, MS_U8 u8Val)
1746 {
1747 MDrv_WriteByteMask(0x1E3F, u8Val, 0x3F); // 1E1F[13:8]
1748 }
1749
HAL_SC_ip_get_capturesource(void * pInstance)1750 MS_U8 HAL_SC_ip_get_capturesource(void *pInstance)
1751 {
1752 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1753 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1754 return (MS_U8)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_02_L, 0x0007);
1755 }
1756
HAL_SC_ip_set_capturesource(void * pInstance,MS_U8 u8Val)1757 void HAL_SC_ip_set_capturesource(void *pInstance, MS_U8 u8Val)
1758 {
1759 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1760 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1761 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_02_L, (MS_U16)u8Val, 0x0007);
1762 }
1763
Hal_SC_ip_get_user_def_interlace_status(void * pInstance)1764 MS_U8 Hal_SC_ip_get_user_def_interlace_status(void *pInstance)
1765 {
1766 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1767 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1768 return (MS_U8)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_21_L, 0x0003);
1769 }
Hal_SC_ip_set_user_def_interlace_status(void * pInstance,MS_BOOL bEnable,MS_BOOL bIsInterlace,SCALER_WIN eWindow)1770 void Hal_SC_ip_set_user_def_interlace_status(void *pInstance, MS_BOOL bEnable, MS_BOOL bIsInterlace,SCALER_WIN eWindow)
1771 {
1772 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1773 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1774 if(eWindow == MAIN_WINDOW)
1775 {
1776 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_21_L, (bEnable?BIT(0):0),BIT(0));
1777 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_21_L, (bIsInterlace?BIT(1):0),BIT(1));
1778 }
1779 else if(eWindow == SUB_WINDOW)
1780 {
1781 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_21_L, (bEnable?BIT(0):0),BIT(0));
1782 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_21_L, (bIsInterlace?BIT(1):0),BIT(1));
1783 }
1784 }
1785
HAL_SC_ip_get_capture_method(void * pInstance)1786 MS_U8 HAL_SC_ip_get_capture_method(void *pInstance)
1787 {
1788 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1789 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1790 return (MS_U8)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_03_L, 0x00FF);
1791 }
1792
HAL_SC_ip_get_capture_format(void * pInstance)1793 MS_BOOL HAL_SC_ip_get_capture_format(void *pInstance)
1794 {
1795 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1796 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1797 MS_BOOL bIsRGBfmt;
1798 if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_02_L, 0x0008))
1799 bIsRGBfmt = TRUE;
1800 else
1801 bIsRGBfmt = FALSE;
1802
1803 return bIsRGBfmt;
1804 }
1805
HAL_SC_ip_set_capture_format(void * pInstance,MS_BOOL bIsRGB)1806 void HAL_SC_ip_set_capture_format(void *pInstance, MS_BOOL bIsRGB)
1807 {
1808 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1809 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1810 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_02_L, (bIsRGB?BIT(3):0), 0x0008);
1811 }
1812
HAL_SC_ip_get_h_predown_info(void * pInstance)1813 MS_BOOL HAL_SC_ip_get_h_predown_info(void *pInstance)
1814 {
1815 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1816 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1817 if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_05_L, 0x8000))
1818 return TRUE;
1819 else
1820 return FALSE;
1821 }
HAL_SC_ip_get_v_predown_info(void * pInstance)1822 MS_BOOL HAL_SC_ip_get_v_predown_info(void *pInstance)
1823 {
1824 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1825 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1826 if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_09_L, 0x8000))
1827 return TRUE;
1828 else
1829 return FALSE;
1830 }
HAL_SC_ip_set_h_predown_info(void * pInstance,MS_BOOL bEnable)1831 void HAL_SC_ip_set_h_predown_info(void *pInstance, MS_BOOL bEnable)
1832 {
1833 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1834 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1835 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_05_L, (bEnable?BIT(15):0), BIT(15));
1836 }
HAL_SC_ip_set_v_predown_info(void * pInstance,MS_BOOL bEnable)1837 void HAL_SC_ip_set_v_predown_info(void *pInstance, MS_BOOL bEnable)
1838 {
1839 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1840 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1841 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_09_L, (bEnable?BIT(15):0),BIT(15));
1842 }
1843
HAL_SC_ip_get_444to422_filter_mod(void * pInstance)1844 MS_BOOL HAL_SC_ip_get_444to422_filter_mod(void *pInstance)
1845 {
1846 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1847 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1848 if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_0A_L, BIT(7)))
1849 return TRUE;
1850 else
1851 return FALSE;
1852 }
HAL_SC_ip_set_444to422_filter_mod(void * pInstance,MS_BOOL bEnable)1853 void HAL_SC_ip_set_444to422_filter_mod(void *pInstance, MS_BOOL bEnable)
1854 {
1855 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1856 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1857 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK02_0A_L, (bEnable?BIT(7):0), BIT(7));
1858 }
1859
1860 //F2 memory data format, BK12_01[10:8]
HAL_SC_get_memory_fmt(void * pInstance)1861 MS_U8 HAL_SC_get_memory_fmt(void *pInstance)
1862 {
1863 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1864 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1865 return (MS_U8)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_01_L, 0x0700)>>8);
1866 }
1867
1868 //F2 IP memory data format, BK12_2[3:0]
HAL_SC_get_IPM_memory_fmt(void * pInstance)1869 MS_U8 HAL_SC_get_IPM_memory_fmt(void *pInstance)
1870 {
1871 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1872 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1873 return (MS_U8)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_02_L, 0x000F));
1874 }
HAL_SC_set_IPM_memory_fmt(void * pInstance,MS_U8 u8Value)1875 void HAL_SC_set_IPM_memory_fmt(void *pInstance, MS_U8 u8Value)
1876 {
1877 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1878 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1879 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_02_L, (((MS_U16)u8Value)|BIT(8)),0x010F);
1880 }
1881
1882 //F2 OP memory data format, BK12_2[7:4]
HAL_SC_get_OPM_memory_fmt(void * pInstance)1883 MS_U8 HAL_SC_get_OPM_memory_fmt(void *pInstance)
1884 {
1885 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1886 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1887 return (MS_U8)(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_02_L, 0x00F0));
1888 }
HAL_SC_set_OPM_memory_fmt(void * pInstance,MS_U8 u8Value)1889 void HAL_SC_set_OPM_memory_fmt(void *pInstance, MS_U8 u8Value)
1890 {
1891 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1892 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1893 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_02_L, (((MS_U16)u8Value)<<4|(BIT(9))),0x02F0);
1894 }
1895
1896 //capture image to IP enable
HAL_SC_set_capture_image2ip(void * pInstance,MS_BOOL bEnable)1897 void HAL_SC_set_capture_image2ip(void *pInstance, MS_BOOL bEnable)
1898 {
1899 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1900 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1901 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_57_L, (bEnable ? BIT(11):0), BIT(11));
1902 }
HAL_SC_get_VOP_mux(void * pInstance)1903 MS_U8 HAL_SC_get_VOP_mux(void *pInstance)
1904 {
1905 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1906 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1907 return (MS_U8)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_46_L, 0x00F0);
1908 }
1909
HAL_SC_set_VOP_mux(void * pInstance,MS_U8 u8Val)1910 void HAL_SC_set_VOP_mux(void *pInstance, MS_U8 u8Val)
1911 {
1912 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1913 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1914 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK0F_46_L, (MS_U16)u8Val, 0x00F0);
1915 }
1916
HAL_SC_get_memory_bit_fmt(void * pInstance,SCALER_WIN eWindow)1917 MS_U8 HAL_SC_get_memory_bit_fmt(void *pInstance, SCALER_WIN eWindow)
1918 {
1919 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1920 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1921 if(eWindow == MAIN_WINDOW)
1922 return (MS_U8)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_01_L, BIT(5)|BIT(4));
1923 else
1924 return (MS_U8)SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_41_L, BIT(5)|BIT(4));
1925 }
1926
1927 //F2 RGB/YUV 444 8-bits format
1928 //F2 RGB/YUV 444 10-bits format
1929 //(bEnable_8bit : bEnable_10bit)
1930 //(0:0)YCbCr422, (1:0)RGB/YCbCr444_8bit, (0:1)RGB/YCbCr444_10bit
HAL_SC_set_memory_bit(void * pInstance,MS_BOOL bEnable_8bit,MS_BOOL bEnable_10bit)1931 void HAL_SC_set_memory_bit(void *pInstance, MS_BOOL bEnable_8bit, MS_BOOL bEnable_10bit)
1932 {
1933 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1934 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1935 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_01_L, (MS_U16)((bEnable_10bit<<5)|bEnable_8bit<<4), (BIT(5)|BIT(4)));
1936 }
1937
HAL_SC_set_IPM_capture_start(void * pInstance,MS_BOOL bEnable)1938 void HAL_SC_set_IPM_capture_start(void *pInstance, MS_BOOL bEnable)
1939 {
1940 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1941 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1942 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK12_02_L, (MS_U16)(bEnable?BIT(15):0), BIT(15));
1943 }
1944
HAL_SC_get_IRQ_mask_0_31(void * pInstance)1945 MS_U32 HAL_SC_get_IRQ_mask_0_31(void *pInstance)
1946 {
1947 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1948 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1949 return (MS_U32)SC_R4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK00_14_L);
1950 }
1951
HAL_SC_set_IRQ_mask_0_31(void * pInstance,MS_U32 u32Val)1952 void HAL_SC_set_IRQ_mask_0_31(void *pInstance, MS_U32 u32Val)
1953 {
1954 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1955 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1956 SC_W4BYTE(psXCInstPri->u32DeviceID, REG_SC_BK00_14_L, u32Val);
1957 }
HAL_SC_set_GOP_Enable(void * pInstance,MS_U8 MaxGOP,MS_U8 UseNum,MS_U8 u8MuxNum,MS_BOOL bEnable)1958 MS_BOOL HAL_SC_set_GOP_Enable(void *pInstance, MS_U8 MaxGOP ,MS_U8 UseNum, MS_U8 u8MuxNum, MS_BOOL bEnable)
1959 {
1960 /* GOP OP Path enable to SC Setting
1961 T3: GOP OP Path blending with SC sequence
1962 mux0-->mux2-->mux3
1963 */
1964 MS_U16 u16regval;
1965 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1966 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
1967
1968 if(UseNum > MaxGOP)
1969 return FALSE;
1970 u16regval = (MS_U16)SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK00_0C_L);
1971
1972 if(UseNum == (u8MuxNum & (BIT(0)|BIT(1)))) // Enable Mux0 to XC
1973 {
1974 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0C_L, bEnable?(u16regval|BIT(15)):(u16regval & (~ BIT(15))), BIT(15));
1975 }
1976 else if(UseNum == ((u8MuxNum & (BIT(4)|BIT(5)))>>4)) // Enable Mux2 to XC
1977 {
1978 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0C_L, bEnable?(u16regval|BIT(14)):(u16regval & (~ BIT(14))), BIT(14));
1979 }
1980 else if(UseNum == ((u8MuxNum & (BIT(6)|BIT(7)))>>6)) // Enable Mux3 to XC
1981 {
1982 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0C_L, bEnable?(u16regval|BIT(13)):(u16regval & (~ BIT(13))), BIT(13));
1983 }
1984 else
1985 {
1986 return FALSE;
1987 }
1988 return TRUE;
1989 }
1990
1991
1992 /********************************************************************************/
1993 /// Set GOP destination (OP/IP) setting to scaler
1994 /// @param ipSelGop \b IN \copydoc MS_XC_IPSEL_GOP
1995 /********************************************************************************/
HAL_SC_ip_sel_for_gop(void * pInstance,MS_U8 u8MuxNum,MS_XC_IPSEL_GOP ipSelGop)1996 void HAL_SC_ip_sel_for_gop(void *pInstance, MS_U8 u8MuxNum ,MS_XC_IPSEL_GOP ipSelGop)
1997 {
1998 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
1999 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2000 switch(ipSelGop)
2001 {
2002 default:
2003 case MS_IP0_SEL_GOP0:
2004 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0xA0, 0xA0);
2005 if(0 == (u8MuxNum & 0x0003))
2006 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, BIT(12), BIT(12)); // mux 0
2007 else
2008 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, BIT(13), BIT(13)); // mux 1
2009 break;
2010 case MS_IP0_SEL_GOP1:
2011 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0xA0, 0xA0);
2012 if(1 == (u8MuxNum & 0x0003))
2013 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, BIT(12), BIT(12)); // mux 0
2014 else
2015 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, BIT(13), BIT(13)); // mux 1
2016 break;
2017 case MS_IP0_SEL_GOP2:
2018 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0xA0, 0xA0);
2019 if(2 == (u8MuxNum & 0x0003))
2020 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, BIT(12), BIT(12)); // mux 0
2021 else
2022 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, BIT(13), BIT(13)); // mux 1
2023 break;
2024 case MS_NIP_SEL_GOP0:
2025 if(0==(u8MuxNum &0x0003))
2026 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0, BIT(12)); // mux 0
2027 else
2028 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0, BIT(13)); // mux 1
2029 break;
2030 case MS_NIP_SEL_GOP1:
2031 if(1==(u8MuxNum &0x0003))
2032 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0, BIT(12)); // mux 0
2033 else
2034 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0, BIT(13)); // mux 1
2035 break;
2036 case MS_NIP_SEL_GOP2:
2037 if(2==(u8MuxNum &0x0003))
2038 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0, BIT(12)); // mux 0
2039 else
2040 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0, BIT(13)); // mux 1
2041 break;
2042 case MS_MVOP_SEL:
2043 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, 0xA0, 0xA0);
2044 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_0A_L, BIT(12), BIT(12)|BIT(13)); // mux 0
2045 break;
2046 }
2047 }
2048
2049
2050 /******************************************************************************/
2051 /// Set Scaler VOP New blending level
2052 /******************************************************************************/
HAL_SC_SetVOPNBL(void * pInstance)2053 void HAL_SC_SetVOPNBL(void *pInstance)
2054 {
2055 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2056 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2057 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_46_L, 0x20, 0x20);
2058 }
2059
2060 /******************************************************************************/
2061 /// Set handshaking mode
2062 /******************************************************************************/
Hal_SC_ip_set_handshaking_md(void * pInstance,MS_U8 u8MD,SCALER_WIN eWindow)2063 void Hal_SC_ip_set_handshaking_md(void *pInstance, MS_U8 u8MD, SCALER_WIN eWindow)
2064 {
2065 UNUSED(pInstance);
2066 u8MD = u8MD;
2067 eWindow = eWindow;
2068 }
2069
2070 //////////////////////////////////
2071 // Set IP1 Test Pattern
Hal_SC_ip_Set_TestPattern(void * pInstance,MS_U16 u16Enable,MS_U32 u32Pattern_type,SCALER_WIN eWindow)2072 void Hal_SC_ip_Set_TestPattern(void *pInstance, MS_U16 u16Enable, MS_U32 u32Pattern_type, SCALER_WIN eWindow)
2073 {
2074 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2075 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2076
2077 if( eWindow == MAIN_WINDOW )
2078 {
2079 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_40_L, u16Enable, 0xFFFF);
2080 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_42_L, (u32Pattern_type >> 8));
2081 if(u16Enable == PURE_COR_IP_PATTERN_VALUE)
2082 {
2083 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_43_L, (u32Pattern_type & 0x000F));
2084 }
2085 }
2086 else
2087 {
2088 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_40_L, u16Enable, 0xFFFF);
2089 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_42_L, (u32Pattern_type >> 8));
2090 if(u16Enable == PURE_COR_IP_PATTERN_VALUE)
2091 {
2092 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_43_L, (u32Pattern_type & 0x000F));
2093 }
2094 }
2095 }
2096
Hal_SC_adc_Set_TestPattern(void * pInstance,MS_U8 u8EnableADCType,MS_U16 u16Ramp)2097 void Hal_SC_adc_Set_TestPattern(void *pInstance,MS_U8 u8EnableADCType,MS_U16 u16Ramp)
2098 {
2099 W2BYTEMSK(REG_ADC_ATOP_75_L, u8EnableADCType,0x0F00);
2100 W2BYTEMSK(REG_ADC_ATOP_78_L, u16Ramp,0x03FF);
2101 W2BYTEMSK(REG_ADC_ATOP_75_L, u16Ramp? BIT(0):0,BIT(0));
2102 }
2103
Hal_SC_ipmux_Set_TestPattern(void * pInstance,MS_BOOL bEnable,MS_U16 u16R_CR_Data,MS_U16 u16G_Y_Data,MS_U16 u16B_CB_Data)2104 void Hal_SC_ipmux_Set_TestPattern(void *pInstance,MS_BOOL bEnable, MS_U16 u16R_CR_Data, MS_U16 u16G_Y_Data ,MS_U16 u16B_CB_Data)
2105 {
2106 W2BYTEMSK(REG_IPMUX_10_L, bEnable? BIT(9):0, BIT(9));
2107 W2BYTEMSK(REG_IPMUX_10_L, bEnable? BIT(12):0, BIT(12));
2108 W2BYTEMSK(REG_IPMUX_10_L, bEnable? BIT(13):0, BIT(13));
2109 W2BYTEMSK(REG_IPMUX_10_L, bEnable? BIT(14):0, BIT(14));
2110
2111 if(bEnable == TRUE)
2112 {
2113 W2BYTEMSK(REG_IPMUX_1D_L, u16R_CR_Data, BMASK(9:0));
2114 W2BYTEMSK(REG_IPMUX_1E_L, u16G_Y_Data, BMASK(9:0));
2115 W2BYTEMSK(REG_IPMUX_1F_L, u16B_CB_Data, BMASK(9:0));
2116 }
2117 }
2118
2119 //////////////////////////////////
2120 // Set OP Test Pattern
Hal_SC_op_Set_TestPattern(void * pInstance,MS_BOOL bMiuLineBuff,MS_BOOL bLineBuffHVSP)2121 void Hal_SC_op_Set_TestPattern(void *pInstance,MS_BOOL bMiuLineBuff, MS_BOOL bLineBuffHVSP)
2122 {
2123 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2124 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2125
2126 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK20_10_L, bMiuLineBuff? BIT(15):0,BIT(15));
2127 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK20_1F_L, bLineBuffHVSP? BIT(10):0,BIT(10));
2128 }
2129
2130 //////////////////////////////////
2131 // Set VOP Test Pattern
Hal_SC_vop_Set_TestPattern(void * pInstance,MS_BOOL bEnable)2132 void Hal_SC_vop_Set_TestPattern(void *pInstance, MS_BOOL bEnable)
2133 {
2134 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2135 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2136
2137 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK10_13_L, bEnable? BIT(8):0,BIT(8));
2138 }
2139
Hal_SC_vop2_Set_TestPattern(void * pInstance,MS_BOOL bEnable,MS_U16 u16R_Data,MS_U16 u16G_Data,MS_U16 u16B_Data)2140 void Hal_SC_vop2_Set_TestPattern(void *pInstance,MS_BOOL bEnable, MS_U16 u16R_Data, MS_U16 u16G_Data ,MS_U16 u16B_Data)
2141 {
2142 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2143 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2144
2145 #if (SUPPORT_OP2_TEST_PATTERN >0)
2146 XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2147 UtopiaResourceGetPrivate(g_pXCResource[E_XC_POOL_ID_INTERNAL_VARIABLE],(void**)(&pXCResourcePrivate));
2148 if(bEnable == TRUE)
2149 {
2150 if(pXCResourcePrivate->stdrvXC_MVideo.bIsOP2TestPattern == FALSE)
2151 {
2152 pXCResourcePrivate->stdrvXC_MVideo.bIsOP2TestPattern = TRUE;
2153 pXCResourcePrivate->stdrvXC_MVideo.u16OP2_color_3x3 = SC_R2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK10_2F_L,0xFFFF);
2154 pXCResourcePrivate->stdrvXC_MVideo.bIsOP2InputSrcDisabled = Hal_SC_Is_InputSource_Disable(pInstance,MAIN_WINDOW) >> 7;
2155 pXCResourcePrivate->stdrvXC_MVideo.bIsOP2Mute = SC_R2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK10_19_L, BIT(1)) >> 1;
2156 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK10_19_L, 0,BIT(1));
2157 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK01_02_L, 0,BIT(7)); //input source disable
2158 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK10_2F_L,0x0000,0xFFFF); //disable 3x3
2159 }
2160 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK25_32_L, u16R_Data, BMASK(9:0));
2161 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK25_33_L, u16G_Data, BMASK(9:0));
2162 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK25_34_L, u16B_Data, BMASK(9:0));
2163 }
2164 else
2165 {
2166 if (pXCResourcePrivate->stdrvXC_MVideo.bIsOP2TestPattern == TRUE)
2167 {
2168 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK10_2F_L, pXCResourcePrivate->stdrvXC_MVideo.u16OP2_color_3x3, 0xFFFF); //restore 3x3
2169 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK10_19_L, (pXCResourcePrivate->stdrvXC_MVideo.bIsOP2Mute<< 1),BIT(1));
2170 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK01_02_L, (pXCResourcePrivate->stdrvXC_MVideo.bIsOP2InputSrcDisabled<< 7),BIT(7));
2171 pXCResourcePrivate->stdrvXC_MVideo.bIsOP2TestPattern = FALSE;
2172 }
2173 }
2174
2175 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK25_30_L, (bEnable), BIT(0));
2176 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK25_31_L, (bEnable), BIT(0));
2177 #endif
2178 }
2179
2180 //////////////////////////////////
2181 // Set MOD Test Pattern
Hal_SC_mod_Set_TestPattern(void * pInstance,MS_BOOL bEnable,MS_U16 u16R_Data,MS_U16 u16G_Data,MS_U16 u16B_Data)2182 void Hal_SC_mod_Set_TestPattern(void *pInstance,MS_BOOL bEnable, MS_U16 u16R_Data, MS_U16 u16G_Data ,MS_U16 u16B_Data)
2183 {
2184 MOD_W2BYTEMSK(REG_MOD_BK00_01_L, bEnable? BIT(15):0,BIT(15));
2185 MOD_W2BYTEMSK(REG_MOD_BK00_02_L, u16R_Data, 0x3FF);
2186 MOD_W2BYTEMSK(REG_MOD_BK00_03_L, u16G_Data, 0x3FF);
2187 MOD_W2BYTEMSK(REG_MOD_BK00_04_L, u16B_Data, 0x3FF);
2188 }
2189
HAL_SC_ip_3DMainSub_IPSync(void * pInstance)2190 void HAL_SC_ip_3DMainSub_IPSync(void *pInstance)
2191 {
2192 MS_U16 value ;
2193 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2194 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2195
2196 //copy bk1 to bk3 and then reset fclk
2197 value = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_08_L);
2198 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_08_L, value);
2199
2200 value = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_09_L);
2201 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_09_L, value);
2202
2203 value = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_21_L);
2204 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_21_L, value);
2205
2206 value = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_24_L);
2207 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_24_L, value);
2208
2209 value = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_25_L);
2210 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_25_L, value);
2211
2212 value = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_26_L);
2213 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_26_L, value);
2214
2215 value = SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_2F_L);
2216 SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK03_2F_L, value);
2217
2218 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, 1 <<6, BIT(6));
2219 MsOS_DelayTask(100);
2220 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_02_L, 0x0, BIT(6));
2221 }
2222
HAL_SC_ip_detect_mode(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)2223 void HAL_SC_ip_detect_mode(void *pInstance,MS_BOOL bEnable, SCALER_WIN eWindow)
2224 {
2225 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2226 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2227 if (eWindow == MAIN_WINDOW)
2228 {
2229 if(bEnable)
2230 {
2231 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK01_29_L,BIT(5), BIT(5)|BIT(4));
2232 }
2233 else
2234 {
2235 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK01_29_L, 0 , BIT(5)|BIT(4));
2236 }
2237 }
2238 else
2239 {
2240 if(bEnable)
2241 {
2242 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK03_29_L,BIT(5), BIT(5)|BIT(4));
2243 }
2244 else
2245 {
2246 SC_W2BYTEMSK(psXCInstPri->u32DeviceID,REG_SC_BK03_29_L, 0 , BIT(5)|BIT(4));
2247 }
2248 }
2249
2250 }
2251
2252 /******************************************************************************/
2253 /// get the h/v sync active
2254 /******************************************************************************/
Hal_SC_ip_get_h_v_sync_active(void * pInstance,SCALER_WIN eWindow)2255 MS_U8 Hal_SC_ip_get_h_v_sync_active(void *pInstance, SCALER_WIN eWindow)
2256 {
2257 MS_U8 u8val;
2258 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2259 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2260
2261 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_33_L, BIT(8), BIT(8));
2262
2263 u8val = (SC_R2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK01_1E_L) & 0xC000) >> 8;
2264
2265 //SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK00_33_L, 0, BIT(8));
2266
2267 return u8val;
2268 }
2269
Hal_SC_set_skp_fd(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)2270 void Hal_SC_set_skp_fd(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
2271 {
2272 }
2273
2274 /******************************************************************************/
2275 /// Get the VGA SOG on or off
2276 /// @param bEnable \b IN: bEnable =1, Turn on the VGA SOG; bEnable =0, Turn off the VGA SOG
2277 /******************************************************************************/
HAL_SC_SetVGASogEn(void * pInstance,MS_BOOL bVGASogEn)2278 void HAL_SC_SetVGASogEn(void *pInstance, MS_BOOL bVGASogEn)
2279 {
2280 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2281 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2282 XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2283 UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2284 pXCResourcePrivate->sthal_IP._bSetVGASogEn = bVGASogEn;
2285 }
2286
2287 /******************************************************************************/
2288 /// Get the VGA SOG on or off
2289 /// @param u8 \b IN: bEnable =1, Turn on the VGA SOG; bEnable =0, Turn off the VGA SOG
2290 /******************************************************************************/
HAL_SC_GetVGASogEn(void * pInstance)2291 MS_BOOL HAL_SC_GetVGASogEn(void *pInstance)
2292 {
2293 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2294 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2295 XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2296 UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2297 return pXCResourcePrivate->sthal_IP._bSetVGASogEn;
2298 }
2299
2300 /******************************************************************************/
2301 /// Set the VGA SOG Detect Status
2302 /******************************************************************************/
HAL_SC_SetSogDetectStatus(void * pInstance,MS_U8 u8SogDetectStatus)2303 void HAL_SC_SetSogDetectStatus(void *pInstance, MS_U8 u8SogDetectStatus)
2304 {
2305 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2306 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2307 XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2308 UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2309 pXCResourcePrivate->sthal_IP._u8SetSogDetectStatus = u8SogDetectStatus;
2310 }
2311
2312 /******************************************************************************/
2313 /// Get the VGA SOG Detect Status
2314 /******************************************************************************/
HAL_SC_GetSogDetectStatus(void * pInstance)2315 MS_U8 HAL_SC_GetSogDetectStatus(void *pInstance)
2316 {
2317 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2318 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2319 XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
2320 UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
2321 return pXCResourcePrivate->sthal_IP._u8SetSogDetectStatus;
2322 }
2323
2324 /******************************************************************************/
2325 ///This function will return input frame rate
2326 ///@return
2327 ///- MS_U16 Vertical total
2328 /******************************************************************************/
HAL_SC_ip_get_verticalperiod(void * pInstance,SCALER_WIN eWindow)2329 MS_U32 HAL_SC_ip_get_verticalperiod(void *pInstance, SCALER_WIN eWindow)
2330 {
2331 MS_U32 u32verticalperiod=0;
2332 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2333 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2334
2335 if(eWindow == MAIN_WINDOW)
2336 {
2337 u32verticalperiod = SC_R4BYTE( psXCInstPri->u32DeviceID, REG_SC_BK01_3B_L );
2338 }
2339 else
2340 {
2341 u32verticalperiod = SC_R4BYTE( psXCInstPri->u32DeviceID, REG_SC_BK03_3B_L );
2342 }
2343
2344 return u32verticalperiod;
2345 }
2346
2347 /******************************************************************************/
2348 ///Set xc fd mask on/off by window
2349 /******************************************************************************/
HAL_SC_ip_Set_FD_Mask_ByWin(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)2350 void HAL_SC_ip_Set_FD_Mask_ByWin(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
2351 {
2352 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2353 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2354 if(eWindow == MAIN_WINDOW)
2355 {
2356 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_26_L, (bEnable?BIT(8):0), BIT(8));
2357 }
2358 else
2359 {
2360 SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_26_L, (bEnable?BIT(8):0), BIT(8));
2361 }
2362
2363 #if (HW_DESIGN_4K2K_VER == 4)
2364 // for FD_mask can control FRCM write
2365 Hal_SC_set_frcm_to_FD_mask(pInstance, bEnable, eWindow);
2366 #endif
2367 }
2368
2369 /******************************************************************************/
2370 ///Get xc fd mask by window
2371 ///@return MS_BOOL fd mask on/off
2372 /******************************************************************************/
HAL_SC_ip_Get_FD_Mask_ByWin(void * pInstance,SCALER_WIN eWindow)2373 MS_BOOL HAL_SC_ip_Get_FD_Mask_ByWin(void *pInstance, SCALER_WIN eWindow)
2374 {
2375 XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
2376 UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
2377 if(eWindow == MAIN_WINDOW)
2378 {
2379 if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK01_26_L, BIT(8)))
2380 return TRUE;
2381 else
2382 return FALSE;
2383 }
2384 else
2385 {
2386 if(SC_R2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK03_26_L, BIT(8)))
2387 return TRUE;
2388 else
2389 return FALSE;
2390 }
2391 }
2392
2393 /******************************************************************************/
2394 ///Get fd mask read back status from decoder
2395 ///@return MS_BOOL fd mask on/off
2396 /******************************************************************************/
HAL_SC_ip_Get_FD_Mask_Status(void * pInstance,SCALER_WIN eWindow)2397 MS_BOOL HAL_SC_ip_Get_FD_Mask_Status(void *pInstance, SCALER_WIN eWindow)
2398 {
2399 return TRUE;
2400 }
2401
2402 /******************************************************************************/
2403 ///Set Force IP interlace when it is progressive timing
2404 ///@return EN_FORCEi_SUPPORT_TYPE ForceI_SW/ForceI_HW/ForceI_Auto
2405 /******************************************************************************/
HAL_SC_ip_get_forceI_support_type(void * pInstance)2406 EN_FORCEi_SUPPORT_TYPE HAL_SC_ip_get_forceI_support_type(void *pInstance)
2407 {
2408 return ForceI_HW;
2409 }
2410
2411 /******************************************************************************/
2412 ///Set H/V sync status check enable/disable
2413 ///@return
2414 /******************************************************************************/
HAL_SC_ip_set_hv_sync_status_check(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)2415 void HAL_SC_ip_set_hv_sync_status_check(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
2416 {
2417 if (eWindow == MAIN_WINDOW)
2418 {
2419 SC_W2BYTEMSK(0, REG_SC_BK01_48_L, bEnable << 6, BIT(6));
2420 }
2421 else
2422 {
2423 SC_W2BYTEMSK(0, REG_SC_BK03_48_L, bEnable << 6, BIT(6));
2424 }
2425 }
2426
2427 /******************************************************************************/
2428 ///Set new mode interlaced detect enable/disable
2429 ///@return
2430 /******************************************************************************/
HAL_SC_ip_set_new_mode_interlaced_detect(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)2431 void HAL_SC_ip_set_new_mode_interlaced_detect(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
2432 {
2433 if (eWindow == MAIN_WINDOW)
2434 {
2435 SC_W2BYTEMSK(0, REG_SC_BK01_48_L, bEnable, BIT(0));
2436 }
2437 else
2438 {
2439 SC_W2BYTEMSK(0, REG_SC_BK03_48_L, bEnable, BIT(0));
2440 }
2441 }
2442
2443 /******************************************************************************/
2444 ///Set H/V sync source select for mode detection
2445 ///@return
2446 /******************************************************************************/
HAL_SC_ip_set_hv_sync_source_select(void * pInstance,MS_U8 u8Source,SCALER_WIN eWindow)2447 void HAL_SC_ip_set_hv_sync_source_select(void *pInstance, MS_U8 u8Source, SCALER_WIN eWindow)
2448 {
2449 if (eWindow == MAIN_WINDOW)
2450 {
2451 SC_W2BYTEMSK(0, REG_SC_BK01_48_L, (u8Source & 0x3) << 1, BIT(2)|BIT(1));
2452 }
2453 else
2454 {
2455 SC_W2BYTEMSK(0, REG_SC_BK03_48_L, (u8Source & 0x3) << 1, BIT(2)|BIT(1));
2456 }
2457 }
2458
2459 /******************************************************************************/
2460 ///Set V total count by pixel clock enable/disable
2461 ///@return
2462 /******************************************************************************/
HAL_SC_ip_set_vtotal_count_by_pixel_clock(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)2463 void HAL_SC_ip_set_vtotal_count_by_pixel_clock(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow)
2464 {
2465 if (eWindow == MAIN_WINDOW)
2466 {
2467 SC_W2BYTEMSK(0, REG_SC_BK01_48_L, bEnable << 3, BIT(3));
2468 }
2469 else
2470 {
2471 SC_W2BYTEMSK(0, REG_SC_BK03_48_L, bEnable << 3, BIT(3));
2472 }
2473 }
2474
2475 /******************************************************************************/
2476 ///Set V sync invert
2477 ///@return
2478 /******************************************************************************/
HAL_SC_ip_set_vsync_invert(void * pInstance,MS_BOOL bInvert,SCALER_WIN eWindow)2479 void HAL_SC_ip_set_vsync_invert(void *pInstance, MS_BOOL bInvert, SCALER_WIN eWindow)
2480 {
2481 if (eWindow == MAIN_WINDOW)
2482 {
2483 SC_W2BYTEMSK(0, REG_SC_BK01_48_L, bInvert << 4, BIT(4));
2484 }
2485 else
2486 {
2487 SC_W2BYTEMSK(0, REG_SC_BK03_48_L, bInvert << 4, BIT(4));
2488 }
2489 }
2490
2491 /******************************************************************************/
2492 ///Set H sync invert
2493 ///@return
2494 /******************************************************************************/
HAL_SC_ip_set_hsync_invert(void * pInstance,MS_BOOL bInvert,SCALER_WIN eWindow)2495 void HAL_SC_ip_set_hsync_invert(void *pInstance, MS_BOOL bInvert, SCALER_WIN eWindow)
2496 {
2497 if (eWindow == MAIN_WINDOW)
2498 {
2499 SC_W2BYTEMSK(0, REG_SC_BK01_48_L, bInvert << 5, BIT(5));
2500 }
2501 else
2502 {
2503 SC_W2BYTEMSK(0, REG_SC_BK03_48_L, bInvert << 5, BIT(5));
2504 }
2505 }
2506
2507