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

📄 drvscaler_bloader.c

📁 mstar 776 开发的车载dvd
💻 C
📖 第 1 页 / 共 2 页
字号:
    /* 2nd delay time */
    if (bPanelOn)
        delayTime = pnlGetOnTiming2();
    else
        delayTime = pnlGetOffTiming2();

    //lachesis_070304
#if 0
    MDrv_Timer_Delayms(delayTime);

    /* enable/disable panel back-light */
    MDrv_Scaler_SetPanelBacklight(bPanelOn);
#else
    g_u32LVDSDataEnableTime = MDrv_Timer_GetTime0();
    g_bIsPanelOnTimingCheckValid = TRUE;
#endif
}

//-----------------------------------------------------------------------------
// 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|RST_DVI);

    /* cc.chen - T.B.D. - ToDo HDMI */
    //msVdMcuReset();
    //msWriteByte(BK0_00, REG_BANK_HDMI); // select register bank scaler
    //msWriteByte(BKB_3C, 0x00); // HDMI audio PLL

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

void MDrv_Scaler_PowerOff(void)
{
//lachesis_070310 this is duplicated code.
//    MDrv_Scaler_SetPanelOnOff(FALSE);

    /* cc.chen - T.B.D. - ToDo HDMI */
    //msWriteByte(BK0_00, REG_BANK_HDMI); // select register bank scaler
    //msWriteByte(BKB_3C, 0x40); // HDMI&IIS Out audio PLL power down

    /* 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) || IsUseHdmiPort(stSystemInfo.enInputPortType))
    {
        g_bInputTimingChange = FALSE;
    }
}

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

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);
    }
}

//-----------------------------------------------------------------------------
// screen
//-----------------------------------------------------------------------------

/******************************************************************************/
///enable/diable output black pattern
///@param bEnable \b IN
///-  False:Disable
///-  TRUE :enable
/******************************************************************************/
void MDrv_Scaler_SetBlackScreen(BOOLEAN bEnable)
{
    U8 u8Bank;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_VOP);
    MDrv_WriteRegBit(BK_SC_VOP_19_L, bEnable, _BIT1);
    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}

//-----------------------------------------------------------------------------
// FPLL
//-----------------------------------------------------------------------------
#if (ENABLE_FPLL_CTL)
void MDrv_Scaler_CtrlFPLL(EnuFpllCtl eFlag)
{
    U8 u8Bank;

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

    switch((eFlag&FPLL_TUNE_TYPEMASK))
    {
        case FPLL_STOP:
            MDrv_Write2Byte(BK_SC_VOP_1E_H, 0x00);
            break;

        case FPLL_TUNE_CLK_LINE_FOR_PC_YPBPR:
            MDrv_Write2Byte(BK_SC_VOP_1E_H, 0x80);
            break;

        default:
            break;
    }

    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}
#endif

//-----------------------------------------------------------------------------
// LPLL
//-----------------------------------------------------------------------------

void MDrv_Scaler_InitLPLL(void)
{
    MDrv_WriteByte( BK_ADC_ATOP_0A_L, PANEL_MPLL_LOOP_DIV2 );
    MDrv_Write2Byte(BK_LPLL_00_L, (PANEL_LPLL_INPUT_DIV_2nd<<8)  | PANEL_LPLL_INPUT_DIV_1st);
    MDrv_Write2Byte(BK_LPLL_01_L, (PANEL_LPLL_LOOP_DIV_2nd<<8)   | PANEL_LPLL_LOOP_DIV_1st);
    MDrv_Write2Byte(BK_LPLL_02_L, (PANEL_LPLL_OUTPUT_DIV_2nd<<8) | PANEL_LPLL_OUTPUT_DIV_1st);
    MDrv_Write2Byte(BK_LPLL_03_L, 0x0003);

    MDrv_WriteRegBit(BK_LPLL_03_L, PANEL_RSDS, _BIT6);
    MDrv_WriteRegBit(BK_LPLL_03_L, devPanel_Is_DUAL_PORT(), _BIT7);

    MDrv_Scaler_SetOutputDclk(600);
}

void MDrv_Scaler_SetOutputDclk(U16 u16OutputVFreq)
{
    U32 u32OutputDclk;

    ASSERT(u16OutputVFreq > 450);
    ASSERT(u16OutputVFreq < 900);

    // SET = XTAL * MM * (524288 * LM * K / OutputClk * A)
    //     = (XTAL * MM * (524288 * LM * K) / A) / OutputClk
    //     = devPanel_DClkFactor() * 10^6 / OutputClk
    //     = devPanel_DClkFactor() / (OutputClk/10^6)
    u32OutputDclk = (float)devPanel_DClkFactor() /
                    ((((float)devPanel_HTOTAL() * (float)devPanel_VTOTAL()) / 1000 * u16OutputVFreq / 1000) / 10);

    g_SrcInfo.u32Op2DclkSet = u32OutputDclk;
    MDrv_Write3Byte(BK_LPLL_0F_L, u32OutputDclk);

    MDrv_WriteByteMask(BK_LPLL_1D_H, _BIT6, _BIT6);
    MDrv_WriteByteMask(BK_LPLL_1D_H, 0x00, _BIT6);
}

//-----------------------------------------------------------------------------
// Others
//-----------------------------------------------------------------------------

/******************************************************************************/
///set free run(Disable input chanel) color
///@param u8Color \b IN
///-  0:Black
///-  1:White
///-  2:Blue
/******************************************************************************/
void MDrv_Scaler_SetFreeRunColor ( U8 u8Color )
{
    U8 u8Bank;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_VOP);
    MDrv_WriteByte(BK_SC_VOP_19_H, astFreeRunColor[u8Color][0]);
    MDrv_WriteByte(BK_SC_VOP_1A_L, astFreeRunColor[u8Color][1]);
    MDrv_WriteByte(BK_SC_VOP_1A_H, astFreeRunColor[u8Color][2]);
    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}


/******************************************************************************/
///set free run display window size
/******************************************************************************/
void MDrv_Scaler_SetFreeRunWindow ( void )
{
    U8 u8Bank;

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

#if( PANEL_TYPE_SEL == PNL_DAC_CRT )
    g_u8CRT_OutVFreq = 60;
#endif

    MDrv_Write2Byte(BK_SC_VOP_08_L, devPanel_HSTART()); // Image H start
    MDrv_Write2Byte(BK_SC_VOP_09_L, devPanel_HSTART() + devPanel_WIDTH() - 1); // Image H end
    MDrv_Write2Byte(BK_SC_VOP_0A_L, PANEL_DE_VSTART + devPanel_HEIGHT() - 1); // Image V end
    MDrv_Write2Byte(BK_SC_VOP_0B_L, PANEL_DE_VSTART + devPanel_HEIGHT() - 1); // DE V end

    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}

/******************************************************************************/
///set free run display window timing
/******************************************************************************/
void MDrv_Scaler_SetFreeRunTiming ( void )
{
#if (PANEL_TYPE_SEL != PNL_DAC_CRT)
    U8 u8Bank;

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

    MDrv_Write2Byte(BK_SC_VOP_02_L, devPanel_VTOTAL() - devPanel_VSTART() );  // vsync start position
    MDrv_Write2Byte(BK_SC_VOP_03_L, devPanel_VTOTAL() - devPanel_Get_VSYNC_BACK_PORCH() );  // vsync end position

    if (devPanel_IsTCON()||(devPanel_Is_ANALOG_TCON()))
    {
        MDrv_WriteRegBit(BK_SC_VOP_02_H, ENABLE, _BIT7);
        MDrv_WriteRegBit(BK_SC_VOP_02_H, ENABLE, _BIT3); //20060808 Laurent
    }

    MDrv_Write2Byte(BK_SC_VOP_0D_L, devPanel_VTOTAL() - 1);  // output vtotal
    MDrv_Write2Byte(BK_SC_VOP_0C_L, devPanel_HTOTAL() - 1);  // output htotal

    MDrv_Scaler_SetOutputDclk(600);

    MDrv_WriteByte(BK_SC_VOP_10_H, _BIT6 ); // set output sync ctl for Freerun

    MDrv_WriteByte(BK_SELECT_00, u8Bank);
#endif
}

/******************************************************************************/
///This function will adjust backlight
///@param u8Backlight \b IN backlight value
/******************************************************************************/
//*************************************************************************
//Function name:    MDrv_ADC_AdjustBacklight
//Passing parameter:    U8 u8Backlight
//Return parameter: none
//Description:          set back light
//*************************************************************************
void MDrv_ADC_AdjustBacklight ( U8 u8Backlight )
{

//lachesis_070220
    Panel_Backlight_PWM_ADJ(u8Backlight);
    // TODO: add code
    if ( u8Backlight )
    {
    }

    // Check with H/W designer how to control Backlight, Venus using PWM to control BKL
}

/******************************************************************************/
///-This function will calculate the current scale value
//////@param wValue: the current scale value in the range 0-100
///@param wMinValue: the min scale value
///@param wMaxValue: the max scale value
///@return :the current scale value
/******************************************************************************/
U16 N100toReallyValue ( U16 wValue, U16 wMinValue, U16 wMaxValue )
{
    double dfTemp;
    wMaxValue = wMaxValue - wMinValue;
    if(!wValue)
        wValue=wMinValue;
    else
    {
        dfTemp=(double)(((wValue)*wMaxValue)/100.0+wMinValue);
        wValue=((wValue)*wMaxValue)/100+wMinValue;

        if((double)(dfTemp-wValue)>0.4)
            wValue=wValue+1;
    }
    return(U16) wValue;
}

/******************************************************************************/
///-This function will get true value of Brightness for picture mode
///@param u8value: scaled value
///@return true value of Brightness
//*************************************************************************
U8 msAPI_Mode_PictureBackLightN100toReallyValue ( U8 u8value )
{
	//lachesis 2007-01-03 11:40坷傈
    return N100toReallyValue( u8value, PANEL_MIN_PWM_DIM, PANEL_MAX_PWM_DIM );
}

void MDrv_ADC_PowerOff(void)
{
    MDrv_WriteByte(BK_ADC_ATOP_04_L, 0xFE);         // Bit-0 is relative to DRAM.
    MDrv_WriteByte(BK_ADC_ATOP_04_H, 0xFF);
    MDrv_WriteByte(BK_ADC_ATOP_05_L, 0xFF);
    MDrv_WriteByte(BK_ADC_ATOP_06_L, 0xFF);
    MDrv_WriteByte(BK_ADC_ATOP_06_H, 0xFF);
    MDrv_WriteByte(BK_ADC_ATOP_60_L, 0xEF);         // Bit-4 is relative to DRAM
    MDrv_WriteByte(BK_ADC_ATOP_60_H, 0xFF);
    MDrv_WriteByte(BK_ADC_ATOP_70_L, 0x0F);         // reg_cvbso1_pd
//    MDrv_WriteByteMask(BK_ADC_ATOP_08_L, 1, _BIT4);   // Cannot turn off MPLL
    MDrv_WriteByteMask(BK_ADC_ATOP_4C_L, 1, _BIT5);
    MDrv_WriteByteMask(BK_ADC_ATOP_40_L, 1, _BIT6);
}

#pragma SAVE
#pragma NOAREGS
void MDrv_Scaler_Isr(void)
{
}
#pragma RESTORE

/******************************************************************************/
///-This function will initialize the scaler and then set it to free run
/******************************************************************************/
void MDrv_Scaler_InitToFreeRun( void )
{
    // Scaler is reset in startup.a51 now
    // Because default value of 0xF4 is 0x00,
    // if we reset scaler here, LVDS will not be tri-sate for a while
    MDrv_Scaler_SoftwareResetEx(RST_SCALER_ALL);

    MDrv_Scaler_Init();

    devPanel_InitGammaTbl();

    // Free run
    MDrv_Scaler_SetFreeRunWindow();
    MDrv_Scaler_SetFreeRunTiming();

    MDrv_Scaler_SetFreeRunColor(0); // Black
}

#undef DRV_SCALER_C

⌨️ 快捷键说明

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