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

📄 l0299.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
                                                 ((SATIOCTL_IOARCH_Params_t *)InParams)->SubAddr,
                                                 ((SATIOCTL_IOARCH_Params_t *)InParams)->Data,
                                                 ((SATIOCTL_IOARCH_Params_t *)InParams)->TransferSize,
                                                 ((SATIOCTL_IOARCH_Params_t *)InParams)->Timeout );
            break;

        case STTUNER_IOCTL_REG_IN: /* read device register */
            *(int *)OutParams = STTUNER_IOREG_GetRegister(&Instance->DeviceMap, Instance->IOHandle, *(int *)InParams);
            break;

        case STTUNER_IOCTL_REG_OUT: /* write device register */
            Error =  STTUNER_IOREG_SetRegister(  &Instance->DeviceMap,
                                                  Instance->IOHandle,
                  ((SATIOCTL_SETREG_InParams_t *)InParams)->RegIndex,
                  ((SATIOCTL_SETREG_InParams_t *)InParams)->Value );
            break;

        default:
#ifdef STTUNER_DEBUG_MODULE_SATDRV_L0299
            STTBX_Print(("%s function %d not found\n", identity, Function));
#endif
            return(ST_ERROR_FEATURE_NOT_SUPPORTED);
    }


#ifdef STTUNER_DEBUG_MODULE_SATDRV_L0299
    STTBX_Print(("%s function %d called\n", identity, Function));
#endif

    return(Error);

}
#endif

    #ifndef STTUNER_MINIDRIVER
/* ----------------------------------------------------------------------------
Name: lnb_l0299_ioaccess()

Description:
    we get called with the instance of
Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t lnb_l0299_ioaccess(LNB_Handle_t Handle, IOARCH_Handle_t IOHandle,STTUNER_IOARCH_Operation_t Operation, U16 SubAddr, U8 *Data, U32 TransferSize, U32 Timeout)

{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_L0299
   const char *identity = "STTUNER l0299.c lnb_l0299_ioaccess()";
#endif
    ST_ErrorCode_t Error = ST_NO_ERROR;

    IOARCH_Handle_t MyIOHandle;
    L0299_InstanceData_t     *Instance;

    Instance = (L0299_InstanceData_t *)Handle;

    /* check handle */
    if(STTUNER_Util_CheckPtrNull(Instance) != ST_NO_ERROR)
    {
#ifdef STTUNER_DEBUG_MODULE_SATDRV_L0299
        STTBX_Print(("%s invalid handle\n", identity));
#endif
        return(ST_ERROR_INVALID_HANDLE);
    }

    MyIOHandle = Instance->IOHandle;

    /* if STTUNER_IOARCH_MAX_HANDLES then passthrough function required using our device handle/address */
    if (IOHandle == STTUNER_IOARCH_MAX_HANDLES)
    {
        Error = STTUNER_IOARCH_ReadWrite(MyIOHandle, Operation, SubAddr, Data, TransferSize, Timeout);
    }
    else    /* repeater */
    {
        Error = ST_ERROR_FEATURE_NOT_SUPPORTED; /* not supported for this tuner */
    }


#ifdef STTUNER_DEBUG_MODULE_SATDRV_L0299
    STTBX_Print(("%s called\n", identity));
#endif

    return(Error);
}
#endif


/* ------------------------------------------------------------------------- */
/* /\/\/\/\/\/\/\/\/\/\/\/\/\UTILITY Functions/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ */
/* ------------------------------------------------------------------------- */



/*----------------------------------------------------
 FUNCTION      L0299_SetLnb
 ACTION        set the Lnb
 PARAMS IN     Lnb -> true for LnbHigh, false for LnbLow
 PARAMS OUT    NONE
 RETURN        NONE
------------------------------------------------------*/
#ifndef STTUNER_MINIDRIVER
void L0299_SetLnb(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle, int Lnb)
{
	
#ifdef STTUNER_DRV_SAT_F0299
    /* FUTARQUE 299 board */
    /* Low band -> no 22KHz tone */
    if (Lnb == 0)   STTUNER_IOREG_SetField(DeviceMap, IOHandle,  F0299_DISEQCMODE, 0x0);

    /* High band -> 22KHz tone */
    if (Lnb == 1)   STTUNER_IOREG_SetField(DeviceMap, IOHandle,  F0299_DISEQCMODE, 0x3);
#else
    /* ST EVAL0299 board */
    STTUNER_IOREG_SetField(DeviceMap, IOHandle, F0299_OP0VALUE, Lnb);


#endif
}
#endif

#ifdef STTUNER_MINIDRIVER
void L0299_SetLnb(int Lnb)
{
U8 Data;	
#ifdef STTUNER_DRV_SAT_F0299
    /* FUTARQUE 299 board */
    /* Low band -> no 22KHz tone */
    if (Lnb == 0)
    {
    	Data = 0x0;
    	STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R0299_DISEQC, F0299_DISEQCMODE, F0299_DISEQCMODE_L, &Data, 1, FALSE);
    }
    /* High band -> 22KHz tone */
    if (Lnb == 1)
    {
    	Data = 0x3;
    	STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R0299_DISEQC, F0299_DISEQCMODE, F0299_DISEQCMODE_L, &Data, 1, FALSE);
    }

#else
    /* ST EVAL0299 board */
    Data = Lnb;
    STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R0299_IOCFG, F0299_OP0VALUE, F0299_OP0VALUE_L, &Data, 1, FALSE);
   
#endif
}
#endif


#ifndef STTUNER_MINIDRIVER
void L0299_SetTone_Demod(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle, int Lnb)
{
	/* Low band -> no 22KHz tone */
    if (Lnb == 0)   STTUNER_IOREG_SetField(DeviceMap, IOHandle,  F0299_DISEQCMODE, 0x0);

    /* High band -> 22KHz tone */
    if (Lnb == 1)   STTUNER_IOREG_SetField(DeviceMap, IOHandle,  F0299_DISEQCMODE, 0x3);
}


/*----------------------------------------------------
 FUNCTION      L0299_SetPolarization
 ACTION        set the polarization
 PARAMS IN     Polarization -> Polarization
 PARAMS OUT    NONE
 RETURN        NONE
------------------------------------------------------*/
void L0299_SetPolarization(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle, LNB_Polarization_t Polarization)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_L0299
   const char *identity = "STTUNER l0299.c lnb_l0299_setpolarization()";
#endif
    if(Polarization == VERTICAL)
    {
        STTUNER_IOREG_SetField(DeviceMap, IOHandle, F0299_OP1VALUE, 1);
        STTUNER_IOREG_SetField(DeviceMap, IOHandle, F0299_LOCKOUTPUT, 0);
    }
    else if(Polarization == NOPOLARIZATION)
	{
        STTUNER_IOREG_SetField(DeviceMap, IOHandle, F0299_OP1VALUE, 0);
        #ifdef STTUNER_DEBUG_MODULE_SATDRV_L0299
        STTBX_Print(("%s LNB SET OFF\n", identity));
        #endif
	}
    else
	    {
	    	STTUNER_IOREG_SetField(DeviceMap, IOHandle, F0299_OP1VALUE, 1);
	    	STTUNER_IOREG_SetField(DeviceMap, IOHandle, F0299_LOCKOUTPUT, 1);
	    }
}
#endif

#ifdef STTUNER_MINIDRIVER

void L0299_SetPolarization(LNB_Polarization_t Polarization)
{
	U8 Data;
    
	    if(Polarization == VERTICAL)
	    {
	    	Data = 0;
	        STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R0299_DISEQC, F0299_LOCKOUTPUT, F0299_LOCKOUTPUT_L, &Data, 1, FALSE);
	    }
	    else
	    {
	    	Data = 1;
	        STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R0299_DISEQC, F0299_LOCKOUTPUT, F0299_LOCKOUTPUT_L, &Data, 1, FALSE);
	    }
    
}

#endif
#ifndef STTUNER_MINIDRIVER
void L0299_SetDACPolarization(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle, LNB_Polarization_t Polarization)
{
    if(Polarization == VERTICAL)/*set 13V*/
        {
	        STTUNER_IOREG_SetField(DeviceMap, IOHandle, F0299_DACLSB, 0xCE);
            STTUNER_IOREG_SetRegister(DeviceMap, IOHandle, R0299_DACR1, 0xA4);
        }
    if(Polarization == NOPOLARIZATION)/*LNB off*/
        {
            STTUNER_IOREG_SetField(DeviceMap, IOHandle, F0299_DACMODE, 0x00);
        }
    else  /*set 18V*/
        {
	        STTUNER_IOREG_SetField(DeviceMap, IOHandle, F0299_DACLSB, 0x40);
            STTUNER_IOREG_SetRegister(DeviceMap, IOHandle, R0299_DACR1, 0xA1);
        }
}
#endif

#ifndef STTUNER_MINIDRIVER
/*----------------------------------------------------
 FUNCTION      L0299_GetPower
 ACTION        get lnb power status
 PARAMS IN
 PARAMS OUT
 RETURN
------------------------------------------------------*/
ST_ErrorCode_t L0299_GetPower(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle, LNB_Status_t *Status)
{
    /* always report LNB is on (not s/c or off) */
    
    if ( STTUNER_IOREG_GetField(DeviceMap, IOHandle, F0299_OP1VALUE) == 1)
    *Status = LNB_STATUS_ON;
    else
    *Status = LNB_STATUS_OFF;

    return(ST_NO_ERROR);
}
#endif

#ifndef STTUNER_MINIDRIVER
/*----------------------------------------------------
 FUNCTION      L0299_SetPower
 ACTION        set lnb power
 PARAMS IN
 PARAMS OUT
 RETURN
------------------------------------------------------*/
ST_ErrorCode_t L0299_SetPower(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle, LNB_Status_t Status)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_L0299
    const char *identity = "STTUNER l0299.c L0299_SetPower()";
#endif

    switch (Status)
    {
        case LNB_STATUS_ON:
        STTUNER_IOREG_SetField(DeviceMap, IOHandle, F0299_OP1VALUE, 1);
#ifdef STTUNER_DEBUG_MODULE_SATDRV_L0299
            STTBX_Print(("%s LNB SET ON\n", identity));
#endif
            break;

        case LNB_STATUS_OFF:
        STTUNER_IOREG_SetField(DeviceMap, IOHandle, F0299_OP1VALUE, 0);
#ifdef STTUNER_DEBUG_MODULE_SATDRV_L0299
            STTBX_Print(("%s LNB SET OFF\n", identity));
#endif
            break;

        default:
#ifdef STTUNER_DEBUG_MODULE_SATDRV_L0299
            STTBX_Print(("%s fail status not ON or OFF\n", identity));
#endif
            return(ST_ERROR_BAD_PARAMETER);
    }

    return(ST_NO_ERROR);
}
#endif

#ifdef STTUNER_MINIDRIVER
/*----------------------------------------------------
 FUNCTION      L0299_SetPower
 ACTION        set lnb power
 PARAMS IN
 PARAMS OUT
 RETURN
------------------------------------------------------*/
ST_ErrorCode_t L0299_SetPower(LNB_Status_t Status)
{
	
    U8 Data;
    switch (Status)
    {
        case LNB_STATUS_ON:
        Data = 1;
        STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R0299_IOCFG, F0299_OP1VALUE, F0299_OP1VALUE_L, &Data, 1, FALSE);
        break;

        case LNB_STATUS_OFF:
        Data = 0;
        STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R0299_IOCFG, F0299_OP1VALUE, F0299_OP1VALUE_L, &Data, 1, FALSE);
        break;

        default:
        return(ST_ERROR_BAD_PARAMETER);
    }

    return(ST_NO_ERROR);
}
#endif

#ifndef STTUNER_MINIDRIVER
ST_ErrorCode_t L0299_Set_DACPower(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle, LNB_Status_t Status)
{
    switch (Status)
    {
        case LNB_STATUS_ON:
        STTUNER_IOREG_SetField(DeviceMap, IOHandle, F0299_DACLSB, 0x40);
        STTUNER_IOREG_SetRegister(DeviceMap, IOHandle, R0299_DACR1, 0xA1);
        break;

        case LNB_STATUS_OFF:
        STTUNER_IOREG_SetField(DeviceMap, IOHandle, F0299_DACLSB, 0x00);
        STTUNER_IOREG_SetRegister(DeviceMap, IOHandle, R0299_DACR1, 0x02);
        break;

        default:
        return(ST_ERROR_BAD_PARAMETER);
    }

    return(ST_NO_ERROR);
}


/*----------------------------------------------------
 FUNCTION      L0299_Reg_Install
 ACTION
 PARAMS IN
 PARAMS OUT
 RETURN
------------------------------------------------------*/
ST_ErrorCode_t L0299_Reg_Install(STTUNER_IOREG_DeviceMap_t *DeviceMap)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_L0299
    const char *identity = "STTUNER l0299.c L0299_Reg_Install()";
#endif
   ST_ErrorCode_t Error = ST_NO_ERROR;

    /*	IOCFG	*/
    #ifdef STTUNER_LNB_POWER_OFF_BY_DEFAULT
    Error |= STTUNER_IOREG_AddReg(DeviceMap, R0299_IOCFG, 0x0C, 0x00);
    #else
    Error |= STTUNER_IOREG_AddReg(DeviceMap, R0299_IOCFG, 0x0C, 0x40);
    #endif
    Error |= STTUNER_IOREG_AddField(DeviceMap, R0299_IOCFG, F0299_OP1CONTROL,    7, 1, FIELD_TYPE_UNSIGNED);
    Error |= STTUNER_IOREG_AddField(DeviceMap, R0299_IOCFG, F0299_OP1VALUE,      6, 1, FIELD_TYPE_UNSIGNED);
    Error |= STTUNER_IOREG_AddField(DeviceMap, R0299_IOCFG, F0299_OP0CONTROL,    5, 1, FIELD_TYPE_UNSIGNED);
    Error |= STTUNER_IOREG_AddField(DeviceMap, R0299_IOCFG, F0299_OP0VALUE,      4, 1, FIELD_TYPE_UNSIGNED);
    Error |= STTUNER_IOREG_AddField(DeviceMap, R0299_IOCFG, F0299_NYQUISTFILTER, 1, 2, FIELD_TYPE_UNSIGNED);
    Error |= STTUNER_IOREG_AddField(DeviceMap, R0299_IOCFG, F0299_IQ,            0, 1, FIELD_TYPE_UNSIGNED);

    /*	DISEQC	*/
    Error |= STTUNER_IOREG_AddReg(DeviceMap, R0299_DISEQC, 0x08, 0x40);
    Error |= STTUNER_IOREG_AddField(DeviceMap, R0299_DISEQC, F0299_LOCKOUTPUT,        6, 2, FIELD_TYPE_UNSIGNED);
    Error |= STTUNER_IOREG_AddField(DeviceMap, R0299_DISEQC, F0299_LOCKCONFIGURATION, 5, 1, FIELD_TYPE_UNSIGNED);
    Error |= STTUNER_IOREG_AddField(DeviceMap, R0299_DISEQC, F0299_UNMODULATEDBURST,  2, 1, FIELD_TYPE_UNSIGNED);
    Error |= STTUNER_IOREG_AddField(DeviceMap, R0299_DISEQC, F0299_DISEQCMODE,        0, 2, FIELD_TYPE_UNSIGNED);
    
    /*  DACR1   */
    Error |= STTUNER_IOREG_AddReg(DeviceMap, R0299_DACR1, 0x06, 0xA1);
    Error |= STTUNER_IOREG_AddField(DeviceMap, R0299_DACR1, F0299_DACMODE, 5, 3, FIELD_TYPE_UNSIGNED);
    Error |= STTUNER_IOREG_AddField(DeviceMap, R0299_DACR1, F0299_DACMSB,  0, 4, FIELD_TYPE_UNSIGNED);

    /*	DACR2	*/
    Error |= STTUNER_IOREG_AddReg(DeviceMap, R0299_DACR2, 0x07, 0x40);
    Error |= STTUNER_IOREG_AddField(DeviceMap, R0299_DACR2, F0299_DACLSB, 0, 8, FIELD_TYPE_UNSIGNED);
    
    if (Error != ST_NO_ERROR)
    {
#ifdef STTUNER_DEBUG_MODULE_SATDRV_L0299_
        STTBX_Print(("%s fail error=%d\n", identity, Error));
#endif
    }
    {
#ifdef STTUNER_DEBUG_MODULE_SATDRV_L0299
        STTBX_Print(("%s installed ok\n", identity));
#endif
    }

    return (Error);
}
#endif


/* End of l0299.c */

⌨️ 快捷键说明

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