⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drvscaler.c

📁 mstar 776 开发的车载dvd
💻 C
📖 第 1 页 / 共 5 页
字号:
    {
        if (devPanel_IsTCON()||(devPanel_Is_ANALOG_TCON()))
        {
            MDrv_WriteByte(BK_TCON_20_H, (SET_PTC_MODE2&0xBC));	// Set L/R and U/D to low
            printf("\r\nBK_TCON_20_H=%x", MDrv_ReadByte(BK_TCON_20_H));// kevin test

            MDrv_WriteByte(BK_TCON_20_L, (SET_PTC_MODE1&0x7F));	// Disable TCON
        }

        if (devPanel_IsTTL())
            MDrv_WriteByte(BK_SC_VOP_46_L, 0xFF); //0x00);
        else
            MDrv_WriteByte(BK_SC_VOP_46_L, 0xFF);

        MDrv_MOD_PowerOff();
    }

    MDrv_WriteByte(BK_SELECT_00, u8Bank);

    /* 2nd delay time */
    if (bPanelOn)
    {
        delayTime = pnlGetOnTiming2();
        g_u32LVDSDataEnableTime = MDrv_Timer_GetTime0();
        g_bIsPanelOnTimingCheckValid = TRUE;
        MDrv_Timer_Delayms(delayTime);

#if (ENABLE_DPWM_FUNCTION)
        MDrv_Write2Byte(BK_CCFL_02_L, 0x0003);
#endif
        Panel_Backlight_VCC_ON();
    }
    else
    {
        delayTime = pnlGetOffTiming2();
        MDrv_Timer_Delayms(delayTime);
        MDrv_Scaler_SetPanelVCC(bPanelOn);
    }
}

//-----------------------------------------------------------------------------
// power
//-----------------------------------------------------------------------------

void MDrv_Scaler_PowerOn(void)
{
    // ToDo
    //{BK0_F0, 0x00}, // power down chip except mode detection

    /* power down output PLL */
    MDrv_WriteRegBit(BK_LPLL_03_L, DISABLE, _BIT5);

    /* sw reset */
    MDrv_Scaler_SoftwareResetEx(RST_IP_ALL|RST_ADC);

    if( IsUseAnalogPort(stSystemInfo.enInputPortType))
    {
        g_bInputTimingChange = TRUE;
        g_u8CurrentSyncStatus &= ~MD_SYNC_LOSS;
    }
}

void MDrv_Scaler_PowerOff(void)
{
    /* power down output PLL */
    MDrv_WriteRegBit(BK_LPLL_03_L, ENABLE, _BIT5);

    MDrv_ADC_PowerOff();

    //msWriteByte(BK0_F0, _BIT5 | _BIT4 | _BIT1 | _BIT0);// power down chip except DDC SDRAM //Bit 5 is recomand by JM.

    if(IsUseAnalogPort(stSystemInfo.enInputPortType))
    {
        g_bInputTimingChange = FALSE;
    }
}

//-----------------------------------------------------------------------------
// reset
//-----------------------------------------------------------------------------

/******************************************************************************/
///software reset for scaler
///@param u16Sel \b IN
///- software reset VDFE: BIT15
///- software reset VDCOMBF: BIT14
///- software reset EMCU: BIT13
///- software reset GMC: BIT12
///- software reset REG: BIT7
///- software reset ADC: BIT6
///- software reset DIGITAL: BIT5
///- software reset SCALER: BIT4
///- software reset DISPLAY: BIT3
///- software reset OSD: _BIT1
///- software reset ALL: BIT0
///@param u8DelayTime \b IN:
///- software reset delay time
/******************************************************************************/
void MDrv_Scaler_SoftwareResetEx(U16 u16Param)
{
    U8 u8Bank;
    U8 u8ParamMSB, u8ParamLSB;

    u8ParamMSB = (u16Param & 0xFF00) >> 8;
    u8ParamLSB = (u16Param & 0xFF);

    if (u8ParamLSB)
    {
        u8Bank = MDrv_ReadByte(BK_SELECT_00);
        MDrv_WriteByte(BK_SELECT_00, REG_BANK_RESET);

        MDrv_WriteByte(BK_SC_SWRESET_02_L, u8ParamLSB);
        MDrv_WriteByte(BK_SC_SWRESET_02_L, 0x00);

        MDrv_WriteByte(BK_SELECT_00, u8Bank);
    }

    if (u8ParamMSB)
    {
        MDrv_WriteByte(BK_ADC_ATOP_07_L, u8ParamMSB);
        MDrv_WriteByte(BK_ADC_ATOP_07_L, 0x00);
    }

    //printf("\r\nReseted Scaler=0x%x", u16Param);// kevin test
}

//-----------------------------------------------------------------------------
// IP MUX
//-----------------------------------------------------------------------------
void MDrv_Scaler_SetIPMux(EN_INPUT_PORT_TYPE enInputPortType, U8 u8InputSrcMux)
{
    U8 u8Clk_Mux, u8Data_Mux;
    U8 u8RGB_DataFormat = 0;
    U8 u8RGB_DataFormat1 = 0;

    if (IsUseAnalogPort(enInputPortType))
    {
		if (u8InputSrcMux == ANALOG_RGB0)
        {
        #if (ENABLE_INPUT_PIP1 || ENABLE_INPUT_PIP2)
            if (IsPip1InUse() || IsPip2InUse())// kevin 071122_0
            {
                #if (PIP_MAIN_SRC_SEL == USE_DIGITAL_RGB || PIP_MAIN_SRC_SEL == USE_MST7_DIGITAL_RGB)
                u8Clk_Mux  = SC_IPMUX_CLK_ADC_A;
                u8Data_Mux = SC_IPMUX_DATA_RGB444;
                u8RGB_DataFormat = SC_DATA_RGB888;
                #else
                u8Clk_Mux  = SC_IPMUX_CLK_ADC_A;
                u8Data_Mux = SC_IPMUX_DATA_ADC_A;
                #endif
            }
			else
            {
                u8Clk_Mux  = SC_IPMUX_CLK_ADC_A;
                u8Data_Mux = SC_IPMUX_DATA_ADC_A;
            }
		#else
            u8Clk_Mux  = SC_IPMUX_CLK_ADC_A;
            u8Data_Mux = SC_IPMUX_DATA_ADC_A;
        #endif
        }
		else if (u8InputSrcMux == ANALOG_RGB1)
		{
			u8Clk_Mux  = SC_IPMUX_CLK_ADC_B;
			u8Data_Mux = SC_IPMUX_DATA_ADC_B;
		}
        #if (ENABLE_DIGITAL_SOURCE)// kevin 071213_0
        else if (IsDigitalInUse() && (u8InputSrcMux == IP_VIDEO))
        {
        #if (INPUT_DIGITAL_TYPE == DIGITAL_CCIR656)
            u8Data_Mux = SC_IPMUX_DATA_656_B;
            u8RGB_DataFormat = SC_DATA_RGB888;
            u8RGB_DataFormat1 = SC_DATA_DOUBLE656;
            u8Clk_Mux = SC_IPMUX_CLK_656_A;
        #elif (INPUT_DIGITAL_TYPE == DIGITAL_CCIR601)
            u8Data_Mux = SC_IPMUX_DATA_601;
            u8RGB_DataFormat = SC_DATA_RGB888|_BIT4;// kevin 080129 // for cb/cr swap issue
            u8RGB_DataFormat1 = SC_DATA_BT601;
            u8Clk_Mux = SC_IPMUX_CLK_EXT_VD;
        #elif (INPUT_DIGITAL_TYPE == DIGITAL_RGB444)
            u8Clk_Mux  = SC_IPMUX_CLK_ADC_A;
            u8Data_Mux = SC_IPMUX_DATA_RGB444;
            u8RGB_DataFormat = SC_DATA_RGB888;
        #endif
        }
        #endif
		// end
    }
    else if(IsUseDigitalPort(enInputPortType))
    {
        u8Clk_Mux = SC_IPMUX_CLK_VD;
        u8Data_Mux = SC_IPMUX_CLK_VD;
    }
    else if(IsUseExtVDPort(enInputPortType))
    {
        u8Clk_Mux = u8Data_Mux = SC_IPMUX_CLK_EXT_VD;
    }

    MDrv_WriteByte(BK_IPMUX_01_L, u8Data_Mux << 4); // input select
    MDrv_WriteByte(BK_CHIPTOP_1F_H, u8Clk_Mux << 2); // idclk
    MDrv_WriteByte(BK_IPMUX_10_L, u8RGB_DataFormat << 6);  // data format

#if ENABLE_DIGITAL_SOURCE// kevin 071213_0
    if (IsDigitalInUse())
        MDrv_WriteByte(BK_IPMUX_10_H, u8RGB_DataFormat1 << 6);  // data format
#endif

    MDrv_Scaler_SoftwareResetEx(RST_IP_F2);
}

//-----------------------------------------------------------------------------
// port control
//-----------------------------------------------------------------------------
void MDrv_Scaler_SetInputPort(MS_SYS_INFO *penMsSysInfo, U8 u8InputSrcMux, U8 u8SyncSelMux)
{
    U8 u8Bank;
    U16 u16Tmp;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);

    DRVPORTMSG(printf("\r\n >>> SET Input Port=0x%bx", penMsSysInfo->enInputPortType));

    /* set ISELECT */
    if (IsUseAnalogPort(penMsSysInfo->enInputPortType))
    {
#if 0
        if (stSystemInfo.enInputSourceType == INPUT_SOURCE_YPBPR)
        {
            MDrv_ADC_Set_Vclamp(g_SrcInfo.u8SrcAdcIdx, VCLAMP_R_ClampMid | VCLAMP_B_ClampMid); // set R/B middle clamp
        }
        else
        {
            MDrv_ADC_Set_Vclamp(g_SrcInfo.u8SrcAdcIdx, VCLAMP_RGB_ClampGnd);
        }
#endif
        #if ENABLE_DIGITAL_SOURCE// kevin 071214
        if (IsDigitalInUse())
        {
            u16Tmp = MDrv_Read2Byte(BK_SC_IP1F2_02_L) & _BIT7;
            u16Tmp |= ((u8SyncSelMux & 0x2B) << 8) | ((u8InputSrcMux & 0x07));
        }
        else
        {
            u16Tmp = MDrv_Read2Byte(BK_SC_IP1F2_02_L) & _BIT7;
            u16Tmp |= (u8InputSrcMux & 0x7) | ((u8SyncSelMux & 0x7) << 4);
        }
        #else
        u16Tmp = MDrv_Read2Byte(BK_SC_IP1F2_02_L) & _BIT7;
        u16Tmp |= (u8InputSrcMux & 0x7) | ((u8SyncSelMux & 0x7) << 4);
        #endif
    }
    else
    {
        u16Tmp = MDrv_Read2Byte(BK_SC_IP1F2_02_L) & _BIT7;
        u16Tmp |= ((u8SyncSelMux& 0x23) << 8) | ((u8InputSrcMux & 0x07));
    }

    DRVPORTMSG(printf("\r\n >>> IP1F2_02=0x%x", u16Tmp));

    MDrv_Write2Byte(BK_SC_IP1F2_02_L, u16Tmp);

    /* Video port enable 10 bit input mode except external VD */
    //MDrv_WriteRegBit(BK_SC_IP1F2_03_H, ENABLE, _BIT3);  // (PQ)

    /* Disable DE */
    MDrv_WriteByteMask(BK_CHIPTOP_11_L, 0x00, 0x08);

    if(IsSrcTypeVga(penMsSysInfo->enInputSourceType))
    {
        #if ENABLE_DIGITAL_SOURCE// 071213_0
        if (IsDigitalInUse())
        {
            MDrv_WriteByte(BK_SC_IP1F2_03_L, 0x00);

            #if (INPUT_DIGITAL_TYPE == DIGITAL_CCIR601)// kevin 071218_0
            MDrv_WriteByte(BK_SC_IP1F2_08_L, (MDrv_ReadByte(BK_SC_IP1F2_08_L) | BIT1));
            #endif
        }
        #else
        MDrv_WriteByte(BK_SC_IP1F2_02_H, 0x00);
        MDrv_WriteByte(BK_SC_IP1F2_03_L, _BIT6 | _BIT3);
        #endif
        MDrv_WriteByte(BK_SC_IP1F2_24_L, 0x01); // enable ADC coast
        MDrv_WriteByte(BK_SC_IP1F2_24_H, 0x00); // enable coast window start
        MDrv_WriteByte(BK_SC_IP1F2_25_L, 0x00); // enable coast window end
        MDrv_WriteByte(BK_SC_IP1F2_25_H, 0x00); // reserved
        MDrv_WriteByte(BK_SC_IP1F2_26_L, 0x00); // disable DE glitch removal function & more tolerance for DE
        MDrv_WriteByte(BK_SC_IP1F2_26_H, 0x00); // reserved

        /* Vclamp */
// seven 070927  MDrv_WriteByte(BK_ADC_ATOP_2C_L, 0x00 | (0x1 << 2)); // G clamp to VP3
        /* clamp placement */
// seven 070927  MDrv_WriteByte(BK_ADC_DTOP_0B_L, 0x10);
        /* clamp duration */
// seven 070927  MDrv_WriteByte(BK_ADC_DTOP_0B_H, 0x08);

        /* PLL multiplier */
// seven 070830_00
        MDrv_WriteByteMask(BK_ADC_ATOP_0C_L, 0x00, _BIT2 | _BIT1 | _BIT0 );
//        MDrv_WriteByteMask(BK_ADC_ATOP_0C_L, 0x01, _BIT2 | _BIT1 | _BIT0 );
// end

        /* PLL phase setting time */
// seven 070927  MDrv_WriteByteMask(BK_ADC_DTOP_04_L, 0x05, _BIT3 | _BIT2 | _BIT1 | _BIT0 );
        /* SOG level */
// seven 070927  MDrv_WriteByteMask(BK_ADC_ATOP_1C_L, 0x25, _BIT5 | _BIT4 | _BIT3 | _BIT2 | _BIT1 | _BIT0 );
        /* ADC GenCtrl */
// seven 070927  MDrv_WriteByte(BK_ADC_DTOP_07_L, 0x02);
    }
    else if(IsSrcTypeYPbPr(penMsSysInfo->enInputSourceType))
    {
        MDrv_WriteByte(BK_SC_IP1F2_02_H, _BIT2);
        MDrv_WriteByte(BK_SC_IP1F2_03_L, _BIT7 | _BIT6 | _BIT5 | _BIT3);
        MDrv_WriteByte(BK_SC_IP1F2_24_L, 0x21); // enable ADC coast
        MDrv_WriteByte(BK_SC_IP1F2_24_H, 0x08); // enable coast window start
        MDrv_WriteByte(BK_SC_IP1F2_25_L, 0x08); // enable coast window end
        MDrv_WriteByte(BK_SC_IP1F2_26_L, 0x00); // disable DE glitch removal function & more tolerance for DE

        /* Vclamp */
// seven 070927 MDrv_WriteByte(BK_ADC_ATOP_2C_L, 0x22);
        /* clamp placement */
// seven 070927 MDrv_WriteByte(BK_ADC_DTOP_0B_L, 0x30);
        /* clamp duration */
// seven 070927 MDrv_WriteByte(BK_ADC_DTOP_0B_H, 0x05);
        /* PLL multiplier */
        MDrv_WriteByteMask(BK_ADC_ATOP_0C_L, 0x00, _BIT2 | _BIT1 | _BIT0 );
        /* PLL phase setting time */
// seven 070927 MDrv_WriteByteMask(BK_ADC_DTOP_04_L, 0x08, _BIT3 | _BIT2 | _BIT1 | _BIT0 );
        /* SOG level */
// seven 070927 MDrv_WriteByteMask(BK_ADC_ATOP_1C_L, 0x05, _BIT5 | _BIT4 | _BIT3 | _BIT2 | _BIT1 | _BIT0 );
        /* ADC GenCtrl */
// seven 070927 MDrv_WriteByte(BK_ADC_DTOP_07_L, 0x6A);
    }
    else if (IsUseDigitalPort(penMsSysInfo->enInputPortType))
    {
        MDrv_WriteByte(BK_SC_IP1F2_03_L, 0x9B);

        /* PLL multiplier */
        MDrv_WriteByte(BK_ADC_ATOP_0C_L, 0x01);
        /* PLL phase setting time */
// seven 070927 MDrv_WriteByte(BK_ADC_DTOP_04_L, 0x05);
        /* SOG level */
// seven 070927 MDrv_WriteByteMask(BK_ADC_ATOP_1C_L, 0x05, _BIT5 | _BIT4 | _BIT3 | _BIT2 | _BIT1 | _BIT0 );
    }
    else // external Digital VD or DTV
    {
        MDrv_WriteByte(BK_SC_IP1F2_08_L, (MDrv_ReadByte(BK_SC_IP1F2_08_L) & 0x7F));

        /* SOG level */
// seven 070927 MDrv_WriteByteMask(BK_ADC_ATOP_1C_L, 0x05, _BIT5 | _BIT4 | _BIT3 | _BIT2 | _BIT1 | _BIT0 );

        if (IsUseMVDPort(penMsSysInfo->enInputPortType))
        {
            // set BK1_3[4] to 0, The capature start will be 1/2 Hsync when input source is from DC0/DC1
            MDrv_WriteByte(BK_SC_IP1F2_03_L, 0x8B);
        }
        else
        {
            MDrv_WriteByte(BK_SC_IP1F2_03_L, 0x9B);
        }

        if(IsUseExtVDPort(penMsSysInfo->enInputPortType))
        {
            /* Video port disable 10 bit input mode */
            //printf("External VD, disable 10 bit\n");
            //MDrv_WriteRegBit(BK_SC_IP1F2_03_H, DISABLE, _BIT3);   // PQ
        }
    }

    MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
    MDrv_WriteByte(BK_SC_IP1F2_27_L, 0x00); // MISC function control

    MDrv_Scaler_SetFieldDetect(penMsSysInfo->enInputSourceType, &g_DisplayWindowSetting);

    MDrv_Timer_Delayms(2);

    if (IsUseAnalogPort(penMsSysInfo->enInputPortType))
    {
        MDrv_Scaler_SoftwareResetEx(RST_ADC);
    }
    else if (IsUseDigitalPort(penMsSysInfo->enInputPortType))
    {
        MDrv_VD_McuReset(20);
    }

#if 0// kevin 071221//ENABLE_POWER_SAVING_SIF
    if(IsSrcTypeATV(penMsSysInfo->enInputSourceType))
    {
        // Enable SIF
        XBYTE[0x2CC1] &= 0xE7;
        XBYTE[0x2CC0] &= 0xF3;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -