xref: /utopia/UTPA2-700.0.x/modules/xc/hal/M7621/xc/mhal_pip.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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