1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi // Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi // No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi // modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi // supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi // Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi // Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi // obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi // such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi // MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi // confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi // third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi // kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi // without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi // intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi // and in conformity with any international standard. You agree to waive any
38*53ee8cc1Swenshuai.xi // claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi // incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi // In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi // consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi // revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi // You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi // even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi // request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi // parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi // services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi // MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi // ("Services").
52*53ee8cc1Swenshuai.xi // You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi // writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi // disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi // or otherwise:
58*53ee8cc1Swenshuai.xi // (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi // mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi // (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi // including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi // of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi // (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi // of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi // Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi // settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi // Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi // with the said Rules.
72*53ee8cc1Swenshuai.xi // The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi // be English.
74*53ee8cc1Swenshuai.xi // The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi //==============================================================================
95*53ee8cc1Swenshuai.xi // [mhal_sc.c]
96*53ee8cc1Swenshuai.xi // Date: 20081203
97*53ee8cc1Swenshuai.xi // Descriptions: Add a new layer for HW setting
98*53ee8cc1Swenshuai.xi //==============================================================================
99*53ee8cc1Swenshuai.xi #define MHAL_SC_C
100*53ee8cc1Swenshuai.xi
101*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
102*53ee8cc1Swenshuai.xi #include <asm/div64.h>
103*53ee8cc1Swenshuai.xi #include <linux/slab.h>
104*53ee8cc1Swenshuai.xi #else
105*53ee8cc1Swenshuai.xi #define do_div(x,y) ((x)/=(y))
106*53ee8cc1Swenshuai.xi #endif
107*53ee8cc1Swenshuai.xi
108*53ee8cc1Swenshuai.xi // Common Definition
109*53ee8cc1Swenshuai.xi #include "MsCommon.h"
110*53ee8cc1Swenshuai.xi #include "MsIRQ.h"
111*53ee8cc1Swenshuai.xi #include "MsOS.h"
112*53ee8cc1Swenshuai.xi #include "mhal_xc_chip_config.h"
113*53ee8cc1Swenshuai.xi #include "utopia.h"
114*53ee8cc1Swenshuai.xi #include "xc_hwreg_utility2.h"
115*53ee8cc1Swenshuai.xi #include "xc_Analog_Reg.h"
116*53ee8cc1Swenshuai.xi #include "drvXC_IOPort.h"
117*53ee8cc1Swenshuai.xi #include "apiXC.h"
118*53ee8cc1Swenshuai.xi #include "apiXC_DWIN.h"
119*53ee8cc1Swenshuai.xi #include "apiXC_PCMonitor.h"
120*53ee8cc1Swenshuai.xi #include "drv_sc_ip.h"
121*53ee8cc1Swenshuai.xi #include "mvideo_context.h"
122*53ee8cc1Swenshuai.xi #include "mhal_sc.h"
123*53ee8cc1Swenshuai.xi #include "mhal_menuload.h"
124*53ee8cc1Swenshuai.xi #include "halCHIP.h"
125*53ee8cc1Swenshuai.xi #include "drv_sc_menuload.h"
126*53ee8cc1Swenshuai.xi #include "drv_sc_isr.h"
127*53ee8cc1Swenshuai.xi #include "drv_sc_DIP_scaling.h"
128*53ee8cc1Swenshuai.xi #include "mhal_dip.h"
129*53ee8cc1Swenshuai.xi #include "mhal_mux.h"
130*53ee8cc1Swenshuai.xi #include "hwreg_ipmux.h"
131*53ee8cc1Swenshuai.xi #include "drvMIU.h"
132*53ee8cc1Swenshuai.xi #include "mdrv_sc_dynamicscaling.h"
133*53ee8cc1Swenshuai.xi #ifdef UTOPIA_V2
134*53ee8cc1Swenshuai.xi #include "XC_DWIN_private.h"
135*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
136*53ee8cc1Swenshuai.xi #endif
137*53ee8cc1Swenshuai.xi
138*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
139*53ee8cc1Swenshuai.xi #include <linux/string.h>
140*53ee8cc1Swenshuai.xi #else
141*53ee8cc1Swenshuai.xi #include <string.h>
142*53ee8cc1Swenshuai.xi #endif
143*53ee8cc1Swenshuai.xi
144*53ee8cc1Swenshuai.xi #define SC_DBG(x) //x
145*53ee8cc1Swenshuai.xi #define FPLL_DBG(x) //x
146*53ee8cc1Swenshuai.xi #define UHD_WIDTH 3840UL
147*53ee8cc1Swenshuai.xi #define FHD_WIDTH 1920UL
148*53ee8cc1Swenshuai.xi #ifdef UTOPIA_V2
149*53ee8cc1Swenshuai.xi #define g_DIPSrcInfo pDipResPri->g_DIPSrcInfo
150*53ee8cc1Swenshuai.xi #endif
151*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
152*53ee8cc1Swenshuai.xi #define H_DIP_PostScalingRatio(Input, Output) { u64_result = ((MS_U64)(Input)) * 1048576ul;do_div(u64_result,(Output));}
153*53ee8cc1Swenshuai.xi #define V_DIP_PostScalingRatio(Input, Output) { u64_result = ((MS_U64)(Input)) * 1048576ul;do_div(u64_result,(Output));}
154*53ee8cc1Swenshuai.xi #else
155*53ee8cc1Swenshuai.xi #define H_DIP_PostScalingRatio(Input, Output) ((MS_U32)( ((MS_U64)(Input)) * 1048576ul / (Output)))
156*53ee8cc1Swenshuai.xi #define V_DIP_PostScalingRatio(Input, Output) ((MS_U32)( ((MS_U64)(Input)) * 1048576ul / (Output)))
157*53ee8cc1Swenshuai.xi #endif
158*53ee8cc1Swenshuai.xi
159*53ee8cc1Swenshuai.xi //TrustZone
160*53ee8cc1Swenshuai.xi #define REG_TZPC_NONPM_BASE 0x123900UL
161*53ee8cc1Swenshuai.xi #define REG_TZPC_NONPM_DIP (REG_TZPC_NONPM_BASE + (0x74<<1) )
162*53ee8cc1Swenshuai.xi #define REG_TZPC_NONPM_DWIN0 (REG_TZPC_NONPM_BASE + (0x79<<1) )
163*53ee8cc1Swenshuai.xi
164*53ee8cc1Swenshuai.xi #define new_chakra
165*53ee8cc1Swenshuai.xi static MS_U8 DipWBufCnt=0,Dwin0WBufCnt=0,Dwin1WBufCnt=0;
166*53ee8cc1Swenshuai.xi static SCALER_DIP_SOURCE_TYPE DipSource = SCALER_DIP_SOURCE_TYPE_OP_SUB;
167*53ee8cc1Swenshuai.xi static SCALER_DIP_SOURCE_TYPE Dwin0Source = SCALER_DIP_SOURCE_TYPE_OP_SUB;
168*53ee8cc1Swenshuai.xi static SCALER_DIP_SOURCE_TYPE Dwin1Source = SCALER_DIP_SOURCE_TYPE_OP_SUB;
169*53ee8cc1Swenshuai.xi static MS_BOOL bPIPmode = FALSE;
170*53ee8cc1Swenshuai.xi static InterruptCb pDipIntCb;
171*53ee8cc1Swenshuai.xi static InterruptCb pDwin0IntCb;
172*53ee8cc1Swenshuai.xi static InterruptCb pDwin1IntCb;
173*53ee8cc1Swenshuai.xi static MS_BOOL bDipIsr = FALSE,bDwin0Isr = FALSE,bDwin1Isr = FALSE,bDIPRotation = FALSE,bAttached = FALSE;
174*53ee8cc1Swenshuai.xi static EN_DRV_XC_DWIN_DATA_FMT DipRFmt;
175*53ee8cc1Swenshuai.xi static MS_U16 DipSrcWidth = 0,Dwin0SrcWidth = 0,Dwin1SrcWidth = 0;
176*53ee8cc1Swenshuai.xi static MS_BOOL bDipHMirror = FALSE,bDWIN0HMirror = FALSE,bDWIN1HMirror = FALSE;
177*53ee8cc1Swenshuai.xi static MS_BOOL bDipUVSwap = FALSE,bDWIN0UVSwap = FALSE,bDWIN1UVSwap = FALSE;
178*53ee8cc1Swenshuai.xi static MS_BOOL bDipYCSwap = FALSE,bDWIN0YCSwap = FALSE,bDWIN1YCSwap = FALSE;
179*53ee8cc1Swenshuai.xi static MS_BOOL bDipR2Y = FALSE,bDwin0R2Y = FALSE,bDwin1R2Y = FALSE;
180*53ee8cc1Swenshuai.xi static EN_DRV_XC_DWIN_DATA_FMT DipFmt,Dwin0Fmt,Dwin1Fmt;
181*53ee8cc1Swenshuai.xi static SCALER_DIP_WIN DIPRotation = MAX_DIP_WINDOW;
182*53ee8cc1Swenshuai.xi //==============================================================================
183*53ee8cc1Swenshuai.xi //==============================================================================
184*53ee8cc1Swenshuai.xi #include "drvCMDQ.h"
185*53ee8cc1Swenshuai.xi #define CMDQ_WRITE_RIU_COMMAND (0x57)
186*53ee8cc1Swenshuai.xi #define MAX_CMDQ_NUM 1024
187*53ee8cc1Swenshuai.xi #define BANK_REG_MAX 0x80
188*53ee8cc1Swenshuai.xi
189*53ee8cc1Swenshuai.xi static MS_U32 g_u16Ptr_CMQ[MAX_DIP_WINDOW] = {0};
190*53ee8cc1Swenshuai.xi static CAF_Struct DIP_CMDQ_BUFF [MAX_CMDQ_NUM];
191*53ee8cc1Swenshuai.xi static CAF_Struct DWIN0_CMDQ_BUFF [MAX_CMDQ_NUM];
192*53ee8cc1Swenshuai.xi static CAF_Struct DWIN1_CMDQ_BUFF [MAX_CMDQ_NUM];
193*53ee8cc1Swenshuai.xi static MS_U16 u16RegBK34Table[BANK_REG_MAX]= {0};
194*53ee8cc1Swenshuai.xi static MS_U16 u16RegBK36Table[BANK_REG_MAX]= {0};
195*53ee8cc1Swenshuai.xi static MS_U16 cmdq_ready_value,cmdq_wait_value;
196*53ee8cc1Swenshuai.xi
197*53ee8cc1Swenshuai.xi
198*53ee8cc1Swenshuai.xi MS_BOOL g_bCMDQ_Enable[MAX_DIP_WINDOW] = {FALSE};
199*53ee8cc1Swenshuai.xi MS_BOOL g_bCMDQ_Init = FALSE;
200*53ee8cc1Swenshuai.xi MS_U32 g_u32Wait_Reg[MAX_DIP_WINDOW] = {0x120332,0x120334,0x120338};
201*53ee8cc1Swenshuai.xi
202*53ee8cc1Swenshuai.xi static MS_S32 g_s32DIPCMDQ_Init_Mutex[MAX_DIP_WINDOW] = {0};
203*53ee8cc1Swenshuai.xi
204*53ee8cc1Swenshuai.xi #define DIPCMDQ_INIT_MUTEX_LOCK(eWindow) MsOS_ObtainMutex(g_s32DIPCMDQ_Init_Mutex[eWindow],MSOS_WAIT_FOREVER)
205*53ee8cc1Swenshuai.xi #define DIPCMDQ_INIT_MUTEX_UNLOCK(eWindow) MsOS_ReleaseMutex(g_s32DIPCMDQ_Init_Mutex[eWindow])
206*53ee8cc1Swenshuai.xi #define DIPCMDQ_INIT_MUTEX_DELETE(eWindow) MsOS_DeleteMutex(g_s32DIPCMDQ_Init_Mutex[eWindow])
207*53ee8cc1Swenshuai.xi
208*53ee8cc1Swenshuai.xi #define XIU_BITMASK 0x10012E //Bank 0x1001_17[0] = 1 -' enable bit operation
209*53ee8cc1Swenshuai.xi
210*53ee8cc1Swenshuai.xi #define DIP_WAIT()\
211*53ee8cc1Swenshuai.xi ({\
212*53ee8cc1Swenshuai.xi if (g_bCMDQ_Enable[eWindow] == TRUE)\
213*53ee8cc1Swenshuai.xi HAL_XC_DIP_CMDQWaitCommand(eWindow);\
214*53ee8cc1Swenshuai.xi })
215*53ee8cc1Swenshuai.xi
216*53ee8cc1Swenshuai.xi #define DIP_W2BYTE(u32Id,u32Reg,u16Val)\
217*53ee8cc1Swenshuai.xi ({\
218*53ee8cc1Swenshuai.xi if((u32Reg&0xff00) == 0x3400)\
219*53ee8cc1Swenshuai.xi {\
220*53ee8cc1Swenshuai.xi u16RegBK34Table[((u32Reg&0xff)>>1)] = u16Val;\
221*53ee8cc1Swenshuai.xi }\
222*53ee8cc1Swenshuai.xi else if((u32Reg&0xff00) == 0x3600)\
223*53ee8cc1Swenshuai.xi {\
224*53ee8cc1Swenshuai.xi u16RegBK36Table[((u32Reg&0xff)>>1)] = u16Val;\
225*53ee8cc1Swenshuai.xi }\
226*53ee8cc1Swenshuai.xi if (g_bCMDQ_Enable[eWindow] == TRUE)\
227*53ee8cc1Swenshuai.xi CMDQ_DIP_W2BYTE(u32Id, u32Reg, u16Val, eWindow);\
228*53ee8cc1Swenshuai.xi else\
229*53ee8cc1Swenshuai.xi SC_W2BYTE(u32Id, u32Reg, u16Val);\
230*53ee8cc1Swenshuai.xi })
231*53ee8cc1Swenshuai.xi
232*53ee8cc1Swenshuai.xi #define MDrv_DIP_Read2Byte(u32Reg)\
233*53ee8cc1Swenshuai.xi ({\
234*53ee8cc1Swenshuai.xi MDrv_Read2Byte(u32Reg);\
235*53ee8cc1Swenshuai.xi })
236*53ee8cc1Swenshuai.xi
237*53ee8cc1Swenshuai.xi #define DIP_W4BYTE(u32Id,u32Reg,u32Val)\
238*53ee8cc1Swenshuai.xi ({\
239*53ee8cc1Swenshuai.xi if((u32Reg&0xff00) == 0x3400)\
240*53ee8cc1Swenshuai.xi {\
241*53ee8cc1Swenshuai.xi u16RegBK34Table[((u32Reg&0xff)>>1)] = u32Val&0x00FF;\
242*53ee8cc1Swenshuai.xi u16RegBK34Table[(((u32Reg+2)&0xff)>>1)] = (u32Val&0xFF00)>>16;\
243*53ee8cc1Swenshuai.xi }\
244*53ee8cc1Swenshuai.xi else if((u32Reg&0xff00) == 0x3600)\
245*53ee8cc1Swenshuai.xi {\
246*53ee8cc1Swenshuai.xi u16RegBK36Table[((u32Reg&0xff)>>1)] = u32Val&0x00FF;\
247*53ee8cc1Swenshuai.xi u16RegBK36Table[(((u32Reg+2)&0xff)>>1)] = (u32Val&0xFF00)>>16;\
248*53ee8cc1Swenshuai.xi }\
249*53ee8cc1Swenshuai.xi if (g_bCMDQ_Enable[eWindow] == TRUE)\
250*53ee8cc1Swenshuai.xi CMDQ_DIP_W4BYTE(u32Id, u32Reg, u32Val, eWindow);\
251*53ee8cc1Swenshuai.xi else\
252*53ee8cc1Swenshuai.xi SC_W4BYTE(u32Id, u32Reg, u32Val);\
253*53ee8cc1Swenshuai.xi })
254*53ee8cc1Swenshuai.xi
255*53ee8cc1Swenshuai.xi #define DIP_W2BYTEMSK(u32Id,u32Reg,u16Val,u16Mask)\
256*53ee8cc1Swenshuai.xi ({\
257*53ee8cc1Swenshuai.xi if((u32Reg&0xff00) == 0x3400)\
258*53ee8cc1Swenshuai.xi {\
259*53ee8cc1Swenshuai.xi u16RegBK34Table[((u32Reg&0xff)>>1)] &= u16Mask;\
260*53ee8cc1Swenshuai.xi u16RegBK34Table[((u32Reg&0xff)>>1)] |= u16Val;\
261*53ee8cc1Swenshuai.xi }\
262*53ee8cc1Swenshuai.xi else if((u32Reg&0xff00) == 0x3600)\
263*53ee8cc1Swenshuai.xi {\
264*53ee8cc1Swenshuai.xi u16RegBK36Table[((u32Reg&0xff)>>1)] &= u16Mask;\
265*53ee8cc1Swenshuai.xi u16RegBK36Table[((u32Reg&0xff)>>1)] |= u16Val;\
266*53ee8cc1Swenshuai.xi }\
267*53ee8cc1Swenshuai.xi if (g_bCMDQ_Enable[eWindow] == TRUE)\
268*53ee8cc1Swenshuai.xi CMDQ_DIP_W2BYTEMSK(u32Id, u32Reg, u16Val, u16Mask, eWindow);\
269*53ee8cc1Swenshuai.xi else\
270*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(u32Id, u32Reg, u16Val, u16Mask);\
271*53ee8cc1Swenshuai.xi })
272*53ee8cc1Swenshuai.xi
273*53ee8cc1Swenshuai.xi #define MDrv_DIP_WriteByteMask(u32Reg,u8Val,u8Msk)\
274*53ee8cc1Swenshuai.xi ({\
275*53ee8cc1Swenshuai.xi if (g_bCMDQ_Enable[eWindow] == TRUE)\
276*53ee8cc1Swenshuai.xi MDrv_CMDQ_WriteByteMask(u32Reg, u8Val, u8Msk, eWindow);\
277*53ee8cc1Swenshuai.xi else\
278*53ee8cc1Swenshuai.xi MDrv_WriteByteMask(u32Reg, u8Val, u8Msk);\
279*53ee8cc1Swenshuai.xi })
280*53ee8cc1Swenshuai.xi
281*53ee8cc1Swenshuai.xi #define MDrv_DIP_Write2ByteMask(u32Reg,u16Val,u16Mask)\
282*53ee8cc1Swenshuai.xi ({\
283*53ee8cc1Swenshuai.xi if (g_bCMDQ_Enable[eWindow] == TRUE)\
284*53ee8cc1Swenshuai.xi MDrv_CMDQ_Write2ByteMask(u32Reg, u16Val, u16Mask, eWindow);\
285*53ee8cc1Swenshuai.xi else\
286*53ee8cc1Swenshuai.xi MDrv_Write2ByteMask(u32Reg, u16Val, u16Mask);\
287*53ee8cc1Swenshuai.xi })
288*53ee8cc1Swenshuai.xi
289*53ee8cc1Swenshuai.xi #define MDrv_DIP_WriteRegBit(u32Reg,bEnable,u8Mask)\
290*53ee8cc1Swenshuai.xi ({\
291*53ee8cc1Swenshuai.xi if (g_bCMDQ_Enable[eWindow] == TRUE)\
292*53ee8cc1Swenshuai.xi MDrv_CMDQ_WriteRegBit(u32Reg, bEnable, u8Mask, eWindow);\
293*53ee8cc1Swenshuai.xi else\
294*53ee8cc1Swenshuai.xi MDrv_WriteRegBit(u32Reg, bEnable, u8Mask);\
295*53ee8cc1Swenshuai.xi })
296*53ee8cc1Swenshuai.xi
DIP_R2BYTE(MS_U32 u32Id,MS_U32 u32Reg,SCALER_DIP_WIN eWindow)297*53ee8cc1Swenshuai.xi static MS_U16 DIP_R2BYTE(MS_U32 u32Id,MS_U32 u32Reg,SCALER_DIP_WIN eWindow)
298*53ee8cc1Swenshuai.xi {
299*53ee8cc1Swenshuai.xi MS_U16 u16val=0;
300*53ee8cc1Swenshuai.xi MS_U32 u32idx=(u32Reg&0xff)>>1;
301*53ee8cc1Swenshuai.xi
302*53ee8cc1Swenshuai.xi if(g_bCMDQ_Enable[eWindow] == TRUE)
303*53ee8cc1Swenshuai.xi {
304*53ee8cc1Swenshuai.xi if((u32Reg&0xff00)==0x3400)
305*53ee8cc1Swenshuai.xi {
306*53ee8cc1Swenshuai.xi u16val=u16RegBK34Table[u32idx];
307*53ee8cc1Swenshuai.xi }
308*53ee8cc1Swenshuai.xi else if((u32Reg&0xff00)==0x3600)
309*53ee8cc1Swenshuai.xi {
310*53ee8cc1Swenshuai.xi u16val=u16RegBK36Table[u32idx];
311*53ee8cc1Swenshuai.xi }
312*53ee8cc1Swenshuai.xi }
313*53ee8cc1Swenshuai.xi else
314*53ee8cc1Swenshuai.xi {
315*53ee8cc1Swenshuai.xi u16val=SC_R2BYTE(u32Id, u32Reg);
316*53ee8cc1Swenshuai.xi }
317*53ee8cc1Swenshuai.xi return u16val;
318*53ee8cc1Swenshuai.xi }
319*53ee8cc1Swenshuai.xi
DIP_R4BYTE(MS_U32 u32Id,MS_U32 u32Reg,SCALER_DIP_WIN eWindow)320*53ee8cc1Swenshuai.xi static MS_U32 DIP_R4BYTE(MS_U32 u32Id, MS_U32 u32Reg,SCALER_DIP_WIN eWindow)
321*53ee8cc1Swenshuai.xi {
322*53ee8cc1Swenshuai.xi MS_U32 u32val=0;
323*53ee8cc1Swenshuai.xi MS_U32 u32idx=(u32Reg&0xff)>>1;
324*53ee8cc1Swenshuai.xi
325*53ee8cc1Swenshuai.xi if(g_bCMDQ_Enable[eWindow] == TRUE)
326*53ee8cc1Swenshuai.xi {
327*53ee8cc1Swenshuai.xi if((u32Reg&0xff00)==0x3400)
328*53ee8cc1Swenshuai.xi {
329*53ee8cc1Swenshuai.xi u32val=(u16RegBK34Table[u32idx])|(u16RegBK34Table[u32idx+1]<<16);
330*53ee8cc1Swenshuai.xi }
331*53ee8cc1Swenshuai.xi else if((u32Reg&0xff00)==0x3600)
332*53ee8cc1Swenshuai.xi {
333*53ee8cc1Swenshuai.xi u32val=(u16RegBK36Table[u32idx])|(u16RegBK36Table[u32idx+1]<<16);
334*53ee8cc1Swenshuai.xi }
335*53ee8cc1Swenshuai.xi }
336*53ee8cc1Swenshuai.xi else
337*53ee8cc1Swenshuai.xi {
338*53ee8cc1Swenshuai.xi u32val=SC_R4BYTE(u32Id, u32Reg);
339*53ee8cc1Swenshuai.xi }
340*53ee8cc1Swenshuai.xi return u32val;
341*53ee8cc1Swenshuai.xi }
342*53ee8cc1Swenshuai.xi
DIP_R2BYTEMSK(MS_U32 u32Id,MS_U32 u32Reg,MS_U16 u16Mask,SCALER_DIP_WIN eWindow)343*53ee8cc1Swenshuai.xi static MS_U16 DIP_R2BYTEMSK(MS_U32 u32Id, MS_U32 u32Reg, MS_U16 u16Mask,SCALER_DIP_WIN eWindow)
344*53ee8cc1Swenshuai.xi {
345*53ee8cc1Swenshuai.xi MS_U16 u16val=0;
346*53ee8cc1Swenshuai.xi MS_U32 u32idx=(u32Reg&0xff)>>1;
347*53ee8cc1Swenshuai.xi if(g_bCMDQ_Enable[eWindow] == TRUE)
348*53ee8cc1Swenshuai.xi {
349*53ee8cc1Swenshuai.xi if((u32Reg&0xff00)==0x3400)
350*53ee8cc1Swenshuai.xi {
351*53ee8cc1Swenshuai.xi u16val=u16RegBK34Table[u32idx]&u16Mask;
352*53ee8cc1Swenshuai.xi }
353*53ee8cc1Swenshuai.xi else if((u32Reg&0xff00)==0x3600)
354*53ee8cc1Swenshuai.xi {
355*53ee8cc1Swenshuai.xi u16val=u16RegBK36Table[u32idx]&u16Mask;
356*53ee8cc1Swenshuai.xi }
357*53ee8cc1Swenshuai.xi }
358*53ee8cc1Swenshuai.xi else
359*53ee8cc1Swenshuai.xi {
360*53ee8cc1Swenshuai.xi u16val=SC_R2BYTEMSK(u32Id, u32Reg, u16Mask);
361*53ee8cc1Swenshuai.xi }
362*53ee8cc1Swenshuai.xi return u16val;
363*53ee8cc1Swenshuai.xi }
364*53ee8cc1Swenshuai.xi
HAL_XC_DIP_CMDQWaitCommand(SCALER_DIP_WIN eWindow)365*53ee8cc1Swenshuai.xi static MS_BOOL HAL_XC_DIP_CMDQWaitCommand(SCALER_DIP_WIN eWindow)
366*53ee8cc1Swenshuai.xi {
367*53ee8cc1Swenshuai.xi #if DIP_CMDQ_ENABLE
368*53ee8cc1Swenshuai.xi #if !(defined(MSOS_TYPE_LINUX_KERNEL))
369*53ee8cc1Swenshuai.xi if (g_u16Ptr_CMQ[eWindow] >= MAX_CMDQ_NUM)
370*53ee8cc1Swenshuai.xi {
371*53ee8cc1Swenshuai.xi DIP_H_ERR("[%s]: eWindow %d CMDQ Buffer is Full,g_u16Ptr_CMQ[%ld]\n", __FUNCTION__,eWindow,g_u16Ptr_CMQ[eWindow]);
372*53ee8cc1Swenshuai.xi return FALSE;
373*53ee8cc1Swenshuai.xi }
374*53ee8cc1Swenshuai.xi
375*53ee8cc1Swenshuai.xi if(eWindow == DIP_WINDOW)
376*53ee8cc1Swenshuai.xi {
377*53ee8cc1Swenshuai.xi MDrv_CMDQ_Gen_WaitTrigger_Bus_Command(&(DIP_CMDQ_BUFF[g_u16Ptr_CMQ[eWindow]]),SCALAR_SC2CMDQ_TRIG_2,FALSE);
378*53ee8cc1Swenshuai.xi }
379*53ee8cc1Swenshuai.xi else if(eWindow == DWIN0_WINDOW)
380*53ee8cc1Swenshuai.xi {
381*53ee8cc1Swenshuai.xi MDrv_CMDQ_Gen_WaitTrigger_Bus_Command(&(DWIN0_CMDQ_BUFF[g_u16Ptr_CMQ[eWindow]]),SCALAR_SC2CMDQ_TRIG_2,FALSE);
382*53ee8cc1Swenshuai.xi }
383*53ee8cc1Swenshuai.xi else if(eWindow == DWIN1_WINDOW)
384*53ee8cc1Swenshuai.xi {
385*53ee8cc1Swenshuai.xi MDrv_CMDQ_Gen_WaitTrigger_Bus_Command(&(DWIN1_CMDQ_BUFF[g_u16Ptr_CMQ[eWindow]]),SCALAR_SC2CMDQ_TRIG_2,FALSE);
386*53ee8cc1Swenshuai.xi }
387*53ee8cc1Swenshuai.xi g_u16Ptr_CMQ[eWindow]++;
388*53ee8cc1Swenshuai.xi #endif
389*53ee8cc1Swenshuai.xi #endif
390*53ee8cc1Swenshuai.xi return TRUE;
391*53ee8cc1Swenshuai.xi }
392*53ee8cc1Swenshuai.xi
HAL_XC_DIP_CMDQPushCommand(MS_U8 operation,MS_U32 destionation_address,MS_U16 destionation_value,MS_U16 mask,SCALER_DIP_WIN eWindow)393*53ee8cc1Swenshuai.xi static MS_BOOL HAL_XC_DIP_CMDQPushCommand(MS_U8 operation, MS_U32 destionation_address, MS_U16 destionation_value, MS_U16 mask,SCALER_DIP_WIN eWindow)
394*53ee8cc1Swenshuai.xi {
395*53ee8cc1Swenshuai.xi MS_U16 idx=(destionation_address&0xff)>>1;
396*53ee8cc1Swenshuai.xi
397*53ee8cc1Swenshuai.xi if (g_u16Ptr_CMQ[eWindow] >= MAX_CMDQ_NUM)
398*53ee8cc1Swenshuai.xi {
399*53ee8cc1Swenshuai.xi DIP_H_ERR("[%s]: eWindow %d CMDQ Buffer is Full\n", __FUNCTION__,eWindow);
400*53ee8cc1Swenshuai.xi return FALSE;
401*53ee8cc1Swenshuai.xi }
402*53ee8cc1Swenshuai.xi
403*53ee8cc1Swenshuai.xi if((destionation_address&0xff00)==0x3400)
404*53ee8cc1Swenshuai.xi {
405*53ee8cc1Swenshuai.xi u16RegBK34Table[idx] &= mask;
406*53ee8cc1Swenshuai.xi u16RegBK34Table[idx] |= destionation_value;
407*53ee8cc1Swenshuai.xi }
408*53ee8cc1Swenshuai.xi else if((destionation_address&0xff00)==0x3600)
409*53ee8cc1Swenshuai.xi {
410*53ee8cc1Swenshuai.xi u16RegBK36Table[idx] &= mask;
411*53ee8cc1Swenshuai.xi u16RegBK36Table[idx] |= destionation_value;
412*53ee8cc1Swenshuai.xi }
413*53ee8cc1Swenshuai.xi
414*53ee8cc1Swenshuai.xi if(eWindow == DIP_WINDOW)
415*53ee8cc1Swenshuai.xi {
416*53ee8cc1Swenshuai.xi DIP_CMDQ_BUFF[g_u16Ptr_CMQ[eWindow]].operation = operation;
417*53ee8cc1Swenshuai.xi DIP_CMDQ_BUFF[g_u16Ptr_CMQ[eWindow]].destionation_address = destionation_address;
418*53ee8cc1Swenshuai.xi DIP_CMDQ_BUFF[g_u16Ptr_CMQ[eWindow]].destionation_value = destionation_value;
419*53ee8cc1Swenshuai.xi DIP_CMDQ_BUFF[g_u16Ptr_CMQ[eWindow]].mask = ((~mask)&0xFFFF);
420*53ee8cc1Swenshuai.xi }
421*53ee8cc1Swenshuai.xi else if(eWindow == DWIN0_WINDOW)
422*53ee8cc1Swenshuai.xi {
423*53ee8cc1Swenshuai.xi DWIN0_CMDQ_BUFF[g_u16Ptr_CMQ[eWindow]].operation = operation;
424*53ee8cc1Swenshuai.xi DWIN0_CMDQ_BUFF[g_u16Ptr_CMQ[eWindow]].destionation_address = destionation_address;
425*53ee8cc1Swenshuai.xi DWIN0_CMDQ_BUFF[g_u16Ptr_CMQ[eWindow]].destionation_value = destionation_value;
426*53ee8cc1Swenshuai.xi DWIN0_CMDQ_BUFF[g_u16Ptr_CMQ[eWindow]].mask = ((~mask)&0xFFFF);
427*53ee8cc1Swenshuai.xi }
428*53ee8cc1Swenshuai.xi else if(eWindow == DWIN1_WINDOW)
429*53ee8cc1Swenshuai.xi {
430*53ee8cc1Swenshuai.xi DWIN1_CMDQ_BUFF[g_u16Ptr_CMQ[eWindow]].operation = operation;
431*53ee8cc1Swenshuai.xi DWIN1_CMDQ_BUFF[g_u16Ptr_CMQ[eWindow]].destionation_address = destionation_address;
432*53ee8cc1Swenshuai.xi DWIN1_CMDQ_BUFF[g_u16Ptr_CMQ[eWindow]].destionation_value = destionation_value;
433*53ee8cc1Swenshuai.xi DWIN1_CMDQ_BUFF[g_u16Ptr_CMQ[eWindow]].mask = ((~mask)&0xFFFF);
434*53ee8cc1Swenshuai.xi }
435*53ee8cc1Swenshuai.xi g_u16Ptr_CMQ[eWindow]++;
436*53ee8cc1Swenshuai.xi return TRUE;
437*53ee8cc1Swenshuai.xi }
438*53ee8cc1Swenshuai.xi
MDrv_CMDQ_WriteByteMask(MS_U32 u32Reg,MS_U8 u8Val,MS_U8 u8Mask,SCALER_DIP_WIN eWindow)439*53ee8cc1Swenshuai.xi static void MDrv_CMDQ_WriteByteMask(MS_U32 u32Reg, MS_U8 u8Val, MS_U8 u8Mask, SCALER_DIP_WIN eWindow)
440*53ee8cc1Swenshuai.xi {
441*53ee8cc1Swenshuai.xi MS_BOOL ret = FALSE;
442*53ee8cc1Swenshuai.xi
443*53ee8cc1Swenshuai.xi ret = HAL_XC_DIP_CMDQPushCommand(CMDQ_WRITE_RIU_COMMAND, u32Reg, u8Val, u8Mask, eWindow);
444*53ee8cc1Swenshuai.xi if (ret == FALSE)
445*53ee8cc1Swenshuai.xi {
446*53ee8cc1Swenshuai.xi DIP_H_ERR("[%s] is error\n", __FUNCTION__);
447*53ee8cc1Swenshuai.xi }
448*53ee8cc1Swenshuai.xi }
449*53ee8cc1Swenshuai.xi
MDrv_CMDQ_WriteRegBit(MS_U32 u32Reg,MS_BOOL bEnable,MS_U8 u8Mask,SCALER_DIP_WIN eWindow)450*53ee8cc1Swenshuai.xi static void MDrv_CMDQ_WriteRegBit(MS_U32 u32Reg, MS_BOOL bEnable, MS_U8 u8Mask, SCALER_DIP_WIN eWindow)
451*53ee8cc1Swenshuai.xi {
452*53ee8cc1Swenshuai.xi MS_BOOL ret = FALSE;
453*53ee8cc1Swenshuai.xi
454*53ee8cc1Swenshuai.xi ret = HAL_XC_DIP_CMDQPushCommand(CMDQ_WRITE_RIU_COMMAND, u32Reg, (MS_U16) (bEnable? u8Mask:0), u8Mask, eWindow);
455*53ee8cc1Swenshuai.xi if (ret == FALSE)
456*53ee8cc1Swenshuai.xi {
457*53ee8cc1Swenshuai.xi DIP_H_ERR("[%s] is error\n", __FUNCTION__);
458*53ee8cc1Swenshuai.xi }
459*53ee8cc1Swenshuai.xi }
460*53ee8cc1Swenshuai.xi
MDrv_CMDQ_Write2ByteMask(MS_U32 u32Reg,MS_U16 u16Val,MS_U16 u16Mask,SCALER_DIP_WIN eWindow)461*53ee8cc1Swenshuai.xi static void MDrv_CMDQ_Write2ByteMask(MS_U32 u32Reg, MS_U16 u16Val, MS_U16 u16Mask, SCALER_DIP_WIN eWindow)
462*53ee8cc1Swenshuai.xi {
463*53ee8cc1Swenshuai.xi MS_BOOL ret = FALSE;
464*53ee8cc1Swenshuai.xi
465*53ee8cc1Swenshuai.xi if ( ((u32Reg) & 0x01) )
466*53ee8cc1Swenshuai.xi u32Reg = u32Reg -1;
467*53ee8cc1Swenshuai.xi
468*53ee8cc1Swenshuai.xi ret = HAL_XC_DIP_CMDQPushCommand(CMDQ_WRITE_RIU_COMMAND, u32Reg, u16Val, u16Mask, eWindow);
469*53ee8cc1Swenshuai.xi if (ret == FALSE)
470*53ee8cc1Swenshuai.xi {
471*53ee8cc1Swenshuai.xi DIP_H_ERR("[%s] is error\n", __FUNCTION__);
472*53ee8cc1Swenshuai.xi }
473*53ee8cc1Swenshuai.xi }
474*53ee8cc1Swenshuai.xi
475*53ee8cc1Swenshuai.xi
MDrv_CMDQ_Write2Byte(MS_U32 u32Reg,MS_U16 u16Val,SCALER_DIP_WIN eWindow)476*53ee8cc1Swenshuai.xi static void MDrv_CMDQ_Write2Byte(MS_U32 u32Reg, MS_U16 u16Val, SCALER_DIP_WIN eWindow)
477*53ee8cc1Swenshuai.xi {
478*53ee8cc1Swenshuai.xi MS_BOOL ret = FALSE;
479*53ee8cc1Swenshuai.xi
480*53ee8cc1Swenshuai.xi if ( ((u32Reg) & 0x01) )
481*53ee8cc1Swenshuai.xi u32Reg = u32Reg -1;
482*53ee8cc1Swenshuai.xi
483*53ee8cc1Swenshuai.xi ret = HAL_XC_DIP_CMDQPushCommand(CMDQ_WRITE_RIU_COMMAND, u32Reg, u16Val, 0xFFFF, eWindow);
484*53ee8cc1Swenshuai.xi if (ret == FALSE)
485*53ee8cc1Swenshuai.xi {
486*53ee8cc1Swenshuai.xi DIP_H_ERR("[%s] is error\n", __FUNCTION__);
487*53ee8cc1Swenshuai.xi }
488*53ee8cc1Swenshuai.xi }
489*53ee8cc1Swenshuai.xi
CMDQ_DIP_W2BYTE(MS_U32 u32Id,MS_U32 u32Reg,MS_U16 u16Val,SCALER_DIP_WIN eWindow)490*53ee8cc1Swenshuai.xi static void CMDQ_DIP_W2BYTE(MS_U32 u32Id, MS_U32 u32Reg, MS_U16 u16Val, SCALER_DIP_WIN eWindow)
491*53ee8cc1Swenshuai.xi {
492*53ee8cc1Swenshuai.xi #if ENABLE_REGISTER_SPREAD
493*53ee8cc1Swenshuai.xi MDrv_CMDQ_Write2Byte((REG_SCALER_BASE + ((u32Reg) & 0xFFFF) + (_XC_Device_Offset[u32Id] << 8) ), u16Val, eWindow);
494*53ee8cc1Swenshuai.xi #else
495*53ee8cc1Swenshuai.xi MDrv_CMDQ_Write2Byte(REG_SCALER_BASE, ((u32Reg) >> 8) & 0x00FF + _XC_Device_Offset[u32Id], eWindow);
496*53ee8cc1Swenshuai.xi MDrv_CMDQ_Write2Byte((REG_SCALER_BASE +((u32Reg) & 0xFF) , u16Val, eWindow);
497*53ee8cc1Swenshuai.xi #endif
498*53ee8cc1Swenshuai.xi }
499*53ee8cc1Swenshuai.xi
CMDQ_DIP_W4BYTE(MS_U32 u32Id,MS_U32 u32Reg,MS_U32 u32Val,SCALER_DIP_WIN eWindow)500*53ee8cc1Swenshuai.xi static void CMDQ_DIP_W4BYTE(MS_U32 u32Id, MS_U32 u32Reg, MS_U32 u32Val, SCALER_DIP_WIN eWindow)
501*53ee8cc1Swenshuai.xi {
502*53ee8cc1Swenshuai.xi #if ENABLE_REGISTER_SPREAD
503*53ee8cc1Swenshuai.xi MDrv_CMDQ_Write2Byte((REG_SCALER_BASE + ((u32Reg) & 0xFFFF) + (_XC_Device_Offset[u32Id] << 8) ), (MS_U16)((u32Val) & 0x0000FFFF), eWindow);
504*53ee8cc1Swenshuai.xi MDrv_CMDQ_Write2Byte((REG_SCALER_BASE + ((u32Reg) & 0xFFFF) + (_XC_Device_Offset[u32Id] << 8) + 2 ), (MS_U16)(((u32Val) >> 16) & 0x0000FFFF), eWindow);
505*53ee8cc1Swenshuai.xi #else
506*53ee8cc1Swenshuai.xi MDrv_CMDQ_Write2Byte(REG_SCALER_BASE, ((u32Reg) >> 8) & 0x00FF + _XC_Device_Offset[u32Id], eWindow);
507*53ee8cc1Swenshuai.xi MDrv_CMDQ_Write2Byte((REG_SCALER_BASE + ((u32Reg) & 0xFF) ), (MS_U16)((u32Val) & 0x0000FFFF), eWindow);
508*53ee8cc1Swenshuai.xi MDrv_CMDQ_Write2Byte((REG_SCALER_BASE + ((u32Reg) & 0xFF) + 2 ), (MS_U16)(((u32Val) >> 16) & 0x0000FFFF), eWindow);
509*53ee8cc1Swenshuai.xi #endif
510*53ee8cc1Swenshuai.xi }
511*53ee8cc1Swenshuai.xi
512*53ee8cc1Swenshuai.xi
CMDQ_DIP_W2BYTEMSK(MS_U32 u32Id,MS_U32 u32Reg,MS_U16 u16Val,MS_U16 u16Mask,SCALER_DIP_WIN eWindow)513*53ee8cc1Swenshuai.xi static void CMDQ_DIP_W2BYTEMSK(MS_U32 u32Id, MS_U32 u32Reg, MS_U16 u16Val, MS_U16 u16Mask, SCALER_DIP_WIN eWindow)
514*53ee8cc1Swenshuai.xi {
515*53ee8cc1Swenshuai.xi #if ENABLE_REGISTER_SPREAD
516*53ee8cc1Swenshuai.xi MDrv_CMDQ_Write2ByteMask((REG_SCALER_BASE + ((u32Reg) & 0xFFFF) + (_XC_Device_Offset[u32Id] << 8) ), u16Val, u16Mask, eWindow);
517*53ee8cc1Swenshuai.xi #else
518*53ee8cc1Swenshuai.xi MDrv_CMDQ_Write2Byte(REG_SCALER_BASE, ((u32Reg) >> 8) & 0x00FF + _XC_Device_Offset[u32Id], eWindow);
519*53ee8cc1Swenshuai.xi MDrv_CMDQ_Write2ByteMask((REG_SCALER_BASE +((u32Reg) & 0xFF) , u16Val, u16Mask, eWindow);
520*53ee8cc1Swenshuai.xi #endif
521*53ee8cc1Swenshuai.xi }
522*53ee8cc1Swenshuai.xi
HAL_XC_DIP_CMDQInit(void * pInstance,SCALER_DIP_WIN eWindow)523*53ee8cc1Swenshuai.xi MS_BOOL HAL_XC_DIP_CMDQInit(void *pInstance,SCALER_DIP_WIN eWindow)
524*53ee8cc1Swenshuai.xi {
525*53ee8cc1Swenshuai.xi if(g_s32DIPCMDQ_Init_Mutex[eWindow] != 0)
526*53ee8cc1Swenshuai.xi {
527*53ee8cc1Swenshuai.xi if(eWindow == DIP_WINDOW)
528*53ee8cc1Swenshuai.xi g_s32DIPCMDQ_Init_Mutex[eWindow] = MsOS_CreateMutex(E_MSOS_FIFO, "DIP_CMDQ_INIT" , MSOS_PROCESS_SHARED);
529*53ee8cc1Swenshuai.xi else if(eWindow == DWIN0_WINDOW)
530*53ee8cc1Swenshuai.xi g_s32DIPCMDQ_Init_Mutex[eWindow] = MsOS_CreateMutex(E_MSOS_FIFO, "DWIN0_CMDQ_INIT" , MSOS_PROCESS_SHARED);
531*53ee8cc1Swenshuai.xi else if(eWindow == DWIN1_WINDOW)
532*53ee8cc1Swenshuai.xi g_s32DIPCMDQ_Init_Mutex[eWindow] = MsOS_CreateMutex(E_MSOS_FIFO, "DWIN1_CMDQ_INIT" , MSOS_PROCESS_SHARED);
533*53ee8cc1Swenshuai.xi }
534*53ee8cc1Swenshuai.xi
535*53ee8cc1Swenshuai.xi if (g_s32DIPCMDQ_Init_Mutex[eWindow] < 0)
536*53ee8cc1Swenshuai.xi {
537*53ee8cc1Swenshuai.xi DIP_H_ERR("Error: [%s] line:%d, eWindow:%d MsOS_CreateMutex Fail[%ld]\n",
538*53ee8cc1Swenshuai.xi __FUNCTION__, __LINE__, eWindow, g_s32DIPCMDQ_Init_Mutex[eWindow]);
539*53ee8cc1Swenshuai.xi
540*53ee8cc1Swenshuai.xi g_s32DIPCMDQ_Init_Mutex[eWindow] = 0;
541*53ee8cc1Swenshuai.xi return FALSE;
542*53ee8cc1Swenshuai.xi }
543*53ee8cc1Swenshuai.xi
544*53ee8cc1Swenshuai.xi
545*53ee8cc1Swenshuai.xi if (g_bCMDQ_Init == TRUE)
546*53ee8cc1Swenshuai.xi return TRUE;
547*53ee8cc1Swenshuai.xi //MDrv_DIP_WriteRegBit(XIU_BITMASK,BIT(0),BIT(0));
548*53ee8cc1Swenshuai.xi
549*53ee8cc1Swenshuai.xi g_bCMDQ_Init = TRUE;
550*53ee8cc1Swenshuai.xi
551*53ee8cc1Swenshuai.xi return TRUE;
552*53ee8cc1Swenshuai.xi }
553*53ee8cc1Swenshuai.xi
554*53ee8cc1Swenshuai.xi #if DIP_CMDQ_ENABLE
HAL_XC_DIP_CMDQTriggerCommand(SCALER_DIP_WIN eWindow)555*53ee8cc1Swenshuai.xi static MS_BOOL HAL_XC_DIP_CMDQTriggerCommand(SCALER_DIP_WIN eWindow)
556*53ee8cc1Swenshuai.xi {
557*53ee8cc1Swenshuai.xi CH_Struct_Pointer dip_cmdq_st;
558*53ee8cc1Swenshuai.xi DRVCMDQ_RESULT sResult;
559*53ee8cc1Swenshuai.xi MS_U16 u16Index;
560*53ee8cc1Swenshuai.xi
561*53ee8cc1Swenshuai.xi cmdq_ready_value = MDrv_DIP_Read2Byte(g_u32Wait_Reg[eWindow]);
562*53ee8cc1Swenshuai.xi if(cmdq_ready_value == 0xFFF)
563*53ee8cc1Swenshuai.xi cmdq_ready_value = 0;
564*53ee8cc1Swenshuai.xi cmdq_ready_value++;
565*53ee8cc1Swenshuai.xi MDrv_DIP_Write2ByteMask(g_u32Wait_Reg[eWindow],cmdq_ready_value,0xFFF);
566*53ee8cc1Swenshuai.xi #if 0 //for Debug
567*53ee8cc1Swenshuai.xi MS_U16 i=0;
568*53ee8cc1Swenshuai.xi for(i=0;i<g_u16Ptr_CMQ[eWindow];i++)
569*53ee8cc1Swenshuai.xi {
570*53ee8cc1Swenshuai.xi DIP_H_ERR("\33[0;36m [%d]op = %d, addr = %lx,value = %x,mask = %x\33[m \n",i,DIP_CMDQ_BUFF[i].operation,DIP_CMDQ_BUFF[i].destionation_address,DIP_CMDQ_BUFF[i].destionation_value,DIP_CMDQ_BUFF[i].mask);
571*53ee8cc1Swenshuai.xi }
572*53ee8cc1Swenshuai.xi #endif
573*53ee8cc1Swenshuai.xi
574*53ee8cc1Swenshuai.xi dip_cmdq_st = (CH_Struct_Pointer) malloc(sizeof(CH_Struct));
575*53ee8cc1Swenshuai.xi dip_cmdq_st->Command_Number = g_u16Ptr_CMQ[eWindow];
576*53ee8cc1Swenshuai.xi if(eWindow == DIP_WINDOW)
577*53ee8cc1Swenshuai.xi dip_cmdq_st->Pointer_To_CAFArray = (CAF_Struct_Pointer)DIP_CMDQ_BUFF;
578*53ee8cc1Swenshuai.xi else if(eWindow == DWIN0_WINDOW)
579*53ee8cc1Swenshuai.xi dip_cmdq_st->Pointer_To_CAFArray = (CAF_Struct_Pointer)DWIN0_CMDQ_BUFF;
580*53ee8cc1Swenshuai.xi else if(eWindow == DWIN1_WINDOW)
581*53ee8cc1Swenshuai.xi dip_cmdq_st->Pointer_To_CAFArray = (CAF_Struct_Pointer)DWIN1_CMDQ_BUFF;
582*53ee8cc1Swenshuai.xi
583*53ee8cc1Swenshuai.xi sResult = MDrv_CMDQ_Receive(dip_cmdq_st);
584*53ee8cc1Swenshuai.xi
585*53ee8cc1Swenshuai.xi if (sResult != DRVCMDQ_OK)
586*53ee8cc1Swenshuai.xi {
587*53ee8cc1Swenshuai.xi DIP_H_ERR("[%s] ERROR, Return Error Code:%ld\n", __FUNCTION__, sResult);
588*53ee8cc1Swenshuai.xi for (u16Index = 0; u16Index<g_u16Ptr_CMQ[eWindow]; u16Index++)
589*53ee8cc1Swenshuai.xi {
590*53ee8cc1Swenshuai.xi if(eWindow == DIP_WINDOW)
591*53ee8cc1Swenshuai.xi DIP_H_ERR("opt:0x%x, dest:0x%lx, value:0x%x, mask:0x%x\n",
592*53ee8cc1Swenshuai.xi DIP_CMDQ_BUFF[u16Index].operation,
593*53ee8cc1Swenshuai.xi DIP_CMDQ_BUFF[u16Index].destionation_address,
594*53ee8cc1Swenshuai.xi DIP_CMDQ_BUFF[u16Index].destionation_value,
595*53ee8cc1Swenshuai.xi ~(DIP_CMDQ_BUFF[u16Index].mask));
596*53ee8cc1Swenshuai.xi else if(eWindow == DWIN0_WINDOW)
597*53ee8cc1Swenshuai.xi DIP_H_ERR("opt:0x%x, dest:0x%lx, value:0x%x, mask:0x%x\n",
598*53ee8cc1Swenshuai.xi DWIN0_CMDQ_BUFF[u16Index].operation,
599*53ee8cc1Swenshuai.xi DWIN0_CMDQ_BUFF[u16Index].destionation_address,
600*53ee8cc1Swenshuai.xi DWIN0_CMDQ_BUFF[u16Index].destionation_value,
601*53ee8cc1Swenshuai.xi ~(DWIN0_CMDQ_BUFF[u16Index].mask));
602*53ee8cc1Swenshuai.xi else if(eWindow == DWIN1_WINDOW)
603*53ee8cc1Swenshuai.xi DIP_H_ERR("opt:0x%x, dest:0x%lx, value:0x%x, mask:0x%x\n",
604*53ee8cc1Swenshuai.xi DWIN1_CMDQ_BUFF[u16Index].operation,
605*53ee8cc1Swenshuai.xi DWIN1_CMDQ_BUFF[u16Index].destionation_address,
606*53ee8cc1Swenshuai.xi DWIN1_CMDQ_BUFF[u16Index].destionation_value,
607*53ee8cc1Swenshuai.xi ~(DWIN1_CMDQ_BUFF[u16Index].mask));
608*53ee8cc1Swenshuai.xi }
609*53ee8cc1Swenshuai.xi return FALSE;
610*53ee8cc1Swenshuai.xi }
611*53ee8cc1Swenshuai.xi
612*53ee8cc1Swenshuai.xi g_u16Ptr_CMQ[eWindow]= 0;
613*53ee8cc1Swenshuai.xi return TRUE;
614*53ee8cc1Swenshuai.xi }
615*53ee8cc1Swenshuai.xi #endif
616*53ee8cc1Swenshuai.xi
HAL_XC_DIP_CMDQBegin(void * pInstance,SCALER_DIP_WIN eWindow)617*53ee8cc1Swenshuai.xi MS_BOOL HAL_XC_DIP_CMDQBegin(void *pInstance,SCALER_DIP_WIN eWindow)
618*53ee8cc1Swenshuai.xi {
619*53ee8cc1Swenshuai.xi #if DIP_CMDQ_ENABLE
620*53ee8cc1Swenshuai.xi #if !(defined(MSOS_TYPE_LINUX_KERNEL))
621*53ee8cc1Swenshuai.xi MS_U16 u16Index=0;
622*53ee8cc1Swenshuai.xi
623*53ee8cc1Swenshuai.xi if(eWindow!=DIP_WINDOW)
624*53ee8cc1Swenshuai.xi DIP_H_ERR("Error:[%s],Line:%d,Not Support,eWindow%d\n",__FUNCTION__, __LINE__,eWindow);
625*53ee8cc1Swenshuai.xi
626*53ee8cc1Swenshuai.xi if ( HAL_XC_DIP_CMDQInit(pInstance,eWindow) == FALSE)
627*53ee8cc1Swenshuai.xi {
628*53ee8cc1Swenshuai.xi DIP_H_ERR("Error:[%s],Line:%d, eWindow:%d, HAL_XC_DIP_CMDQInit Fail\n",
629*53ee8cc1Swenshuai.xi __FUNCTION__, __LINE__, eWindow);
630*53ee8cc1Swenshuai.xi return FALSE;
631*53ee8cc1Swenshuai.xi }
632*53ee8cc1Swenshuai.xi
633*53ee8cc1Swenshuai.xi DIPCMDQ_INIT_MUTEX_LOCK(eWindow);
634*53ee8cc1Swenshuai.xi
635*53ee8cc1Swenshuai.xi for(u16Index=0;u16Index<BANK_REG_MAX;u16Index++)
636*53ee8cc1Swenshuai.xi {
637*53ee8cc1Swenshuai.xi u16RegBK34Table[u16Index]= SC_R2BYTE(0, REG_SC_BK34_00_L+u16Index*2);
638*53ee8cc1Swenshuai.xi u16RegBK36Table[u16Index]= SC_R2BYTE(0, REG_SC_BK36_00_L+u16Index*2);
639*53ee8cc1Swenshuai.xi }
640*53ee8cc1Swenshuai.xi g_u16Ptr_CMQ[eWindow] = 0;
641*53ee8cc1Swenshuai.xi g_bCMDQ_Enable[eWindow] = TRUE;
642*53ee8cc1Swenshuai.xi #endif
643*53ee8cc1Swenshuai.xi #endif
644*53ee8cc1Swenshuai.xi return TRUE;
645*53ee8cc1Swenshuai.xi }
646*53ee8cc1Swenshuai.xi
HAL_XC_DIP_CMDQEnd(void * pInstance,SCALER_DIP_WIN eWindow)647*53ee8cc1Swenshuai.xi MS_BOOL HAL_XC_DIP_CMDQEnd(void *pInstance,SCALER_DIP_WIN eWindow)
648*53ee8cc1Swenshuai.xi {
649*53ee8cc1Swenshuai.xi MS_BOOL bRet = TRUE;
650*53ee8cc1Swenshuai.xi #if DIP_CMDQ_ENABLE
651*53ee8cc1Swenshuai.xi #if !(defined(MSOS_TYPE_LINUX_KERNEL))
652*53ee8cc1Swenshuai.xi if(eWindow!=DIP_WINDOW)
653*53ee8cc1Swenshuai.xi DIP_H_ERR("Error:[%s],Line:%d,Not Support,eWindow%d\n",__FUNCTION__, __LINE__,eWindow);
654*53ee8cc1Swenshuai.xi
655*53ee8cc1Swenshuai.xi bRet &= HAL_XC_DIP_CMDQTriggerCommand(eWindow);
656*53ee8cc1Swenshuai.xi if (bRet == FALSE)
657*53ee8cc1Swenshuai.xi DIP_H_ERR("[%s] ERROR: MDrv_DIPCMDQ_TriggerCommand\n", __FUNCTION__);
658*53ee8cc1Swenshuai.xi
659*53ee8cc1Swenshuai.xi g_u16Ptr_CMQ[eWindow] = 0;
660*53ee8cc1Swenshuai.xi g_bCMDQ_Enable[eWindow] = FALSE;
661*53ee8cc1Swenshuai.xi DIPCMDQ_INIT_MUTEX_UNLOCK(eWindow);
662*53ee8cc1Swenshuai.xi #endif
663*53ee8cc1Swenshuai.xi #endif
664*53ee8cc1Swenshuai.xi return bRet;
665*53ee8cc1Swenshuai.xi }
666*53ee8cc1Swenshuai.xi //==============================================================================
667*53ee8cc1Swenshuai.xi
668*53ee8cc1Swenshuai.xi //extern PQ_Function_Info s_PQ_Function_Info;
669*53ee8cc1Swenshuai.xi //extern MS_BOOL s_bKeepPixelPointerAppear;
670*53ee8cc1Swenshuai.xi
Hal_SC_DWIN_set_422_cbcr_swap(void * pInstance,MS_BOOL bEnable,SCALER_DIP_WIN eWindow)671*53ee8cc1Swenshuai.xi void Hal_SC_DWIN_set_422_cbcr_swap(void *pInstance, MS_BOOL bEnable, SCALER_DIP_WIN eWindow)
672*53ee8cc1Swenshuai.xi {
673*53ee8cc1Swenshuai.xi if(eWindow == DIP_WINDOW)
674*53ee8cc1Swenshuai.xi {
675*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_30_L, bEnable ? BIT(3) : 0, BIT(3));
676*53ee8cc1Swenshuai.xi }
677*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
678*53ee8cc1Swenshuai.xi {
679*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_44_L, bEnable ? BIT(3) : 0, BIT(3));
680*53ee8cc1Swenshuai.xi }
681*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
682*53ee8cc1Swenshuai.xi {
683*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_44_L, bEnable ? BIT(3) : 0, BIT(3));
684*53ee8cc1Swenshuai.xi }
685*53ee8cc1Swenshuai.xi else
686*53ee8cc1Swenshuai.xi {
687*53ee8cc1Swenshuai.xi return;
688*53ee8cc1Swenshuai.xi }
689*53ee8cc1Swenshuai.xi }
690*53ee8cc1Swenshuai.xi
Hal_SC_DWIN_set_pre_align_pixel(void * pInstance,MS_BOOL bEnable,MS_U16 pixels,SCALER_DIP_WIN eWindow)691*53ee8cc1Swenshuai.xi void Hal_SC_DWIN_set_pre_align_pixel(void *pInstance, MS_BOOL bEnable, MS_U16 pixels, SCALER_DIP_WIN eWindow)
692*53ee8cc1Swenshuai.xi {
693*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
694*53ee8cc1Swenshuai.xi {
695*53ee8cc1Swenshuai.xi if (bEnable)
696*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_60_L, BIT(1), BIT(1));
697*53ee8cc1Swenshuai.xi else
698*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_60_L, 0x00 , BIT(1));
699*53ee8cc1Swenshuai.xi }
700*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
701*53ee8cc1Swenshuai.xi {
702*53ee8cc1Swenshuai.xi if (bEnable)
703*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_62_L, BIT(1), BIT(1));
704*53ee8cc1Swenshuai.xi else
705*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_62_L, 0x00 , BIT(1));
706*53ee8cc1Swenshuai.xi }
707*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
708*53ee8cc1Swenshuai.xi {
709*53ee8cc1Swenshuai.xi if (bEnable)
710*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_62_L, BIT(1), BIT(1));
711*53ee8cc1Swenshuai.xi else
712*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_62_L, 0x00 , BIT(1));
713*53ee8cc1Swenshuai.xi }
714*53ee8cc1Swenshuai.xi else
715*53ee8cc1Swenshuai.xi {
716*53ee8cc1Swenshuai.xi return;
717*53ee8cc1Swenshuai.xi }
718*53ee8cc1Swenshuai.xi }
719*53ee8cc1Swenshuai.xi
720*53ee8cc1Swenshuai.xi // This function will return 8/10/12/14/16 field mode or 8 frame mode.
721*53ee8cc1Swenshuai.xi // Otherwise it return IMAGE_STORE_2_FRAMES
Hal_SC_DWIN_GetFrameStoreMode(void * pInstance,SCALER_DIP_WIN eWindow,MS_BOOL bInterlace)722*53ee8cc1Swenshuai.xi XC_FRAME_STORE_NUMBER Hal_SC_DWIN_GetFrameStoreMode(void *pInstance, SCALER_DIP_WIN eWindow,MS_BOOL bInterlace)
723*53ee8cc1Swenshuai.xi {
724*53ee8cc1Swenshuai.xi if (bInterlace)
725*53ee8cc1Swenshuai.xi {
726*53ee8cc1Swenshuai.xi return IMAGE_STORE_4_FIELDS;
727*53ee8cc1Swenshuai.xi }
728*53ee8cc1Swenshuai.xi else
729*53ee8cc1Swenshuai.xi {
730*53ee8cc1Swenshuai.xi return IMAGE_STORE_2_FRAMES;
731*53ee8cc1Swenshuai.xi }
732*53ee8cc1Swenshuai.xi }
733*53ee8cc1Swenshuai.xi
734*53ee8cc1Swenshuai.xi
Hal_SC_DWIN_EnableR2YCSC(void * pInstance,MS_BOOL bEnable,SCALER_DIP_WIN eWindow)735*53ee8cc1Swenshuai.xi void Hal_SC_DWIN_EnableR2YCSC(void *pInstance, MS_BOOL bEnable, SCALER_DIP_WIN eWindow)
736*53ee8cc1Swenshuai.xi {
737*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
738*53ee8cc1Swenshuai.xi {
739*53ee8cc1Swenshuai.xi bDipR2Y = bEnable;
740*53ee8cc1Swenshuai.xi if( ((DipSource == SCALER_DIP_SOURCE_TYPE_OP_MAIN) || (DipSource == SCALER_DIP_SOURCE_TYPE_OP_SUB)) && (bDipR2Y == FALSE) )
741*53ee8cc1Swenshuai.xi {
742*53ee8cc1Swenshuai.xi //enable 422 to 444
743*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6C_L,BIT(9),BIT(9));
744*53ee8cc1Swenshuai.xi //enable source yc swap
745*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7C_L,BIT(14),BIT(14));
746*53ee8cc1Swenshuai.xi }
747*53ee8cc1Swenshuai.xi else
748*53ee8cc1Swenshuai.xi {
749*53ee8cc1Swenshuai.xi //disable 422 to 444
750*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6C_L,0,BIT(9));
751*53ee8cc1Swenshuai.xi //disable source yc swap
752*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7C_L,0,BIT(14));
753*53ee8cc1Swenshuai.xi }
754*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_31_L, (bEnable ? BIT(0):0), BIT(0));
755*53ee8cc1Swenshuai.xi }
756*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
757*53ee8cc1Swenshuai.xi {
758*53ee8cc1Swenshuai.xi bDwin0R2Y = bEnable;
759*53ee8cc1Swenshuai.xi if( ((Dwin0Source == SCALER_DIP_SOURCE_TYPE_OP_MAIN) || (Dwin0Source == SCALER_DIP_SOURCE_TYPE_OP_SUB)) && (bDwin0R2Y == FALSE) )
760*53ee8cc1Swenshuai.xi {
761*53ee8cc1Swenshuai.xi //enable 422 to 444
762*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_78_L,BIT(9),BIT(9));
763*53ee8cc1Swenshuai.xi //enable source yc swap
764*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7F_L,BIT(8),BIT(8));
765*53ee8cc1Swenshuai.xi }
766*53ee8cc1Swenshuai.xi else
767*53ee8cc1Swenshuai.xi {
768*53ee8cc1Swenshuai.xi //disable 422 to 444
769*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_78_L,0,BIT(9));
770*53ee8cc1Swenshuai.xi //disable source yc swap
771*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7F_L,0,BIT(8));
772*53ee8cc1Swenshuai.xi }
773*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_45_L, (bEnable ? BIT(0):0), BIT(0));
774*53ee8cc1Swenshuai.xi }
775*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
776*53ee8cc1Swenshuai.xi {
777*53ee8cc1Swenshuai.xi bDwin1R2Y = bEnable;
778*53ee8cc1Swenshuai.xi if( ((Dwin1Source == SCALER_DIP_SOURCE_TYPE_OP_MAIN) || (Dwin1Source == SCALER_DIP_SOURCE_TYPE_OP_SUB)) && (bDwin1R2Y == FALSE) )
779*53ee8cc1Swenshuai.xi {
780*53ee8cc1Swenshuai.xi //enable 422 to 444
781*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_78_L,BIT(9),BIT(9));
782*53ee8cc1Swenshuai.xi //enable source yc swap
783*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7F_L,BIT(8),BIT(8));
784*53ee8cc1Swenshuai.xi }
785*53ee8cc1Swenshuai.xi else
786*53ee8cc1Swenshuai.xi {
787*53ee8cc1Swenshuai.xi //disable 422 to 444
788*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_78_L,0,BIT(9));
789*53ee8cc1Swenshuai.xi //disable source yc swap
790*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7F_L,0,BIT(8));
791*53ee8cc1Swenshuai.xi }
792*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_45_L, (bEnable ? BIT(0):0), BIT(0));
793*53ee8cc1Swenshuai.xi }
794*53ee8cc1Swenshuai.xi else
795*53ee8cc1Swenshuai.xi {
796*53ee8cc1Swenshuai.xi return;
797*53ee8cc1Swenshuai.xi }
798*53ee8cc1Swenshuai.xi }
799*53ee8cc1Swenshuai.xi
Hal_SC_DWIN_Set_vsd_output_line_count(void * pInstance,MS_BOOL bEnable,MS_U32 u32LineCount,SCALER_DIP_WIN eWindow)800*53ee8cc1Swenshuai.xi void Hal_SC_DWIN_Set_vsd_output_line_count(void *pInstance, MS_BOOL bEnable,MS_U32 u32LineCount,SCALER_DIP_WIN eWindow)
801*53ee8cc1Swenshuai.xi {
802*53ee8cc1Swenshuai.xi MS_U16 u16OutputLineCount = 0x00;
803*53ee8cc1Swenshuai.xi
804*53ee8cc1Swenshuai.xi if (bEnable)
805*53ee8cc1Swenshuai.xi {
806*53ee8cc1Swenshuai.xi u16OutputLineCount = BIT(15);
807*53ee8cc1Swenshuai.xi u16OutputLineCount |= (MS_U16)(u32LineCount & 0x1FFF);
808*53ee8cc1Swenshuai.xi }
809*53ee8cc1Swenshuai.xi
810*53ee8cc1Swenshuai.xi if (eWindow == DIP_WINDOW)
811*53ee8cc1Swenshuai.xi {
812*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_37_L, u16OutputLineCount,0x81FF);
813*53ee8cc1Swenshuai.xi }
814*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
815*53ee8cc1Swenshuai.xi {
816*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_47_L, u16OutputLineCount,0x81FF);
817*53ee8cc1Swenshuai.xi }
818*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
819*53ee8cc1Swenshuai.xi {
820*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_47_L, u16OutputLineCount,0x81FF);
821*53ee8cc1Swenshuai.xi }
822*53ee8cc1Swenshuai.xi else
823*53ee8cc1Swenshuai.xi {
824*53ee8cc1Swenshuai.xi return;
825*53ee8cc1Swenshuai.xi }
826*53ee8cc1Swenshuai.xi }
827*53ee8cc1Swenshuai.xi
828*53ee8cc1Swenshuai.xi /*
829*53ee8cc1Swenshuai.xi bEnable : Enable input line count.
830*53ee8cc1Swenshuai.xi bUserMode : 1 -> the input line count will ref u32UserLineCount
831*53ee8cc1Swenshuai.xi 0 -> the input line count will ref V capture win
832*53ee8cc1Swenshuai.xi */
Hal_SC_DWIN_Set_vsd_input_line_count(void * pInstance,MS_BOOL bEnable,MS_BOOL bUserMode,MS_U32 u32UserLineCount,SCALER_DIP_WIN eWindow)833*53ee8cc1Swenshuai.xi void Hal_SC_DWIN_Set_vsd_input_line_count(void *pInstance, MS_BOOL bEnable,MS_BOOL bUserMode,MS_U32 u32UserLineCount,SCALER_DIP_WIN eWindow)
834*53ee8cc1Swenshuai.xi {
835*53ee8cc1Swenshuai.xi MS_U16 u16InputLineCount = 0x00;
836*53ee8cc1Swenshuai.xi
837*53ee8cc1Swenshuai.xi if (bEnable)
838*53ee8cc1Swenshuai.xi {
839*53ee8cc1Swenshuai.xi u16InputLineCount = BIT(15);
840*53ee8cc1Swenshuai.xi
841*53ee8cc1Swenshuai.xi if (bUserMode)
842*53ee8cc1Swenshuai.xi {
843*53ee8cc1Swenshuai.xi u16InputLineCount |= BIT(14);
844*53ee8cc1Swenshuai.xi u16InputLineCount |= (MS_U16)(u32UserLineCount & 0x1FFF);
845*53ee8cc1Swenshuai.xi }
846*53ee8cc1Swenshuai.xi }
847*53ee8cc1Swenshuai.xi
848*53ee8cc1Swenshuai.xi if (eWindow == DIP_WINDOW)
849*53ee8cc1Swenshuai.xi {
850*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK34_36_L, u16InputLineCount);
851*53ee8cc1Swenshuai.xi }
852*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
853*53ee8cc1Swenshuai.xi {
854*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3B_46_L, u16InputLineCount);
855*53ee8cc1Swenshuai.xi }
856*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
857*53ee8cc1Swenshuai.xi {
858*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3C_46_L, u16InputLineCount);
859*53ee8cc1Swenshuai.xi }
860*53ee8cc1Swenshuai.xi else
861*53ee8cc1Swenshuai.xi {
862*53ee8cc1Swenshuai.xi return;
863*53ee8cc1Swenshuai.xi }
864*53ee8cc1Swenshuai.xi }
865*53ee8cc1Swenshuai.xi
866*53ee8cc1Swenshuai.xi
Hal_SC_DWIN_sw_db(void * pInstance,P_SC_DIP_SWDB_INFO pDBreg,SCALER_DIP_WIN eWindow)867*53ee8cc1Swenshuai.xi void Hal_SC_DWIN_sw_db(void *pInstance, P_SC_DIP_SWDB_INFO pDBreg, SCALER_DIP_WIN eWindow)
868*53ee8cc1Swenshuai.xi {
869*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
870*53ee8cc1Swenshuai.xi {
871*53ee8cc1Swenshuai.xi
872*53ee8cc1Swenshuai.xi if( pDBreg->u32H_PreScalingRatio & BIT(31))
873*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6C_L, BIT(15),BIT(15));
874*53ee8cc1Swenshuai.xi else
875*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6C_L, 0,BIT(15));
876*53ee8cc1Swenshuai.xi
877*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK34_2C_L, (pDBreg->u32H_PreScalingRatio & (~(BIT(31))))); // H pre-scaling
878*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK34_08_L, pDBreg->u32V_PreScalingRatio); // V pre-scaling
879*53ee8cc1Swenshuai.xi
880*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_60_L, BIT(1)|BIT(0),BIT(1)|BIT(0));
881*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK34_61_L, pDBreg->u16H_CapStart+1);
882*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK34_62_L, pDBreg->u16H_CapStart+pDBreg->u16H_CapSize);
883*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK34_63_L, pDBreg->u16V_CapStart+1);
884*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK34_64_L, pDBreg->u16V_CapStart+pDBreg->u16V_CapSize);
885*53ee8cc1Swenshuai.xi DipSrcWidth = pDBreg->u16H_CapStart + pDBreg->u16H_CapSize;
886*53ee8cc1Swenshuai.xi }
887*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
888*53ee8cc1Swenshuai.xi {
889*53ee8cc1Swenshuai.xi if( pDBreg->u32H_PreScalingRatio & BIT(31))
890*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_78_L, BIT(15),BIT(15));
891*53ee8cc1Swenshuai.xi else
892*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_78_L, 0,BIT(15));
893*53ee8cc1Swenshuai.xi
894*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3B_37_L, (pDBreg->u32H_PreScalingRatio & (~(BIT(31))))); // H pre-scaling
895*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3B_1B_L, pDBreg->u32V_PreScalingRatio); // V pre-scaling
896*53ee8cc1Swenshuai.xi
897*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_62_L, BIT(1)|BIT(0),BIT(1)|BIT(0));
898*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3B_63_L, pDBreg->u16H_CapStart+1);
899*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3B_64_L, pDBreg->u16H_CapStart+pDBreg->u16H_CapSize);
900*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3B_65_L, pDBreg->u16V_CapStart+1);
901*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3B_66_L, pDBreg->u16V_CapStart+pDBreg->u16V_CapSize);
902*53ee8cc1Swenshuai.xi Dwin0SrcWidth = pDBreg->u16H_CapStart + pDBreg->u16H_CapSize;
903*53ee8cc1Swenshuai.xi }
904*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
905*53ee8cc1Swenshuai.xi {
906*53ee8cc1Swenshuai.xi if( pDBreg->u32H_PreScalingRatio & BIT(31))
907*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_78_L, BIT(15),BIT(15));
908*53ee8cc1Swenshuai.xi else
909*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_78_L, 0,BIT(15));
910*53ee8cc1Swenshuai.xi
911*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3C_37_L, (pDBreg->u32H_PreScalingRatio & (~(BIT(31))))); // H pre-scaling
912*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3C_1B_L, pDBreg->u32V_PreScalingRatio); // V pre-scaling
913*53ee8cc1Swenshuai.xi
914*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_62_L, BIT(1)|BIT(0),BIT(1)|BIT(0));
915*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3C_63_L, pDBreg->u16H_CapStart+1);
916*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3C_64_L, pDBreg->u16H_CapStart+pDBreg->u16H_CapSize);
917*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3C_65_L, pDBreg->u16V_CapStart+1);
918*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3C_66_L, pDBreg->u16V_CapStart+pDBreg->u16V_CapSize);
919*53ee8cc1Swenshuai.xi Dwin1SrcWidth = pDBreg->u16H_CapStart + pDBreg->u16H_CapSize;
920*53ee8cc1Swenshuai.xi }
921*53ee8cc1Swenshuai.xi else
922*53ee8cc1Swenshuai.xi {
923*53ee8cc1Swenshuai.xi return;
924*53ee8cc1Swenshuai.xi }
925*53ee8cc1Swenshuai.xi }
Hal_SC_DWIN_get_sw_db(void * pInstance,P_SC_DIP_SWDB_INFO pDBreg,SCALER_DIP_WIN eWindow)926*53ee8cc1Swenshuai.xi void Hal_SC_DWIN_get_sw_db(void *pInstance, P_SC_DIP_SWDB_INFO pDBreg, SCALER_DIP_WIN eWindow)
927*53ee8cc1Swenshuai.xi {
928*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
929*53ee8cc1Swenshuai.xi {
930*53ee8cc1Swenshuai.xi pDBreg->u32H_PreScalingRatio = DIP_R4BYTE(0, REG_SC_BK34_2C_L,eWindow);
931*53ee8cc1Swenshuai.xi if( DIP_R2BYTE(0, REG_SC_BK34_6C_L,eWindow) & BIT(15) )
932*53ee8cc1Swenshuai.xi pDBreg->u32H_PreScalingRatio |= BIT(31);
933*53ee8cc1Swenshuai.xi pDBreg->u32V_PreScalingRatio = DIP_R4BYTE(0, REG_SC_BK34_08_L,eWindow);
934*53ee8cc1Swenshuai.xi
935*53ee8cc1Swenshuai.xi pDBreg->u16H_CapStart = (DIP_R2BYTE(0, REG_SC_BK34_61_L,eWindow) - 1);
936*53ee8cc1Swenshuai.xi pDBreg->u16H_CapSize = (DIP_R2BYTE(0, REG_SC_BK34_62_L,eWindow) - pDBreg->u16H_CapStart);
937*53ee8cc1Swenshuai.xi pDBreg->u16V_CapStart = (DIP_R2BYTE(0, REG_SC_BK34_63_L,eWindow) - 1);
938*53ee8cc1Swenshuai.xi pDBreg->u16V_CapSize = (DIP_R2BYTE(0, REG_SC_BK34_64_L,eWindow) - pDBreg->u16V_CapStart);
939*53ee8cc1Swenshuai.xi }
940*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
941*53ee8cc1Swenshuai.xi {
942*53ee8cc1Swenshuai.xi pDBreg->u32H_PreScalingRatio = DIP_R4BYTE(0, REG_SC_BK3B_37_L,eWindow);
943*53ee8cc1Swenshuai.xi if( DIP_R2BYTE(0, REG_SC_BK3B_78_L,eWindow) & BIT(15) )
944*53ee8cc1Swenshuai.xi pDBreg->u32H_PreScalingRatio |= BIT(31);
945*53ee8cc1Swenshuai.xi pDBreg->u32V_PreScalingRatio = DIP_R4BYTE(0, REG_SC_BK3B_1B_L,eWindow);
946*53ee8cc1Swenshuai.xi
947*53ee8cc1Swenshuai.xi pDBreg->u16H_CapStart = (DIP_R2BYTE(0, REG_SC_BK3B_63_L,eWindow) - 1);
948*53ee8cc1Swenshuai.xi pDBreg->u16H_CapSize = (DIP_R2BYTE(0, REG_SC_BK3B_64_L,eWindow) - pDBreg->u16H_CapStart);
949*53ee8cc1Swenshuai.xi pDBreg->u16V_CapStart = (DIP_R2BYTE(0, REG_SC_BK3B_65_L,eWindow) - 1);
950*53ee8cc1Swenshuai.xi pDBreg->u16V_CapSize = (DIP_R2BYTE(0, REG_SC_BK3B_66_L,eWindow) - pDBreg->u16V_CapStart);
951*53ee8cc1Swenshuai.xi }
952*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
953*53ee8cc1Swenshuai.xi {
954*53ee8cc1Swenshuai.xi pDBreg->u32H_PreScalingRatio = DIP_R4BYTE(0, REG_SC_BK3C_37_L,eWindow);
955*53ee8cc1Swenshuai.xi if( DIP_R2BYTE(0, REG_SC_BK3C_78_L,eWindow) & BIT(15) )
956*53ee8cc1Swenshuai.xi pDBreg->u32H_PreScalingRatio |= BIT(31);
957*53ee8cc1Swenshuai.xi pDBreg->u32V_PreScalingRatio = DIP_R4BYTE(0, REG_SC_BK3C_1B_L,eWindow);
958*53ee8cc1Swenshuai.xi
959*53ee8cc1Swenshuai.xi pDBreg->u16H_CapStart = (DIP_R2BYTE(0, REG_SC_BK3C_63_L,eWindow) - 1);
960*53ee8cc1Swenshuai.xi pDBreg->u16H_CapSize = (DIP_R2BYTE(0, REG_SC_BK3C_64_L,eWindow) - pDBreg->u16H_CapStart);
961*53ee8cc1Swenshuai.xi pDBreg->u16V_CapStart = (DIP_R2BYTE(0, REG_SC_BK3C_65_L,eWindow) - 1);
962*53ee8cc1Swenshuai.xi pDBreg->u16V_CapSize = (DIP_R2BYTE(0, REG_SC_BK3C_66_L,eWindow) - pDBreg->u16V_CapStart);
963*53ee8cc1Swenshuai.xi }
964*53ee8cc1Swenshuai.xi else
965*53ee8cc1Swenshuai.xi {
966*53ee8cc1Swenshuai.xi return;
967*53ee8cc1Swenshuai.xi }
968*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_Set444to422(void * pInstance,EN_DRV_XC_DWIN_DATA_FMT fmt,MS_BOOL bSrcYUVFmt,MS_BOOL bSrcFmt422,SCALER_DIP_WIN eWindow)969*53ee8cc1Swenshuai.xi void HAL_XC_DIP_Set444to422(void *pInstance, EN_DRV_XC_DWIN_DATA_FMT fmt,MS_BOOL bSrcYUVFmt,MS_BOOL bSrcFmt422,SCALER_DIP_WIN eWindow)
970*53ee8cc1Swenshuai.xi {
971*53ee8cc1Swenshuai.xi
972*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_SetFRC(void * pInstance,MS_BOOL bEnable,MS_U16 u16In,MS_U16 u16Out,SCALER_DIP_WIN eWindow)973*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetFRC(void *pInstance, MS_BOOL bEnable,MS_U16 u16In,MS_U16 u16Out,SCALER_DIP_WIN eWindow)
974*53ee8cc1Swenshuai.xi {
975*53ee8cc1Swenshuai.xi MS_U16 u16Ratio=0;
976*53ee8cc1Swenshuai.xi MS_U64 u64_result = 0;
977*53ee8cc1Swenshuai.xi
978*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
979*53ee8cc1Swenshuai.xi {
980*53ee8cc1Swenshuai.xi if(bEnable)
981*53ee8cc1Swenshuai.xi {
982*53ee8cc1Swenshuai.xi if(u16In > u16Out)
983*53ee8cc1Swenshuai.xi {
984*53ee8cc1Swenshuai.xi u64_result = (u16In-u16Out)*64;
985*53ee8cc1Swenshuai.xi do_div(u64_result,u16In);
986*53ee8cc1Swenshuai.xi u16Ratio = u64_result;
987*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_40_L,u16Ratio,BMASK(5:0));
988*53ee8cc1Swenshuai.xi }
989*53ee8cc1Swenshuai.xi else
990*53ee8cc1Swenshuai.xi {
991*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_40_L,0,BMASK(5:0));
992*53ee8cc1Swenshuai.xi }
993*53ee8cc1Swenshuai.xi }
994*53ee8cc1Swenshuai.xi else
995*53ee8cc1Swenshuai.xi {
996*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_40_L,0,BMASK(5:0));
997*53ee8cc1Swenshuai.xi }
998*53ee8cc1Swenshuai.xi }
999*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1000*53ee8cc1Swenshuai.xi {
1001*53ee8cc1Swenshuai.xi if(bEnable)
1002*53ee8cc1Swenshuai.xi {
1003*53ee8cc1Swenshuai.xi if(u16In > u16Out)
1004*53ee8cc1Swenshuai.xi {
1005*53ee8cc1Swenshuai.xi u64_result = (u16In-u16Out)*64;
1006*53ee8cc1Swenshuai.xi do_div(u64_result,u16In);
1007*53ee8cc1Swenshuai.xi u16Ratio = u64_result;
1008*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_4D_L,u16Ratio,BMASK(5:0));
1009*53ee8cc1Swenshuai.xi }
1010*53ee8cc1Swenshuai.xi else
1011*53ee8cc1Swenshuai.xi {
1012*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_4D_L,0,BMASK(5:0));
1013*53ee8cc1Swenshuai.xi }
1014*53ee8cc1Swenshuai.xi }
1015*53ee8cc1Swenshuai.xi else
1016*53ee8cc1Swenshuai.xi {
1017*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_4D_L,0,BMASK(5:0));
1018*53ee8cc1Swenshuai.xi }
1019*53ee8cc1Swenshuai.xi }
1020*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1021*53ee8cc1Swenshuai.xi {
1022*53ee8cc1Swenshuai.xi if(bEnable)
1023*53ee8cc1Swenshuai.xi {
1024*53ee8cc1Swenshuai.xi if(u16In > u16Out)
1025*53ee8cc1Swenshuai.xi {
1026*53ee8cc1Swenshuai.xi u64_result = (u16In-u16Out)*64;
1027*53ee8cc1Swenshuai.xi do_div(u64_result,u16In);
1028*53ee8cc1Swenshuai.xi u16Ratio = u64_result;
1029*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_4D_L,u16Ratio,BMASK(5:0));
1030*53ee8cc1Swenshuai.xi }
1031*53ee8cc1Swenshuai.xi else
1032*53ee8cc1Swenshuai.xi {
1033*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_4D_L,0,BMASK(5:0));
1034*53ee8cc1Swenshuai.xi }
1035*53ee8cc1Swenshuai.xi }
1036*53ee8cc1Swenshuai.xi else
1037*53ee8cc1Swenshuai.xi {
1038*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_4D_L,0,BMASK(5:0));
1039*53ee8cc1Swenshuai.xi }
1040*53ee8cc1Swenshuai.xi }
1041*53ee8cc1Swenshuai.xi else
1042*53ee8cc1Swenshuai.xi {
1043*53ee8cc1Swenshuai.xi return;
1044*53ee8cc1Swenshuai.xi }
1045*53ee8cc1Swenshuai.xi
1046*53ee8cc1Swenshuai.xi }
Hal_SC_DWIN_set_input_vsync_inverse(void * pInstance,MS_BOOL bEnable,SCALER_DIP_WIN eWindow)1047*53ee8cc1Swenshuai.xi void Hal_SC_DWIN_set_input_vsync_inverse(void *pInstance, MS_BOOL bEnable, SCALER_DIP_WIN eWindow)
1048*53ee8cc1Swenshuai.xi {
1049*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1050*53ee8cc1Swenshuai.xi {
1051*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_01_L, (bEnable<<2), BIT(2) );
1052*53ee8cc1Swenshuai.xi }
1053*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1054*53ee8cc1Swenshuai.xi {
1055*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_12_L, (bEnable<<2), BIT(2) );
1056*53ee8cc1Swenshuai.xi }
1057*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1058*53ee8cc1Swenshuai.xi {
1059*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_12_L, (bEnable<<2), BIT(2) );
1060*53ee8cc1Swenshuai.xi }
1061*53ee8cc1Swenshuai.xi else
1062*53ee8cc1Swenshuai.xi {
1063*53ee8cc1Swenshuai.xi return;
1064*53ee8cc1Swenshuai.xi }
1065*53ee8cc1Swenshuai.xi }
1066*53ee8cc1Swenshuai.xi
1067*53ee8cc1Swenshuai.xi //=============== DIP =====================//
1068*53ee8cc1Swenshuai.xi #define DWIN_CAPTURE_TIMEOUT_CNT 10 //consider 576i video, maximum time is 20+20x2 = 60 ms
1069*53ee8cc1Swenshuai.xi
HAL_XC_DIP_GetBusSize(void * pInstance,SCALER_DIP_WIN eWindow)1070*53ee8cc1Swenshuai.xi MS_U16 HAL_XC_DIP_GetBusSize(void *pInstance, SCALER_DIP_WIN eWindow)
1071*53ee8cc1Swenshuai.xi {
1072*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1073*53ee8cc1Swenshuai.xi {
1074*53ee8cc1Swenshuai.xi return DWIN_BYTE_PER_WORD;
1075*53ee8cc1Swenshuai.xi }
1076*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1077*53ee8cc1Swenshuai.xi {
1078*53ee8cc1Swenshuai.xi return DWIN_BYTE_PER_WORD;
1079*53ee8cc1Swenshuai.xi }
1080*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1081*53ee8cc1Swenshuai.xi {
1082*53ee8cc1Swenshuai.xi return DWIN_BYTE_PER_WORD;
1083*53ee8cc1Swenshuai.xi }
1084*53ee8cc1Swenshuai.xi else
1085*53ee8cc1Swenshuai.xi {
1086*53ee8cc1Swenshuai.xi return 0xFF;
1087*53ee8cc1Swenshuai.xi }
1088*53ee8cc1Swenshuai.xi }
1089*53ee8cc1Swenshuai.xi
HAL_XC_DIP_SWReset(void * pInstance,SCALER_DIP_WIN eWindow)1090*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SWReset(void *pInstance, SCALER_DIP_WIN eWindow)
1091*53ee8cc1Swenshuai.xi {
1092*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1093*53ee8cc1Swenshuai.xi {
1094*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7F_L,BIT(0), BIT(0));
1095*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7F_L,0, BIT(0));
1096*53ee8cc1Swenshuai.xi }
1097*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1098*53ee8cc1Swenshuai.xi {
1099*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_73_L,BIT(0), BIT(0));
1100*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_73_L,0, BIT(0));
1101*53ee8cc1Swenshuai.xi }
1102*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1103*53ee8cc1Swenshuai.xi {
1104*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_73_L,BIT(0), BIT(0));
1105*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_73_L,0, BIT(0));
1106*53ee8cc1Swenshuai.xi }
1107*53ee8cc1Swenshuai.xi else
1108*53ee8cc1Swenshuai.xi {
1109*53ee8cc1Swenshuai.xi return;
1110*53ee8cc1Swenshuai.xi }
1111*53ee8cc1Swenshuai.xi }
1112*53ee8cc1Swenshuai.xi
HAL_XC_DIP_Init(void * pInstance,SCALER_DIP_WIN eWindow)1113*53ee8cc1Swenshuai.xi void HAL_XC_DIP_Init(void *pInstance, SCALER_DIP_WIN eWindow)
1114*53ee8cc1Swenshuai.xi {
1115*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1116*53ee8cc1Swenshuai.xi {
1117*53ee8cc1Swenshuai.xi //[15]intlac. src;[12:8]422to420 ratio;[6]dwin_en;[5:4]format(rgb888);[3]intlac_w;[2:0]frm_buf_num
1118*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK36_01_L,0x0840);
1119*53ee8cc1Swenshuai.xi // [10]pdw_off;[9:8] reg_dip_pdw_src_sel;[7:0]alpha
1120*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK36_02_L,0x0400);
1121*53ee8cc1Swenshuai.xi //[8] write once; [9] write once trig
1122*53ee8cc1Swenshuai.xi if(HAL_XC_DIP_GetBusSize(pInstance,eWindow) == DIP_BYTE_PER_WORD)
1123*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK36_03_L,0x0000);
1124*53ee8cc1Swenshuai.xi else
1125*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK36_03_L,0x0800);
1126*53ee8cc1Swenshuai.xi //When dip overstep memory next to dip,dip won't stop telling this wrong state with continuous interrupt.
1127*53ee8cc1Swenshuai.xi //The continuous interrupt will cause the high cpu possesion.
1128*53ee8cc1Swenshuai.xi //So we mask the related bit to ignore the wrong state.
1129*53ee8cc1Swenshuai.xi //Function HAL_XC_MIU_Protect will protect the memory next to dip being overstepped by dip in case "MIU_PROTECT == 1".
1130*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_04_L, BIT(4),BIT(4));
1131*53ee8cc1Swenshuai.xi //clear mirror state
1132*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L, 0 ,BIT(9));
1133*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L, 0 ,BIT(10));
1134*53ee8cc1Swenshuai.xi //[15:8]wreq max ; [7:0]wreq threshold
1135*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK36_6F_L,0x200A);
1136*53ee8cc1Swenshuai.xi //tile request number
1137*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK36_7E_L,0x0010);
1138*53ee8cc1Swenshuai.xi //Double buffer enable
1139*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7E_L,BIT(0),BIT(0));
1140*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7F_L,BIT(7),BIT(7));
1141*53ee8cc1Swenshuai.xi //enable dip clk
1142*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_IDCLK3, DISABLE, CKG_IDCLK3_INVERT); // Not Invert
1143*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_IDCLK3, CKG_IDCLK3_GATED, CKG_IDCLK3_GATED); // Disable clock
1144*53ee8cc1Swenshuai.xi
1145*53ee8cc1Swenshuai.xi //enable OSD blending
1146*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_10_L, BIT(0) ,BIT(0));
1147*53ee8cc1Swenshuai.xi
1148*53ee8cc1Swenshuai.xi //TEE clip
1149*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_0F_L,0x1000,BMASK(12:0));
1150*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_2F_L,0x1000,BMASK(12:0));
1151*53ee8cc1Swenshuai.xi
1152*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_38_L,0xff, BMASK(7:0));
1153*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_48_L,0xff, BMASK(7:0));
1154*53ee8cc1Swenshuai.xi
1155*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
1156*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7E_L, BMASK(7:4) , BMASK(7:4));
1157*53ee8cc1Swenshuai.xi #endif
1158*53ee8cc1Swenshuai.xi }
1159*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1160*53ee8cc1Swenshuai.xi {
1161*53ee8cc1Swenshuai.xi //[15]intlac. src;[12:8]422to420 ratio;[6]dwin_en;[5:4]format(rgb888);[3]intlac_w;[2:0]frm_buf_num
1162*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3B_01_L,0x0840);
1163*53ee8cc1Swenshuai.xi // [10]pdw_off;[9:8] reg_dip_pdw_src_sel;[7:0]alpha
1164*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3B_02_L,0x0400);
1165*53ee8cc1Swenshuai.xi //[8] write once; [9] write once trig[11]256mode
1166*53ee8cc1Swenshuai.xi if(HAL_XC_DIP_GetBusSize(pInstance,eWindow) == DIP_BYTE_PER_WORD)
1167*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3B_03_L,0x0000);
1168*53ee8cc1Swenshuai.xi else
1169*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3B_03_L,0x0800);
1170*53ee8cc1Swenshuai.xi //When dip overstep memory next to dip,dip won't stop telling this wrong state with continuous interrupt.
1171*53ee8cc1Swenshuai.xi //The continuous interrupt will cause the high cpu possesion.
1172*53ee8cc1Swenshuai.xi //So we mask the related bit to ignore the wrong state.
1173*53ee8cc1Swenshuai.xi //Function HAL_XC_MIU_Protect will protect the memory next to dip being overstepped by dip in case "MIU_PROTECT == 1".
1174*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_04_L, BIT(4),BIT(4));
1175*53ee8cc1Swenshuai.xi //clear mirror state
1176*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_0B_L, 0 ,BIT(9));
1177*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_0B_L, 0 ,BIT(10));
1178*53ee8cc1Swenshuai.xi //[15:8]wreq max ; [7:0]wreq threshold
1179*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3B_6F_L,0x200A);
1180*53ee8cc1Swenshuai.xi //tile request number
1181*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3B_7E_L,0x0010);
1182*53ee8cc1Swenshuai.xi //Double buffer enable
1183*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_72_L,BIT(0),BIT(0));
1184*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7F_L,BIT(7),BIT(7));
1185*53ee8cc1Swenshuai.xi //set OP capture E_XC_DIP_VOP2/E_XC_DIP_OP2
1186*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7F_L, 2<<4, BMASK(5:4));
1187*53ee8cc1Swenshuai.xi //enable dwin0 clk
1188*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_PDW0, DISABLE, CKG_PDW0_INVERT); // Not Invert
1189*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_PDW0, CKG_PDW0_GATED, CKG_PDW0_GATED); // Disable clock
1190*53ee8cc1Swenshuai.xi
1191*53ee8cc1Swenshuai.xi //TEE clip
1192*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_0D_L,0x1000,BMASK(12:0));
1193*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_1E_L,0x1000,BMASK(12:0));
1194*53ee8cc1Swenshuai.xi
1195*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
1196*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7F_L, BMASK(3:0) , BMASK(3:0));
1197*53ee8cc1Swenshuai.xi #endif
1198*53ee8cc1Swenshuai.xi
1199*53ee8cc1Swenshuai.xi }
1200*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1201*53ee8cc1Swenshuai.xi {
1202*53ee8cc1Swenshuai.xi //[15]intlac. src;[12:8]422to420 ratio;[6]dwin_en;[5:4]format(rgb888);[3]intlac_w;[2:0]frm_buf_num
1203*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3C_01_L,0x0840);
1204*53ee8cc1Swenshuai.xi // [10]pdw_off;[9:8] reg_dip_pdw_src_sel;[7:0]alpha
1205*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3C_02_L,0x0400);
1206*53ee8cc1Swenshuai.xi //[8] write once; [9] write once trig[11]256mode
1207*53ee8cc1Swenshuai.xi if(HAL_XC_DIP_GetBusSize(pInstance,eWindow) == DIP_BYTE_PER_WORD)
1208*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3C_03_L,0x0000);
1209*53ee8cc1Swenshuai.xi else
1210*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3C_03_L,0x0800);
1211*53ee8cc1Swenshuai.xi //When dip overstep memory next to dip,dip won't stop telling this wrong state with continuous interrupt.
1212*53ee8cc1Swenshuai.xi //The continuous interrupt will cause the high cpu possesion.
1213*53ee8cc1Swenshuai.xi //So we mask the related bit to ignore the wrong state.
1214*53ee8cc1Swenshuai.xi //Function HAL_XC_MIU_Protect will protect the memory next to dip being overstepped by dip in case "MIU_PROTECT == 1".
1215*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_04_L, BIT(4),BIT(4));
1216*53ee8cc1Swenshuai.xi //clear mirror state
1217*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_0B_L, 0 ,BIT(9));
1218*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_0B_L, 0 ,BIT(10));
1219*53ee8cc1Swenshuai.xi //[15:8]wreq max ; [7:0]wreq threshold
1220*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3C_6F_L,0x200A);
1221*53ee8cc1Swenshuai.xi //tile request number
1222*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3C_7E_L,0x0010);
1223*53ee8cc1Swenshuai.xi //Double buffer enable
1224*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_72_L,BIT(0),BIT(0));
1225*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7F_L,BIT(7),BIT(7));
1226*53ee8cc1Swenshuai.xi //set OP capture E_XC_DIP_VOP2/E_XC_DIP_OP2
1227*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7F_L, 2<<4, BMASK(5:4));
1228*53ee8cc1Swenshuai.xi //enable dwin1 clk
1229*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_PDW1, DISABLE, CKG_PDW1_INVERT); // Not Invert
1230*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_PDW1, CKG_PDW1_GATED, CKG_PDW1_GATED); // Disable clock
1231*53ee8cc1Swenshuai.xi
1232*53ee8cc1Swenshuai.xi //TEE clip
1233*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_0D_L,0x1000,BMASK(12:0));
1234*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_1E_L,0x1000,BMASK(12:0));
1235*53ee8cc1Swenshuai.xi
1236*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
1237*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7F_L, BMASK(3:0) , BMASK(3:0));
1238*53ee8cc1Swenshuai.xi #endif
1239*53ee8cc1Swenshuai.xi
1240*53ee8cc1Swenshuai.xi }
1241*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_1C_L, 0 ,BIT(14));
1242*53ee8cc1Swenshuai.xi
1243*53ee8cc1Swenshuai.xi //force OP1 ACK 1
1244*53ee8cc1Swenshuai.xi //DIP_W2BYTEMSK(0, REG_SC_BK34_7F_L,BIT(1),BIT(1));
1245*53ee8cc1Swenshuai.xi //for DIP R
1246*53ee8cc1Swenshuai.xi //read request maximum length and 2������, tile 420 used
1247*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK36_7F_L,0x400F);
1248*53ee8cc1Swenshuai.xi //read request threshold
1249*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7D_L,0xA,BMASK(5:0));
1250*53ee8cc1Swenshuai.xi //reg_dipr_tile_req_num_evd
1251*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_1C_L,0x7,BMASK(4:0));
1252*53ee8cc1Swenshuai.xi
1253*53ee8cc1Swenshuai.xi //output capture setting
1254*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK10_23_L, BIT(4), BIT(4)); // Set to no osd for DIP select
1255*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK10_23_L, E_XC_DIP_VOP2<<12, BMASK(13:12));
1256*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK10_50_L, BIT(14), BMASK(14:13));
1257*53ee8cc1Swenshuai.xi
1258*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK10_50_L, BIT(12), BIT(12)); // Set to with osd for DIP select
1259*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK10_50_L, E_XC_DIP_OP2<<8, BMASK(9:8));
1260*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK10_6B_L, BIT(13), BMASK(13:12));
1261*53ee8cc1Swenshuai.xi
1262*53ee8cc1Swenshuai.xi //recv2dip_cap_en_main
1263*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK4A_05_L, BIT(1), BIT(1));
1264*53ee8cc1Swenshuai.xi //recv2dip_cap_en_sub
1265*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK4A_04_L, BIT(1), BIT(1));
1266*53ee8cc1Swenshuai.xi
1267*53ee8cc1Swenshuai.xi //Sc2 op capture enable:
1268*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK90_50_L, BIT(12), BIT(12));
1269*53ee8cc1Swenshuai.xi //Sc2 op capture stage 0: before osdb 1: after osdb
1270*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK90_50_L, E_XC_DIP_OP2<<8, BMASK(9:8));// Set to with osd for DIP select
1271*53ee8cc1Swenshuai.xi }
1272*53ee8cc1Swenshuai.xi
HAL_XC_DIP_EnableCaptureStream(void * pInstance,MS_BOOL bEnable,SCALER_DIP_WIN eWindow)1273*53ee8cc1Swenshuai.xi void HAL_XC_DIP_EnableCaptureStream(void *pInstance, MS_BOOL bEnable,SCALER_DIP_WIN eWindow)
1274*53ee8cc1Swenshuai.xi {
1275*53ee8cc1Swenshuai.xi MS_U16 u16IntrStus = 0;
1276*53ee8cc1Swenshuai.xi MS_XC_DIP_SOURCE_TYPE eHalSource;
1277*53ee8cc1Swenshuai.xi SCALER_DIP_SOURCE_TYPE eWindowSource = SCALER_DIP_SOURCE_TYPE_MAIN;
1278*53ee8cc1Swenshuai.xi
1279*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1280*53ee8cc1Swenshuai.xi {
1281*53ee8cc1Swenshuai.xi eWindowSource = DipSource;
1282*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
1283*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7E_L, 0 , BMASK(7:4));
1284*53ee8cc1Swenshuai.xi #endif
1285*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_IDCLK3, DISABLE, CKG_IDCLK3_GATED); // Enable clock
1286*53ee8cc1Swenshuai.xi }
1287*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1288*53ee8cc1Swenshuai.xi {
1289*53ee8cc1Swenshuai.xi eWindowSource = Dwin0Source;
1290*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
1291*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7F_L, 0 , BMASK(3:0));
1292*53ee8cc1Swenshuai.xi #endif
1293*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_PDW0, DISABLE, CKG_PDW0_GATED); // Enable clock
1294*53ee8cc1Swenshuai.xi }
1295*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1296*53ee8cc1Swenshuai.xi {
1297*53ee8cc1Swenshuai.xi eWindowSource = Dwin1Source;
1298*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
1299*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7F_L, 0 , BMASK(3:0));
1300*53ee8cc1Swenshuai.xi #endif
1301*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_PDW1, DISABLE, CKG_PDW1_GATED); // Enable clock
1302*53ee8cc1Swenshuai.xi }
1303*53ee8cc1Swenshuai.xi
1304*53ee8cc1Swenshuai.xi switch(eWindowSource)
1305*53ee8cc1Swenshuai.xi {
1306*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_DRAM:
1307*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_SUB2 :
1308*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_OP_CAPTURE:
1309*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_SC2_OP_CAPTURE:
1310*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_OSD:
1311*53ee8cc1Swenshuai.xi eHalSource = E_XC_DIP_SOURCE_TYPE_SUB2;
1312*53ee8cc1Swenshuai.xi break;
1313*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_MAIN :
1314*53ee8cc1Swenshuai.xi eHalSource = E_XC_DIP_SOURCE_TYPE_MAIN;
1315*53ee8cc1Swenshuai.xi break;
1316*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_SUB :
1317*53ee8cc1Swenshuai.xi eHalSource = E_XC_DIP_SOURCE_TYPE_MAIN;
1318*53ee8cc1Swenshuai.xi break;
1319*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_OP_MAIN:
1320*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_OP_SUB:
1321*53ee8cc1Swenshuai.xi eHalSource = E_XC_DIP_SOURCE_TYPE_OP;
1322*53ee8cc1Swenshuai.xi break;
1323*53ee8cc1Swenshuai.xi default:
1324*53ee8cc1Swenshuai.xi DIP_H_ERR("SCALER_DIP_SOURCE_TYPE does not support\n");
1325*53ee8cc1Swenshuai.xi return;
1326*53ee8cc1Swenshuai.xi }
1327*53ee8cc1Swenshuai.xi
1328*53ee8cc1Swenshuai.xi
1329*53ee8cc1Swenshuai.xi if(bEnable == TRUE)
1330*53ee8cc1Swenshuai.xi {
1331*53ee8cc1Swenshuai.xi //Control DIPR
1332*53ee8cc1Swenshuai.xi if(eWindowSource == SCALER_DIP_SOURCE_TYPE_DRAM)
1333*53ee8cc1Swenshuai.xi {
1334*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7D_L,BIT(14), BIT(14));
1335*53ee8cc1Swenshuai.xi }
1336*53ee8cc1Swenshuai.xi else if( (eWindowSource == SCALER_DIP_SOURCE_TYPE_OP_MAIN) || (eWindowSource == SCALER_DIP_SOURCE_TYPE_OP_SUB) )
1337*53ee8cc1Swenshuai.xi {
1338*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1339*53ee8cc1Swenshuai.xi {
1340*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7C_L,((eWindowSource == SCALER_DIP_SOURCE_TYPE_OP_SUB)?BIT(15):0),BIT(15));
1341*53ee8cc1Swenshuai.xi }
1342*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1343*53ee8cc1Swenshuai.xi {
1344*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7F_L, ((eWindowSource == SCALER_DIP_SOURCE_TYPE_OP_SUB)?BIT(6):0),BIT(6));
1345*53ee8cc1Swenshuai.xi }
1346*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1347*53ee8cc1Swenshuai.xi {
1348*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7F_L, ((eWindowSource == SCALER_DIP_SOURCE_TYPE_OP_SUB)?BIT(6):0),BIT(6));
1349*53ee8cc1Swenshuai.xi }
1350*53ee8cc1Swenshuai.xi }
1351*53ee8cc1Swenshuai.xi //new rotation enabel
1352*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6E_L,bDIPRotation?BIT(11):0,BIT(11));
1353*53ee8cc1Swenshuai.xi //Enable last
1354*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1355*53ee8cc1Swenshuai.xi {
1356*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_02_L, BITS(9:8,eHalSource),BMASK(10:8));
1357*53ee8cc1Swenshuai.xi }
1358*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1359*53ee8cc1Swenshuai.xi {
1360*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_02_L, BITS(9:8,eHalSource),BMASK(10:8));
1361*53ee8cc1Swenshuai.xi }
1362*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1363*53ee8cc1Swenshuai.xi {
1364*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_02_L, BITS(9:8,eHalSource),BMASK(10:8));
1365*53ee8cc1Swenshuai.xi }
1366*53ee8cc1Swenshuai.xi }
1367*53ee8cc1Swenshuai.xi else
1368*53ee8cc1Swenshuai.xi {
1369*53ee8cc1Swenshuai.xi //new rotation disable
1370*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6E_L,0,BIT(11));
1371*53ee8cc1Swenshuai.xi //Disable first
1372*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1373*53ee8cc1Swenshuai.xi {
1374*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_02_L, BIT(10), BMASK(10:8));
1375*53ee8cc1Swenshuai.xi //disable write once
1376*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_03_L, 0, BIT(8));
1377*53ee8cc1Swenshuai.xi }
1378*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1379*53ee8cc1Swenshuai.xi {
1380*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_02_L, BIT(10), BMASK(10:8));
1381*53ee8cc1Swenshuai.xi //disable write once
1382*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_03_L, 0, BIT(8));
1383*53ee8cc1Swenshuai.xi }
1384*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1385*53ee8cc1Swenshuai.xi {
1386*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_02_L, BIT(10), BMASK(10:8));
1387*53ee8cc1Swenshuai.xi //disable write once
1388*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_03_L, 0, BIT(8));
1389*53ee8cc1Swenshuai.xi }
1390*53ee8cc1Swenshuai.xi
1391*53ee8cc1Swenshuai.xi if(eWindowSource == SCALER_DIP_SOURCE_TYPE_DRAM)
1392*53ee8cc1Swenshuai.xi {
1393*53ee8cc1Swenshuai.xi //Dipr disable
1394*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7D_L,0, BIT(14));
1395*53ee8cc1Swenshuai.xi }
1396*53ee8cc1Swenshuai.xi }
1397*53ee8cc1Swenshuai.xi
1398*53ee8cc1Swenshuai.xi
1399*53ee8cc1Swenshuai.xi if (!bEnable)
1400*53ee8cc1Swenshuai.xi {
1401*53ee8cc1Swenshuai.xi //Auto clear status to zero
1402*53ee8cc1Swenshuai.xi u16IntrStus = HAL_XC_DIP_GetIntrStatus(pInstance, eWindow);
1403*53ee8cc1Swenshuai.xi HAL_XC_DIP_ClearIntr(pInstance, u16IntrStus,eWindow);
1404*53ee8cc1Swenshuai.xi HAL_XC_DIP_SWReset(pInstance, eWindow);
1405*53ee8cc1Swenshuai.xi }
1406*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_EnableIntr(void * pInstance,MS_U16 u8mask,MS_BOOL bEnable,SCALER_DIP_WIN eWindow)1407*53ee8cc1Swenshuai.xi void HAL_XC_DIP_EnableIntr(void *pInstance, MS_U16 u8mask, MS_BOOL bEnable,SCALER_DIP_WIN eWindow)
1408*53ee8cc1Swenshuai.xi {
1409*53ee8cc1Swenshuai.xi MS_U16 regval =0;
1410*53ee8cc1Swenshuai.xi
1411*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1412*53ee8cc1Swenshuai.xi {
1413*53ee8cc1Swenshuai.xi regval = DIP_R2BYTE(0, REG_SC_BK36_08_L,eWindow);
1414*53ee8cc1Swenshuai.xi }
1415*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1416*53ee8cc1Swenshuai.xi {
1417*53ee8cc1Swenshuai.xi regval = DIP_R2BYTE(0, REG_SC_BK3B_08_L,eWindow);
1418*53ee8cc1Swenshuai.xi }
1419*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1420*53ee8cc1Swenshuai.xi {
1421*53ee8cc1Swenshuai.xi regval = DIP_R2BYTE(0, REG_SC_BK3C_08_L,eWindow);
1422*53ee8cc1Swenshuai.xi }
1423*53ee8cc1Swenshuai.xi
1424*53ee8cc1Swenshuai.xi if(bEnable)
1425*53ee8cc1Swenshuai.xi regval &= ~u8mask;
1426*53ee8cc1Swenshuai.xi else
1427*53ee8cc1Swenshuai.xi regval |= u8mask;
1428*53ee8cc1Swenshuai.xi
1429*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_08_L, regval, BMASK(7:0));
1430*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_ClearIntr(void * pInstance,MS_U16 u16mask,SCALER_DIP_WIN eWindow)1431*53ee8cc1Swenshuai.xi void HAL_XC_DIP_ClearIntr(void *pInstance, MS_U16 u16mask,SCALER_DIP_WIN eWindow)
1432*53ee8cc1Swenshuai.xi {
1433*53ee8cc1Swenshuai.xi MS_U16 regval =0;
1434*53ee8cc1Swenshuai.xi
1435*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1436*53ee8cc1Swenshuai.xi {
1437*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(0, REG_SC_BK36_09_L,u16mask&BMASK(7:0), BMASK(7:0));
1438*53ee8cc1Swenshuai.xi regval = DIP_R2BYTE(0, REG_SC_BK36_03_L,eWindow);
1439*53ee8cc1Swenshuai.xi //only disable in capture one frame mode, cant disable in continous mode
1440*53ee8cc1Swenshuai.xi if((regval&BIT(8)) != 0)
1441*53ee8cc1Swenshuai.xi {
1442*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
1443*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(0, REG_SC_BK34_7E_L, BMASK(7:4) , BMASK(7:4));
1444*53ee8cc1Swenshuai.xi #endif
1445*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_IDCLK3, CKG_IDCLK3_GATED, CKG_IDCLK3_GATED); // Disable clock
1446*53ee8cc1Swenshuai.xi }
1447*53ee8cc1Swenshuai.xi }
1448*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1449*53ee8cc1Swenshuai.xi {
1450*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(0, REG_SC_BK3B_09_L,u16mask&BMASK(7:0), BMASK(7:0));
1451*53ee8cc1Swenshuai.xi regval = DIP_R2BYTE(0, REG_SC_BK3B_03_L,eWindow);
1452*53ee8cc1Swenshuai.xi //only disable in capture one frame mode, cant disable in continous mode
1453*53ee8cc1Swenshuai.xi if((regval&BIT(8)) != 0)
1454*53ee8cc1Swenshuai.xi {
1455*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
1456*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(0, REG_SC_BK3B_7F_L, BMASK(3:0) , BMASK(3:0));
1457*53ee8cc1Swenshuai.xi #endif
1458*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_PDW0, CKG_PDW0_GATED, CKG_PDW0_GATED); // Disable clock
1459*53ee8cc1Swenshuai.xi }
1460*53ee8cc1Swenshuai.xi }
1461*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1462*53ee8cc1Swenshuai.xi {
1463*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(0, REG_SC_BK3C_09_L,u16mask&BMASK(7:0), BMASK(7:0));
1464*53ee8cc1Swenshuai.xi regval = DIP_R2BYTE(0, REG_SC_BK3C_03_L,eWindow);
1465*53ee8cc1Swenshuai.xi //only disable in capture one frame mode, cant disable in continous mode
1466*53ee8cc1Swenshuai.xi if((regval&BIT(8)) != 0)
1467*53ee8cc1Swenshuai.xi {
1468*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
1469*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(0, REG_SC_BK3C_7F_L, BMASK(3:0) , BMASK(3:0));
1470*53ee8cc1Swenshuai.xi #endif
1471*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_PDW1, CKG_PDW1_GATED, CKG_PDW1_GATED); // Disable clock
1472*53ee8cc1Swenshuai.xi }
1473*53ee8cc1Swenshuai.xi }
1474*53ee8cc1Swenshuai.xi else
1475*53ee8cc1Swenshuai.xi {
1476*53ee8cc1Swenshuai.xi return;
1477*53ee8cc1Swenshuai.xi }
1478*53ee8cc1Swenshuai.xi
1479*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_GetIntrStatus(void * pInstance,SCALER_DIP_WIN eWindow)1480*53ee8cc1Swenshuai.xi MS_U16 HAL_XC_DIP_GetIntrStatus(void *pInstance, SCALER_DIP_WIN eWindow)
1481*53ee8cc1Swenshuai.xi {
1482*53ee8cc1Swenshuai.xi MS_U16 u16IntrStus = 0;
1483*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1484*53ee8cc1Swenshuai.xi {
1485*53ee8cc1Swenshuai.xi if(cmdq_wait_value != cmdq_ready_value)
1486*53ee8cc1Swenshuai.xi {
1487*53ee8cc1Swenshuai.xi cmdq_wait_value = MDrv_DIP_Read2Byte(g_u32Wait_Reg[eWindow]);
1488*53ee8cc1Swenshuai.xi #if 0
1489*53ee8cc1Swenshuai.xi MS_U32 timer1,timer2;
1490*53ee8cc1Swenshuai.xi
1491*53ee8cc1Swenshuai.xi timer1 = MsOS_GetSystemTime();
1492*53ee8cc1Swenshuai.xi timer2 = MsOS_GetSystemTime();
1493*53ee8cc1Swenshuai.xi while( (cmdq_wait_value != cmdq_ready_value) && ((timer2 - timer1)<100))
1494*53ee8cc1Swenshuai.xi {
1495*53ee8cc1Swenshuai.xi cmdq_wait_value = MDrv_DIP_Read2Byte(g_u32Wait_Reg[eWindow]);
1496*53ee8cc1Swenshuai.xi MsOS_DelayTask(1);
1497*53ee8cc1Swenshuai.xi timer2 = MsOS_GetSystemTime();
1498*53ee8cc1Swenshuai.xi }
1499*53ee8cc1Swenshuai.xi
1500*53ee8cc1Swenshuai.xi if(cmdq_wait_value != cmdq_ready_value)
1501*53ee8cc1Swenshuai.xi {
1502*53ee8cc1Swenshuai.xi DIP_H_ERR("\33[0;36m %s:%d timeout = %ld org = %d target = %d\33[m \n",__FUNCTION__,__LINE__,(timer2 - timer1),cmdq_wait_value,cmdq_ready_value);
1503*53ee8cc1Swenshuai.xi }
1504*53ee8cc1Swenshuai.xi #endif
1505*53ee8cc1Swenshuai.xi if (cmdq_wait_value == cmdq_ready_value)
1506*53ee8cc1Swenshuai.xi {
1507*53ee8cc1Swenshuai.xi u16IntrStus = SC_R2BYTEMSK(0, REG_SC_BK36_0A_L,BMASK(7:0));
1508*53ee8cc1Swenshuai.xi }
1509*53ee8cc1Swenshuai.xi }
1510*53ee8cc1Swenshuai.xi else
1511*53ee8cc1Swenshuai.xi {
1512*53ee8cc1Swenshuai.xi u16IntrStus = SC_R2BYTEMSK(0, REG_SC_BK36_0A_L,BMASK(7:0));
1513*53ee8cc1Swenshuai.xi }
1514*53ee8cc1Swenshuai.xi }
1515*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1516*53ee8cc1Swenshuai.xi {
1517*53ee8cc1Swenshuai.xi u16IntrStus = SC_R2BYTEMSK(0, REG_SC_BK3B_0A_L,BMASK(7:0));
1518*53ee8cc1Swenshuai.xi }
1519*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1520*53ee8cc1Swenshuai.xi {
1521*53ee8cc1Swenshuai.xi u16IntrStus = SC_R2BYTEMSK(0, REG_SC_BK3C_0A_L,BMASK(7:0));
1522*53ee8cc1Swenshuai.xi }
1523*53ee8cc1Swenshuai.xi
1524*53ee8cc1Swenshuai.xi return u16IntrStus;
1525*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_CpatureOneFrame(void * pInstance,SCALER_DIP_WIN eWindow)1526*53ee8cc1Swenshuai.xi void HAL_XC_DIP_CpatureOneFrame(void *pInstance, SCALER_DIP_WIN eWindow)//MS_BOOL benable, SCALER_DIP_WIN eWindow)
1527*53ee8cc1Swenshuai.xi {
1528*53ee8cc1Swenshuai.xi MS_U16 regval = 0;
1529*53ee8cc1Swenshuai.xi MS_U16 u16Count = 0;
1530*53ee8cc1Swenshuai.xi
1531*53ee8cc1Swenshuai.xi HAL_XC_DIP_CpatureOneFrame2(pInstance, eWindow);
1532*53ee8cc1Swenshuai.xi
1533*53ee8cc1Swenshuai.xi do{
1534*53ee8cc1Swenshuai.xi regval = HAL_XC_DIP_GetIntrStatus(pInstance, eWindow);
1535*53ee8cc1Swenshuai.xi if(regval > 0x0)
1536*53ee8cc1Swenshuai.xi break;
1537*53ee8cc1Swenshuai.xi u16Count++;
1538*53ee8cc1Swenshuai.xi MsOS_DelayTask(1);
1539*53ee8cc1Swenshuai.xi }while(u16Count < DWIN_CAPTURE_TIMEOUT_CNT);
1540*53ee8cc1Swenshuai.xi //if(u16Count >= DWIN_CAPTURE_TIMEOUT_CNT)
1541*53ee8cc1Swenshuai.xi // DIP_H_ERR("!!!Alert !!! DWIN Capture, wait ack time out!\n");
1542*53ee8cc1Swenshuai.xi
1543*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_CpatureOneFrame2(void * pInstance,SCALER_DIP_WIN eWindow)1544*53ee8cc1Swenshuai.xi void HAL_XC_DIP_CpatureOneFrame2(void *pInstance, SCALER_DIP_WIN eWindow)//MS_BOOL benable, SCALER_DIP_WIN eWindow)
1545*53ee8cc1Swenshuai.xi {
1546*53ee8cc1Swenshuai.xi MS_XC_DIP_SOURCE_TYPE eHalSource;
1547*53ee8cc1Swenshuai.xi SCALER_DIP_SOURCE_TYPE eWindowSource = SCALER_DIP_SOURCE_TYPE_MAIN;
1548*53ee8cc1Swenshuai.xi
1549*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1550*53ee8cc1Swenshuai.xi {
1551*53ee8cc1Swenshuai.xi eWindowSource = DipSource;
1552*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
1553*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7E_L, 0 , BMASK(7:4));
1554*53ee8cc1Swenshuai.xi #endif
1555*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_IDCLK3, DISABLE, CKG_IDCLK3_GATED); // Enable clock
1556*53ee8cc1Swenshuai.xi }
1557*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1558*53ee8cc1Swenshuai.xi {
1559*53ee8cc1Swenshuai.xi eWindowSource = Dwin0Source;
1560*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
1561*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7F_L, 0 , BMASK(3:0));
1562*53ee8cc1Swenshuai.xi #endif
1563*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_PDW0, DISABLE, CKG_PDW0_GATED); // Enable clock
1564*53ee8cc1Swenshuai.xi }
1565*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1566*53ee8cc1Swenshuai.xi {
1567*53ee8cc1Swenshuai.xi eWindowSource = Dwin1Source;
1568*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
1569*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7F_L, 0 , BMASK(3:0));
1570*53ee8cc1Swenshuai.xi #endif
1571*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_PDW1, DISABLE, CKG_PDW1_GATED); // Enable clock
1572*53ee8cc1Swenshuai.xi }
1573*53ee8cc1Swenshuai.xi
1574*53ee8cc1Swenshuai.xi switch(eWindowSource)
1575*53ee8cc1Swenshuai.xi {
1576*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_DRAM:
1577*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_SUB2 :
1578*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_OP_CAPTURE:
1579*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_SC2_OP_CAPTURE:
1580*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_OSD:
1581*53ee8cc1Swenshuai.xi eHalSource = E_XC_DIP_SOURCE_TYPE_SUB2;
1582*53ee8cc1Swenshuai.xi break;
1583*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_MAIN :
1584*53ee8cc1Swenshuai.xi eHalSource = E_XC_DIP_SOURCE_TYPE_MAIN;
1585*53ee8cc1Swenshuai.xi break;
1586*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_SUB :
1587*53ee8cc1Swenshuai.xi eHalSource = E_XC_DIP_SOURCE_TYPE_MAIN;
1588*53ee8cc1Swenshuai.xi break;
1589*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_OP_MAIN:
1590*53ee8cc1Swenshuai.xi case SCALER_DIP_SOURCE_TYPE_OP_SUB:
1591*53ee8cc1Swenshuai.xi eHalSource = E_XC_DIP_SOURCE_TYPE_OP;
1592*53ee8cc1Swenshuai.xi break;
1593*53ee8cc1Swenshuai.xi default:
1594*53ee8cc1Swenshuai.xi DIP_H_ERR("SCALER_DIP_SOURCE_TYPE does not support\n");
1595*53ee8cc1Swenshuai.xi return;
1596*53ee8cc1Swenshuai.xi }
1597*53ee8cc1Swenshuai.xi
1598*53ee8cc1Swenshuai.xi
1599*53ee8cc1Swenshuai.xi //Control OP1 Bank and DIPR
1600*53ee8cc1Swenshuai.xi if(eWindowSource == SCALER_DIP_SOURCE_TYPE_DRAM)
1601*53ee8cc1Swenshuai.xi {
1602*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7D_L,BIT(14), BIT(14));
1603*53ee8cc1Swenshuai.xi }
1604*53ee8cc1Swenshuai.xi else if( (eWindowSource == SCALER_DIP_SOURCE_TYPE_OP_MAIN) || (eWindowSource == SCALER_DIP_SOURCE_TYPE_OP_SUB) )
1605*53ee8cc1Swenshuai.xi {
1606*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1607*53ee8cc1Swenshuai.xi {
1608*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7C_L,((eWindowSource == SCALER_DIP_SOURCE_TYPE_OP_SUB)?BIT(15):0),BIT(15));
1609*53ee8cc1Swenshuai.xi }
1610*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1611*53ee8cc1Swenshuai.xi {
1612*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7F_L, ((eWindowSource == SCALER_DIP_SOURCE_TYPE_OP_SUB)?BIT(6):0),BIT(6));
1613*53ee8cc1Swenshuai.xi }
1614*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1615*53ee8cc1Swenshuai.xi {
1616*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7F_L, ((eWindowSource == SCALER_DIP_SOURCE_TYPE_OP_SUB)?BIT(6):0),BIT(6));
1617*53ee8cc1Swenshuai.xi }
1618*53ee8cc1Swenshuai.xi }
1619*53ee8cc1Swenshuai.xi
1620*53ee8cc1Swenshuai.xi //new rotation enabel
1621*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6E_L,bDIPRotation?BIT(11):0,BIT(11));
1622*53ee8cc1Swenshuai.xi //Enable last
1623*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1624*53ee8cc1Swenshuai.xi {
1625*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_02_L, BITS(9:8,eHalSource),BMASK(10:8));
1626*53ee8cc1Swenshuai.xi if(DipSource == SCALER_DIP_SOURCE_TYPE_DRAM)
1627*53ee8cc1Swenshuai.xi {
1628*53ee8cc1Swenshuai.xi //Dipr trigger
1629*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7C_L, BIT(15),BIT(15));
1630*53ee8cc1Swenshuai.xi }
1631*53ee8cc1Swenshuai.xi else
1632*53ee8cc1Swenshuai.xi {
1633*53ee8cc1Swenshuai.xi // Set the dwin write once (0x03 bit:8)
1634*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_03_L, BIT(8),BIT(8));
1635*53ee8cc1Swenshuai.xi //trigger
1636*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_03_L, BIT(9),BIT(9));
1637*53ee8cc1Swenshuai.xi }
1638*53ee8cc1Swenshuai.xi }
1639*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1640*53ee8cc1Swenshuai.xi {
1641*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_02_L, BITS(9:8,eHalSource),BMASK(10:8));
1642*53ee8cc1Swenshuai.xi if(Dwin0Source == SCALER_DIP_SOURCE_TYPE_DRAM)
1643*53ee8cc1Swenshuai.xi {
1644*53ee8cc1Swenshuai.xi //Dipr trigger
1645*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7C_L,BIT(15), BIT(15));
1646*53ee8cc1Swenshuai.xi }
1647*53ee8cc1Swenshuai.xi else
1648*53ee8cc1Swenshuai.xi {
1649*53ee8cc1Swenshuai.xi // Set the dwin write once (0x03 bit:8)
1650*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_03_L, BIT(8), BIT(8));
1651*53ee8cc1Swenshuai.xi //trigger
1652*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_03_L, BIT(9), BIT(9));
1653*53ee8cc1Swenshuai.xi }
1654*53ee8cc1Swenshuai.xi }
1655*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1656*53ee8cc1Swenshuai.xi {
1657*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_02_L, BITS(9:8,eHalSource),BMASK(10:8));
1658*53ee8cc1Swenshuai.xi if(Dwin1Source == SCALER_DIP_SOURCE_TYPE_DRAM)
1659*53ee8cc1Swenshuai.xi {
1660*53ee8cc1Swenshuai.xi //Dipr trigger
1661*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7C_L,BIT(15), BIT(15));
1662*53ee8cc1Swenshuai.xi }
1663*53ee8cc1Swenshuai.xi else
1664*53ee8cc1Swenshuai.xi {
1665*53ee8cc1Swenshuai.xi // Set the dwin write once (0x03 bit:8)
1666*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_03_L, BIT(8), BIT(8));
1667*53ee8cc1Swenshuai.xi //trigger
1668*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_03_L, BIT(9), BIT(9));
1669*53ee8cc1Swenshuai.xi }
1670*53ee8cc1Swenshuai.xi }
1671*53ee8cc1Swenshuai.xi
1672*53ee8cc1Swenshuai.xi DIP_WAIT();
1673*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_29_L, BMASK(7:0), BMASK(7:0));
1674*53ee8cc1Swenshuai.xi
1675*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_SelectSourceScanType(void * pInstance,EN_XC_DWIN_SCAN_TYPE enScan,SCALER_DIP_WIN eWindow)1676*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SelectSourceScanType(void *pInstance, EN_XC_DWIN_SCAN_TYPE enScan,SCALER_DIP_WIN eWindow)
1677*53ee8cc1Swenshuai.xi {
1678*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1679*53ee8cc1Swenshuai.xi {
1680*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_01_L,enScan?BIT(15):0, BIT(15));
1681*53ee8cc1Swenshuai.xi }
1682*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1683*53ee8cc1Swenshuai.xi {
1684*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_01_L,enScan?BIT(15):0, BIT(15));
1685*53ee8cc1Swenshuai.xi }
1686*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1687*53ee8cc1Swenshuai.xi {
1688*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_01_L,enScan?BIT(15):0, BIT(15));
1689*53ee8cc1Swenshuai.xi }
1690*53ee8cc1Swenshuai.xi else
1691*53ee8cc1Swenshuai.xi {
1692*53ee8cc1Swenshuai.xi return;
1693*53ee8cc1Swenshuai.xi }
1694*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_GetSourceScanType(void * pInstance,SCALER_DIP_WIN eWindow)1695*53ee8cc1Swenshuai.xi EN_XC_DWIN_SCAN_TYPE HAL_XC_DIP_GetSourceScanType(void *pInstance, SCALER_DIP_WIN eWindow)
1696*53ee8cc1Swenshuai.xi {
1697*53ee8cc1Swenshuai.xi EN_XC_DWIN_SCAN_TYPE eSacnType = GOPDWIN_SCAN_MODE_MAX;
1698*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1699*53ee8cc1Swenshuai.xi {
1700*53ee8cc1Swenshuai.xi eSacnType = (EN_XC_DWIN_SCAN_TYPE)(DIP_R2BYTEMSK(0, REG_SC_BK36_01_L,BIT(15),eWindow)>>15);
1701*53ee8cc1Swenshuai.xi }
1702*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1703*53ee8cc1Swenshuai.xi {
1704*53ee8cc1Swenshuai.xi eSacnType = (EN_XC_DWIN_SCAN_TYPE)(DIP_R2BYTEMSK(0, REG_SC_BK3B_01_L,BIT(15),eWindow)>>15);
1705*53ee8cc1Swenshuai.xi }
1706*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1707*53ee8cc1Swenshuai.xi {
1708*53ee8cc1Swenshuai.xi eSacnType = (EN_XC_DWIN_SCAN_TYPE)(DIP_R2BYTEMSK(0, REG_SC_BK3C_01_L,BIT(15),eWindow)>>15);
1709*53ee8cc1Swenshuai.xi }
1710*53ee8cc1Swenshuai.xi
1711*53ee8cc1Swenshuai.xi return eSacnType;
1712*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_SetInterlaceWrite(void * pInstance,MS_BOOL bEnable,SCALER_DIP_WIN eWindow)1713*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetInterlaceWrite(void *pInstance, MS_BOOL bEnable,SCALER_DIP_WIN eWindow)
1714*53ee8cc1Swenshuai.xi {
1715*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1716*53ee8cc1Swenshuai.xi {
1717*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_01_L, (bEnable?BIT(3):0) ,BIT(3));
1718*53ee8cc1Swenshuai.xi }
1719*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1720*53ee8cc1Swenshuai.xi {
1721*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_01_L, (bEnable?BIT(3):0) ,BIT(3));
1722*53ee8cc1Swenshuai.xi }
1723*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1724*53ee8cc1Swenshuai.xi {
1725*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_01_L, (bEnable?BIT(3):0) ,BIT(3));
1726*53ee8cc1Swenshuai.xi }
1727*53ee8cc1Swenshuai.xi else
1728*53ee8cc1Swenshuai.xi {
1729*53ee8cc1Swenshuai.xi return;
1730*53ee8cc1Swenshuai.xi }
1731*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_GetInterlaceWrite(void * pInstance,SCALER_DIP_WIN eWindow)1732*53ee8cc1Swenshuai.xi MS_BOOL HAL_XC_DIP_GetInterlaceWrite(void *pInstance, SCALER_DIP_WIN eWindow)
1733*53ee8cc1Swenshuai.xi {
1734*53ee8cc1Swenshuai.xi MS_BOOL bInterW = FALSE;
1735*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1736*53ee8cc1Swenshuai.xi {
1737*53ee8cc1Swenshuai.xi bInterW = (MS_BOOL)(DIP_R2BYTEMSK(0, REG_SC_BK36_01_L,BIT(3),eWindow)>>3);
1738*53ee8cc1Swenshuai.xi }
1739*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1740*53ee8cc1Swenshuai.xi {
1741*53ee8cc1Swenshuai.xi bInterW = (MS_BOOL)(DIP_R2BYTEMSK(0, REG_SC_BK3B_01_L,BIT(3),eWindow)>>3);
1742*53ee8cc1Swenshuai.xi }
1743*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1744*53ee8cc1Swenshuai.xi {
1745*53ee8cc1Swenshuai.xi bInterW = (MS_BOOL)(DIP_R2BYTEMSK(0, REG_SC_BK3C_01_L,BIT(3),eWindow)>>3);
1746*53ee8cc1Swenshuai.xi }
1747*53ee8cc1Swenshuai.xi
1748*53ee8cc1Swenshuai.xi return bInterW;
1749*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_SetDataFmt(void * pInstance,EN_DRV_XC_DWIN_DATA_FMT fmt,SCALER_DIP_WIN eWindow)1750*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetDataFmt(void *pInstance, EN_DRV_XC_DWIN_DATA_FMT fmt,SCALER_DIP_WIN eWindow)
1751*53ee8cc1Swenshuai.xi {
1752*53ee8cc1Swenshuai.xi MS_U16 u16Fmt = 0x0;
1753*53ee8cc1Swenshuai.xi
1754*53ee8cc1Swenshuai.xi switch (fmt)
1755*53ee8cc1Swenshuai.xi {
1756*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YUV422 :
1757*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YC422 :
1758*53ee8cc1Swenshuai.xi u16Fmt = 0;
1759*53ee8cc1Swenshuai.xi break;
1760*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_RGB565 :
1761*53ee8cc1Swenshuai.xi u16Fmt = 1;
1762*53ee8cc1Swenshuai.xi break;
1763*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_ARGB8888 :
1764*53ee8cc1Swenshuai.xi u16Fmt = 2;
1765*53ee8cc1Swenshuai.xi break;
1766*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YUV420 :
1767*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YUV420_H265 :
1768*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YUV420_H265_10BITS:
1769*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YUV420_PLANER:
1770*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YUV420_SEMI_PLANER:
1771*53ee8cc1Swenshuai.xi u16Fmt = 3;
1772*53ee8cc1Swenshuai.xi break;
1773*53ee8cc1Swenshuai.xi default :
1774*53ee8cc1Swenshuai.xi u16Fmt = 0x0;
1775*53ee8cc1Swenshuai.xi break;
1776*53ee8cc1Swenshuai.xi }
1777*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1778*53ee8cc1Swenshuai.xi {
1779*53ee8cc1Swenshuai.xi DipFmt = fmt;
1780*53ee8cc1Swenshuai.xi //set fmt
1781*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_01_L, BITS(5:4,u16Fmt),BMASK(5:4));
1782*53ee8cc1Swenshuai.xi //select yc separate
1783*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_03_L,((fmt == XC_DWIN_DATA_FMT_YC422)?BIT(6):0),BIT(6));
1784*53ee8cc1Swenshuai.xi //select de-tile for 420 semi planer
1785*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_03_L,((fmt == XC_DWIN_DATA_FMT_YUV420_SEMI_PLANER)?BIT(14):0),BIT(14));
1786*53ee8cc1Swenshuai.xi //select flash mode for 420 planer
1787*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7E_L,((fmt == XC_DWIN_DATA_FMT_YUV420_PLANER)?BIT(14):0),BIT(14));
1788*53ee8cc1Swenshuai.xi
1789*53ee8cc1Swenshuai.xi if( (fmt == XC_DWIN_DATA_FMT_RGB565) || (fmt == XC_DWIN_DATA_FMT_ARGB8888) )
1790*53ee8cc1Swenshuai.xi {
1791*53ee8cc1Swenshuai.xi //disable yc swap setting
1792*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_02_L,0,BMASK(15:14));
1793*53ee8cc1Swenshuai.xi //disable 444 to 422
1794*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_30_L,0,BIT(5));
1795*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_0B_L,0,BIT(12));
1796*53ee8cc1Swenshuai.xi }
1797*53ee8cc1Swenshuai.xi else
1798*53ee8cc1Swenshuai.xi {
1799*53ee8cc1Swenshuai.xi //disable rgb swap setting
1800*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7E_L,0,BIT(13));
1801*53ee8cc1Swenshuai.xi //enable 444 to 422
1802*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_30_L, BIT(5),BIT(5));
1803*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_0B_L, BIT(12),BIT(12));
1804*53ee8cc1Swenshuai.xi }
1805*53ee8cc1Swenshuai.xi }
1806*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1807*53ee8cc1Swenshuai.xi {
1808*53ee8cc1Swenshuai.xi Dwin0Fmt = fmt;
1809*53ee8cc1Swenshuai.xi //set fmt
1810*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_01_L, BITS(5:4,u16Fmt),BMASK(5:4));
1811*53ee8cc1Swenshuai.xi //select yc separate
1812*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_03_L,((fmt == XC_DWIN_DATA_FMT_YC422)?BIT(6):0),BIT(6));
1813*53ee8cc1Swenshuai.xi //select de-tile for 420 semi planer
1814*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_03_L,((fmt == XC_DWIN_DATA_FMT_YUV420_SEMI_PLANER)?BIT(14):0),BIT(14));
1815*53ee8cc1Swenshuai.xi //select flash mode for 420 planer
1816*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7E_L,((fmt == XC_DWIN_DATA_FMT_YUV420_PLANER)?BIT(14):0),BIT(14));
1817*53ee8cc1Swenshuai.xi
1818*53ee8cc1Swenshuai.xi if( (fmt == XC_DWIN_DATA_FMT_RGB565) || (fmt == XC_DWIN_DATA_FMT_ARGB8888) )
1819*53ee8cc1Swenshuai.xi {
1820*53ee8cc1Swenshuai.xi //disable yc swap setting
1821*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_02_L,0,BMASK(15:14));
1822*53ee8cc1Swenshuai.xi //disable 444 to 422
1823*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_44_L,0,BIT(5)|BIT(0));
1824*53ee8cc1Swenshuai.xi }
1825*53ee8cc1Swenshuai.xi else
1826*53ee8cc1Swenshuai.xi {
1827*53ee8cc1Swenshuai.xi //disable rgb swap setting
1828*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7E_L,0,BIT(13));
1829*53ee8cc1Swenshuai.xi //enable 444 to 422
1830*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_44_L, (BIT(5)|BIT(0)),(BIT(5)|BIT(0)));
1831*53ee8cc1Swenshuai.xi }
1832*53ee8cc1Swenshuai.xi }
1833*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1834*53ee8cc1Swenshuai.xi {
1835*53ee8cc1Swenshuai.xi Dwin1Fmt = fmt;
1836*53ee8cc1Swenshuai.xi //set fmt
1837*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_01_L, BITS(5:4,u16Fmt),BMASK(5:4));
1838*53ee8cc1Swenshuai.xi //select yc separate
1839*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_03_L,((fmt == XC_DWIN_DATA_FMT_YC422)?BIT(6):0),BIT(6));
1840*53ee8cc1Swenshuai.xi //select de-tile for 420 semi planer
1841*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_03_L,((fmt == XC_DWIN_DATA_FMT_YUV420_SEMI_PLANER)?BIT(14):0),BIT(14));
1842*53ee8cc1Swenshuai.xi //select flash mode for 420 planer
1843*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7E_L,((fmt == XC_DWIN_DATA_FMT_YUV420_PLANER)?BIT(14):0),BIT(14));
1844*53ee8cc1Swenshuai.xi
1845*53ee8cc1Swenshuai.xi if( (fmt == XC_DWIN_DATA_FMT_RGB565) || (fmt == XC_DWIN_DATA_FMT_ARGB8888) )
1846*53ee8cc1Swenshuai.xi {
1847*53ee8cc1Swenshuai.xi //disable yc swap setting
1848*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_02_L,0,BMASK(15:14));
1849*53ee8cc1Swenshuai.xi //disable 444 to 422
1850*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_44_L,0,BIT(5)|BIT(0));
1851*53ee8cc1Swenshuai.xi }
1852*53ee8cc1Swenshuai.xi else
1853*53ee8cc1Swenshuai.xi {
1854*53ee8cc1Swenshuai.xi //disable rgb swap setting
1855*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7E_L,0,BIT(13));
1856*53ee8cc1Swenshuai.xi //enable 444 to 422
1857*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_44_L, (BIT(5)|BIT(0)),(BIT(5)|BIT(0)));
1858*53ee8cc1Swenshuai.xi }
1859*53ee8cc1Swenshuai.xi }
1860*53ee8cc1Swenshuai.xi else
1861*53ee8cc1Swenshuai.xi {
1862*53ee8cc1Swenshuai.xi return;
1863*53ee8cc1Swenshuai.xi }
1864*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_GetDataFmt(void * pInstance,SCALER_DIP_WIN eWindow)1865*53ee8cc1Swenshuai.xi EN_DRV_XC_DWIN_DATA_FMT HAL_XC_DIP_GetDataFmt(void *pInstance, SCALER_DIP_WIN eWindow)
1866*53ee8cc1Swenshuai.xi {
1867*53ee8cc1Swenshuai.xi EN_DRV_XC_DWIN_DATA_FMT eFmt = XC_DWIN_DATA_FMT_MAX;
1868*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1869*53ee8cc1Swenshuai.xi {
1870*53ee8cc1Swenshuai.xi return DipFmt;
1871*53ee8cc1Swenshuai.xi }
1872*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1873*53ee8cc1Swenshuai.xi {
1874*53ee8cc1Swenshuai.xi return Dwin0Fmt;
1875*53ee8cc1Swenshuai.xi }
1876*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1877*53ee8cc1Swenshuai.xi {
1878*53ee8cc1Swenshuai.xi return Dwin1Fmt;
1879*53ee8cc1Swenshuai.xi }
1880*53ee8cc1Swenshuai.xi
1881*53ee8cc1Swenshuai.xi return eFmt;
1882*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_GetBPP(void * pInstance,EN_DRV_XC_DWIN_DATA_FMT fbFmt,SCALER_DIP_WIN eWindow)1883*53ee8cc1Swenshuai.xi MS_U16 HAL_XC_DIP_GetBPP(void *pInstance, EN_DRV_XC_DWIN_DATA_FMT fbFmt,SCALER_DIP_WIN eWindow)
1884*53ee8cc1Swenshuai.xi {
1885*53ee8cc1Swenshuai.xi MS_U16 bpp=0;
1886*53ee8cc1Swenshuai.xi
1887*53ee8cc1Swenshuai.xi switch ( fbFmt )
1888*53ee8cc1Swenshuai.xi {
1889*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YUV422 :
1890*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YC422 :
1891*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_RGB565 :
1892*53ee8cc1Swenshuai.xi bpp = 2;
1893*53ee8cc1Swenshuai.xi break;
1894*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_ARGB8888 :
1895*53ee8cc1Swenshuai.xi bpp = 4;
1896*53ee8cc1Swenshuai.xi break;
1897*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YUV420 :
1898*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YUV420_H265 :
1899*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YUV420_H265_10BITS :
1900*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YUV420_PLANER :
1901*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YUV420_SEMI_PLANER :
1902*53ee8cc1Swenshuai.xi bpp = 1;
1903*53ee8cc1Swenshuai.xi break;
1904*53ee8cc1Swenshuai.xi default :
1905*53ee8cc1Swenshuai.xi bpp = 0xFF;
1906*53ee8cc1Swenshuai.xi break;
1907*53ee8cc1Swenshuai.xi }
1908*53ee8cc1Swenshuai.xi return bpp;
1909*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_WidthAlignCheck(void * pInstance,MS_U16 u16Width,MS_U16 u16Bpp,SCALER_DIP_WIN eWindow)1910*53ee8cc1Swenshuai.xi MS_U16 HAL_XC_DIP_WidthAlignCheck(void *pInstance, MS_U16 u16Width,MS_U16 u16Bpp,SCALER_DIP_WIN eWindow)
1911*53ee8cc1Swenshuai.xi {
1912*53ee8cc1Swenshuai.xi MS_U16 AlignFactor;
1913*53ee8cc1Swenshuai.xi MS_U16 u16BusSize = 0;
1914*53ee8cc1Swenshuai.xi
1915*53ee8cc1Swenshuai.xi u16BusSize = HAL_XC_DIP_GetBusSize(pInstance, eWindow);
1916*53ee8cc1Swenshuai.xi AlignFactor = u16BusSize;
1917*53ee8cc1Swenshuai.xi return (u16Width + AlignFactor-1) & (~(AlignFactor-1));
1918*53ee8cc1Swenshuai.xi }
1919*53ee8cc1Swenshuai.xi
HAL_XC_DIP_SetMux(void * pInstance,MS_U8 u8Data_Mux,MS_U8 u8Clk_Mux,SCALER_DIP_WIN eWindow)1920*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetMux(void *pInstance, MS_U8 u8Data_Mux, MS_U8 u8Clk_Mux,SCALER_DIP_WIN eWindow)
1921*53ee8cc1Swenshuai.xi {
1922*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1923*53ee8cc1Swenshuai.xi {
1924*53ee8cc1Swenshuai.xi MDrv_DIP_WriteByteMask(REG_IPMUX_02_L, u8Data_Mux << 4, 0xF0);
1925*53ee8cc1Swenshuai.xi MDrv_DIP_WriteByteMask(REG_CKG_IDCLK3, u8Clk_Mux, CKG_IDCLK3_MASK);
1926*53ee8cc1Swenshuai.xi }
1927*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1928*53ee8cc1Swenshuai.xi {
1929*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7E_L,u8Data_Mux << 8,BMASK(11:8));
1930*53ee8cc1Swenshuai.xi MDrv_DIP_WriteByteMask(REG_CKG_PDW0, u8Clk_Mux, CKG_PDW0_MASK);
1931*53ee8cc1Swenshuai.xi }
1932*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
1933*53ee8cc1Swenshuai.xi {
1934*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7E_L,u8Data_Mux << 12,BMASK(15:12));
1935*53ee8cc1Swenshuai.xi MDrv_DIP_WriteByteMask(REG_CKG_PDW1, u8Clk_Mux, CKG_PDW1_MASK);
1936*53ee8cc1Swenshuai.xi }
1937*53ee8cc1Swenshuai.xi else
1938*53ee8cc1Swenshuai.xi {
1939*53ee8cc1Swenshuai.xi return;
1940*53ee8cc1Swenshuai.xi }
1941*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_MuxDispatch(void * pInstance,SCALER_DIP_SOURCE_TYPE eSource,SCALER_DIP_WIN eWindow)1942*53ee8cc1Swenshuai.xi void HAL_XC_DIP_MuxDispatch(void *pInstance, SCALER_DIP_SOURCE_TYPE eSource,SCALER_DIP_WIN eWindow)
1943*53ee8cc1Swenshuai.xi {
1944*53ee8cc1Swenshuai.xi MS_U16 u16clk_usr_enable=0;
1945*53ee8cc1Swenshuai.xi
1946*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
1947*53ee8cc1Swenshuai.xi {
1948*53ee8cc1Swenshuai.xi if(eSource == SCALER_DIP_SOURCE_TYPE_MAIN)
1949*53ee8cc1Swenshuai.xi {
1950*53ee8cc1Swenshuai.xi HAL_XC_DIP_SetMux(pInstance, SC_DWIN_IPMUX_SC_VOP,SC_DWIN_IPMUX_SC_VOP<<2,eWindow);
1951*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_50_L, 0,BIT(15));
1952*53ee8cc1Swenshuai.xi }
1953*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_SUB)
1954*53ee8cc1Swenshuai.xi {
1955*53ee8cc1Swenshuai.xi HAL_XC_DIP_SetMux(pInstance, SC_DWIN_IPMUX_SC_VOP,SC_DWIN_IPMUX_EXT_VD<<2,eWindow);
1956*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_50_L, 0,BIT(15));
1957*53ee8cc1Swenshuai.xi }
1958*53ee8cc1Swenshuai.xi else if( (eSource == SCALER_DIP_SOURCE_TYPE_OP_MAIN) || (eSource == SCALER_DIP_SOURCE_TYPE_OP_SUB))
1959*53ee8cc1Swenshuai.xi {
1960*53ee8cc1Swenshuai.xi
1961*53ee8cc1Swenshuai.xi }
1962*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_DRAM)
1963*53ee8cc1Swenshuai.xi {
1964*53ee8cc1Swenshuai.xi
1965*53ee8cc1Swenshuai.xi }
1966*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_OP_CAPTURE)
1967*53ee8cc1Swenshuai.xi {
1968*53ee8cc1Swenshuai.xi u16clk_usr_enable = MDrv_DIP_Read2Byte(REG_CKG_IDCLK_USR_ENA) &CKG_IDCLK3_USR_ENA;
1969*53ee8cc1Swenshuai.xi if(u16clk_usr_enable==0)
1970*53ee8cc1Swenshuai.xi {
1971*53ee8cc1Swenshuai.xi HAL_XC_DIP_SetMux(pInstance, SC_DWIN_IPMUX_CAPTURE,SC_DWIN_IPMUX_CAPTURE<<2,eWindow);
1972*53ee8cc1Swenshuai.xi }
1973*53ee8cc1Swenshuai.xi else
1974*53ee8cc1Swenshuai.xi {
1975*53ee8cc1Swenshuai.xi HAL_XC_DIP_SetMux(pInstance, SC_DWIN_IPMUX_CAPTURE,SC_DWIN_IPMUX_HDMI_DVI<<2,eWindow);
1976*53ee8cc1Swenshuai.xi }
1977*53ee8cc1Swenshuai.xi }
1978*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_SC2_OP_CAPTURE)
1979*53ee8cc1Swenshuai.xi {
1980*53ee8cc1Swenshuai.xi HAL_XC_DIP_SetMux(pInstance, SC_DWIN_IPMUX_EXT_VD,SC_DWIN_IPMUX_EXT_VD<<2,eWindow);
1981*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK20_03_L, BIT(1),BIT(1));
1982*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK20_2F_L, BIT(15),BIT(15));
1983*53ee8cc1Swenshuai.xi }
1984*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_OSD)
1985*53ee8cc1Swenshuai.xi {
1986*53ee8cc1Swenshuai.xi HAL_XC_DIP_SetMux(pInstance, SC_DWIN_IPMUX_ADC_B,SC_DWIN_IPMUX_CAPTURE<<2,eWindow);
1987*53ee8cc1Swenshuai.xi }
1988*53ee8cc1Swenshuai.xi else
1989*53ee8cc1Swenshuai.xi DIP_H_DBUG("MApi_XC_DIP_SetDIPWinProperty eSource = %d is not correct\n",eSource);
1990*53ee8cc1Swenshuai.xi }
1991*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
1992*53ee8cc1Swenshuai.xi {
1993*53ee8cc1Swenshuai.xi if(eSource == SCALER_DIP_SOURCE_TYPE_MAIN)
1994*53ee8cc1Swenshuai.xi {
1995*53ee8cc1Swenshuai.xi HAL_XC_DIP_SetMux(pInstance, SC_DWIN_IPMUX_SC_VOP,SC_DWIN_IPMUX_SC_VOP<<2,eWindow);
1996*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7A_L, 0,BIT(15));
1997*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_70_L, 0,BMASK(4:1));
1998*53ee8cc1Swenshuai.xi }
1999*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_SUB)
2000*53ee8cc1Swenshuai.xi {
2001*53ee8cc1Swenshuai.xi HAL_XC_DIP_SetMux(pInstance, SC_DWIN_IPMUX_SC_VOP,SC_DWIN_IPMUX_ADC_B<<2,eWindow);
2002*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7A_L, BIT(15),BIT(15));
2003*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_70_L, BIT(4)|BIT(1),BMASK(4:1));
2004*53ee8cc1Swenshuai.xi }
2005*53ee8cc1Swenshuai.xi else if( (eSource == SCALER_DIP_SOURCE_TYPE_OP_MAIN) || (eSource == SCALER_DIP_SOURCE_TYPE_OP_SUB))
2006*53ee8cc1Swenshuai.xi {
2007*53ee8cc1Swenshuai.xi
2008*53ee8cc1Swenshuai.xi }
2009*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_DRAM)
2010*53ee8cc1Swenshuai.xi {
2011*53ee8cc1Swenshuai.xi
2012*53ee8cc1Swenshuai.xi }
2013*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_OP_CAPTURE)
2014*53ee8cc1Swenshuai.xi {
2015*53ee8cc1Swenshuai.xi HAL_XC_DIP_SetMux(pInstance, SC_DWIN_IPMUX_CAPTURE,SC_DWIN_IPMUX_CAPTURE<<2,eWindow);
2016*53ee8cc1Swenshuai.xi }
2017*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_SC2_OP_CAPTURE)
2018*53ee8cc1Swenshuai.xi {
2019*53ee8cc1Swenshuai.xi HAL_XC_DIP_SetMux(pInstance, SC_DWIN_IPMUX_EXT_VD,SC_DWIN_IPMUX_EXT_VD<<2,eWindow);
2020*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK20_03_L, BIT(1),BIT(1));
2021*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK20_2F_L, BIT(15),BIT(15));
2022*53ee8cc1Swenshuai.xi }
2023*53ee8cc1Swenshuai.xi else
2024*53ee8cc1Swenshuai.xi DIP_H_DBUG("MApi_XC_DIP_SetDIPWinProperty eSource = %d is not correct\n",eSource);
2025*53ee8cc1Swenshuai.xi }
2026*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
2027*53ee8cc1Swenshuai.xi {
2028*53ee8cc1Swenshuai.xi if(eSource == SCALER_DIP_SOURCE_TYPE_MAIN)
2029*53ee8cc1Swenshuai.xi {
2030*53ee8cc1Swenshuai.xi HAL_XC_DIP_SetMux(pInstance, SC_DWIN_IPMUX_SC_VOP,SC_DWIN_IPMUX_SC_VOP<<2,eWindow);
2031*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7A_L, 0,BIT(15));
2032*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_70_L, 0,BMASK(4:1));
2033*53ee8cc1Swenshuai.xi }
2034*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_SUB)
2035*53ee8cc1Swenshuai.xi {
2036*53ee8cc1Swenshuai.xi HAL_XC_DIP_SetMux(pInstance, SC_DWIN_IPMUX_SC_VOP,SC_DWIN_IPMUX_ADC_B<<2,eWindow);
2037*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7A_L, BIT(15),BIT(15));
2038*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_70_L, BIT(4)|BIT(1),BMASK(4:1));
2039*53ee8cc1Swenshuai.xi }
2040*53ee8cc1Swenshuai.xi else if( (eSource == SCALER_DIP_SOURCE_TYPE_OP_MAIN) || (eSource == SCALER_DIP_SOURCE_TYPE_OP_SUB))
2041*53ee8cc1Swenshuai.xi {
2042*53ee8cc1Swenshuai.xi
2043*53ee8cc1Swenshuai.xi }
2044*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_DRAM)
2045*53ee8cc1Swenshuai.xi {
2046*53ee8cc1Swenshuai.xi
2047*53ee8cc1Swenshuai.xi }
2048*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_OP_CAPTURE)
2049*53ee8cc1Swenshuai.xi {
2050*53ee8cc1Swenshuai.xi HAL_XC_DIP_SetMux(pInstance, SC_DWIN_IPMUX_CAPTURE,SC_DWIN_IPMUX_CAPTURE<<2,eWindow);
2051*53ee8cc1Swenshuai.xi }
2052*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_SC2_OP_CAPTURE)
2053*53ee8cc1Swenshuai.xi {
2054*53ee8cc1Swenshuai.xi HAL_XC_DIP_SetMux(pInstance, SC_DWIN_IPMUX_EXT_VD,SC_DWIN_IPMUX_EXT_VD<<2,eWindow);
2055*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK20_03_L, BIT(1),BIT(1));
2056*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK20_2F_L, BIT(15),BIT(15));
2057*53ee8cc1Swenshuai.xi }
2058*53ee8cc1Swenshuai.xi else
2059*53ee8cc1Swenshuai.xi DIP_H_DBUG("MApi_XC_DIP_SetDIPWinProperty eSource = %d is not correct\n",eSource);
2060*53ee8cc1Swenshuai.xi }
2061*53ee8cc1Swenshuai.xi else
2062*53ee8cc1Swenshuai.xi {
2063*53ee8cc1Swenshuai.xi return;
2064*53ee8cc1Swenshuai.xi }
2065*53ee8cc1Swenshuai.xi }
2066*53ee8cc1Swenshuai.xi
HAL_XC_DIP_AdjustScaling(void * pInstance,SCALER_DIP_WIN eWindow,SCALER_DIP_SOURCE_TYPE eSource)2067*53ee8cc1Swenshuai.xi void HAL_XC_DIP_AdjustScaling(void *pInstance,SCALER_DIP_WIN eWindow,SCALER_DIP_SOURCE_TYPE eSource)
2068*53ee8cc1Swenshuai.xi {
2069*53ee8cc1Swenshuai.xi #ifdef UTOPIA_V2
2070*53ee8cc1Swenshuai.xi DIP_INSTANCE_PRIVATE* pDipPri = NULL;
2071*53ee8cc1Swenshuai.xi DIP_SHARE_RESOURCE_PRIVATE* pDipResPri = NULL;
2072*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&pDipPri);
2073*53ee8cc1Swenshuai.xi UtopiaResourceGetPrivate(pDipPri->pShareResource,(void*)&(pDipResPri));
2074*53ee8cc1Swenshuai.xi #endif
2075*53ee8cc1Swenshuai.xi MS_U16 u16HSD_X = 0;
2076*53ee8cc1Swenshuai.xi SCALER_DIP_WIN eHVSPWindow = MAX_DIP_WINDOW;
2077*53ee8cc1Swenshuai.xi SC_DIP_SWDB_INFO DBreg;
2078*53ee8cc1Swenshuai.xi MS_U64 u64_result = 0;
2079*53ee8cc1Swenshuai.xi
2080*53ee8cc1Swenshuai.xi eHVSPWindow = HAL_XC_DIP_GetHVSP(pInstance);
2081*53ee8cc1Swenshuai.xi Hal_SC_DWIN_get_sw_db(pInstance,&DBreg,eWindow);
2082*53ee8cc1Swenshuai.xi
2083*53ee8cc1Swenshuai.xi if(eSource != SCALER_DIP_SOURCE_TYPE_DRAM)
2084*53ee8cc1Swenshuai.xi {
2085*53ee8cc1Swenshuai.xi // Hscaling
2086*53ee8cc1Swenshuai.xi if( (g_DIPSrcInfo[eWindow].u16PreHCusScalingDst > FHD_WIDTH) )
2087*53ee8cc1Swenshuai.xi {
2088*53ee8cc1Swenshuai.xi g_DIPSrcInfo[eWindow].u16PreHCusScalingDst = FHD_WIDTH;
2089*53ee8cc1Swenshuai.xi }
2090*53ee8cc1Swenshuai.xi }
2091*53ee8cc1Swenshuai.xi
2092*53ee8cc1Swenshuai.xi //scaling down
2093*53ee8cc1Swenshuai.xi if( (g_DIPSrcInfo[eWindow].u16PreHCusScalingSrc > g_DIPSrcInfo[eWindow].u16PreHCusScalingDst) )
2094*53ee8cc1Swenshuai.xi {
2095*53ee8cc1Swenshuai.xi DBreg.u32H_PreScalingRatio = H_PreScalingDownRatioDIP(g_DIPSrcInfo[eWindow].u16PreHCusScalingSrc,g_DIPSrcInfo[eWindow].u16PreHCusScalingDst);
2096*53ee8cc1Swenshuai.xi DBreg.u32H_PreScalingRatio &= 0x7FFFFFL;
2097*53ee8cc1Swenshuai.xi DBreg.u32H_PreScalingRatio |= (BIT(31));
2098*53ee8cc1Swenshuai.xi u64_result = DBreg.u16H_CapStart*(g_DIPSrcInfo[eWindow].u16PreHCusScalingDst);
2099*53ee8cc1Swenshuai.xi do_div(u64_result,(g_DIPSrcInfo[eWindow].u16PreHCusScalingSrc));
2100*53ee8cc1Swenshuai.xi u16HSD_X = u64_result;
2101*53ee8cc1Swenshuai.xi DBreg.u16H_CapStart = u16HSD_X;
2102*53ee8cc1Swenshuai.xi DBreg.u16H_CapSize = g_DIPSrcInfo[eWindow].u16PreHCusScalingDst;
2103*53ee8cc1Swenshuai.xi }
2104*53ee8cc1Swenshuai.xi Hal_SC_DWIN_sw_db(pInstance,&DBreg,eWindow);
2105*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_SetWinProperty(void * pInstance,MS_U8 u8BufCnt,MS_U16 u16Width,MS_U16 u16LineOft,MS_U16 u16Height,MS_PHY u64OffSet,SCALER_DIP_SOURCE_TYPE eSource,MS_BOOL bPIP,MS_BOOL b2P_Enable,SCALER_DIP_WIN eWindow)2106*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetWinProperty(void *pInstance, MS_U8 u8BufCnt,MS_U16 u16Width,MS_U16 u16LineOft,MS_U16 u16Height,MS_PHY u64OffSet, SCALER_DIP_SOURCE_TYPE eSource,MS_BOOL bPIP, MS_BOOL b2P_Enable, SCALER_DIP_WIN eWindow)
2107*53ee8cc1Swenshuai.xi {
2108*53ee8cc1Swenshuai.xi #ifdef UTOPIA_V2
2109*53ee8cc1Swenshuai.xi DIP_INSTANCE_PRIVATE* pDipPri = NULL;
2110*53ee8cc1Swenshuai.xi DIP_SHARE_RESOURCE_PRIVATE* pDipResPri = NULL;
2111*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&pDipPri);
2112*53ee8cc1Swenshuai.xi UtopiaResourceGetPrivate(pDipPri->pShareResource,(void*)&(pDipResPri));
2113*53ee8cc1Swenshuai.xi #endif
2114*53ee8cc1Swenshuai.xi MS_U64 u64_result = 0;
2115*53ee8cc1Swenshuai.xi bPIPmode = bPIP;
2116*53ee8cc1Swenshuai.xi MS_U16 u16SrcWith = 0;
2117*53ee8cc1Swenshuai.xi MS_U16 u16MaxWith = 0;
2118*53ee8cc1Swenshuai.xi
2119*53ee8cc1Swenshuai.xi //2p to 1p
2120*53ee8cc1Swenshuai.xi if(eSource == SCALER_DIP_SOURCE_TYPE_MAIN)
2121*53ee8cc1Swenshuai.xi {
2122*53ee8cc1Swenshuai.xi if(b2P_Enable)
2123*53ee8cc1Swenshuai.xi {
2124*53ee8cc1Swenshuai.xi MS_BOOL bVideoPmode = TRUE;
2125*53ee8cc1Swenshuai.xi
2126*53ee8cc1Swenshuai.xi u16MaxWith = DIP_R2BYTEMSK(0, REG_SC_BK01_07_L,BMASK(13:0),eWindow);
2127*53ee8cc1Swenshuai.xi
2128*53ee8cc1Swenshuai.xi // bk0x1301_reg0x1e[11] , 1: i mode, 0: p mode
2129*53ee8cc1Swenshuai.xi bVideoPmode = (MDrv_ReadRegBit((REG_MVOP_BASE + 0x22), (BIT(7)))) ? FALSE : TRUE;
2130*53ee8cc1Swenshuai.xi if ((( bVideoPmode == TRUE) && (u16MaxWith == UHD_WIDTH)) ||
2131*53ee8cc1Swenshuai.xi (( bVideoPmode == FALSE) && (u16MaxWith == FHD_WIDTH))
2132*53ee8cc1Swenshuai.xi )
2133*53ee8cc1Swenshuai.xi {
2134*53ee8cc1Swenshuai.xi u16MaxWith = g_DIPSrcInfo[eWindow].stCapWin.width;
2135*53ee8cc1Swenshuai.xi }
2136*53ee8cc1Swenshuai.xi }
2137*53ee8cc1Swenshuai.xi else
2138*53ee8cc1Swenshuai.xi {
2139*53ee8cc1Swenshuai.xi u16MaxWith = DIP_R2BYTEMSK(0, REG_SC_BK01_07_L,BMASK(13:0),eWindow);
2140*53ee8cc1Swenshuai.xi }
2141*53ee8cc1Swenshuai.xi }
2142*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_SUB)
2143*53ee8cc1Swenshuai.xi {
2144*53ee8cc1Swenshuai.xi u16MaxWith = DIP_R2BYTEMSK(0, REG_SC_BK81_07_L,BMASK(12:0),eWindow);
2145*53ee8cc1Swenshuai.xi }
2146*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_OP_MAIN)
2147*53ee8cc1Swenshuai.xi {
2148*53ee8cc1Swenshuai.xi u16MaxWith = DIP_R2BYTEMSK(0, REG_SC_BK12_17_L,BMASK(13:0),eWindow);
2149*53ee8cc1Swenshuai.xi }
2150*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_OP_SUB)
2151*53ee8cc1Swenshuai.xi {
2152*53ee8cc1Swenshuai.xi u16MaxWith = DIP_R2BYTEMSK(0, REG_SC_BK12_57_L,BMASK(13:0),eWindow);
2153*53ee8cc1Swenshuai.xi }
2154*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_OP_CAPTURE)
2155*53ee8cc1Swenshuai.xi {
2156*53ee8cc1Swenshuai.xi u16MaxWith = (DIP_R2BYTEMSK(0, REG_SC_BK10_05_L,BMASK(13:0),eWindow) - DIP_R2BYTEMSK(0, REG_SC_BK10_04_L,BMASK(13:0),eWindow)+1);
2157*53ee8cc1Swenshuai.xi }
2158*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_DRAM)
2159*53ee8cc1Swenshuai.xi {
2160*53ee8cc1Swenshuai.xi u16MaxWith = DIP_R2BYTEMSK(0, REG_SC_BK36_27_L,BMASK(13:0),eWindow);
2161*53ee8cc1Swenshuai.xi }
2162*53ee8cc1Swenshuai.xi
2163*53ee8cc1Swenshuai.xi HAL_XC_DIP_AdjustScaling(pInstance,eWindow,eSource);
2164*53ee8cc1Swenshuai.xi
2165*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
2166*53ee8cc1Swenshuai.xi {
2167*53ee8cc1Swenshuai.xi DipWBufCnt = u8BufCnt;
2168*53ee8cc1Swenshuai.xi DipSource = eSource;
2169*53ee8cc1Swenshuai.xi u16SrcWith = DipSrcWidth;
2170*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_01_L, u8BufCnt-1,BMASK(2:0));
2171*53ee8cc1Swenshuai.xi
2172*53ee8cc1Swenshuai.xi if(eSource == SCALER_DIP_SOURCE_TYPE_DRAM)
2173*53ee8cc1Swenshuai.xi {
2174*53ee8cc1Swenshuai.xi //1: from dipr
2175*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7F_L,BIT(6),BIT(6));
2176*53ee8cc1Swenshuai.xi // dipr to dip
2177*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7F_L,BIT(13),BMASK(13:12));
2178*53ee8cc1Swenshuai.xi //disable source yc swap
2179*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7C_L,0,BIT(14));
2180*53ee8cc1Swenshuai.xi }
2181*53ee8cc1Swenshuai.xi else
2182*53ee8cc1Swenshuai.xi {
2183*53ee8cc1Swenshuai.xi //0: from IPMUX/OP1
2184*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7F_L,0,BIT(6));
2185*53ee8cc1Swenshuai.xi //Monaco Mode DI input is 422
2186*53ee8cc1Swenshuai.xi if( ((eSource == SCALER_DIP_SOURCE_TYPE_OP_MAIN) || (eSource == SCALER_DIP_SOURCE_TYPE_OP_SUB)) && (bDipR2Y == FALSE) )
2187*53ee8cc1Swenshuai.xi {
2188*53ee8cc1Swenshuai.xi //enable 422 to 444
2189*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6C_L,BIT(9),BIT(9));
2190*53ee8cc1Swenshuai.xi //enable source yc swap
2191*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7C_L,BIT(14),BIT(14));
2192*53ee8cc1Swenshuai.xi }
2193*53ee8cc1Swenshuai.xi else
2194*53ee8cc1Swenshuai.xi {
2195*53ee8cc1Swenshuai.xi //disable 422 to 444
2196*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6C_L,0,BIT(9));
2197*53ee8cc1Swenshuai.xi //disable source yc swap
2198*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7C_L,0,BIT(14));
2199*53ee8cc1Swenshuai.xi }
2200*53ee8cc1Swenshuai.xi }
2201*53ee8cc1Swenshuai.xi
2202*53ee8cc1Swenshuai.xi if( (eSource == SCALER_DIP_SOURCE_TYPE_MAIN)||(eSource == SCALER_DIP_SOURCE_TYPE_SUB) )
2203*53ee8cc1Swenshuai.xi {
2204*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7F_L, BIT(15), BMASK(15:14));
2205*53ee8cc1Swenshuai.xi }
2206*53ee8cc1Swenshuai.xi if( (bDIPRotation == TRUE) && (DIPRotation == eWindow) )
2207*53ee8cc1Swenshuai.xi {
2208*53ee8cc1Swenshuai.xi //width
2209*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK36_2F_L, u16Width);
2210*53ee8cc1Swenshuai.xi //height
2211*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK36_1F_L, u16Height);
2212*53ee8cc1Swenshuai.xi }
2213*53ee8cc1Swenshuai.xi else
2214*53ee8cc1Swenshuai.xi {
2215*53ee8cc1Swenshuai.xi //width
2216*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK36_1F_L, u16Width);
2217*53ee8cc1Swenshuai.xi //height
2218*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK36_2F_L, u16Height);
2219*53ee8cc1Swenshuai.xi }
2220*53ee8cc1Swenshuai.xi //pitch
2221*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK36_3F_L, u16LineOft);
2222*53ee8cc1Swenshuai.xi //buffer offset
2223*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK36_50_L,u64OffSet);
2224*53ee8cc1Swenshuai.xi
2225*53ee8cc1Swenshuai.xi if(eSource == SCALER_DIP_SOURCE_TYPE_SUB)
2226*53ee8cc1Swenshuai.xi {
2227*53ee8cc1Swenshuai.xi //reg_4k_h_size
2228*53ee8cc1Swenshuai.xi u64_result = u16MaxWith+1;
2229*53ee8cc1Swenshuai.xi do_div(u64_result,2);
2230*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6D_L, u64_result,BMASK(11:0));
2231*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6D_L, BIT(15),BIT(15));
2232*53ee8cc1Swenshuai.xi //dip_op_pre_sel (2: sc2 3: sc)
2233*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_67_L, 0x3 ,BMASK(1:0));
2234*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_31_L, BIT(4) ,BIT(4));
2235*53ee8cc1Swenshuai.xi }
2236*53ee8cc1Swenshuai.xi else if(eSource != SCALER_DIP_SOURCE_TYPE_SC2_OP_CAPTURE)
2237*53ee8cc1Swenshuai.xi {
2238*53ee8cc1Swenshuai.xi //reg_4k_h_size
2239*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6D_L, ((u16MaxWith+1)/2),BMASK(11:0));
2240*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6D_L, BIT(15),BIT(15));
2241*53ee8cc1Swenshuai.xi //dip_op_pre_sel (2: sc2 3: sc)
2242*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_67_L, 0x3 ,BMASK(1:0));
2243*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_31_L, 0 ,BIT(4));
2244*53ee8cc1Swenshuai.xi }
2245*53ee8cc1Swenshuai.xi else
2246*53ee8cc1Swenshuai.xi {
2247*53ee8cc1Swenshuai.xi //reg_4k_h_size
2248*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6D_L, 0,BIT(15));
2249*53ee8cc1Swenshuai.xi //dip_op_pre_sel (2: sc2 3: sc)
2250*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_67_L, 0x2 ,BMASK(1:0));
2251*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_31_L, 0 ,BIT(4));
2252*53ee8cc1Swenshuai.xi }
2253*53ee8cc1Swenshuai.xi //DIP Clk gating seletion and source select
2254*53ee8cc1Swenshuai.xi if(eSource == SCALER_DIP_SOURCE_TYPE_MAIN)
2255*53ee8cc1Swenshuai.xi {
2256*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7F_L, BIT(8),BMASK(8:7));
2257*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_67_L, 0,BMASK(4:2));//0: ip_main 1: ip_sub 4: sc2_ip_main
2258*53ee8cc1Swenshuai.xi }
2259*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_SUB)
2260*53ee8cc1Swenshuai.xi {
2261*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7F_L, BIT(8),BMASK(8:7));
2262*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_67_L, BIT(4),BMASK(4:2));//0: ip_main 1: ip_sub 4: sc2_ip_main
2263*53ee8cc1Swenshuai.xi }
2264*53ee8cc1Swenshuai.xi else
2265*53ee8cc1Swenshuai.xi {
2266*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7F_L, 0x0,BMASK(8:7));
2267*53ee8cc1Swenshuai.xi }
2268*53ee8cc1Swenshuai.xi }
2269*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
2270*53ee8cc1Swenshuai.xi {
2271*53ee8cc1Swenshuai.xi Dwin0WBufCnt = u8BufCnt;
2272*53ee8cc1Swenshuai.xi Dwin0Source = eSource;
2273*53ee8cc1Swenshuai.xi u16SrcWith = Dwin0SrcWidth;
2274*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_01_L, u8BufCnt-1,BMASK(2:0));
2275*53ee8cc1Swenshuai.xi
2276*53ee8cc1Swenshuai.xi if(eSource == SCALER_DIP_SOURCE_TYPE_DRAM)
2277*53ee8cc1Swenshuai.xi {
2278*53ee8cc1Swenshuai.xi //1: from dipr
2279*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_73_L,BIT(6),BIT(6));
2280*53ee8cc1Swenshuai.xi // dipr to dwin0
2281*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7F_L,0,BMASK(13:12));
2282*53ee8cc1Swenshuai.xi //disable source yc swap
2283*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7F_L,0,BIT(8));
2284*53ee8cc1Swenshuai.xi }
2285*53ee8cc1Swenshuai.xi else
2286*53ee8cc1Swenshuai.xi {
2287*53ee8cc1Swenshuai.xi //0: from IPMUX/OP1
2288*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_73_L,0,BIT(6));
2289*53ee8cc1Swenshuai.xi //Monaco Mode DI input is 422
2290*53ee8cc1Swenshuai.xi if( ((eSource == SCALER_DIP_SOURCE_TYPE_OP_MAIN) || (eSource == SCALER_DIP_SOURCE_TYPE_OP_SUB)) && (bDwin0R2Y == FALSE) )
2291*53ee8cc1Swenshuai.xi {
2292*53ee8cc1Swenshuai.xi //enable 422 to 444
2293*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_78_L,BIT(9),BIT(9));
2294*53ee8cc1Swenshuai.xi //enable source yc swap
2295*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7F_L,BIT(8),BIT(8));
2296*53ee8cc1Swenshuai.xi }
2297*53ee8cc1Swenshuai.xi else
2298*53ee8cc1Swenshuai.xi {
2299*53ee8cc1Swenshuai.xi //disable 422 to 444
2300*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_78_L,0,BIT(9));
2301*53ee8cc1Swenshuai.xi //disable source yc swap
2302*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7F_L,0,BIT(8));
2303*53ee8cc1Swenshuai.xi }
2304*53ee8cc1Swenshuai.xi }
2305*53ee8cc1Swenshuai.xi
2306*53ee8cc1Swenshuai.xi if( (eSource == SCALER_DIP_SOURCE_TYPE_MAIN)||(eSource == SCALER_DIP_SOURCE_TYPE_SUB) )
2307*53ee8cc1Swenshuai.xi {
2308*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7F_L, BIT(5), BMASK(5:4));
2309*53ee8cc1Swenshuai.xi }
2310*53ee8cc1Swenshuai.xi
2311*53ee8cc1Swenshuai.xi if( (bDIPRotation == TRUE) && (DIPRotation == eWindow) )
2312*53ee8cc1Swenshuai.xi {
2313*53ee8cc1Swenshuai.xi //width
2314*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3B_2F_L, u16Width);
2315*53ee8cc1Swenshuai.xi //height
2316*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3B_1F_L, u16Height);
2317*53ee8cc1Swenshuai.xi }
2318*53ee8cc1Swenshuai.xi else
2319*53ee8cc1Swenshuai.xi {
2320*53ee8cc1Swenshuai.xi //width
2321*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3B_1F_L, u16Width);
2322*53ee8cc1Swenshuai.xi //height
2323*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3B_2F_L, u16Height);
2324*53ee8cc1Swenshuai.xi }
2325*53ee8cc1Swenshuai.xi //pitch
2326*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3B_3F_L, u16LineOft);
2327*53ee8cc1Swenshuai.xi //buffer offset
2328*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3B_50_L,u64OffSet);
2329*53ee8cc1Swenshuai.xi
2330*53ee8cc1Swenshuai.xi if(eSource == SCALER_DIP_SOURCE_TYPE_SUB)
2331*53ee8cc1Swenshuai.xi {
2332*53ee8cc1Swenshuai.xi //reg_4k_h_size
2333*53ee8cc1Swenshuai.xi u64_result = u16MaxWith+1;
2334*53ee8cc1Swenshuai.xi do_div(u64_result,2);
2335*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_79_L, u64_result,BMASK(11:0));
2336*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_79_L, BIT(15),BIT(15));
2337*53ee8cc1Swenshuai.xi //dip_op_pre_sel (2: sc2 3: sc)
2338*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_67_L, 0x3 ,BMASK(1:0));
2339*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_39_L, BIT(15) ,BIT(15));
2340*53ee8cc1Swenshuai.xi }
2341*53ee8cc1Swenshuai.xi else if(eSource != SCALER_DIP_SOURCE_TYPE_SC2_OP_CAPTURE)
2342*53ee8cc1Swenshuai.xi {
2343*53ee8cc1Swenshuai.xi //reg_4k_h_size
2344*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_79_L, ((u16MaxWith+1)/2),BMASK(11:0));
2345*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_79_L, BIT(15),BIT(15));
2346*53ee8cc1Swenshuai.xi //dip_op_pre_sel (2: sc2 3: sc)
2347*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_67_L, 0x3 ,BMASK(1:0));
2348*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_39_L, 0 ,BIT(15));
2349*53ee8cc1Swenshuai.xi }
2350*53ee8cc1Swenshuai.xi else
2351*53ee8cc1Swenshuai.xi {
2352*53ee8cc1Swenshuai.xi //reg_4k_h_size
2353*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_79_L, 0x0,BIT(15));
2354*53ee8cc1Swenshuai.xi //dip_op_pre_sel (2: sc2 3: sc)
2355*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_67_L, 0x2 ,BMASK(1:0));
2356*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_39_L, 0 ,BIT(15));
2357*53ee8cc1Swenshuai.xi }
2358*53ee8cc1Swenshuai.xi //DWIN0 Clk gating seletion and source select
2359*53ee8cc1Swenshuai.xi if(eSource == SCALER_DIP_SOURCE_TYPE_MAIN)
2360*53ee8cc1Swenshuai.xi {
2361*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_73_L, BIT(8),BMASK(8:7));
2362*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_67_L, 0,BMASK(4:2));//0: ip_main 1: ip_sub 4: sc2_ip_main
2363*53ee8cc1Swenshuai.xi }
2364*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_SUB)
2365*53ee8cc1Swenshuai.xi {
2366*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_73_L, BIT(8),BMASK(8:7));
2367*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_67_L, BIT(4),BMASK(4:2));//0: ip_main 1: ip_sub 4: sc2_ip_main
2368*53ee8cc1Swenshuai.xi }
2369*53ee8cc1Swenshuai.xi else
2370*53ee8cc1Swenshuai.xi {
2371*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_73_L, 0x0,BMASK(8:7));
2372*53ee8cc1Swenshuai.xi }
2373*53ee8cc1Swenshuai.xi }
2374*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
2375*53ee8cc1Swenshuai.xi {
2376*53ee8cc1Swenshuai.xi Dwin1WBufCnt = u8BufCnt;
2377*53ee8cc1Swenshuai.xi Dwin1Source = eSource;
2378*53ee8cc1Swenshuai.xi u16SrcWith = Dwin1SrcWidth;
2379*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_01_L, u8BufCnt-1,BMASK(2:0));
2380*53ee8cc1Swenshuai.xi
2381*53ee8cc1Swenshuai.xi if(eSource == SCALER_DIP_SOURCE_TYPE_DRAM)
2382*53ee8cc1Swenshuai.xi {
2383*53ee8cc1Swenshuai.xi //1: from dipr
2384*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_73_L,BIT(6),BIT(6));
2385*53ee8cc1Swenshuai.xi //2. dipr to dwin1
2386*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7F_L,BIT(12),BMASK(13:12));
2387*53ee8cc1Swenshuai.xi //disable source yc swap
2388*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7F_L,0,BIT(8));
2389*53ee8cc1Swenshuai.xi }
2390*53ee8cc1Swenshuai.xi else
2391*53ee8cc1Swenshuai.xi {
2392*53ee8cc1Swenshuai.xi //0: from IPMUX/OP1
2393*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_73_L,0,BIT(6));
2394*53ee8cc1Swenshuai.xi //Monaco Mode DI input is 422
2395*53ee8cc1Swenshuai.xi if( ((eSource == SCALER_DIP_SOURCE_TYPE_OP_MAIN) || (eSource == SCALER_DIP_SOURCE_TYPE_OP_SUB)) && (bDwin1R2Y == FALSE) )
2396*53ee8cc1Swenshuai.xi {
2397*53ee8cc1Swenshuai.xi //enable 422 to 444
2398*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_78_L,BIT(9),BIT(9));
2399*53ee8cc1Swenshuai.xi //enable source yc swap
2400*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7F_L,BIT(8),BIT(8));
2401*53ee8cc1Swenshuai.xi }
2402*53ee8cc1Swenshuai.xi else
2403*53ee8cc1Swenshuai.xi {
2404*53ee8cc1Swenshuai.xi //disable 422 to 444
2405*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_78_L,0,BIT(9));
2406*53ee8cc1Swenshuai.xi //disable source yc swap
2407*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7F_L,0,BIT(8));
2408*53ee8cc1Swenshuai.xi }
2409*53ee8cc1Swenshuai.xi }
2410*53ee8cc1Swenshuai.xi
2411*53ee8cc1Swenshuai.xi if( (eSource == SCALER_DIP_SOURCE_TYPE_MAIN)||(eSource == SCALER_DIP_SOURCE_TYPE_SUB) )
2412*53ee8cc1Swenshuai.xi {
2413*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7F_L, BIT(5), BMASK(5:4));
2414*53ee8cc1Swenshuai.xi }
2415*53ee8cc1Swenshuai.xi
2416*53ee8cc1Swenshuai.xi if( (bDIPRotation == TRUE) && (DIPRotation == eWindow) )
2417*53ee8cc1Swenshuai.xi {
2418*53ee8cc1Swenshuai.xi //width
2419*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3C_2F_L, u16Width);
2420*53ee8cc1Swenshuai.xi //height
2421*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3C_1F_L, u16Height);
2422*53ee8cc1Swenshuai.xi }
2423*53ee8cc1Swenshuai.xi else
2424*53ee8cc1Swenshuai.xi {
2425*53ee8cc1Swenshuai.xi //width
2426*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3C_1F_L, u16Width);
2427*53ee8cc1Swenshuai.xi //height
2428*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3C_2F_L, u16Height);
2429*53ee8cc1Swenshuai.xi }
2430*53ee8cc1Swenshuai.xi //pitch
2431*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK3C_3F_L, u16LineOft);
2432*53ee8cc1Swenshuai.xi //buffer offset
2433*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3C_50_L,u64OffSet);
2434*53ee8cc1Swenshuai.xi
2435*53ee8cc1Swenshuai.xi if(eSource == SCALER_DIP_SOURCE_TYPE_SUB)
2436*53ee8cc1Swenshuai.xi {
2437*53ee8cc1Swenshuai.xi //reg_4k_h_size
2438*53ee8cc1Swenshuai.xi u64_result = u16MaxWith+1;
2439*53ee8cc1Swenshuai.xi do_div(u64_result,2);
2440*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_79_L, u64_result ,BMASK(11:0));
2441*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_79_L, BIT(15),BIT(15));
2442*53ee8cc1Swenshuai.xi //dip_op_pre_sel (2: sc2 3: sc)
2443*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_67_L, 0x3 ,BMASK(1:0));
2444*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_39_L, BIT(15) ,BIT(15));
2445*53ee8cc1Swenshuai.xi }
2446*53ee8cc1Swenshuai.xi else if(eSource != SCALER_DIP_SOURCE_TYPE_SC2_OP_CAPTURE)
2447*53ee8cc1Swenshuai.xi {
2448*53ee8cc1Swenshuai.xi //reg_4k_h_size
2449*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_79_L, ((u16MaxWith+1)/2),BMASK(11:0));
2450*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_79_L, BIT(15),BIT(15));
2451*53ee8cc1Swenshuai.xi //dip_op_pre_sel (2: sc2 3: sc)
2452*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_67_L, 0x3 ,BMASK(1:0));
2453*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_39_L, 0 ,BIT(15));
2454*53ee8cc1Swenshuai.xi }
2455*53ee8cc1Swenshuai.xi else
2456*53ee8cc1Swenshuai.xi {
2457*53ee8cc1Swenshuai.xi //reg_4k_h_size
2458*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_79_L, 0x0,BIT(15));
2459*53ee8cc1Swenshuai.xi //dip_op_pre_sel (2: sc2 3: sc)
2460*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_67_L, 0x2 ,BMASK(1:0));
2461*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_39_L, 0 ,BIT(15));
2462*53ee8cc1Swenshuai.xi }
2463*53ee8cc1Swenshuai.xi //DWIN1 Clk gating seletion and source select
2464*53ee8cc1Swenshuai.xi if(eSource == SCALER_DIP_SOURCE_TYPE_MAIN)
2465*53ee8cc1Swenshuai.xi {
2466*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_73_L, BIT(8),BMASK(8:7));
2467*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_67_L, 0,BMASK(4:2));//0: ip_main 1: ip_sub 4: sc2_ip_main
2468*53ee8cc1Swenshuai.xi }
2469*53ee8cc1Swenshuai.xi else if(eSource == SCALER_DIP_SOURCE_TYPE_SUB)
2470*53ee8cc1Swenshuai.xi {
2471*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_73_L, BIT(8),BMASK(8:7));
2472*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_67_L, BIT(4),BMASK(4:2));//0: ip_main 1: ip_sub 4: sc2_ip_main
2473*53ee8cc1Swenshuai.xi }
2474*53ee8cc1Swenshuai.xi else
2475*53ee8cc1Swenshuai.xi {
2476*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_73_L, 0x0,BMASK(8:7));
2477*53ee8cc1Swenshuai.xi }
2478*53ee8cc1Swenshuai.xi }
2479*53ee8cc1Swenshuai.xi
2480*53ee8cc1Swenshuai.xi //Rotation
2481*53ee8cc1Swenshuai.xi if( (bDIPRotation == TRUE) && (DIPRotation == eWindow) ){
2482*53ee8cc1Swenshuai.xi u64_result = u16Height;
2483*53ee8cc1Swenshuai.xi do_div(u64_result,0x10);
2484*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6E_L, u64_result,BMASK(7:0));
2485*53ee8cc1Swenshuai.xi }
2486*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_SetWinProperty1(void * pInstance,MS_PHY u64OffSet,SCALER_DIP_WIN eWindow)2487*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetWinProperty1(void *pInstance, MS_PHY u64OffSet,SCALER_DIP_WIN eWindow)
2488*53ee8cc1Swenshuai.xi {
2489*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
2490*53ee8cc1Swenshuai.xi {
2491*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK36_60_L,u64OffSet);
2492*53ee8cc1Swenshuai.xi }
2493*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
2494*53ee8cc1Swenshuai.xi {
2495*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3B_60_L,u64OffSet);
2496*53ee8cc1Swenshuai.xi }
2497*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
2498*53ee8cc1Swenshuai.xi {
2499*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3C_60_L,u64OffSet);
2500*53ee8cc1Swenshuai.xi }
2501*53ee8cc1Swenshuai.xi else
2502*53ee8cc1Swenshuai.xi {
2503*53ee8cc1Swenshuai.xi return;
2504*53ee8cc1Swenshuai.xi }
2505*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_GetBufCnt(void * pInstance,SCALER_DIP_WIN eWindow)2506*53ee8cc1Swenshuai.xi MS_U8 HAL_XC_DIP_GetBufCnt(void *pInstance, SCALER_DIP_WIN eWindow)
2507*53ee8cc1Swenshuai.xi {
2508*53ee8cc1Swenshuai.xi MS_U8 u8BufCnt = 0;
2509*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
2510*53ee8cc1Swenshuai.xi {
2511*53ee8cc1Swenshuai.xi u8BufCnt = DipWBufCnt;
2512*53ee8cc1Swenshuai.xi }
2513*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
2514*53ee8cc1Swenshuai.xi {
2515*53ee8cc1Swenshuai.xi u8BufCnt = Dwin0WBufCnt;
2516*53ee8cc1Swenshuai.xi }
2517*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
2518*53ee8cc1Swenshuai.xi {
2519*53ee8cc1Swenshuai.xi u8BufCnt = Dwin1WBufCnt;
2520*53ee8cc1Swenshuai.xi }
2521*53ee8cc1Swenshuai.xi return (MS_U8) u8BufCnt;
2522*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_SetBase0(void * pInstance,MS_PHY u64BufStart,MS_PHY u64BufEnd,SCALER_DIP_WIN eWindow)2523*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetBase0(void *pInstance,MS_PHY u64BufStart,MS_PHY u64BufEnd,SCALER_DIP_WIN eWindow)
2524*53ee8cc1Swenshuai.xi {
2525*53ee8cc1Swenshuai.xi MS_U16 u16BusSize = 0;
2526*53ee8cc1Swenshuai.xi MS_U64 u64_result = 0;
2527*53ee8cc1Swenshuai.xi
2528*53ee8cc1Swenshuai.xi u16BusSize = HAL_XC_DIP_GetBusSize(pInstance, eWindow);
2529*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
2530*53ee8cc1Swenshuai.xi {
2531*53ee8cc1Swenshuai.xi //low bound
2532*53ee8cc1Swenshuai.xi u64_result = u64BufStart;
2533*53ee8cc1Swenshuai.xi do_div(u64_result,u16BusSize);
2534*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK36_10_L, u64_result); // input address0
2535*53ee8cc1Swenshuai.xi //high bound
2536*53ee8cc1Swenshuai.xi u64_result = u64BufEnd;
2537*53ee8cc1Swenshuai.xi do_div(u64_result,u16BusSize);
2538*53ee8cc1Swenshuai.xi u64_result|=(1<<DWIN_W_LIMITE_OFT);
2539*53ee8cc1Swenshuai.xi //u64BufEnd /= u16BusSize;
2540*53ee8cc1Swenshuai.xi //u64BufEnd|=(1<<DWIN_W_LIMITE_OFT);
2541*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK36_30_L, u64_result); // input address0
2542*53ee8cc1Swenshuai.xi }
2543*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
2544*53ee8cc1Swenshuai.xi {
2545*53ee8cc1Swenshuai.xi //low bound
2546*53ee8cc1Swenshuai.xi u64_result = u64BufStart;
2547*53ee8cc1Swenshuai.xi do_div(u64_result,u16BusSize);
2548*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3B_10_L, u64_result); // input address0
2549*53ee8cc1Swenshuai.xi //high bound
2550*53ee8cc1Swenshuai.xi u64_result = u64BufEnd;
2551*53ee8cc1Swenshuai.xi do_div(u64_result,u16BusSize);
2552*53ee8cc1Swenshuai.xi u64_result|=(1<<DWIN_W_LIMITE_OFT);
2553*53ee8cc1Swenshuai.xi //u64BufEnd /= u16BusSize;
2554*53ee8cc1Swenshuai.xi //u64BufEnd|=(1<<DWIN_W_LIMITE_OFT);
2555*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3B_30_L, u64_result); // input address0
2556*53ee8cc1Swenshuai.xi }
2557*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
2558*53ee8cc1Swenshuai.xi {
2559*53ee8cc1Swenshuai.xi //low bound
2560*53ee8cc1Swenshuai.xi u64_result = u64BufStart;
2561*53ee8cc1Swenshuai.xi do_div(u64_result,u16BusSize);
2562*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3C_10_L, u64_result); // input address0
2563*53ee8cc1Swenshuai.xi //high bound
2564*53ee8cc1Swenshuai.xi u64_result = u64BufEnd;
2565*53ee8cc1Swenshuai.xi do_div(u64_result,u16BusSize);
2566*53ee8cc1Swenshuai.xi u64_result|=(1<<DWIN_W_LIMITE_OFT);
2567*53ee8cc1Swenshuai.xi //u64BufEnd /= u16BusSize;
2568*53ee8cc1Swenshuai.xi //u64BufEnd|=(1<<DWIN_W_LIMITE_OFT);
2569*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3C_30_L, u64_result); // input address0
2570*53ee8cc1Swenshuai.xi }
2571*53ee8cc1Swenshuai.xi else
2572*53ee8cc1Swenshuai.xi {
2573*53ee8cc1Swenshuai.xi return;
2574*53ee8cc1Swenshuai.xi }
2575*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_SetBase1(void * pInstance,MS_PHY u64BufStart,MS_PHY u64BufEnd,SCALER_DIP_WIN eWindow)2576*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetBase1(void *pInstance, MS_PHY u64BufStart,MS_PHY u64BufEnd,SCALER_DIP_WIN eWindow)
2577*53ee8cc1Swenshuai.xi {
2578*53ee8cc1Swenshuai.xi MS_U16 u16BusSize = 0;
2579*53ee8cc1Swenshuai.xi MS_U64 u64_result;
2580*53ee8cc1Swenshuai.xi
2581*53ee8cc1Swenshuai.xi
2582*53ee8cc1Swenshuai.xi u16BusSize = HAL_XC_DIP_GetBusSize(pInstance, eWindow);
2583*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
2584*53ee8cc1Swenshuai.xi {
2585*53ee8cc1Swenshuai.xi //low bound
2586*53ee8cc1Swenshuai.xi u64_result = u64BufStart;
2587*53ee8cc1Swenshuai.xi do_div(u64_result,u16BusSize);
2588*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK36_20_L, u64_result); // input address0
2589*53ee8cc1Swenshuai.xi //high bound
2590*53ee8cc1Swenshuai.xi u64_result = u64BufEnd;
2591*53ee8cc1Swenshuai.xi do_div(u64_result,u16BusSize);
2592*53ee8cc1Swenshuai.xi u64_result|=(1<<DWIN_W_LIMITE_OFT);
2593*53ee8cc1Swenshuai.xi //u64BufEnd /= u16BusSize;
2594*53ee8cc1Swenshuai.xi //u64BufEnd|=(1<<DWIN_W_LIMITE_OFT);
2595*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK36_40_L, u64_result); // input address0
2596*53ee8cc1Swenshuai.xi }
2597*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
2598*53ee8cc1Swenshuai.xi {
2599*53ee8cc1Swenshuai.xi //low bound
2600*53ee8cc1Swenshuai.xi u64_result = u64BufStart;
2601*53ee8cc1Swenshuai.xi do_div(u64_result,u16BusSize);
2602*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3B_20_L, u64_result); // input address0
2603*53ee8cc1Swenshuai.xi //high bound
2604*53ee8cc1Swenshuai.xi u64_result = u64BufEnd;
2605*53ee8cc1Swenshuai.xi do_div(u64_result,u16BusSize);
2606*53ee8cc1Swenshuai.xi u64_result|=(1<<DWIN_W_LIMITE_OFT);
2607*53ee8cc1Swenshuai.xi //u64BufEnd /= u16BusSize;
2608*53ee8cc1Swenshuai.xi //u64BufEnd|=(1<<DWIN_W_LIMITE_OFT);
2609*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3B_40_L, u64_result); // input address0
2610*53ee8cc1Swenshuai.xi }
2611*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
2612*53ee8cc1Swenshuai.xi {
2613*53ee8cc1Swenshuai.xi //low bound
2614*53ee8cc1Swenshuai.xi u64_result = u64BufStart;
2615*53ee8cc1Swenshuai.xi do_div(u64_result,u16BusSize);
2616*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3C_20_L, u64_result); // input address0
2617*53ee8cc1Swenshuai.xi //high bound
2618*53ee8cc1Swenshuai.xi u64_result = u64BufEnd;
2619*53ee8cc1Swenshuai.xi do_div(u64_result,u16BusSize);
2620*53ee8cc1Swenshuai.xi u64_result|=(1<<DWIN_W_LIMITE_OFT);
2621*53ee8cc1Swenshuai.xi //u64BufEnd /= u16BusSize;
2622*53ee8cc1Swenshuai.xi //u64BufEnd|=(1<<DWIN_W_LIMITE_OFT);
2623*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3C_40_L, u64_result); // input address0
2624*53ee8cc1Swenshuai.xi }
2625*53ee8cc1Swenshuai.xi else
2626*53ee8cc1Swenshuai.xi {
2627*53ee8cc1Swenshuai.xi return;
2628*53ee8cc1Swenshuai.xi }
2629*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_SetMiuSel(void * pInstance,MS_U8 u8MIUSel,SCALER_DIP_WIN eWindow)2630*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetMiuSel(void *pInstance, MS_U8 u8MIUSel,SCALER_DIP_WIN eWindow)
2631*53ee8cc1Swenshuai.xi {
2632*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
2633*53ee8cc1Swenshuai.xi {
2634*53ee8cc1Swenshuai.xi // Scaler control MIU by itself
2635*53ee8cc1Swenshuai.xi // So MIU1 IP-select is set to 1. At this moment, MIU0 Miu select is not working.
2636*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK7F_11_L, BIT(11), BIT(11)); // IP select (Group6 BIT11)
2637*53ee8cc1Swenshuai.xi if( ((CHIP_MIU_ID)u8MIUSel) == E_CHIP_MIU_0 )
2638*53ee8cc1Swenshuai.xi {
2639*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_02_L, 0, BIT(13));
2640*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_07_L, 0, BIT(15));
2641*53ee8cc1Swenshuai.xi }
2642*53ee8cc1Swenshuai.xi else if( ((CHIP_MIU_ID)u8MIUSel) == E_CHIP_MIU_1 )
2643*53ee8cc1Swenshuai.xi {
2644*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_02_L, BIT(13), BIT(13));
2645*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_07_L, 0, BIT(15));
2646*53ee8cc1Swenshuai.xi }
2647*53ee8cc1Swenshuai.xi else if( ((CHIP_MIU_ID)u8MIUSel) == E_CHIP_MIU_2 )
2648*53ee8cc1Swenshuai.xi {
2649*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_02_L, 0, BIT(13));
2650*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_07_L, BIT(15), BIT(15));
2651*53ee8cc1Swenshuai.xi }
2652*53ee8cc1Swenshuai.xi else
2653*53ee8cc1Swenshuai.xi {
2654*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_02_L, BIT(13), BIT(13));
2655*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_07_L, BIT(15), BIT(15));
2656*53ee8cc1Swenshuai.xi }
2657*53ee8cc1Swenshuai.xi }
2658*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
2659*53ee8cc1Swenshuai.xi {
2660*53ee8cc1Swenshuai.xi // Scaler control MIU by itself
2661*53ee8cc1Swenshuai.xi // So MIU1 IP-select is set to 1. At this moment, MIU0 Miu select is not working.
2662*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK7F_11_L, BIT(11), BIT(11)); // IP select (Group6 BIT11)
2663*53ee8cc1Swenshuai.xi if( ((CHIP_MIU_ID)u8MIUSel) == E_CHIP_MIU_0 )
2664*53ee8cc1Swenshuai.xi {
2665*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_02_L, 0, BIT(13));
2666*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_07_L, 0, BIT(15));
2667*53ee8cc1Swenshuai.xi }
2668*53ee8cc1Swenshuai.xi else if( ((CHIP_MIU_ID)u8MIUSel) == E_CHIP_MIU_1 )
2669*53ee8cc1Swenshuai.xi {
2670*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_02_L, BIT(13), BIT(13));
2671*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_07_L, 0, BIT(15));
2672*53ee8cc1Swenshuai.xi }
2673*53ee8cc1Swenshuai.xi else if( ((CHIP_MIU_ID)u8MIUSel) == E_CHIP_MIU_2 )
2674*53ee8cc1Swenshuai.xi {
2675*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_02_L, 0, BIT(13));
2676*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_07_L, BIT(15), BIT(15));
2677*53ee8cc1Swenshuai.xi }
2678*53ee8cc1Swenshuai.xi else
2679*53ee8cc1Swenshuai.xi {
2680*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_02_L, BIT(13), BIT(13));
2681*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_07_L, BIT(15), BIT(15));
2682*53ee8cc1Swenshuai.xi }
2683*53ee8cc1Swenshuai.xi }
2684*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
2685*53ee8cc1Swenshuai.xi {
2686*53ee8cc1Swenshuai.xi // Scaler control MIU by itself
2687*53ee8cc1Swenshuai.xi // So MIU1 IP-select is set to 1. At this moment, MIU0 Miu select is not working.
2688*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK7F_11_L, BIT(11), BIT(11)); // IP select (Group6 BIT11)
2689*53ee8cc1Swenshuai.xi if( ((CHIP_MIU_ID)u8MIUSel) == E_CHIP_MIU_0 )
2690*53ee8cc1Swenshuai.xi {
2691*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_02_L, 0, BIT(13));
2692*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_07_L, 0, BIT(15));
2693*53ee8cc1Swenshuai.xi }
2694*53ee8cc1Swenshuai.xi else if( ((CHIP_MIU_ID)u8MIUSel) == E_CHIP_MIU_1 )
2695*53ee8cc1Swenshuai.xi {
2696*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_02_L, BIT(13), BIT(13));
2697*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_07_L, 0, BIT(15));
2698*53ee8cc1Swenshuai.xi }
2699*53ee8cc1Swenshuai.xi else if( ((CHIP_MIU_ID)u8MIUSel) == E_CHIP_MIU_2 )
2700*53ee8cc1Swenshuai.xi {
2701*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_02_L, 0, BIT(13));
2702*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_07_L, BIT(15), BIT(15));
2703*53ee8cc1Swenshuai.xi }
2704*53ee8cc1Swenshuai.xi else
2705*53ee8cc1Swenshuai.xi {
2706*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_02_L, BIT(13), BIT(13));
2707*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_07_L, BIT(15), BIT(15));
2708*53ee8cc1Swenshuai.xi }
2709*53ee8cc1Swenshuai.xi }
2710*53ee8cc1Swenshuai.xi else
2711*53ee8cc1Swenshuai.xi {
2712*53ee8cc1Swenshuai.xi //DIPR
2713*53ee8cc1Swenshuai.xi if( ((CHIP_MIU_ID)u8MIUSel) == E_CHIP_MIU_0 )
2714*53ee8cc1Swenshuai.xi {
2715*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7D_L, 0, BIT(15));
2716*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7C_L, 0, BIT(14));
2717*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_76_L, 0, BMASK(14:13));
2718*53ee8cc1Swenshuai.xi }
2719*53ee8cc1Swenshuai.xi else if( ((CHIP_MIU_ID)u8MIUSel) == E_CHIP_MIU_1 )
2720*53ee8cc1Swenshuai.xi {
2721*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7D_L, BIT(15), BIT(15));
2722*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7C_L, 0, BIT(14));
2723*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_76_L, BIT(13), BMASK(14:13));
2724*53ee8cc1Swenshuai.xi }
2725*53ee8cc1Swenshuai.xi else if( ((CHIP_MIU_ID)u8MIUSel) == E_CHIP_MIU_2 )
2726*53ee8cc1Swenshuai.xi {
2727*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7D_L, 0, BIT(15));
2728*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7C_L, BIT(14), BIT(14));
2729*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_76_L, BIT(14), BMASK(14:13));
2730*53ee8cc1Swenshuai.xi }
2731*53ee8cc1Swenshuai.xi else
2732*53ee8cc1Swenshuai.xi {
2733*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7D_L, BIT(15), BIT(15));
2734*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7C_L, BIT(14), BIT(14));
2735*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_76_L, BMASK(14:13), BMASK(14:13));
2736*53ee8cc1Swenshuai.xi }
2737*53ee8cc1Swenshuai.xi return;
2738*53ee8cc1Swenshuai.xi }
2739*53ee8cc1Swenshuai.xi }
2740*53ee8cc1Swenshuai.xi
HAL_XC_DIP_SetDIPRMiuSel(void * pInstance,MS_U8 u8MIUSel,SCALER_DIP_WIN eWindow)2741*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetDIPRMiuSel(void *pInstance, MS_U8 u8MIUSel,SCALER_DIP_WIN eWindow)
2742*53ee8cc1Swenshuai.xi {
2743*53ee8cc1Swenshuai.xi //DIPR
2744*53ee8cc1Swenshuai.xi if( ((CHIP_MIU_ID)u8MIUSel) == E_CHIP_MIU_0 )
2745*53ee8cc1Swenshuai.xi {
2746*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7D_L, 0, BIT(15));
2747*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7C_L, 0, BIT(14));
2748*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_76_L, 0, BMASK(14:13));
2749*53ee8cc1Swenshuai.xi }
2750*53ee8cc1Swenshuai.xi else if( ((CHIP_MIU_ID)u8MIUSel) == E_CHIP_MIU_1 )
2751*53ee8cc1Swenshuai.xi {
2752*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7D_L, BIT(15), BIT(15));
2753*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7C_L, 0, BIT(14));
2754*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_76_L, BIT(13), BMASK(14:13));
2755*53ee8cc1Swenshuai.xi }
2756*53ee8cc1Swenshuai.xi else if( ((CHIP_MIU_ID)u8MIUSel) == E_CHIP_MIU_2 )
2757*53ee8cc1Swenshuai.xi {
2758*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7D_L, 0, BIT(15));
2759*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7C_L, BIT(14), BIT(14));
2760*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_76_L, BIT(14), BMASK(14:13));
2761*53ee8cc1Swenshuai.xi }
2762*53ee8cc1Swenshuai.xi else
2763*53ee8cc1Swenshuai.xi {
2764*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7D_L, BIT(15), BIT(15));
2765*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7C_L, BIT(14), BIT(14));
2766*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_76_L, BMASK(14:13), BMASK(14:13));
2767*53ee8cc1Swenshuai.xi }
2768*53ee8cc1Swenshuai.xi
2769*53ee8cc1Swenshuai.xi }
2770*53ee8cc1Swenshuai.xi
HAL_XC_DIP_SetY2R(void * pInstance,MS_BOOL bEnable,SCALER_DIP_WIN eWindow)2771*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetY2R(void *pInstance, MS_BOOL bEnable,SCALER_DIP_WIN eWindow)
2772*53ee8cc1Swenshuai.xi {
2773*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
2774*53ee8cc1Swenshuai.xi {
2775*53ee8cc1Swenshuai.xi //enable y2r
2776*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7E_L,(bEnable?BIT(11):0),BIT(11));
2777*53ee8cc1Swenshuai.xi }
2778*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
2779*53ee8cc1Swenshuai.xi {
2780*53ee8cc1Swenshuai.xi //enable y2r
2781*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7E_L,(bEnable?BIT(11):0),BIT(11));
2782*53ee8cc1Swenshuai.xi }
2783*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
2784*53ee8cc1Swenshuai.xi {
2785*53ee8cc1Swenshuai.xi //enable y2r
2786*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7E_L,(bEnable?BIT(11):0),BIT(11));
2787*53ee8cc1Swenshuai.xi }
2788*53ee8cc1Swenshuai.xi else
2789*53ee8cc1Swenshuai.xi {
2790*53ee8cc1Swenshuai.xi return;
2791*53ee8cc1Swenshuai.xi }
2792*53ee8cc1Swenshuai.xi }
2793*53ee8cc1Swenshuai.xi
HAL_XC_DIP_SetAlphaValue(void * pInstance,MS_U8 u8AlphaVal,SCALER_DIP_WIN eWindow)2794*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetAlphaValue(void *pInstance, MS_U8 u8AlphaVal,SCALER_DIP_WIN eWindow)
2795*53ee8cc1Swenshuai.xi {
2796*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
2797*53ee8cc1Swenshuai.xi {
2798*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_02_L, u8AlphaVal,BMASK(7:0));
2799*53ee8cc1Swenshuai.xi }
2800*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
2801*53ee8cc1Swenshuai.xi {
2802*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_02_L, u8AlphaVal,BMASK(7:0));
2803*53ee8cc1Swenshuai.xi }
2804*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
2805*53ee8cc1Swenshuai.xi {
2806*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_02_L, u8AlphaVal,BMASK(7:0));
2807*53ee8cc1Swenshuai.xi }
2808*53ee8cc1Swenshuai.xi else
2809*53ee8cc1Swenshuai.xi {
2810*53ee8cc1Swenshuai.xi return;
2811*53ee8cc1Swenshuai.xi }
2812*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_SetUVSwap(void * pInstance,MS_BOOL bEnable,SCALER_DIP_WIN eWindow)2813*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetUVSwap(void *pInstance, MS_BOOL bEnable,SCALER_DIP_WIN eWindow)
2814*53ee8cc1Swenshuai.xi {
2815*53ee8cc1Swenshuai.xi // do if do Hmirror
2816*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
2817*53ee8cc1Swenshuai.xi {
2818*53ee8cc1Swenshuai.xi bDipUVSwap = bEnable;
2819*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_02_L, (bDipHMirror?(!bDipUVSwap?BIT(14):0):(bDipUVSwap?BIT(14):0)), BIT(14));
2820*53ee8cc1Swenshuai.xi }
2821*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
2822*53ee8cc1Swenshuai.xi {
2823*53ee8cc1Swenshuai.xi bDWIN0UVSwap = bEnable;
2824*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_02_L, (bDWIN0HMirror?(!bDWIN0UVSwap?BIT(14):0):(bDWIN0UVSwap?BIT(14):0)) ,BIT(14));
2825*53ee8cc1Swenshuai.xi }
2826*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
2827*53ee8cc1Swenshuai.xi {
2828*53ee8cc1Swenshuai.xi bDWIN1UVSwap = bEnable;
2829*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_02_L, (bDWIN1HMirror?(!bDWIN1UVSwap?BIT(14):0):(bDWIN1UVSwap?BIT(14):0)) ,BIT(14));
2830*53ee8cc1Swenshuai.xi }
2831*53ee8cc1Swenshuai.xi else
2832*53ee8cc1Swenshuai.xi {
2833*53ee8cc1Swenshuai.xi return;
2834*53ee8cc1Swenshuai.xi }
2835*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_SetYCSwap(void * pInstance,MS_BOOL bEnable,SCALER_DIP_WIN eWindow)2836*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetYCSwap(void *pInstance, MS_BOOL bEnable,SCALER_DIP_WIN eWindow)
2837*53ee8cc1Swenshuai.xi {
2838*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
2839*53ee8cc1Swenshuai.xi {
2840*53ee8cc1Swenshuai.xi bDipYCSwap = bEnable;
2841*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_02_L, (bDipHMirror?(!bDipYCSwap?BIT(15):0):(bDipYCSwap?BIT(15):0)), BIT(15));
2842*53ee8cc1Swenshuai.xi }
2843*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
2844*53ee8cc1Swenshuai.xi {
2845*53ee8cc1Swenshuai.xi bDWIN0YCSwap = bEnable;
2846*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_02_L, (bDWIN0HMirror?(!bDWIN0YCSwap?BIT(15):0):(bDWIN0YCSwap?BIT(15):0)) ,BIT(15));
2847*53ee8cc1Swenshuai.xi }
2848*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
2849*53ee8cc1Swenshuai.xi {
2850*53ee8cc1Swenshuai.xi bDWIN1YCSwap = bEnable;
2851*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_02_L, (bDWIN1HMirror?(!bDWIN1YCSwap?BIT(15):0):(bDWIN1YCSwap?BIT(15):0)) ,BIT(15));
2852*53ee8cc1Swenshuai.xi }
2853*53ee8cc1Swenshuai.xi else
2854*53ee8cc1Swenshuai.xi {
2855*53ee8cc1Swenshuai.xi return;
2856*53ee8cc1Swenshuai.xi }
2857*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_SetRGBSwap(void * pInstance,MS_BOOL bEnable,SCALER_DIP_WIN eWindow)2858*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetRGBSwap(void *pInstance, MS_BOOL bEnable,SCALER_DIP_WIN eWindow)
2859*53ee8cc1Swenshuai.xi {
2860*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
2861*53ee8cc1Swenshuai.xi {
2862*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7E_L, (bEnable?BIT(13):0) ,BIT(13));
2863*53ee8cc1Swenshuai.xi }
2864*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
2865*53ee8cc1Swenshuai.xi {
2866*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7E_L, (bEnable?BIT(13):0) ,BIT(13));
2867*53ee8cc1Swenshuai.xi }
2868*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
2869*53ee8cc1Swenshuai.xi {
2870*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7E_L, (bEnable?BIT(13):0) ,BIT(13));
2871*53ee8cc1Swenshuai.xi }
2872*53ee8cc1Swenshuai.xi else
2873*53ee8cc1Swenshuai.xi {
2874*53ee8cc1Swenshuai.xi return;
2875*53ee8cc1Swenshuai.xi }
2876*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_SetOutputCapture(void * pInstance,MS_BOOL bEnable,EN_XC_DIP_OP_CAPTURE eOpCapture,SCALER_DIP_WIN eWindow)2877*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetOutputCapture(void *pInstance, MS_BOOL bEnable,EN_XC_DIP_OP_CAPTURE eOpCapture,SCALER_DIP_WIN eWindow)
2878*53ee8cc1Swenshuai.xi {
2879*53ee8cc1Swenshuai.xi MS_BOOL bCaptureEna;
2880*53ee8cc1Swenshuai.xi MS_U16 u16CaptureSrc;
2881*53ee8cc1Swenshuai.xi
2882*53ee8cc1Swenshuai.xi bCaptureEna = bEnable;
2883*53ee8cc1Swenshuai.xi switch(eOpCapture)
2884*53ee8cc1Swenshuai.xi {
2885*53ee8cc1Swenshuai.xi case E_XC_DIP_VOP2: // compatible to previous IC, overlap is before osd blending
2886*53ee8cc1Swenshuai.xi u16CaptureSrc = 0;
2887*53ee8cc1Swenshuai.xi break;
2888*53ee8cc1Swenshuai.xi case E_XC_DIP_OP2:
2889*53ee8cc1Swenshuai.xi u16CaptureSrc = 1;
2890*53ee8cc1Swenshuai.xi break;
2891*53ee8cc1Swenshuai.xi case E_XC_DIP_VIP:
2892*53ee8cc1Swenshuai.xi u16CaptureSrc = 2;
2893*53ee8cc1Swenshuai.xi break;
2894*53ee8cc1Swenshuai.xi case E_XC_DIP_BRI:
2895*53ee8cc1Swenshuai.xi u16CaptureSrc = 3;
2896*53ee8cc1Swenshuai.xi break;
2897*53ee8cc1Swenshuai.xi default:
2898*53ee8cc1Swenshuai.xi u16CaptureSrc = 0;
2899*53ee8cc1Swenshuai.xi bCaptureEna = FALSE;
2900*53ee8cc1Swenshuai.xi break;
2901*53ee8cc1Swenshuai.xi }
2902*53ee8cc1Swenshuai.xi
2903*53ee8cc1Swenshuai.xi if(bCaptureEna)
2904*53ee8cc1Swenshuai.xi {
2905*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK0F_57_L, BIT(11), BIT(11)); // Enable
2906*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
2907*53ee8cc1Swenshuai.xi {
2908*53ee8cc1Swenshuai.xi if(eOpCapture == E_XC_DIP_VOP2)
2909*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7F_L, 2<<14, BMASK(15:14));
2910*53ee8cc1Swenshuai.xi else if(eOpCapture == E_XC_DIP_OP2)
2911*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7F_L, 1<<14, BMASK(15:14));
2912*53ee8cc1Swenshuai.xi else
2913*53ee8cc1Swenshuai.xi DIP_H_DBUG("[DIP] OP capture source not support\n");
2914*53ee8cc1Swenshuai.xi }
2915*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
2916*53ee8cc1Swenshuai.xi {
2917*53ee8cc1Swenshuai.xi if(eOpCapture == E_XC_DIP_VOP2)
2918*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7F_L, 2<<4, BMASK(5:4));
2919*53ee8cc1Swenshuai.xi else if(eOpCapture == E_XC_DIP_OP2)
2920*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7F_L, 1<<4, BMASK(5:4));
2921*53ee8cc1Swenshuai.xi else
2922*53ee8cc1Swenshuai.xi DIP_H_DBUG("[DIP] OP capture source not support\n");
2923*53ee8cc1Swenshuai.xi }
2924*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
2925*53ee8cc1Swenshuai.xi {
2926*53ee8cc1Swenshuai.xi if(eOpCapture == E_XC_DIP_VOP2)
2927*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7F_L, 2<<4, BMASK(5:4));
2928*53ee8cc1Swenshuai.xi else if(eOpCapture == E_XC_DIP_OP2)
2929*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7F_L, 1<<4, BMASK(5:4));
2930*53ee8cc1Swenshuai.xi else
2931*53ee8cc1Swenshuai.xi DIP_H_DBUG("[DIP] OP capture source not support\n");
2932*53ee8cc1Swenshuai.xi }
2933*53ee8cc1Swenshuai.xi else
2934*53ee8cc1Swenshuai.xi {
2935*53ee8cc1Swenshuai.xi return;
2936*53ee8cc1Swenshuai.xi }
2937*53ee8cc1Swenshuai.xi }
2938*53ee8cc1Swenshuai.xi }
2939*53ee8cc1Swenshuai.xi
HAL_XC_DIP_SetMirror(void * pInstance,MS_BOOL bHMirror,MS_BOOL bVMirror,SCALER_DIP_WIN eWindow)2940*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetMirror(void *pInstance, MS_BOOL bHMirror,MS_BOOL bVMirror,SCALER_DIP_WIN eWindow)
2941*53ee8cc1Swenshuai.xi {
2942*53ee8cc1Swenshuai.xi EN_DRV_XC_DWIN_DATA_FMT fmt = XC_DWIN_DATA_FMT_MAX;
2943*53ee8cc1Swenshuai.xi // pixel format will swap if set Hmirror,so here do swap pixel format
2944*53ee8cc1Swenshuai.xi fmt = HAL_XC_DIP_GetDataFmt(pInstance, eWindow);
2945*53ee8cc1Swenshuai.xi if ( (XC_DWIN_DATA_FMT_YUV422 == fmt)
2946*53ee8cc1Swenshuai.xi ||(XC_DWIN_DATA_FMT_YUV420 == fmt))
2947*53ee8cc1Swenshuai.xi {
2948*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
2949*53ee8cc1Swenshuai.xi {
2950*53ee8cc1Swenshuai.xi bDipHMirror = bHMirror;
2951*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_02_L, (bDipHMirror?(!bDipUVSwap?BIT(14):0):(bDipUVSwap?BIT(14):0)), BIT(14));
2952*53ee8cc1Swenshuai.xi }
2953*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
2954*53ee8cc1Swenshuai.xi {
2955*53ee8cc1Swenshuai.xi bDWIN0HMirror = bHMirror;
2956*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_02_L, (bDWIN0HMirror?(!bDWIN0UVSwap?BIT(14):0):(bDWIN0UVSwap?BIT(14):0)), BIT(14));
2957*53ee8cc1Swenshuai.xi }
2958*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
2959*53ee8cc1Swenshuai.xi {
2960*53ee8cc1Swenshuai.xi bDWIN1HMirror = bHMirror;
2961*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_02_L, (bDWIN1HMirror?(!bDWIN1UVSwap?BIT(14):0):(bDWIN1UVSwap?BIT(14):0)), BIT(14));
2962*53ee8cc1Swenshuai.xi }
2963*53ee8cc1Swenshuai.xi }
2964*53ee8cc1Swenshuai.xi else if (XC_DWIN_DATA_FMT_YC422 == fmt)
2965*53ee8cc1Swenshuai.xi {
2966*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
2967*53ee8cc1Swenshuai.xi {
2968*53ee8cc1Swenshuai.xi bDipHMirror = bHMirror;
2969*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_02_L, (bDipHMirror?(!bDipYCSwap?BIT(15):0):(bDipYCSwap?BIT(15):0)), BIT(15));
2970*53ee8cc1Swenshuai.xi }
2971*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
2972*53ee8cc1Swenshuai.xi {
2973*53ee8cc1Swenshuai.xi bDWIN0HMirror = bHMirror;
2974*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_02_L, (bDWIN0HMirror?(!bDWIN0YCSwap?BIT(15):0):(bDWIN0YCSwap?BIT(15):0)), BIT(15));
2975*53ee8cc1Swenshuai.xi }
2976*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
2977*53ee8cc1Swenshuai.xi {
2978*53ee8cc1Swenshuai.xi bDWIN1HMirror = bHMirror;
2979*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_02_L, (bDWIN1HMirror?(!bDWIN1YCSwap?BIT(15):0):(bDWIN1YCSwap?BIT(15):0)), BIT(15));
2980*53ee8cc1Swenshuai.xi }
2981*53ee8cc1Swenshuai.xi }
2982*53ee8cc1Swenshuai.xi
2983*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
2984*53ee8cc1Swenshuai.xi {
2985*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L, (bHMirror?BIT(9):0) ,BIT(9));
2986*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L, (bVMirror?BIT(10):0) ,BIT(10));
2987*53ee8cc1Swenshuai.xi }
2988*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
2989*53ee8cc1Swenshuai.xi {
2990*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_0B_L, (bHMirror?BIT(9):0) ,BIT(9));
2991*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_0B_L, (bVMirror?BIT(10):0) ,BIT(10));
2992*53ee8cc1Swenshuai.xi }
2993*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
2994*53ee8cc1Swenshuai.xi {
2995*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_0B_L, (bHMirror?BIT(9):0) ,BIT(9));
2996*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_0B_L, (bVMirror?BIT(10):0) ,BIT(10));
2997*53ee8cc1Swenshuai.xi }
2998*53ee8cc1Swenshuai.xi else
2999*53ee8cc1Swenshuai.xi {
3000*53ee8cc1Swenshuai.xi return;
3001*53ee8cc1Swenshuai.xi }
3002*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_SetDIPRProperty(void * pInstance,ST_XC_DIPR_PROPERTY * pstDIPRProperty,SCALER_DIP_WIN eWindow)3003*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetDIPRProperty(void *pInstance, ST_XC_DIPR_PROPERTY *pstDIPRProperty, SCALER_DIP_WIN eWindow)
3004*53ee8cc1Swenshuai.xi {
3005*53ee8cc1Swenshuai.xi MS_BOOL bYUV = TRUE;
3006*53ee8cc1Swenshuai.xi MS_U16 u16Fmt;
3007*53ee8cc1Swenshuai.xi MS_U64 u64_result = 0;
3008*53ee8cc1Swenshuai.xi DipRFmt = (EN_DRV_XC_DWIN_DATA_FMT)pstDIPRProperty->enDataFmt;
3009*53ee8cc1Swenshuai.xi switch ((EN_DRV_XC_DWIN_DATA_FMT)pstDIPRProperty->enDataFmt)
3010*53ee8cc1Swenshuai.xi {
3011*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YUV422 :
3012*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YC422 :
3013*53ee8cc1Swenshuai.xi u16Fmt = 0;
3014*53ee8cc1Swenshuai.xi break;
3015*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_RGB565 :
3016*53ee8cc1Swenshuai.xi u16Fmt = 1;
3017*53ee8cc1Swenshuai.xi break;
3018*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_ARGB8888 :
3019*53ee8cc1Swenshuai.xi u16Fmt = 2;
3020*53ee8cc1Swenshuai.xi break;
3021*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YUV420 :
3022*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YUV420_H265 :
3023*53ee8cc1Swenshuai.xi case XC_DWIN_DATA_FMT_YUV420_H265_10BITS :
3024*53ee8cc1Swenshuai.xi u16Fmt = 3;
3025*53ee8cc1Swenshuai.xi break;
3026*53ee8cc1Swenshuai.xi default :
3027*53ee8cc1Swenshuai.xi u16Fmt = 0x0;
3028*53ee8cc1Swenshuai.xi break;
3029*53ee8cc1Swenshuai.xi }
3030*53ee8cc1Swenshuai.xi
3031*53ee8cc1Swenshuai.xi //select 420 to 422
3032*53ee8cc1Swenshuai.xi if( (pstDIPRProperty->enDataFmt == DIP_DATA_FMT_YUV420) || (pstDIPRProperty->enDataFmt == DIP_DATA_FMT_YUV420_H265)|| (pstDIPRProperty->enDataFmt == DIP_DATA_FMT_YUV420_H265_10BITS))
3033*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7C_L,BIT(3),BIT(3));
3034*53ee8cc1Swenshuai.xi else
3035*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7C_L,0,BIT(3));
3036*53ee8cc1Swenshuai.xi if( ((pstDIPRProperty->enDataFmt) == DIP_DATA_FMT_RGB565) || ((pstDIPRProperty->enDataFmt) == DIP_DATA_FMT_ARGB8888))
3037*53ee8cc1Swenshuai.xi bYUV = FALSE;
3038*53ee8cc1Swenshuai.xi
3039*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
3040*53ee8cc1Swenshuai.xi {
3041*53ee8cc1Swenshuai.xi //select 422 to 444
3042*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6C_L,(bYUV?BIT(9):0),BIT(9));
3043*53ee8cc1Swenshuai.xi }
3044*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
3045*53ee8cc1Swenshuai.xi {
3046*53ee8cc1Swenshuai.xi //select 422 to 444
3047*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_78_L,(bYUV?BIT(9):0),BIT(9));
3048*53ee8cc1Swenshuai.xi }
3049*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
3050*53ee8cc1Swenshuai.xi {
3051*53ee8cc1Swenshuai.xi //select 422 to 444
3052*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_78_L,(bYUV?BIT(9):0),BIT(9));
3053*53ee8cc1Swenshuai.xi }
3054*53ee8cc1Swenshuai.xi
3055*53ee8cc1Swenshuai.xi if(bDIPRotation == FALSE)
3056*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6F_L,0x3,BIT(1)|BIT(0));
3057*53ee8cc1Swenshuai.xi
3058*53ee8cc1Swenshuai.xi //Y Buffer
3059*53ee8cc1Swenshuai.xi u64_result = pstDIPRProperty->u32YBufAddr;
3060*53ee8cc1Swenshuai.xi do_div(u64_result,DWIN_BYTE_PER_WORD);
3061*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK36_78_L, u64_result);
3062*53ee8cc1Swenshuai.xi //C Buffer
3063*53ee8cc1Swenshuai.xi u64_result = pstDIPRProperty->u32CBufAddr;
3064*53ee8cc1Swenshuai.xi do_div(u64_result,DWIN_BYTE_PER_WORD);
3065*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK36_7A_L, u64_result);
3066*53ee8cc1Swenshuai.xi //width
3067*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK36_27_L, (pstDIPRProperty->u16Width));
3068*53ee8cc1Swenshuai.xi //height
3069*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK36_37_L, (pstDIPRProperty->u16Height));
3070*53ee8cc1Swenshuai.xi //Line offset
3071*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK36_74_L, (pstDIPRProperty->u16Pitch));
3072*53ee8cc1Swenshuai.xi //Data Fmt
3073*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_7D_L,(u16Fmt)<<6,BMASK(7:6));
3074*53ee8cc1Swenshuai.xi
3075*53ee8cc1Swenshuai.xi if(pstDIPRProperty->enDataFmt == DIP_DATA_FMT_YUV420_H265_10BITS)
3076*53ee8cc1Swenshuai.xi {
3077*53ee8cc1Swenshuai.xi //Y Buffer for EVD 10 bits
3078*53ee8cc1Swenshuai.xi u64_result = pstDIPRProperty->u32YBufAddr10Bits;
3079*53ee8cc1Swenshuai.xi do_div(u64_result,DWIN_BYTE_PER_WORD);
3080*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK36_12_L, u64_result);
3081*53ee8cc1Swenshuai.xi //C Buffer for EVD 10 bits
3082*53ee8cc1Swenshuai.xi u64_result = pstDIPRProperty->u32CBufAddr10Bits;
3083*53ee8cc1Swenshuai.xi do_div(u64_result,DWIN_BYTE_PER_WORD);
3084*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK36_14_L, u64_result);
3085*53ee8cc1Swenshuai.xi //Line offset for EVD 10 bits
3086*53ee8cc1Swenshuai.xi DIP_W2BYTE(0, REG_SC_BK36_1D_L, (pstDIPRProperty->u16Pitch));
3087*53ee8cc1Swenshuai.xi //Enable DIPR H265 10 bits
3088*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_17_L,BIT(15),BIT(15));
3089*53ee8cc1Swenshuai.xi }
3090*53ee8cc1Swenshuai.xi else
3091*53ee8cc1Swenshuai.xi {
3092*53ee8cc1Swenshuai.xi //Disable DIPR H265 10 bits
3093*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_17_L,0x0,BIT(15));
3094*53ee8cc1Swenshuai.xi }
3095*53ee8cc1Swenshuai.xi if( (pstDIPRProperty->enDataFmt == DIP_DATA_FMT_YUV420_H265) || (pstDIPRProperty->enDataFmt == DIP_DATA_FMT_YUV420_H265_10BITS))
3096*53ee8cc1Swenshuai.xi {
3097*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L,BIT(13),BIT(13));
3098*53ee8cc1Swenshuai.xi }
3099*53ee8cc1Swenshuai.xi else
3100*53ee8cc1Swenshuai.xi {
3101*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L,0,BIT(13));
3102*53ee8cc1Swenshuai.xi }
3103*53ee8cc1Swenshuai.xi if(pstDIPRProperty->enDataFmt == DIP_DATA_FMT_YUV420)
3104*53ee8cc1Swenshuai.xi {
3105*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0C_L,BIT(6),BIT(6));
3106*53ee8cc1Swenshuai.xi }
3107*53ee8cc1Swenshuai.xi else
3108*53ee8cc1Swenshuai.xi {
3109*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0C_L,0,BIT(6));
3110*53ee8cc1Swenshuai.xi }
3111*53ee8cc1Swenshuai.xi }
3112*53ee8cc1Swenshuai.xi
HAL_XC_DIP_SetDIPRProperty_MFDEC(void * pInstance,ST_DIP_MFDEC_INFO stDIPR_MFDecInfo,SCALER_DIP_WIN eWindow)3113*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetDIPRProperty_MFDEC(void *pInstance, ST_DIP_MFDEC_INFO stDIPR_MFDecInfo, SCALER_DIP_WIN eWindow)
3114*53ee8cc1Swenshuai.xi {
3115*53ee8cc1Swenshuai.xi }
3116*53ee8cc1Swenshuai.xi
HAL_XC_DIP_SetDIPRProperty_DI(void * pInstance,ST_XC_DIPR_PROPERTY * pstDIPRProperty,ST_DIP_DIPR_3DDI_SETTING * stDIPR_DIInfo,SCALER_DIP_WIN eWindow)3117*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetDIPRProperty_DI(void *pInstance, ST_XC_DIPR_PROPERTY *pstDIPRProperty, ST_DIP_DIPR_3DDI_SETTING *stDIPR_DIInfo, SCALER_DIP_WIN eWindow)
3118*53ee8cc1Swenshuai.xi {
3119*53ee8cc1Swenshuai.xi }
3120*53ee8cc1Swenshuai.xi
3121*53ee8cc1Swenshuai.xi
HAL_XC_DIP_Rotation(void * pInstance,MS_BOOL bRotation,EN_XC_DIP_ROTATION eRoDirection,MS_PHY u64StartAddr,SCALER_DIP_WIN eTmpWindow)3122*53ee8cc1Swenshuai.xi void HAL_XC_DIP_Rotation(void *pInstance, MS_BOOL bRotation,EN_XC_DIP_ROTATION eRoDirection,MS_PHY u64StartAddr,SCALER_DIP_WIN eTmpWindow)
3123*53ee8cc1Swenshuai.xi {
3124*53ee8cc1Swenshuai.xi MS_U16 u16BusSize = 0;
3125*53ee8cc1Swenshuai.xi SCALER_DIP_WIN eWindow = eTmpWindow;
3126*53ee8cc1Swenshuai.xi bDIPRotation = bRotation;
3127*53ee8cc1Swenshuai.xi DIPRotation = eTmpWindow;
3128*53ee8cc1Swenshuai.xi
3129*53ee8cc1Swenshuai.xi u16BusSize = HAL_XC_DIP_GetBusSize(pInstance,eTmpWindow);
3130*53ee8cc1Swenshuai.xi if( (u16BusSize == DIP_BYTE_PER_WORD) && (bRotation == TRUE) )
3131*53ee8cc1Swenshuai.xi {
3132*53ee8cc1Swenshuai.xi MDrv_DIP_WriteByteMask(REG_CKG_FMCLK, 0x0, CKG_FMCLK_GATED);
3133*53ee8cc1Swenshuai.xi MDrv_DIP_WriteByteMask(REG_CKG_FMCLK, CKG_FMCLK_MIU_128, CKG_FMCLK_MASK);
3134*53ee8cc1Swenshuai.xi MDrv_DIP_WriteByteMask(REG_CKG_SC_ROT, CKG_SC_ROT_MIU_128, CKG_SC_ROT_MASK);
3135*53ee8cc1Swenshuai.xi }
3136*53ee8cc1Swenshuai.xi else if( (u16BusSize == DWIN_BYTE_PER_WORD) && (bRotation == TRUE) )
3137*53ee8cc1Swenshuai.xi {
3138*53ee8cc1Swenshuai.xi MDrv_DIP_WriteByteMask(REG_CKG_FMCLK, 0x0, CKG_FMCLK_GATED);
3139*53ee8cc1Swenshuai.xi MDrv_DIP_WriteByteMask(REG_CKG_FMCLK, CKG_FMCLK_MIU_256, CKG_FMCLK_MASK);
3140*53ee8cc1Swenshuai.xi MDrv_DIP_WriteByteMask(REG_CKG_SC_ROT, CKG_SC_ROT_MIU_256, CKG_SC_ROT_MASK);
3141*53ee8cc1Swenshuai.xi }
3142*53ee8cc1Swenshuai.xi else
3143*53ee8cc1Swenshuai.xi {
3144*53ee8cc1Swenshuai.xi MDrv_DIP_WriteByteMask(REG_CKG_FMCLK, CKG_FMCLK_MIU_128, CKG_FMCLK_MASK);
3145*53ee8cc1Swenshuai.xi MDrv_DIP_WriteByteMask(REG_CKG_SC_ROT, CKG_SC_ROT_MIU_128, CKG_SC_ROT_MASK);
3146*53ee8cc1Swenshuai.xi }
3147*53ee8cc1Swenshuai.xi if(bRotation)
3148*53ee8cc1Swenshuai.xi {
3149*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BKBF_20_L,BIT(11)|BIT(3),BIT(11)|BIT(3));
3150*53ee8cc1Swenshuai.xi }
3151*53ee8cc1Swenshuai.xi else
3152*53ee8cc1Swenshuai.xi {
3153*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BKBF_20_L,0,BIT(11)|BIT(3));
3154*53ee8cc1Swenshuai.xi }
3155*53ee8cc1Swenshuai.xi
3156*53ee8cc1Swenshuai.xi //reg_rotate_mode
3157*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_10_L,eRoDirection<<14,BIT(14));
3158*53ee8cc1Swenshuai.xi //rotate destination 0:dwin0 1:dwin1 2:dip
3159*53ee8cc1Swenshuai.xi if(eTmpWindow == DIP_WINDOW )
3160*53ee8cc1Swenshuai.xi {
3161*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6E_L,BIT(15),BMASK(15:14));
3162*53ee8cc1Swenshuai.xi }
3163*53ee8cc1Swenshuai.xi else if(eTmpWindow == DWIN0_WINDOW )
3164*53ee8cc1Swenshuai.xi {
3165*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6E_L,0x0,BMASK(15:14));
3166*53ee8cc1Swenshuai.xi }
3167*53ee8cc1Swenshuai.xi else if(eTmpWindow == DWIN1_WINDOW )
3168*53ee8cc1Swenshuai.xi {
3169*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_6E_L,BIT(14),BMASK(15:14));
3170*53ee8cc1Swenshuai.xi }
3171*53ee8cc1Swenshuai.xi
3172*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_SetPinpon(void * pInstance,MS_BOOL bPinpon,MS_PHY u64PinponAddr,MS_PHY u64OffSet,SCALER_DIP_WIN eWindow)3173*53ee8cc1Swenshuai.xi void HAL_XC_DIP_SetPinpon(void *pInstance, MS_BOOL bPinpon,MS_PHY u64PinponAddr,MS_PHY u64OffSet,SCALER_DIP_WIN eWindow)
3174*53ee8cc1Swenshuai.xi {
3175*53ee8cc1Swenshuai.xi MS_U16 u16BusSize = 0;
3176*53ee8cc1Swenshuai.xi MS_U64 u64_result = 0;
3177*53ee8cc1Swenshuai.xi
3178*53ee8cc1Swenshuai.xi u16BusSize = HAL_XC_DIP_GetBusSize(pInstance, eWindow);
3179*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
3180*53ee8cc1Swenshuai.xi {
3181*53ee8cc1Swenshuai.xi u64_result = u64PinponAddr;
3182*53ee8cc1Swenshuai.xi do_div(u64_result,u16BusSize);
3183*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK36_20_L, u64_result);
3184*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK36_50_L,u64OffSet);
3185*53ee8cc1Swenshuai.xi }
3186*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
3187*53ee8cc1Swenshuai.xi {
3188*53ee8cc1Swenshuai.xi u64_result = u64PinponAddr;
3189*53ee8cc1Swenshuai.xi do_div(u64_result,u16BusSize);
3190*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3B_20_L, u64_result);
3191*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3B_50_L,u64OffSet);
3192*53ee8cc1Swenshuai.xi }
3193*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
3194*53ee8cc1Swenshuai.xi {
3195*53ee8cc1Swenshuai.xi u64_result = u64PinponAddr;
3196*53ee8cc1Swenshuai.xi do_div(u64_result,u16BusSize);
3197*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3C_20_L, u64_result);
3198*53ee8cc1Swenshuai.xi DIP_W4BYTE(0, REG_SC_BK3C_50_L,u64OffSet);
3199*53ee8cc1Swenshuai.xi }
3200*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_GetHVSP(void * pInstance)3201*53ee8cc1Swenshuai.xi SCALER_DIP_WIN HAL_XC_DIP_GetHVSP(void* pInstance)
3202*53ee8cc1Swenshuai.xi {
3203*53ee8cc1Swenshuai.xi return MAX_DIP_WINDOW;
3204*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_SetHVSP(void * pInstance,MS_BOOL bSelect,SCALER_DIP_WIN eWindow)3205*53ee8cc1Swenshuai.xi MS_BOOL HAL_XC_DIP_SetHVSP(void* pInstance,MS_BOOL bSelect, SCALER_DIP_WIN eWindow)
3206*53ee8cc1Swenshuai.xi {
3207*53ee8cc1Swenshuai.xi return FALSE;
3208*53ee8cc1Swenshuai.xi }
3209*53ee8cc1Swenshuai.xi
HAL_XC_DIP_Set420TileBlock(void * pInstance,EN_XC_DIP_TILE_BLOCK eTileBlock,SCALER_DIP_WIN eWindow)3210*53ee8cc1Swenshuai.xi MS_BOOL HAL_XC_DIP_Set420TileBlock(void* pInstance,EN_XC_DIP_TILE_BLOCK eTileBlock,SCALER_DIP_WIN eWindow)
3211*53ee8cc1Swenshuai.xi {
3212*53ee8cc1Swenshuai.xi
3213*53ee8cc1Swenshuai.xi if(eTileBlock == DIP_TILE_BLOCK_R_16_32)
3214*53ee8cc1Swenshuai.xi {
3215*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L,0x0,BIT(13));
3216*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L,0x0,BIT(15));
3217*53ee8cc1Swenshuai.xi }
3218*53ee8cc1Swenshuai.xi else if(eTileBlock == DIP_TILE_BLOCK_R_32_16)
3219*53ee8cc1Swenshuai.xi {
3220*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L,BIT(13),BIT(13));
3221*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L,0x0,BIT(15));
3222*53ee8cc1Swenshuai.xi }
3223*53ee8cc1Swenshuai.xi else if(eTileBlock == DIP_TILE_BLOCK_R_32_32)
3224*53ee8cc1Swenshuai.xi {
3225*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L,0x0,BIT(13));
3226*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L,BIT(15),BIT(15));
3227*53ee8cc1Swenshuai.xi }
3228*53ee8cc1Swenshuai.xi else if( (eTileBlock == DIP_TILE_BLOCK_W_16_32) && (eWindow == DIP_WINDOW) )
3229*53ee8cc1Swenshuai.xi {
3230*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L,0x0,BIT(12));
3231*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L,0x0,BIT(14));
3232*53ee8cc1Swenshuai.xi }
3233*53ee8cc1Swenshuai.xi else if( (eTileBlock == DIP_TILE_BLOCK_W_32_16) && (eWindow == DIP_WINDOW) )
3234*53ee8cc1Swenshuai.xi {
3235*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L,BIT(12),BIT(12));
3236*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L,0x0,BIT(14));
3237*53ee8cc1Swenshuai.xi }
3238*53ee8cc1Swenshuai.xi else if( (eTileBlock == DIP_TILE_BLOCK_W_32_32) && (eWindow == DIP_WINDOW) )
3239*53ee8cc1Swenshuai.xi {
3240*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L,0x0,BIT(12));
3241*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK36_0B_L,BIT(14),BIT(14));
3242*53ee8cc1Swenshuai.xi }
3243*53ee8cc1Swenshuai.xi else
3244*53ee8cc1Swenshuai.xi return FALSE;
3245*53ee8cc1Swenshuai.xi
3246*53ee8cc1Swenshuai.xi return TRUE;
3247*53ee8cc1Swenshuai.xi }
3248*53ee8cc1Swenshuai.xi
HAL_XC_DIP_CallBack(InterruptNum eIntNum)3249*53ee8cc1Swenshuai.xi static void HAL_XC_DIP_CallBack(InterruptNum eIntNum)
3250*53ee8cc1Swenshuai.xi {
3251*53ee8cc1Swenshuai.xi if( (SC_R2BYTEMSK(0, REG_SC_BK36_0A_L,BMASK(7:0)) > 0) && (pDipIntCb != NULL) )
3252*53ee8cc1Swenshuai.xi (void)(pDipIntCb)(eIntNum);
3253*53ee8cc1Swenshuai.xi if( (SC_R2BYTEMSK(0, REG_SC_BK3B_0A_L,BMASK(7:0)) > 0) && (pDwin0IntCb != NULL) )
3254*53ee8cc1Swenshuai.xi (void)(pDwin0IntCb)(eIntNum);
3255*53ee8cc1Swenshuai.xi if( (SC_R2BYTEMSK(0, REG_SC_BK3C_0A_L,BMASK(7:0)) > 0) && (pDwin1IntCb != NULL) )
3256*53ee8cc1Swenshuai.xi (void)(pDwin1IntCb)(eIntNum);
3257*53ee8cc1Swenshuai.xi
3258*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_DIPW);
3259*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_InterruptAttach(void * pInstance,InterruptCb pIntCb,SCALER_DIP_WIN eWindow)3260*53ee8cc1Swenshuai.xi void HAL_XC_DIP_InterruptAttach(void *pInstance, InterruptCb pIntCb,SCALER_DIP_WIN eWindow)
3261*53ee8cc1Swenshuai.xi {
3262*53ee8cc1Swenshuai.xi if(bAttached == FALSE)
3263*53ee8cc1Swenshuai.xi {
3264*53ee8cc1Swenshuai.xi MsOS_AttachInterrupt(E_INT_IRQ_DIPW,HAL_XC_DIP_CallBack);
3265*53ee8cc1Swenshuai.xi }
3266*53ee8cc1Swenshuai.xi bAttached = TRUE;
3267*53ee8cc1Swenshuai.xi
3268*53ee8cc1Swenshuai.xi if( (bDipIsr == FALSE) && (bDwin0Isr == FALSE) && (bDwin1Isr == FALSE))
3269*53ee8cc1Swenshuai.xi {
3270*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_DIPW);
3271*53ee8cc1Swenshuai.xi }
3272*53ee8cc1Swenshuai.xi
3273*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
3274*53ee8cc1Swenshuai.xi {
3275*53ee8cc1Swenshuai.xi pDipIntCb = pIntCb;
3276*53ee8cc1Swenshuai.xi bDipIsr = TRUE;
3277*53ee8cc1Swenshuai.xi }
3278*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
3279*53ee8cc1Swenshuai.xi {
3280*53ee8cc1Swenshuai.xi pDwin0IntCb = pIntCb;
3281*53ee8cc1Swenshuai.xi bDwin0Isr = TRUE;
3282*53ee8cc1Swenshuai.xi }
3283*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
3284*53ee8cc1Swenshuai.xi {
3285*53ee8cc1Swenshuai.xi pDwin1IntCb = pIntCb;
3286*53ee8cc1Swenshuai.xi bDwin1Isr = TRUE;
3287*53ee8cc1Swenshuai.xi }
3288*53ee8cc1Swenshuai.xi else
3289*53ee8cc1Swenshuai.xi {
3290*53ee8cc1Swenshuai.xi return;
3291*53ee8cc1Swenshuai.xi }
3292*53ee8cc1Swenshuai.xi }
HAL_XC_DIP_InterruptDetach(void * pInstance,SCALER_DIP_WIN eWindow)3293*53ee8cc1Swenshuai.xi void HAL_XC_DIP_InterruptDetach(void *pInstance, SCALER_DIP_WIN eWindow)
3294*53ee8cc1Swenshuai.xi {
3295*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
3296*53ee8cc1Swenshuai.xi {
3297*53ee8cc1Swenshuai.xi bDipIsr = FALSE;
3298*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
3299*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK34_7E_L, BMASK(7:4) , BMASK(7:4));
3300*53ee8cc1Swenshuai.xi #endif
3301*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_IDCLK3, CKG_IDCLK3_GATED, CKG_IDCLK3_GATED); // Disable clock
3302*53ee8cc1Swenshuai.xi }
3303*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
3304*53ee8cc1Swenshuai.xi {
3305*53ee8cc1Swenshuai.xi bDwin0Isr = FALSE;
3306*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
3307*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3B_7F_L, BMASK(3:0) , BMASK(3:0));
3308*53ee8cc1Swenshuai.xi #endif
3309*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_PDW0, CKG_PDW0_GATED, CKG_PDW0_GATED); // Disable clock
3310*53ee8cc1Swenshuai.xi }
3311*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
3312*53ee8cc1Swenshuai.xi {
3313*53ee8cc1Swenshuai.xi bDwin1Isr = FALSE;
3314*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_SRAMPD
3315*53ee8cc1Swenshuai.xi DIP_W2BYTEMSK(0, REG_SC_BK3C_7F_L, BMASK(3:0) , BMASK(3:0));
3316*53ee8cc1Swenshuai.xi #endif
3317*53ee8cc1Swenshuai.xi MDrv_DIP_WriteRegBit(REG_CKG_PDW1, CKG_PDW1_GATED, CKG_PDW1_GATED); // Disable clock
3318*53ee8cc1Swenshuai.xi }
3319*53ee8cc1Swenshuai.xi else
3320*53ee8cc1Swenshuai.xi {
3321*53ee8cc1Swenshuai.xi return;
3322*53ee8cc1Swenshuai.xi }
3323*53ee8cc1Swenshuai.xi
3324*53ee8cc1Swenshuai.xi if( (bDipIsr == FALSE) && (bDwin0Isr == FALSE) && (bDwin1Isr == FALSE))
3325*53ee8cc1Swenshuai.xi {
3326*53ee8cc1Swenshuai.xi MsOS_DisableInterrupt(E_INT_IRQ_DIPW);
3327*53ee8cc1Swenshuai.xi //MsOS_DetachInterrupt(E_INT_IRQ_DIPW); // do not deattach, because deattach will take 100 ms to wait pthread join
3328*53ee8cc1Swenshuai.xi }
3329*53ee8cc1Swenshuai.xi }
3330*53ee8cc1Swenshuai.xi
HAL_XC_DIP_2P_Width_Check(void * pInstance,XC_SETWIN_INFO * pstXC_SetWin_Info,SCALER_DIP_WIN eWindow)3331*53ee8cc1Swenshuai.xi void HAL_XC_DIP_2P_Width_Check(void *pInstance, XC_SETWIN_INFO *pstXC_SetWin_Info, SCALER_DIP_WIN eWindow)
3332*53ee8cc1Swenshuai.xi {
3333*53ee8cc1Swenshuai.xi MS_U16 u16bpp = 2;
3334*53ee8cc1Swenshuai.xi MS_U16 u16alignment = 16;
3335*53ee8cc1Swenshuai.xi MS_U16 u16tmp = 0,u16MaxWith=0;
3336*53ee8cc1Swenshuai.xi MS_U64 u64_result = 0;
3337*53ee8cc1Swenshuai.xi #ifdef UTOPIA_V2
3338*53ee8cc1Swenshuai.xi DIP_INSTANCE_PRIVATE* pDipPri = NULL;
3339*53ee8cc1Swenshuai.xi DIP_SHARE_RESOURCE_PRIVATE* pDipResPri = NULL;
3340*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&pDipPri);
3341*53ee8cc1Swenshuai.xi UtopiaResourceGetPrivate(pDipPri->pShareResource,(void*)&(pDipResPri));
3342*53ee8cc1Swenshuai.xi #endif
3343*53ee8cc1Swenshuai.xi EN_DRV_XC_DWIN_DATA_FMT fmt=XC_DWIN_DATA_FMT_MAX;
3344*53ee8cc1Swenshuai.xi
3345*53ee8cc1Swenshuai.xi fmt = HAL_XC_DIP_GetDataFmt(pInstance, eWindow);
3346*53ee8cc1Swenshuai.xi u16bpp = HAL_XC_DIP_GetBPP(pInstance, fmt,eWindow);
3347*53ee8cc1Swenshuai.xi
3348*53ee8cc1Swenshuai.xi u64_result = DWIN_BYTE_PER_WORD;
3349*53ee8cc1Swenshuai.xi do_div(u64_result,u16bpp);
3350*53ee8cc1Swenshuai.xi u16alignment = u64_result;
3351*53ee8cc1Swenshuai.xi
3352*53ee8cc1Swenshuai.xi if(g_DIPSrcInfo[eWindow].enDIPSourceType==SCALER_DIP_SOURCE_TYPE_SUB)
3353*53ee8cc1Swenshuai.xi {
3354*53ee8cc1Swenshuai.xi u64_result = pstXC_SetWin_Info->u16PreHCusScalingDst;
3355*53ee8cc1Swenshuai.xi do_div(u64_result,u16alignment);
3356*53ee8cc1Swenshuai.xi u16tmp = u64_result;
3357*53ee8cc1Swenshuai.xi }
3358*53ee8cc1Swenshuai.xi else if(g_DIPSrcInfo[eWindow].enDIPSourceType==SCALER_DIP_SOURCE_TYPE_MAIN)
3359*53ee8cc1Swenshuai.xi {
3360*53ee8cc1Swenshuai.xi u16MaxWith = DIP_R2BYTEMSK(0, REG_SC_BK01_07_L,BMASK(13:0),eWindow);
3361*53ee8cc1Swenshuai.xi if( DIP_R2BYTEMSK(0, REG_SC_BK02_0A_L,BIT(15),eWindow) && (u16MaxWith > FHD_WIDTH) )
3362*53ee8cc1Swenshuai.xi {
3363*53ee8cc1Swenshuai.xi u64_result = pstXC_SetWin_Info->u16PreHCusScalingSrc;
3364*53ee8cc1Swenshuai.xi do_div(u64_result,2);
3365*53ee8cc1Swenshuai.xi if((pstXC_SetWin_Info->u16PreHCusScalingDst) > u64_result)
3366*53ee8cc1Swenshuai.xi {
3367*53ee8cc1Swenshuai.xi pstXC_SetWin_Info->u16PreHCusScalingDst = u64_result;
3368*53ee8cc1Swenshuai.xi }
3369*53ee8cc1Swenshuai.xi }
3370*53ee8cc1Swenshuai.xi u64_result = pstXC_SetWin_Info->u16PreHCusScalingDst;
3371*53ee8cc1Swenshuai.xi do_div(u64_result,u16alignment);
3372*53ee8cc1Swenshuai.xi u16tmp = u64_result;
3373*53ee8cc1Swenshuai.xi }
3374*53ee8cc1Swenshuai.xi else if(g_DIPSrcInfo[eWindow].enDIPSourceType == SCALER_DIP_SOURCE_TYPE_DRAM)
3375*53ee8cc1Swenshuai.xi {
3376*53ee8cc1Swenshuai.xi u64_result = pstXC_SetWin_Info->u16PreHCusScalingDst;
3377*53ee8cc1Swenshuai.xi do_div(u64_result,u16alignment);
3378*53ee8cc1Swenshuai.xi u16tmp = u64_result;
3379*53ee8cc1Swenshuai.xi }
3380*53ee8cc1Swenshuai.xi else
3381*53ee8cc1Swenshuai.xi {
3382*53ee8cc1Swenshuai.xi if((pstXC_SetWin_Info->u16PreHCusScalingDst) > FHD_WIDTH)
3383*53ee8cc1Swenshuai.xi {
3384*53ee8cc1Swenshuai.xi pstXC_SetWin_Info->u16PreHCusScalingDst = FHD_WIDTH;
3385*53ee8cc1Swenshuai.xi }
3386*53ee8cc1Swenshuai.xi u64_result = pstXC_SetWin_Info->u16PreHCusScalingDst;
3387*53ee8cc1Swenshuai.xi do_div(u64_result,u16alignment);
3388*53ee8cc1Swenshuai.xi u16tmp = u64_result;
3389*53ee8cc1Swenshuai.xi }
3390*53ee8cc1Swenshuai.xi pstXC_SetWin_Info->u16PreHCusScalingDst= u16tmp*u16alignment;
3391*53ee8cc1Swenshuai.xi }
3392*53ee8cc1Swenshuai.xi
3393*53ee8cc1Swenshuai.xi #ifdef CONFIG_UTOPIA_PROC_DBG_SUPPORT
HAL_XC_DIP_Check_Clock(MS_U64 * u64ReqHdl,SCALER_DIP_WIN eWindow)3394*53ee8cc1Swenshuai.xi void HAL_XC_DIP_Check_Clock(MS_U64* u64ReqHdl,SCALER_DIP_WIN eWindow)
3395*53ee8cc1Swenshuai.xi {
3396*53ee8cc1Swenshuai.xi char string_DIP_Clock[12];
3397*53ee8cc1Swenshuai.xi char DIP_345M[] = "345M";
3398*53ee8cc1Swenshuai.xi char DIP_320M[] = "320M";
3399*53ee8cc1Swenshuai.xi char DIP_216M[] = "216M";
3400*53ee8cc1Swenshuai.xi char DIP_192M[] = "192M";
3401*53ee8cc1Swenshuai.xi char DIP_170M[] = "170M";
3402*53ee8cc1Swenshuai.xi char DIP_240M[] = "240M";
3403*53ee8cc1Swenshuai.xi char DIP_NotDefine[] = "Not Define";
3404*53ee8cc1Swenshuai.xi MS_U16 u16tmp=0;
3405*53ee8cc1Swenshuai.xi
3406*53ee8cc1Swenshuai.xi //DIP clock
3407*53ee8cc1Swenshuai.xi u16tmp = MDrv_ReadByte(REG_CKG_FCLK)&CKG_FCLK_MASK;
3408*53ee8cc1Swenshuai.xi if(u16tmp == CKG_FCLK_345MHZ)
3409*53ee8cc1Swenshuai.xi {
3410*53ee8cc1Swenshuai.xi strcpy(string_DIP_Clock, DIP_345M);
3411*53ee8cc1Swenshuai.xi }
3412*53ee8cc1Swenshuai.xi else if(u16tmp == CKG_FCLK_320MHZ)
3413*53ee8cc1Swenshuai.xi {
3414*53ee8cc1Swenshuai.xi strcpy(string_DIP_Clock, DIP_320M);
3415*53ee8cc1Swenshuai.xi }
3416*53ee8cc1Swenshuai.xi else if(u16tmp == CKG_FCLK_240MHZ)
3417*53ee8cc1Swenshuai.xi {
3418*53ee8cc1Swenshuai.xi strcpy(string_DIP_Clock, DIP_240M);
3419*53ee8cc1Swenshuai.xi }
3420*53ee8cc1Swenshuai.xi else if(u16tmp == CKG_FCLK_216MHZ)
3421*53ee8cc1Swenshuai.xi {
3422*53ee8cc1Swenshuai.xi strcpy(string_DIP_Clock, DIP_216M);
3423*53ee8cc1Swenshuai.xi }
3424*53ee8cc1Swenshuai.xi else if(u16tmp == CKG_FCLK_192MHZ)
3425*53ee8cc1Swenshuai.xi {
3426*53ee8cc1Swenshuai.xi strcpy(string_DIP_Clock, DIP_192M);
3427*53ee8cc1Swenshuai.xi }
3428*53ee8cc1Swenshuai.xi else if(u16tmp == CKG_FCLK_170MHZ)
3429*53ee8cc1Swenshuai.xi {
3430*53ee8cc1Swenshuai.xi strcpy(string_DIP_Clock, DIP_170M);
3431*53ee8cc1Swenshuai.xi }
3432*53ee8cc1Swenshuai.xi else
3433*53ee8cc1Swenshuai.xi {
3434*53ee8cc1Swenshuai.xi strcpy(string_DIP_Clock, DIP_NotDefine);
3435*53ee8cc1Swenshuai.xi }
3436*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl,"DIP Clock:%s\n",string_DIP_Clock);
3437*53ee8cc1Swenshuai.xi }
3438*53ee8cc1Swenshuai.xi
HAL_XC_DIP_Check_Scale(MS_U64 * u64ReqHdl,MS_U16 * u16H_Scaling_Enable,MS_U32 * u32H_Scaling_Ratio,MS_U16 * u16V_Scaling_Enable,MS_U32 * u32V_Scaling_Ratio,SCALER_DIP_WIN eWindow)3439*53ee8cc1Swenshuai.xi void HAL_XC_DIP_Check_Scale(MS_U64* u64ReqHdl,MS_U16 *u16H_Scaling_Enable, MS_U32 *u32H_Scaling_Ratio, MS_U16 *u16V_Scaling_Enable, MS_U32 *u32V_Scaling_Ratio,SCALER_DIP_WIN eWindow)
3440*53ee8cc1Swenshuai.xi {
3441*53ee8cc1Swenshuai.xi if( eWindow == DIP_WINDOW )
3442*53ee8cc1Swenshuai.xi {
3443*53ee8cc1Swenshuai.xi //HV scaling enable/ratio
3444*53ee8cc1Swenshuai.xi *u16H_Scaling_Enable = (SC_R2BYTE(0, REG_SC_BK34_6C_L) & BIT(15)) >> 15 ;
3445*53ee8cc1Swenshuai.xi *u32H_Scaling_Ratio = SC_R4BYTE(0, REG_SC_BK34_2C_L) & BMASK(22:0);
3446*53ee8cc1Swenshuai.xi *u16V_Scaling_Enable = (SC_R4BYTE(0, REG_SC_BK34_08_L) & BIT(31)) >> 31;
3447*53ee8cc1Swenshuai.xi *u32V_Scaling_Ratio = SC_R4BYTE(0, REG_SC_BK34_08_L) & BMASK(22:0);
3448*53ee8cc1Swenshuai.xi }
3449*53ee8cc1Swenshuai.xi else if( eWindow == DWIN0_WINDOW )
3450*53ee8cc1Swenshuai.xi {
3451*53ee8cc1Swenshuai.xi //HV scaling enable/ratio
3452*53ee8cc1Swenshuai.xi *u16H_Scaling_Enable = (SC_R2BYTE(0, REG_SC_BK3B_78_L) & BIT(15)) >> 15 ;
3453*53ee8cc1Swenshuai.xi *u32H_Scaling_Ratio = SC_R4BYTE(0, REG_SC_BK3B_37_L) & BMASK(22:0);
3454*53ee8cc1Swenshuai.xi *u16V_Scaling_Enable = (SC_R4BYTE(0, REG_SC_BK3B_1B_L) & BIT(31)) >> 31;
3455*53ee8cc1Swenshuai.xi *u32V_Scaling_Ratio = SC_R4BYTE(0, REG_SC_BK3B_1B_L) & BMASK(22:0);
3456*53ee8cc1Swenshuai.xi }
3457*53ee8cc1Swenshuai.xi else if( eWindow == DWIN1_WINDOW )
3458*53ee8cc1Swenshuai.xi {
3459*53ee8cc1Swenshuai.xi //HV scaling enable/ratio
3460*53ee8cc1Swenshuai.xi *u16H_Scaling_Enable = (SC_R2BYTE(0, REG_SC_BK3C_78_L) & BIT(15)) >> 15 ;
3461*53ee8cc1Swenshuai.xi *u32H_Scaling_Ratio = SC_R4BYTE(0, REG_SC_BK3C_37_L) & BMASK(22:0);
3462*53ee8cc1Swenshuai.xi *u16V_Scaling_Enable = (SC_R4BYTE(0, REG_SC_BK3C_1B_L) & BIT(31)) >> 31;
3463*53ee8cc1Swenshuai.xi *u32V_Scaling_Ratio = SC_R4BYTE(0, REG_SC_BK3C_1B_L) & BMASK(22:0);
3464*53ee8cc1Swenshuai.xi }
3465*53ee8cc1Swenshuai.xi }
3466*53ee8cc1Swenshuai.xi #endif
3467*53ee8cc1Swenshuai.xi
HAL_XC_DIP_Enable(void * pInstance,MS_BOOL bEnable)3468*53ee8cc1Swenshuai.xi void HAL_XC_DIP_Enable(void *pInstance, MS_BOOL bEnable)
3469*53ee8cc1Swenshuai.xi {
3470*53ee8cc1Swenshuai.xi if(bEnable)
3471*53ee8cc1Swenshuai.xi {
3472*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_OPTEE
3473*53ee8cc1Swenshuai.xi MDrv_WriteRegBit(REG_TZPC_NONPM_DIP, 0, BMASK(1:0));
3474*53ee8cc1Swenshuai.xi MDrv_WriteRegBit(REG_TZPC_NONPM_DWIN0, 0, BMASK(11:8));
3475*53ee8cc1Swenshuai.xi #endif
3476*53ee8cc1Swenshuai.xi }
3477*53ee8cc1Swenshuai.xi else
3478*53ee8cc1Swenshuai.xi {
3479*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_OPTEE
3480*53ee8cc1Swenshuai.xi MDrv_WriteRegBit(REG_TZPC_NONPM_DIP, BMASK(1:0), BMASK(1:0));
3481*53ee8cc1Swenshuai.xi MDrv_WriteRegBit(REG_TZPC_NONPM_DWIN0, BMASK(11:8), BMASK(11:8));
3482*53ee8cc1Swenshuai.xi #endif
3483*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(0, REG_SC_BK36_02_L, BIT(10) , BIT(10));
3484*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(0, REG_SC_BK3B_02_L, BIT(10) , BIT(10));
3485*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(0, REG_SC_BK3C_02_L, BIT(10) , BIT(10));
3486*53ee8cc1Swenshuai.xi }
3487*53ee8cc1Swenshuai.xi }
3488*53ee8cc1Swenshuai.xi
3489*53ee8cc1Swenshuai.xi //=============== DIP =====================//
3490*53ee8cc1Swenshuai.xi
3491*53ee8cc1Swenshuai.xi #undef MHAL_SC_C
3492*53ee8cc1Swenshuai.xi
3493