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

📄 lnbh21.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
    Instance = (LNBH21_InstanceData_t *)Handle;

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

    switch(Function){

        case STTUNER_IOCTL_RAWIO: /* read/write device register (actual write) */
            Error =  STTUNER_IOARCH_ReadWrite( Instance->IOHandle, 
                                                 ((SATIOCTL_IOARCH_Params_t *)InParams)->Operation,
                                                 ((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,
                 (U32) ((SATIOCTL_SETREG_InParams_t *)InParams)->RegIndex,
                  (U32)((SATIOCTL_SETREG_InParams_t *)InParams)->Value );
            break;
		case STTUNER_IOCTL_SETLNB: /* set lnb parameters through ioctl */
			Error = lnb_lnbh21_ioctl_set(Handle,InParams);
			break;

		case STTUNER_IOCTL_GETLNB: /* get lnb parameters through ioctl */
			Error = lnb_lnbh21_ioctl_get(Handle,OutParams);
			break;

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


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


	Error |= Instance->DeviceMap.Error;
    
    Instance->DeviceMap.Error = ST_NO_ERROR;

    return(Error);

}



/* ----------------------------------------------------------------------------
Name: lnb_lnbh21_ioaccess()

Description:
    we get called with the instance of
Parameters:
    
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t lnb_lnbh21_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_LNBH21
   const char *identity = "STTUNER lnbh21.c lnb_lnbh21_ioaccess()";
#endif
    ST_ErrorCode_t        Error = ST_NO_ERROR;
    IOARCH_Handle_t       ThisIOHandle;
    LNBH21_InstanceData_t *Instance;

    Instance = (LNBH21_InstanceData_t *)Handle;

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

    ThisIOHandle = Instance->IOHandle;

    /* if STTUNER_IOARCH_MAX_HANDLES then passthrough function required using our device handle (address) */ 
    if (IOHandle == STTUNER_IOARCH_MAX_HANDLES)
    {
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNBH21
        STTBX_Print(("%s write passthru\n", identity));
#endif
        Error = STTUNER_IOARCH_ReadWrite(ThisIOHandle, Operation, SubAddr, Data, TransferSize, Timeout);
    }
    else    /* repeater */
    {
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNBH21
        STTBX_Print(("%s write repeater\n", identity));
#endif
        
        Error = STTUNER_IOARCH_ReadWriteNoRep(IOHandle, Operation, 0, Data, TransferSize, Timeout);
    }


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

	 return(Error);
}

#endif

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

#ifndef STTUNER_MINIDRIVER
ST_ErrorCode_t LNBH21_UpdateLNB(LNBH21_InstanceData_t     *Instance)
{
    ST_ErrorCode_t  Error = ST_NO_ERROR;
    /* update LNB hardware */
    STTUNER_IOREG_SetContigousRegisters(&Instance->DeviceMap, Instance->IOHandle, RLNBH21_REGS,  (&(Instance->RegVal))  ,1);
    Error |=  Instance->DeviceMap.Error;
    
    Instance->DeviceMap.Error = ST_NO_ERROR;
	return(Error);

}
#endif
#ifdef STTUNER_MINIDRIVER
ST_ErrorCode_t LNBH21_UpdateLNB( )
{
	ST_ErrorCode_t        Error = ST_NO_ERROR;
    
    	STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_LNB_WRITE, RLNBH21_REGS, 0x00, 0x00, LNBH21_Default_Reg, 1, FALSE);

	return(Error);

}

#endif


/*----------------------------------------------------
 FUNCTION      LNBH21_SetLnb
 ACTION        set the Lnb
 PARAMS IN     Lnb -> true for LnbHigh, false for LnbLow
 PARAMS OUT    NONE
 RETURN        NONE
------------------------------------------------------*/
#ifndef STTUNER_MINIDRIVER
void LNBH21_SetLnb(LNBH21_InstanceData_t     *Instance,  int Lnb)
{
		
	/* Low band -> no 22KHz tone */
	if (Lnb == STTUNER_LNB_TONE_OFF) 
	STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_TEN, 0, &(Instance->RegVal)  );
	
	/* High band -> 22KHz tone */
	if (Lnb == STTUNER_LNB_TONE_22KHZ) 
	STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap,FLNBH21_TEN, 1, &(Instance->RegVal) );
	
}
#endif
#ifdef STTUNER_MINIDRIVER
void LNBH21_SetLnb(int Lnb)
{
	/* Low band -> no 22KHz tone */
	if (Lnb == STTUNER_LNB_TONE_OFF) 
	{
		LNBH21_Default_Reg[0x00] &= 0xDF;
	}
	else if(Lnb == STTUNER_LNB_TONE_22KHZ) 
	{
		LNBH21_Default_Reg[0x00] |= 0x20;
	}
	
}
#endif


/*----------------------------------------------------
 FUNCTION      LNBH21_SetPolarization
 ACTION        set the polarization
 PARAMS IN     Polarization -> Polarization
 PARAMS OUT    NONE
 RETURN        NONE
------------------------------------------------------*/
#ifndef STTUNER_MINIDRIVER
void LNBH21_SetPolarization(LNBH21_InstanceData_t     *Instance, LNB_Polarization_t Polarization)
{
    if(Polarization == VERTICAL)/* Set 13V for Vertical Pol*/
    {
    	STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_EN, 1,&(Instance->RegVal) );
        STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_VSEL, 0,&(Instance->RegVal)  );
       
    }
    else if(Polarization == HORIZONTAL)/* Set 18v for Horizontal Pol*/
    {
    	STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_EN, 1,&(Instance->RegVal) );
        STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_VSEL, 1,&(Instance->RegVal)  );
    
    }
    else if(Polarization == NOPOLARIZATION)/* Set 18v for Horizontal Pol*/
        {
        STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_EN, 0, &(Instance->RegVal)  );
      
	}
}
#endif
#ifdef STTUNER_MINIDRIVER
void LNBH21_SetPolarization(LNB_Polarization_t Polarization)
{

        /* Low band -> no 22KHz tone */
	if (Polarization == VERTICAL) 
	{
		LNBH21_Default_Reg[0x00] &= 0xF7;
		LNBH21_Default_Reg[0x00] |= 0x04;
	}
	else if(Polarization == HORIZONTAL) 
	{
		LNBH21_Default_Reg[0x00] |= 0x08;
		LNBH21_Default_Reg[0x00] |= 0x04;
	}
	else if(Polarization == NOPOLARIZATION) 
	{
		LNBH21_Default_Reg[0x00] &= 0xFB;
	}
}
#endif
/*----------------------------------------------------
 FUNCTION      LNBH21_SetCurrentThreshold
 ACTION        set the Current for LNB
 PARAMS IN     CurrentSelection 
 PARAMS OUT    NONE
 RETURN        NONE
------------------------------------------------------*/
/*
void LNBH21_SetCurrentThreshold(STTUNER_IOREG_DeviceMap_t *DeviceMap, LNB_CurrentThresholdSelection_t CurrentThresholdSelection)
{
	if(CurrentThresholdSelection == CURRENT_THRESHOLD_HIGH)*//* Set ISEL=0 to set high(500-650mA)*/
        /*STTUNER_IOREG_FieldSetVal(DeviceMap, FLNB21_ISEL, 0);
        if(CurrentThresholdSelection == CURRENT_THRESHOLD_LOW)*//* Set ISEL=1 to set low(400-550mA)*/
       /* STTUNER_IOREG_FieldSetVal(DeviceMap, FLNB21_ISEL, 1);
}*/
#ifdef STTUNER_MINIDRIVER
void LNBH21_SetProtectionMode(LNB_ShortCircuitProtectionMode_t ShortCircuitProtectionMode)
{
	if (ShortCircuitProtectionMode == LNB_PROTECTION_DYNAMIC) 
	{
		LNBH21_Default_Reg[0x00] &= 0x7F;
	}
	else if(ShortCircuitProtectionMode == LNB_PROTECTION_STATIC) 
	{
		LNBH21_Default_Reg[0x00] |= 0x80;
	}
}
#endif
 
/*----------------------------------------------------
 FUNCTION      LNBH21_SetProtectionMode
 ACTION        set the short circuit for LNB
 PARAMS IN     ShortCircuitProtection 
 PARAMS OUT    NONE
 RETURN        NONE
------------------------------------------------------*/	
#ifndef STTUNER_MINIDRIVER
void LNBH21_SetProtectionMode(LNBH21_InstanceData_t     *Instance, LNB_ShortCircuitProtectionMode_t ShortCircuitProtectionMode)
{
	if(ShortCircuitProtectionMode == LNB_PROTECTION_DYNAMIC)/* dynamic short circuit protection*/
	 STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_PCL, 0,&(Instance->RegVal) );	
	   	
	if(ShortCircuitProtectionMode == LNB_PROTECTION_STATIC)/* static short circuit protection*/
	STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_PCL, 1,&(Instance->RegVal)  );
	    
}


/*----------------------------------------------------
 FUNCTION      LNBH21_SetLossCompensation
 ACTION        compensation for coaxial cable loss 
 PARAMS IN     CoaxCableLossCompensation 
 PARAMS OUT    NONE
 RETURN        NONE
------------------------------------------------------*/	
void LNBH21_SetLossCompensation(LNBH21_InstanceData_t     *Instance, BOOL CoaxCableLossCompensation)
{
	if(CoaxCableLossCompensation == TRUE)/* add +1 in 13/18V*/
	STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_LLC, 1,&(Instance->RegVal)  );
	
	
	if(CoaxCableLossCompensation == FALSE)/* normal 13/18V */
	STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_LLC, 0,&(Instance->RegVal)  );
	   
}
#endif
#ifdef STTUNER_MINIDRIVER
void LNBH21_SetLossCompensation(BOOL CoaxCableLossCompensation)
{

	if (CoaxCableLossCompensation == TRUE) 
	{
		LNBH21_Default_Reg[0x00] &= 0xEF;
	}
	else if(CoaxCableLossCompensation == FALSE) 
	{
		LNBH21_Default_Reg[0x00] |= 0x10;
	}
}
#endif
#ifndef STTUNER_MINIDRIVER
/*----------------------------------------------------
 FUNCTION      LNBH21_GetPower
 ACTION        get lnb power status
 PARAMS IN     
 PARAMS OUT    
 RETURN        
------------------------------------------------------*/
ST_ErrorCode_t LNBH21_GetPower(LNB_Handle_t Handle, STTUNER_IOREG_DeviceMap_t *DeviceMap, LNB_Status_t *Status)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNBH21
   const char *identity = "STTUNER lnbh21.c lnb_lnbh21_GetPower()";
#endif

    U8 powerstatus;
    LNBH21_InstanceData_t     *Instance;
	ST_ErrorCode_t Error = ST_NO_ERROR;

    	Instance = (LNBH21_InstanceData_t *)Handle;

	if(STTUNER_Util_CheckPtrNull(Instance) != ST_NO_ERROR)
	 {
	   #ifdef STTUNER_DEBUG_MODULE_SATDRV_LNBH21
	        STTBX_Print(("%s invalid handle\n", identity));
	   #endif
	        return(ST_ERROR_INVALID_HANDLE);
	 }
    Instance->DeviceMap.Mode = IOREG_MODE_NOSUBADR;  /* LNBH21 read require no subaddress*/
    
    powerstatus = STTUNER_IOREG_GetRegister(&Instance->DeviceMap, Instance->IOHandle,(U16) RLNBH21_REGS);
    if((powerstatus & 0x04) == 0x04)
    *Status = LNB_STATUS_ON;
    else
    *Status = LNB_STATUS_OFF;

   	Error |= Instance->DeviceMap.Error;
    
    Instance->DeviceMap.Error = ST_NO_ERROR;

    return(Error);
}
#endif

#ifdef STTUNER_MINIDRIVER
/*----------------------------------------------------
 FUNCTION      LNBH21_GetPower
 ACTION        get lnb power status
 PARAMS IN     
 PARAMS OUT    
 RETURN        
------------------------------------------------------*/
ST_ErrorCode_t LNBH21_GetPower(LNB_Status_t *Status)
{
    U8 powerstatus;
    ST_ErrorCode_t Error = ST_NO_ERROR;
    
    Error = STTUNER_IODIRECT_ReadWrite(STTUNER_IO_LNB_READ, RLNBH21_REGS, 0x00, 0x00, &powerstatus, 1, FALSE);
    if((powerstatus & 0x04) == 0x04)
    *Status = LNB_STATUS_ON;
    else
    *Status = LNB_STATUS_OFF;
    return(Error);
}
#endif

#ifndef STTUNER_MINIDRIVER
/*----------------------------------------------------
 FUNCTION     LNBH21_SetPower

 ACTION        set lnb power
 PARAMS IN     
 PARAMS OUT    
 RETURN        
------------------------------------------------------*/
ST_ErrorCode_t LNBH21_SetPower(LNBH21_InstanceData_t     *Instance, LNB_Status_t Status)
{
	ST_ErrorCode_t Error = ST_NO_ERROR;

#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNBH21
    const char *identity = "STTUNER lnbh21.c LNBH21_SetPower()";
#endif

⌨️ 快捷键说明

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