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_PIP_C
100*53ee8cc1Swenshuai.xi
101*53ee8cc1Swenshuai.xi #include "MsCommon.h"
102*53ee8cc1Swenshuai.xi #include "mhal_xc_chip_config.h"
103*53ee8cc1Swenshuai.xi #include "utopia.h"
104*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
105*53ee8cc1Swenshuai.xi #include "drvXC_IOPort.h"
106*53ee8cc1Swenshuai.xi #include "apiXC.h"
107*53ee8cc1Swenshuai.xi #include "apiXC_PCMonitor.h"
108*53ee8cc1Swenshuai.xi #include "xc_hwreg_utility2.h"
109*53ee8cc1Swenshuai.xi #include "hwreg_sc.h"
110*53ee8cc1Swenshuai.xi #include "drv_sc_menuload.h"
111*53ee8cc1Swenshuai.xi #include "mvideo_context.h"
112*53ee8cc1Swenshuai.xi #include "drv_sc_ip.h"
113*53ee8cc1Swenshuai.xi #include "mhal_sc.h"
114*53ee8cc1Swenshuai.xi
115*53ee8cc1Swenshuai.xi #include "drv_sc_display.h"
116*53ee8cc1Swenshuai.xi #include "drv_sc_isr.h"
117*53ee8cc1Swenshuai.xi #include "apiXC_Adc.h"
118*53ee8cc1Swenshuai.xi #include "apiXC_ModeParse.h"
119*53ee8cc1Swenshuai.xi #include "apiXC_Auto.h"
120*53ee8cc1Swenshuai.xi #include "drvXC_HDMI_if.h"
121*53ee8cc1Swenshuai.xi #include "mvideo_context.h"
122*53ee8cc1Swenshuai.xi #if (LD_ENABLE==1)
123*53ee8cc1Swenshuai.xi #include "mdrv_ld.h"
124*53ee8cc1Swenshuai.xi #include "mdrv_ldalgo.h"
125*53ee8cc1Swenshuai.xi #endif
126*53ee8cc1Swenshuai.xi #include "mdrv_sc_3d.h"
127*53ee8cc1Swenshuai.xi #include "drvXC_ADC_Internal.h"
128*53ee8cc1Swenshuai.xi #if FRC_INSIDE
129*53ee8cc1Swenshuai.xi #include "mdrv_frc.h"
130*53ee8cc1Swenshuai.xi #include "mhal_frc.h"
131*53ee8cc1Swenshuai.xi #endif
132*53ee8cc1Swenshuai.xi #include "XC_private.h"
133*53ee8cc1Swenshuai.xi
134*53ee8cc1Swenshuai.xi
135*53ee8cc1Swenshuai.xi //==============================================================================
Hal_SC_Sub_SetDisplayWindow_burst(void * pInstance,MS_WINDOW_TYPE * pstDispWin)136*53ee8cc1Swenshuai.xi void Hal_SC_Sub_SetDisplayWindow_burst(void *pInstance, MS_WINDOW_TYPE *pstDispWin)
137*53ee8cc1Swenshuai.xi {
138*53ee8cc1Swenshuai.xi MS_U16 u16extra_req;
139*53ee8cc1Swenshuai.xi XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
140*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
141*53ee8cc1Swenshuai.xi _MLOAD_ENTRY(pInstance);
142*53ee8cc1Swenshuai.xi
143*53ee8cc1Swenshuai.xi // When Main is foreground, sub is background, extra must enable.
144*53ee8cc1Swenshuai.xi
145*53ee8cc1Swenshuai.xi u16extra_req = 0x01;
146*53ee8cc1Swenshuai.xi MS_U16 DispWinEnd = pstDispWin->x + pstDispWin->width-1 ;
147*53ee8cc1Swenshuai.xi
148*53ee8cc1Swenshuai.xi if(Hal_SC_is_extra_req_en(pInstance, NULL, NULL , &pstDispWin->x , &DispWinEnd))
149*53ee8cc1Swenshuai.xi {
150*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_11_L, BIT(15), BIT(15));
151*53ee8cc1Swenshuai.xi
152*53ee8cc1Swenshuai.xi u16extra_req = u16extra_req | 0x8000;
153*53ee8cc1Swenshuai.xi }
154*53ee8cc1Swenshuai.xi
155*53ee8cc1Swenshuai.xi //this is moved outside this function to mdrv_sc_pip.c
156*53ee8cc1Swenshuai.xi //MApi_XC_MLoad_WriteCmd(REG_SC_BK20_10_L, (TRUE<<1), BIT(1));
157*53ee8cc1Swenshuai.xi
158*53ee8cc1Swenshuai.xi // HW PIP architeucture
159*53ee8cc1Swenshuai.xi // Becasue BK3_02[8] and BK20_11[15] can not enable toghter, otherwise garbage will be showed,
160*53ee8cc1Swenshuai.xi // we need to use BK12_47[0] to instead. And the default value of BK3_02[8] is 1. So, we need
161*53ee8cc1Swenshuai.xi // to set it to 0 in this function.
162*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_11_L, u16extra_req , 0x800F);
163*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK03_02_L, 0, 0x0080);
164*53ee8cc1Swenshuai.xi
165*53ee8cc1Swenshuai.xi #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
166*53ee8cc1Swenshuai.xi #if (HW_DESIGN_4K2K_VER == 6) // For Manhattan, FSC+FRC
167*53ee8cc1Swenshuai.xi MS_U16 u16DsipX = (pstDispWin->x + 1)&~1; // Hstart need to be even
168*53ee8cc1Swenshuai.xi
169*53ee8cc1Swenshuai.xi XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
170*53ee8cc1Swenshuai.xi UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
171*53ee8cc1Swenshuai.xi #endif
172*53ee8cc1Swenshuai.xi if (psXCInstPri->u32DeviceID == 0)
173*53ee8cc1Swenshuai.xi {
174*53ee8cc1Swenshuai.xi //Display window
175*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_07_L, pstDispWin->x,0xFFFF); // Display H start
176*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_08_L, pstDispWin->width + pstDispWin->x - 1,0xFFFF); // Display H end
177*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_09_L, pstDispWin->y,0xFFFF); // Display V start
178*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_0A_L, pstDispWin->height + pstDispWin->y - 1,0xFFFF); // Display V end
179*53ee8cc1Swenshuai.xi //when sc0 sub enable,should set fsc sub de window
180*53ee8cc1Swenshuai.xi if(pXCResourcePrivate->stdrvXC_MVideo_Context.g_bFSCEnabled)
181*53ee8cc1Swenshuai.xi {
182*53ee8cc1Swenshuai.xi if(MHal_FRC_IsFHDToFSC(pInstance,MAIN_WINDOW))
183*53ee8cc1Swenshuai.xi {
184*53ee8cc1Swenshuai.xi u16DsipX = (pstDispWin->x/2 + 1)&~1;
185*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK68_10_L, u16DsipX, 0x3FFF);
186*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK68_11_L, pstDispWin->width/2 + u16DsipX - 1, 0x3FFF);
187*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK68_12_L, pstDispWin->y/2, 0x1FFF);
188*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK68_13_L, pstDispWin->height/2 + pstDispWin->y/2 - 1, 0x1FFF);
189*53ee8cc1Swenshuai.xi }
190*53ee8cc1Swenshuai.xi else
191*53ee8cc1Swenshuai.xi {
192*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK68_10_L, u16DsipX, 0x3FFF);
193*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK68_11_L, pstDispWin->width + u16DsipX - 1, 0x3FFF);
194*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK68_12_L, pstDispWin->y, 0x1FFF);
195*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK68_13_L, pstDispWin->height + pstDispWin->y - 1, 0x1FFF);
196*53ee8cc1Swenshuai.xi }
197*53ee8cc1Swenshuai.xi }
198*53ee8cc1Swenshuai.xi }
199*53ee8cc1Swenshuai.xi else
200*53ee8cc1Swenshuai.xi {
201*53ee8cc1Swenshuai.xi //FIX ME:review follow HW_DESIGN_4K2K_VER = 6 rule
202*53ee8cc1Swenshuai.xi MS_U16 u16HDEStart = SC_R2BYTE(0, REG_SC_BK10_04_L);
203*53ee8cc1Swenshuai.xi //Display window
204*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(g_pDevice0Instance, REG_SC_BK0F_07_L, pstDispWin->x,0xFFFF); // Display H start
205*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(g_pDevice0Instance, REG_SC_BK0F_08_L, pstDispWin->width + pstDispWin->x - 1,0xFFFF); // Display H end
206*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(g_pDevice0Instance, REG_SC_BK0F_09_L, pstDispWin->y,0xFFFF); // Display V start
207*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(g_pDevice0Instance, REG_SC_BK0F_0A_L, pstDispWin->height + pstDispWin->y - 1,0xFFFF); // Display V end
208*53ee8cc1Swenshuai.xi
209*53ee8cc1Swenshuai.xi //Display window
210*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_08_L, u16HDEStart/2,VOP_DISPLAY_HSTART_MASK);//temp solution(+90)
211*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_09_L, (u16HDEStart/2+ pstDispWin->width - 1),VOP_DISPLAY_HEND_MASK);
212*53ee8cc1Swenshuai.xi
213*53ee8cc1Swenshuai.xi // Maxim: Copy MDE to FDE for SC1 case
214*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_04_L, u16HDEStart/2,VOP_DISPLAY_HSTART_MASK);//temp solution(+90)
215*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_05_L, (u16HDEStart/2+ pstDispWin->width - 1),VOP_DISPLAY_HEND_MASK);
216*53ee8cc1Swenshuai.xi
217*53ee8cc1Swenshuai.xi if (SC_R2BYTEMSK(0, REG_SC_BK68_50_L, BIT(3)) == 0)
218*53ee8cc1Swenshuai.xi {
219*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_0A_L, pstDispWin->y - 1,VOP_DISPLAY_VSTART_MASK);
220*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_0B_L, pstDispWin->height + pstDispWin->y - 1,VOP_DISPLAY_VEND_MASK);
221*53ee8cc1Swenshuai.xi
222*53ee8cc1Swenshuai.xi // Maxim: Copy MDE to FDE for SC1 case
223*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_06_L, pstDispWin->y - 1,VOP_DISPLAY_VSTART_MASK);
224*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_07_L, pstDispWin->height + pstDispWin->y - 1,VOP_DISPLAY_VEND_MASK);
225*53ee8cc1Swenshuai.xi }
226*53ee8cc1Swenshuai.xi else
227*53ee8cc1Swenshuai.xi {
228*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_0A_L, pstDispWin->y,VOP_DISPLAY_VSTART_MASK);
229*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_0B_L, pstDispWin->height + pstDispWin->y - 1,VOP_DISPLAY_VEND_MASK);
230*53ee8cc1Swenshuai.xi
231*53ee8cc1Swenshuai.xi // Maxim: Copy MDE to FDE for SC1 case
232*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_06_L, pstDispWin->y,VOP_DISPLAY_VSTART_MASK);
233*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK10_07_L, pstDispWin->height + pstDispWin->y - 1,VOP_DISPLAY_VEND_MASK);
234*53ee8cc1Swenshuai.xi }
235*53ee8cc1Swenshuai.xi }
236*53ee8cc1Swenshuai.xi #else
237*53ee8cc1Swenshuai.xi //Display window
238*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_07_L, pstDispWin->x, 0xFFFF); // Display H start
239*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_08_L, pstDispWin->width + pstDispWin->x - 1, 0xFFFF); // Display H end
240*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_09_L, pstDispWin->y, 0xFFFF); // Display V start
241*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK0F_0A_L, pstDispWin->height + pstDispWin->y - 1, 0xFFFF); // Display V end
242*53ee8cc1Swenshuai.xi #endif
243*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_Fire(pInstance, TRUE);
244*53ee8cc1Swenshuai.xi _MLOAD_RETURN(pInstance);
245*53ee8cc1Swenshuai.xi }
246*53ee8cc1Swenshuai.xi
Hal_SC_Sub_SetDisplayWindow(void * pInstance,MS_WINDOW_TYPE * pstDispWin)247*53ee8cc1Swenshuai.xi void Hal_SC_Sub_SetDisplayWindow(void *pInstance, MS_WINDOW_TYPE *pstDispWin)
248*53ee8cc1Swenshuai.xi {
249*53ee8cc1Swenshuai.xi //SC_W2BYTEMSK( REG_SC_BK20_10_L, (TRUE<<1), BIT(1));
250*53ee8cc1Swenshuai.xi XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
251*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
252*53ee8cc1Swenshuai.xi #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
253*53ee8cc1Swenshuai.xi #if (HW_DESIGN_4K2K_VER == 6) // For Manhattan, FSC+FRC
254*53ee8cc1Swenshuai.xi MS_U16 u16DsipX = (pstDispWin->x+1)&~1; // Hstart need to be even
255*53ee8cc1Swenshuai.xi
256*53ee8cc1Swenshuai.xi XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
257*53ee8cc1Swenshuai.xi UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
258*53ee8cc1Swenshuai.xi #endif
259*53ee8cc1Swenshuai.xi //FIX ME:review follow HW_DESIGN_4K2K_VER = 6 rule
260*53ee8cc1Swenshuai.xi //Display window
261*53ee8cc1Swenshuai.xi SC_W2BYTE(0, REG_SC_BK0F_07_L, pstDispWin->x); // Display H start
262*53ee8cc1Swenshuai.xi SC_W2BYTE(0, REG_SC_BK0F_08_L, pstDispWin->width + pstDispWin->x - 1); // Display H end
263*53ee8cc1Swenshuai.xi SC_W2BYTE(0, REG_SC_BK0F_09_L, pstDispWin->y); // Display V start
264*53ee8cc1Swenshuai.xi SC_W2BYTE(0, REG_SC_BK0F_0A_L, pstDispWin->height + pstDispWin->y - 1); // Display V end
265*53ee8cc1Swenshuai.xi if (psXCInstPri->u32DeviceID == 1)
266*53ee8cc1Swenshuai.xi {
267*53ee8cc1Swenshuai.xi MS_U16 u16HDEStart = SC_R2BYTE(0, REG_SC_BK10_04_L);
268*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_08_L, u16HDEStart/2);//temp solution(+90)
269*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_09_L, (u16HDEStart/2+ pstDispWin->width - 1));
270*53ee8cc1Swenshuai.xi
271*53ee8cc1Swenshuai.xi // Maxim: Copy MDE to FDE for SC1 case
272*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_04_L, u16HDEStart/2);//temp solution(+90)
273*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_05_L, (u16HDEStart/2+ pstDispWin->width - 1));
274*53ee8cc1Swenshuai.xi
275*53ee8cc1Swenshuai.xi if (SC_R2BYTEMSK(0, REG_SC_BK68_50_L, BIT(3)) == 0)
276*53ee8cc1Swenshuai.xi {
277*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_0A_L, pstDispWin->y - 1);
278*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_0B_L, pstDispWin->height + pstDispWin->y - 1);
279*53ee8cc1Swenshuai.xi
280*53ee8cc1Swenshuai.xi // Maxim: Copy MDE to FDE for SC1 case
281*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_06_L, pstDispWin->y - 1);
282*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_07_L, pstDispWin->height + pstDispWin->y - 1);
283*53ee8cc1Swenshuai.xi }
284*53ee8cc1Swenshuai.xi else
285*53ee8cc1Swenshuai.xi {
286*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_0A_L, pstDispWin->y);
287*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_0B_L, pstDispWin->height + pstDispWin->y - 1);
288*53ee8cc1Swenshuai.xi
289*53ee8cc1Swenshuai.xi // Maxim: Copy MDE to FDE for SC1 case
290*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_06_L, pstDispWin->y);
291*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK10_07_L, pstDispWin->height + pstDispWin->y - 1);
292*53ee8cc1Swenshuai.xi }
293*53ee8cc1Swenshuai.xi }
294*53ee8cc1Swenshuai.xi else if(psXCInstPri->u32DeviceID == 0)
295*53ee8cc1Swenshuai.xi {
296*53ee8cc1Swenshuai.xi //when sc0 sub enable,should set fsc sub de window
297*53ee8cc1Swenshuai.xi if(pXCResourcePrivate->stdrvXC_MVideo_Context.g_bFSCEnabled)
298*53ee8cc1Swenshuai.xi {
299*53ee8cc1Swenshuai.xi if(MHal_FRC_IsFHDToFSC(pInstance,MAIN_WINDOW))
300*53ee8cc1Swenshuai.xi {
301*53ee8cc1Swenshuai.xi u16DsipX = (pstDispWin->x/2+1)&~1;
302*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK68_10_L, u16DsipX);
303*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK68_11_L, pstDispWin->width/2 + u16DsipX - 1);
304*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK68_12_L, pstDispWin->y/2);
305*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK68_13_L, pstDispWin->height/2 + pstDispWin->y/2 - 1);
306*53ee8cc1Swenshuai.xi }
307*53ee8cc1Swenshuai.xi else
308*53ee8cc1Swenshuai.xi {
309*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK68_10_L, u16DsipX);
310*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK68_11_L, pstDispWin->width + u16DsipX - 1);
311*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK68_12_L, pstDispWin->y);
312*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK68_13_L, pstDispWin->height + pstDispWin->y - 1);
313*53ee8cc1Swenshuai.xi }
314*53ee8cc1Swenshuai.xi }
315*53ee8cc1Swenshuai.xi }
316*53ee8cc1Swenshuai.xi #else
317*53ee8cc1Swenshuai.xi //Display window
318*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_07_L, pstDispWin->x); // Display H start
319*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_08_L, pstDispWin->width + pstDispWin->x - 1); // Display H end
320*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_09_L, pstDispWin->y); // Display V start
321*53ee8cc1Swenshuai.xi SC_W2BYTE(psXCInstPri->u32DeviceID, REG_SC_BK0F_0A_L, pstDispWin->height + pstDispWin->y - 1); // Display V end
322*53ee8cc1Swenshuai.xi #endif
323*53ee8cc1Swenshuai.xi }
324*53ee8cc1Swenshuai.xi
325*53ee8cc1Swenshuai.xi
Hal_SC_subwindow_disable_burst(void * pInstance)326*53ee8cc1Swenshuai.xi void Hal_SC_subwindow_disable_burst(void *pInstance)
327*53ee8cc1Swenshuai.xi {
328*53ee8cc1Swenshuai.xi XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
329*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
330*53ee8cc1Swenshuai.xi _MLOAD_ENTRY(pInstance);
331*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_10_L, (FALSE<<1), BIT(1));
332*53ee8cc1Swenshuai.xi #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
333*53ee8cc1Swenshuai.xi //FIX ME:temp tgen setting
334*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(g_pDevice0Instance, REG_SC_BK68_40_L, 0x00, BIT(4));
335*53ee8cc1Swenshuai.xi #endif
336*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK58_10_L, 0x0, BIT(0));
337*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_11_L, 0x0000 , 0x800F);
338*53ee8cc1Swenshuai.xi
339*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_Fire(pInstance, TRUE);
340*53ee8cc1Swenshuai.xi _MLOAD_RETURN(pInstance);
341*53ee8cc1Swenshuai.xi }
342*53ee8cc1Swenshuai.xi
Hal_SC_subwindow_disable(void * pInstance)343*53ee8cc1Swenshuai.xi void Hal_SC_subwindow_disable(void *pInstance)
344*53ee8cc1Swenshuai.xi {
345*53ee8cc1Swenshuai.xi XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
346*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
347*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_10_L, (FALSE<<1), BIT(1));
348*53ee8cc1Swenshuai.xi #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
349*53ee8cc1Swenshuai.xi //FIX ME:temp tgen setting
350*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(0, REG_SC_BK68_40_L, 0x00, BIT(4));
351*53ee8cc1Swenshuai.xi #endif
352*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK58_10_L, 0x0, BIT(0));
353*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_11_L, 0x0000 , 0x800F);
354*53ee8cc1Swenshuai.xi }
355*53ee8cc1Swenshuai.xi
Hal_SC_Is_subwindow_enable(void * pInstance)356*53ee8cc1Swenshuai.xi MS_BOOL Hal_SC_Is_subwindow_enable(void *pInstance)
357*53ee8cc1Swenshuai.xi {
358*53ee8cc1Swenshuai.xi XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
359*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
360*53ee8cc1Swenshuai.xi XC_RESOURCE_PRIVATE* pXCResourcePrivate = NULL;
361*53ee8cc1Swenshuai.xi UtopiaResourceGetPrivate(g_pXCResource[_XC_SELECT_INTERNAL_VARIABLE(psXCInstPri->u32DeviceID)],(void**)(&pXCResourcePrivate));
362*53ee8cc1Swenshuai.xi
363*53ee8cc1Swenshuai.xi #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB
364*53ee8cc1Swenshuai.xi if(!MDrv_XC_GetMWEStatus(pInstance)
365*53ee8cc1Swenshuai.xi && (E_XC_3D_OUTPUT_MODE_NONE == pXCResourcePrivate->stdrvXC_3D._eOutput3DMode))
366*53ee8cc1Swenshuai.xi {
367*53ee8cc1Swenshuai.xi return (SC_R2BYTEMSK(0, REG_SC_BK68_40_L, BIT(4)) == 0)? FALSE:TRUE;
368*53ee8cc1Swenshuai.xi }
369*53ee8cc1Swenshuai.xi else
370*53ee8cc1Swenshuai.xi {
371*53ee8cc1Swenshuai.xi return (SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK20_10_L, BIT(1)) == 0)? FALSE:TRUE;
372*53ee8cc1Swenshuai.xi }
373*53ee8cc1Swenshuai.xi #else
374*53ee8cc1Swenshuai.xi return (SC_R2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK20_10_L, BIT(1)) == 0)? FALSE:TRUE;
375*53ee8cc1Swenshuai.xi #endif
376*53ee8cc1Swenshuai.xi }
377*53ee8cc1Swenshuai.xi
378*53ee8cc1Swenshuai.xi
Hal_SC_set_border_format(void * pInstance,MS_U8 u8Left,MS_U8 u8Right,MS_U8 u8Up,MS_U8 u8Down,MS_U8 u8color,SCALER_WIN eWindow)379*53ee8cc1Swenshuai.xi void Hal_SC_set_border_format(void *pInstance, MS_U8 u8Left, MS_U8 u8Right, MS_U8 u8Up, MS_U8 u8Down, MS_U8 u8color, SCALER_WIN eWindow )
380*53ee8cc1Swenshuai.xi {
381*53ee8cc1Swenshuai.xi XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
382*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
383*53ee8cc1Swenshuai.xi if( eWindow == MAIN_WINDOW && psXCInstPri->u32DeviceID == 0)
384*53ee8cc1Swenshuai.xi {
385*53ee8cc1Swenshuai.xi SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK0F_02_L, ((MS_U16)u8Left<<8), 0xFF00);
386*53ee8cc1Swenshuai.xi SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK0F_03_L, ((MS_U16)u8Right<<8), 0xFF00);
387*53ee8cc1Swenshuai.xi SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK0F_04_L, ((MS_U16)u8Up<<8), 0xFF00);
388*53ee8cc1Swenshuai.xi SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK0F_05_L, ((MS_U16)u8Down<<8), 0xFF00);
389*53ee8cc1Swenshuai.xi
390*53ee8cc1Swenshuai.xi SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK10_24_L, ((MS_U16)u8color<<8), 0xFF00);
391*53ee8cc1Swenshuai.xi }
392*53ee8cc1Swenshuai.xi else
393*53ee8cc1Swenshuai.xi {
394*53ee8cc1Swenshuai.xi SC_W2BYTEMSK( 0, REG_SC_BK0F_02_L, (MS_U16)u8Left, 0x00FF);
395*53ee8cc1Swenshuai.xi SC_W2BYTEMSK( 0, REG_SC_BK0F_03_L, (MS_U16)u8Right, 0x00FF);
396*53ee8cc1Swenshuai.xi SC_W2BYTEMSK( 0, REG_SC_BK0F_04_L, (MS_U16)u8Up, 0x00FF);
397*53ee8cc1Swenshuai.xi SC_W2BYTEMSK( 0, REG_SC_BK0F_05_L, (MS_U16)u8Down, 0x00FF);
398*53ee8cc1Swenshuai.xi
399*53ee8cc1Swenshuai.xi SC_W2BYTEMSK( 0, REG_SC_BK0F_17_L, (MS_U16)u8color, 0x00FF);
400*53ee8cc1Swenshuai.xi }
401*53ee8cc1Swenshuai.xi }
402*53ee8cc1Swenshuai.xi
Hal_SC_border_enable(void * pInstance,MS_BOOL bEnable,SCALER_WIN eWindow)403*53ee8cc1Swenshuai.xi void Hal_SC_border_enable(void *pInstance, MS_BOOL bEnable, SCALER_WIN eWindow )
404*53ee8cc1Swenshuai.xi {
405*53ee8cc1Swenshuai.xi XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
406*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
407*53ee8cc1Swenshuai.xi if( eWindow == MAIN_WINDOW && psXCInstPri->u32DeviceID == 0)
408*53ee8cc1Swenshuai.xi {
409*53ee8cc1Swenshuai.xi SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK10_19_L, (bEnable<<2), BIT(2));
410*53ee8cc1Swenshuai.xi }
411*53ee8cc1Swenshuai.xi else
412*53ee8cc1Swenshuai.xi {
413*53ee8cc1Swenshuai.xi SC_W2BYTEMSK( 0, REG_SC_BK0F_01_L, (bEnable<<7), BIT(7));
414*53ee8cc1Swenshuai.xi }
415*53ee8cc1Swenshuai.xi }
416*53ee8cc1Swenshuai.xi
Hal_SC_set_Zorder_main_first(void * pInstance,MS_BOOL bMainFirst)417*53ee8cc1Swenshuai.xi void Hal_SC_set_Zorder_main_first(void *pInstance, MS_BOOL bMainFirst)
418*53ee8cc1Swenshuai.xi {
419*53ee8cc1Swenshuai.xi XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
420*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
421*53ee8cc1Swenshuai.xi SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK20_10_L, (bMainFirst << 8), BIT(8) );
422*53ee8cc1Swenshuai.xi
423*53ee8cc1Swenshuai.xi if (bMainFirst)
424*53ee8cc1Swenshuai.xi SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK19_14_L, BIT(3) , BIT(3) );
425*53ee8cc1Swenshuai.xi else
426*53ee8cc1Swenshuai.xi SC_W2BYTEMSK( psXCInstPri->u32DeviceID, REG_SC_BK19_14_L, 0x00 , BIT(3) );
427*53ee8cc1Swenshuai.xi }
428*53ee8cc1Swenshuai.xi
Hal_SC_set_Zorder_main_first_burst(void * pInstance,MS_BOOL bMainFirst)429*53ee8cc1Swenshuai.xi void Hal_SC_set_Zorder_main_first_burst(void *pInstance, MS_BOOL bMainFirst)
430*53ee8cc1Swenshuai.xi {
431*53ee8cc1Swenshuai.xi
432*53ee8cc1Swenshuai.xi _MLOAD_ENTRY(pInstance);
433*53ee8cc1Swenshuai.xi
434*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd( pInstance, REG_SC_BK20_10_L, (bMainFirst << 8), BIT(8) );
435*53ee8cc1Swenshuai.xi
436*53ee8cc1Swenshuai.xi if (bMainFirst)
437*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd( pInstance, REG_SC_BK19_14_L, BIT(3) , BIT(3) );
438*53ee8cc1Swenshuai.xi else
439*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd( pInstance, REG_SC_BK19_14_L, 0x00 , BIT(3) );
440*53ee8cc1Swenshuai.xi
441*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_Fire(pInstance, TRUE);
442*53ee8cc1Swenshuai.xi
443*53ee8cc1Swenshuai.xi _MLOAD_RETURN(pInstance);
444*53ee8cc1Swenshuai.xi }
445*53ee8cc1Swenshuai.xi
Hal_SC_SetPIP_FRC(void * pInstance,MS_BOOL enable,MS_U8 u8IgonreLinesNum)446*53ee8cc1Swenshuai.xi void Hal_SC_SetPIP_FRC(void *pInstance, MS_BOOL enable, MS_U8 u8IgonreLinesNum)
447*53ee8cc1Swenshuai.xi {
448*53ee8cc1Swenshuai.xi // Enable FRC for Subwindow
449*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(0, REG_SC_BK12_45_L, ( enable ? BIT(3):0 ), BIT(3));
450*53ee8cc1Swenshuai.xi
451*53ee8cc1Swenshuai.xi // Set Threadhold
452*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(0, REG_SC_BK12_45_L, u8IgonreLinesNum, BIT(2)|BIT(1)|BIT(0));
453*53ee8cc1Swenshuai.xi }
454*53ee8cc1Swenshuai.xi
Hal_SC_set_Zextra_y_half_burst(void * pInstance,MS_BOOL bInterlace)455*53ee8cc1Swenshuai.xi void Hal_SC_set_Zextra_y_half_burst(void *pInstance, MS_BOOL bInterlace)
456*53ee8cc1Swenshuai.xi {
457*53ee8cc1Swenshuai.xi _MLOAD_ENTRY(pInstance);
458*53ee8cc1Swenshuai.xi
459*53ee8cc1Swenshuai.xi if (bInterlace)
460*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_11_L, BIT(13), BIT(13));
461*53ee8cc1Swenshuai.xi else
462*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_11_L, 0, BIT(13));
463*53ee8cc1Swenshuai.xi
464*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_Fire(pInstance, TRUE);
465*53ee8cc1Swenshuai.xi
466*53ee8cc1Swenshuai.xi _MLOAD_RETURN(pInstance);
467*53ee8cc1Swenshuai.xi }
468*53ee8cc1Swenshuai.xi
Hal_SC_set_Zextra_y_half(void * pInstance,MS_BOOL bInterlace)469*53ee8cc1Swenshuai.xi void Hal_SC_set_Zextra_y_half(void *pInstance, MS_BOOL bInterlace)
470*53ee8cc1Swenshuai.xi {
471*53ee8cc1Swenshuai.xi XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
472*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
473*53ee8cc1Swenshuai.xi if (bInterlace)
474*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_11_L, BIT(13), BIT(13));
475*53ee8cc1Swenshuai.xi else
476*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_11_L, 0, BIT(13));
477*53ee8cc1Swenshuai.xi }
478*53ee8cc1Swenshuai.xi
Hal_SC_enable_extra_request(void * pInstance,MS_BOOL bEnable)479*53ee8cc1Swenshuai.xi void Hal_SC_enable_extra_request(void *pInstance, MS_BOOL bEnable)
480*53ee8cc1Swenshuai.xi {
481*53ee8cc1Swenshuai.xi // HW PIP architeucture
482*53ee8cc1Swenshuai.xi // Becasue BK3_02[7] and BK20_11[15] can not enable toghter, otherwise garbage will be showed,
483*53ee8cc1Swenshuai.xi // With HW auto no signal, BK3_02[7] will be enabled by HW
484*53ee8cc1Swenshuai.xi // so, we need to set BK20_11[15] to 0 before no signal, ex. source switch case, need to disable extra request engine
485*53ee8cc1Swenshuai.xi // Then we need to restore extra request engine after input source is stable
486*53ee8cc1Swenshuai.xi
487*53ee8cc1Swenshuai.xi XC_INSTANCE_PRIVATE *psXCInstPri = NULL;
488*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void**)&psXCInstPri);
489*53ee8cc1Swenshuai.xi
490*53ee8cc1Swenshuai.xi if(MDrv_XC_MLoad_GetStatus(pInstance) == E_MLOAD_ENABLED)
491*53ee8cc1Swenshuai.xi {
492*53ee8cc1Swenshuai.xi _MLOAD_ENTRY(pInstance);
493*53ee8cc1Swenshuai.xi
494*53ee8cc1Swenshuai.xi if (TRUE == bEnable)
495*53ee8cc1Swenshuai.xi {
496*53ee8cc1Swenshuai.xi if(Hal_SC_is_extra_req_en(pInstance, NULL, NULL, NULL, NULL))
497*53ee8cc1Swenshuai.xi {
498*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_11_L, BIT(15), BIT(15));
499*53ee8cc1Swenshuai.xi }
500*53ee8cc1Swenshuai.xi else
501*53ee8cc1Swenshuai.xi {
502*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_11_L, 0, BIT(15));
503*53ee8cc1Swenshuai.xi }
504*53ee8cc1Swenshuai.xi }
505*53ee8cc1Swenshuai.xi else
506*53ee8cc1Swenshuai.xi {
507*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_WriteCmd(pInstance, REG_SC_BK20_11_L, 0, BIT(15));
508*53ee8cc1Swenshuai.xi }
509*53ee8cc1Swenshuai.xi
510*53ee8cc1Swenshuai.xi MDrv_XC_MLoad_Fire(pInstance, TRUE);
511*53ee8cc1Swenshuai.xi
512*53ee8cc1Swenshuai.xi _MLOAD_RETURN(pInstance);
513*53ee8cc1Swenshuai.xi }
514*53ee8cc1Swenshuai.xi else
515*53ee8cc1Swenshuai.xi {
516*53ee8cc1Swenshuai.xi if (TRUE == bEnable)
517*53ee8cc1Swenshuai.xi {
518*53ee8cc1Swenshuai.xi if(Hal_SC_is_extra_req_en(pInstance, NULL, NULL, NULL, NULL))
519*53ee8cc1Swenshuai.xi {
520*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_11_L, BIT(15), BIT(15));
521*53ee8cc1Swenshuai.xi }
522*53ee8cc1Swenshuai.xi else
523*53ee8cc1Swenshuai.xi {
524*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_11_L, 0, BIT(15));
525*53ee8cc1Swenshuai.xi }
526*53ee8cc1Swenshuai.xi }
527*53ee8cc1Swenshuai.xi else
528*53ee8cc1Swenshuai.xi {
529*53ee8cc1Swenshuai.xi SC_W2BYTEMSK(psXCInstPri->u32DeviceID, REG_SC_BK20_11_L, 0, BIT(15));
530*53ee8cc1Swenshuai.xi }
531*53ee8cc1Swenshuai.xi }
532*53ee8cc1Swenshuai.xi }
533*53ee8cc1Swenshuai.xi
Hal_SC_EnableCLK_for_SUB(void * pInstance,MS_BOOL bEnable)534*53ee8cc1Swenshuai.xi void Hal_SC_EnableCLK_for_SUB(void * pInstance, MS_BOOL bEnable)
535*53ee8cc1Swenshuai.xi {
536*53ee8cc1Swenshuai.xi // !!!!Sub FCLK&&ODCLK can not be closed to avoid menuload timeout
537*53ee8cc1Swenshuai.xi
538*53ee8cc1Swenshuai.xi //MDrv_WriteRegBit(REG_CKG_S2_FCLK, bEnable, CKG_S2_FCLK_GATED); // REG_CLKGEN0_57[8], s2_fclk
539*53ee8cc1Swenshuai.xi //MDrv_WriteRegBit(REG_CKG_S2_ODCLK, bEnable, CKG_S2_ODCLK_GATED); // REG_CLKGEN2_63[0], s2_odclk
540*53ee8cc1Swenshuai.xi MDrv_WriteRegBit(REG_CKG_S2_IDCLK2, !bEnable, CKG_S2_IDCLK2_GATED); // REG_CLKGEN2_65[0], s2_idclk2
541*53ee8cc1Swenshuai.xi }
542*53ee8cc1Swenshuai.xi
543*53ee8cc1Swenshuai.xi #undef MHAL_PIP_C
544