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

📄 tunsdrv.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
			
			#ifdef  STTUNER_DRV_SAT_TUN_HZ1184
			case STTUNER_TUNER_HZ1184:
			Error = STTUNER_IOREG_GetContigousRegisters(&(Instance->DeviceMap), Instance->IOHandle, RHZ1184_STATUS, 1, Instance->TunerRegVal);
				
			break;
			#endif
			
			#ifdef  STTUNER_DRV_SAT_TUN_MAX2116
			case STTUNER_TUNER_MAX2116:
			Error = STTUNER_IOREG_GetContigousRegisters(&(Instance->DeviceMap), Instance->IOHandle, RMAX2116_STATUS, 2, Instance->TunerRegVal);
				
			break;
			#endif
			
			#ifdef STTUNER_DRV_SAT_TUN_STB6000
			case STTUNER_TUNER_STB6000:
			Error = STTUNER_IOREG_GetContigousRegisters(&(Instance->DeviceMap), Instance->IOHandle, RSTB6000_LD, 1,Instance->TunerRegVal);
				
			break;
			#endif
			
			#ifdef STTUNER_DRV_SAT_TUN_IX2476
			case STTUNER_TUNER_IX2476:
			Error = STTUNER_IOREG_GetContigousRegisters(&(Instance->DeviceMap), Instance->IOHandle,RIX2476_STATUS,1,Instance->TunerRegVal);
			break;
			#endif
		#endif
			
			#ifdef STTUNER_DRV_SAT_TUN_STB6100
			case STTUNER_TUNER_STB6100:
			Error = STTUNER_IOREG_GetContigousRegisters(&(Instance->DeviceMap), Instance->IOHandle, RSTB6100_LD, 12,Instance->TunerRegVal);				
			break;
			#endif
			
			default:
			break;
		}
	}
	
	return Error;
}
/*****************************************************
**FUNCTION	::	Tuner_GetFrequency()
**ACTION	::	It will return frequency at which PLL is locked. 

*****************************************************/
U32 Tuner_GetFrequency(TUNSDRV_InstanceData_t *Instance)
{
	
	U32 frequency = 0;
	U32 stepsize;
	U32 nbsteps;
	U32 divider = 0;
	U32 swallow;
	#ifdef STTUNER_DRV_SAT_TUN_STB6100
	U32 psd2;
	#endif
	
	if(&(Instance->DeviceMap)	)
	{
		switch(Instance->TunerType)
		{
		#ifdef STTUNER_BASIC
			#ifdef  STTUNER_DRV_SAT_TUN_VG0011
			case STTUNER_TUNER_VG0011:
				STTUNER_IOREG_GetContigousRegisters(&(Instance->DeviceMap),Instance->IOHandle,RTUNERSAT_TUNING_LSB,2, Instance->TunerRegVal);
				divider = (STTUNER_IOREG_GetFieldVal(&(Instance->DeviceMap),FTUNERSAT_N_MSB,Instance->TunerRegVal)<<8)+STTUNER_IOREG_GetFieldVal(&(Instance->DeviceMap),FTUNERSAT_N_LSB,Instance->TunerRegVal);

				frequency = divider*1000;
				
			break;
			#endif
			#ifdef  STTUNER_DRV_SAT_TUN_HZ1184
			case STTUNER_TUNER_HZ1184:
				divider =   (STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FHZ1184_N_HSB)<<10)
				          + (STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FHZ1184_N_MSB)<<3)
				          + STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FHZ1184_N_LSB); 
				          
				swallow = STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FHZ1184_A);
				nbsteps = divider*32 + swallow;
				stepsize = 2*(Instance->Status.Reference / (TUNER_PowOf2(STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FHZ1184_R))));
				frequency = (nbsteps * stepsize)/1000 - Instance->Status.IntermediateFrequency;
			break;
			#endif
			#ifdef  STTUNER_DRV_SAT_TUN_MAX2116
			case STTUNER_TUNER_MAX2116:
				nbsteps =   (STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FMAX2116_N_MSB)<<8) 
						  + STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FMAX2116_N_LSB);
				
				stepsize = Instance->Status.Reference / (TUNER_PowOf2(STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FMAX2116_R)+1));	
				frequency = (nbsteps * stepsize)/1000 - Instance->Status.IntermediateFrequency;  
			break;
			#endif
			
			#ifdef STTUNER_DRV_SAT_TUN_STB6000
			case STTUNER_TUNER_STB6000:
				divider =	(STTUNER_IOREG_GetFieldVal(&(Instance->DeviceMap),FSTB6000_N_MSB,Instance->TunerRegVal)<<1) 
							+ STTUNER_IOREG_GetFieldVal(&(Instance->DeviceMap),FSTB6000_N_LSB,Instance->TunerRegVal);
							
				swallow = STTUNER_IOREG_GetFieldVal(&(Instance->DeviceMap),FSTB6000_A,Instance->TunerRegVal);
				nbsteps = divider*16 + swallow;	/* N x P + A ; P=16*/			
				stepsize =  2*(Instance->Status.Reference / STTUNER_IOREG_GetFieldVal(&(Instance->DeviceMap),FSTB6000_R,Instance->TunerRegVal)); /* 2 x Fr / R */
				
				/*frequency = (nbsteps * stepsize)/1000 - hTuner->IF;*/ /* 2 x Fr x (PxN + A)/R */
				frequency = (nbsteps * (stepsize>>(STTUNER_IOREG_GetFieldVal(&(Instance->DeviceMap),FSTB6000_ODIV,Instance->TunerRegVal)+1)))/1000; /* 2 x Fr x (PxN + A)/R */
			break;
			#endif
						
			
			#ifdef STTUNER_DRV_SAT_TUN_IX2476
			case STTUNER_TUNER_IX2476:
				nbsteps =  32 * ( (STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FIX2476_N_MSB)<<3) 
						  + STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FIX2476_N_LSB) ) 
						  + STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FIX2476_A);
				
				stepsize = Instance->Status.Reference / (TUNER_PowOf2(STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FIX2476_REF)+2));	
				frequency = (nbsteps * stepsize)/1000 - Instance->Status.IntermediateFrequency;  
			break;
			#endif	
		#endif
			
			#ifdef STTUNER_DRV_SAT_TUN_STB6100
			case STTUNER_TUNER_STB6100:
			
				Tuner_Read(Instance);
				swallow=(STTUNER_IOREG_GetFieldVal(&(Instance->DeviceMap) ,FSTB6100_NF_MSB,Instance->TunerRegVal)<<8)  /*Nf val*/
						+STTUNER_IOREG_GetFieldVal(&(Instance->DeviceMap) ,FSTB6100_NF_LSB,Instance->TunerRegVal);
				
				/*Ni = floor (fVCO / (fXTAL * P))*/
				divider=STTUNER_IOREG_GetFieldVal(&(Instance->DeviceMap) ,FSTB6100_NI,Instance->TunerRegVal); /*NI val*/
				psd2=STTUNER_IOREG_GetFieldVal(&(Instance->DeviceMap) ,FSTB6100_PSD2,Instance->TunerRegVal);
				
				frequency=(((1+psd2)*(Instance->Status.Reference /1000)*swallow)/TUNER_PowOf2(9));
				frequency+=(Instance->Status.Reference /1000) * (divider)*(1+psd2);
				/*Flo=Fxtal*P*(Ni+Nf/2^9) . P=DIV2+1 */
				
				frequency=frequency/((STTUNER_IOREG_GetFieldVal(&(Instance->DeviceMap),FSTB6100_ODIV,Instance->TunerRegVal)+1)*2);
			
			break;
			#endif	
				
			default:
			break;
		}
	}
	
	return frequency;
}
/*****************************************************
**FUNCTION	::	Tuner_GetBandwidth()
**ACTION	::	It will return BW at which tuner LPF filter is programmed. 

*****************************************************/
U32 Tuner_GetBandwidth(TUNSDRV_InstanceData_t *Instance)
{
	U32 bandwidth = 0;
	U8 u8 = 0;
	
	if(&(Instance->DeviceMap))
	{
		switch(Instance->TunerType)
		{
		#ifdef STTUNER_BASIC
			#ifdef  STTUNER_DRV_SAT_TUN_VG0011
			case STTUNER_TUNER_VG0011:
				bandwidth = (STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FTUNERSAT_CF)+5)*2000000; /* x2 for ZIF tuner */  	
			break;
			#endif
			#ifdef  STTUNER_DRV_SAT_TUN_HZ1184
			case STTUNER_TUNER_HZ1184:
				u8 = (STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FHZ1184_PD2) << 3)  +
					(STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FHZ1184_PD3) << 2)  +
					(STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FHZ1184_PD4) << 1)  +
					STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FHZ1184_PD5);
					
				bandwidth = 2*(10000000 + (u8-2) * 2500000);
			break;
			#endif
			#ifdef  STTUNER_DRV_SAT_TUN_MAX2116
			case STTUNER_TUNER_MAX2116:
				Tuner_Read(Instance);
				/* Below calculation come from max2116 data sheet, will return bandwidth for both I & Q components*/
				bandwidth = ((Instance->Status.Reference / STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FMAX2116_M)) *
							((40000 + 1451 * STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FMAX2116_F_IN))/10000)) * 2;
			break;
			#endif
			#ifdef STTUNER_DRV_SAT_TUN_STB6000
			case STTUNER_TUNER_STB6000:
				u8 = STTUNER_IOREG_GetFieldVal(&(Instance->DeviceMap),FSTB6000_F,Instance->TunerRegVal);
				
				if(u8<5)
					bandwidth = 1000000;
				else
					bandwidth = (u8)*2000000;	/* x2 for ZIF tuner */	
			break;
			#endif			
			
			#ifdef  STTUNER_DRV_SAT_TUN_IX2476
			case STTUNER_TUNER_IX2476:
			u8 = (STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FIX2476_PD2) << 3)  +
				(STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FIX2476_PD3) << 2)  +
				(STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FIX2476_PD4) << 1)  +
				STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,FIX2476_PD5);
				
			bandwidth = 20000000 + (u8-3) * 4000000; /* x2 for ZIF tuner */
			break;
			#endif
		#endif
			
			#ifdef STTUNER_DRV_SAT_TUN_STB6100			
			case STTUNER_TUNER_STB6100:
				Tuner_Read(Instance);
				u8 = STTUNER_IOREG_GetFieldVal(&(Instance->DeviceMap) ,FSTB6100_F,Instance->TunerRegVal);
				
				bandwidth = (u8+5)*2000000;	/* x2 for ZIF tuner BW/2=F+5 Mhz*/
			break;
			#endif	
								
			default:
			break;
		}
	}
	
	return bandwidth;
}


/* ----------------------------------------------------------------------------
Name: STTUNER_DRV_TUNER_TUNSDRV_Install()

Description:
    install a satellite device driver.
    
Parameters:
    
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t STTUNER_DRV_TUNER_TUNSDRV_Install(STTUNER_tuner_dbase_t  *Tuner, STTUNER_TunerType_t TunerType)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
   const char *identity = "STTUNER tunsdrv.c STTUNER_DRV_TUNER_TUNSDRV_Install()";
#endif
    ST_ErrorCode_t Error = ST_NO_ERROR;

    /* driver wide bits to init once only */
    if (Installed == FALSE)
    {
        InstanceChainTop = NULL;
#if defined(ST_OS21) || defined(ST_OSLINUX) 
        Lock_InitTermOpenClose = semaphore_create_fifo(1);
#else
        semaphore_init_fifo(&Lock_InitTermOpenClose, 1);
#endif        
        
        Installed = TRUE;
    }

    switch(TunerType)
    {
    #ifdef STTUNER_BASIC
	    #ifdef  STTUNER_DRV_SAT_TUN_VG1011
        case STTUNER_TUNER_VG1011:
		#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
            STTBX_Print(("%s installing sat:tuner:VG1011...", identity));
		#endif
            if (Installed_VG1011 == TRUE)
            {
		#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
                STTBX_Print(("fail already installed\n"));
		#endif
                return(STTUNER_ERROR_INITSTATE);
            }
            Tuner->ID = STTUNER_TUNER_VG1011;
            Tuner->tuner_Open = tuner_tunsdrv_Open_VG1011;
            Installed_VG1011 = TRUE;
            break;
	#endif
	
#ifdef STTUNER_DRV_SAT_TUN_TUA6100
        case STTUNER_TUNER_TUA6100:
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
            STTBX_Print(("%s installing sat:tuner:TUA6100...", identity));
#endif
            if (Installed_TUA6100 == TRUE)
            {
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
                STTBX_Print(("fail already installed\n"));
#endif
                return(STTUNER_ERROR_INITSTATE);
            }
            Tuner->ID = STTUNER_TUNER_TUA6100;
            Tuner->tuner_Open = tuner_tunsdrv_Open_TUA6100;
            Installed_TUA6100 = TRUE;
            break;
#endif

#ifdef STTUNER_DRV_SAT_TUN_EVALMAX
        case STTUNER_TUNER_EVALMAX:
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
            STTBX_Print(("%s installing sat:tuner:EVALMAX...", identity));
#endif
            if (Installed_EVALMAX == TRUE)
            {
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
                STTBX_Print(("fail already installed\n"));
#endif
                return(STTUNER_ERROR_INITSTATE);
            }
            Tuner->ID = STTUNER_TUNER_EVALMAX;
            Tuner->tuner_Open = tuner_tunsdrv_Open_EVALMAX;
            Installed_EVALMAX = TRUE;
            break;
#endif

#ifdef STTUNER_DRV_SAT_TUN_S68G21
        case STTUNER_TUNER_S68G21:
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
            STTBX_Print(("%s installing sat:tuner:S68G21...", identity));
#endif
            if (Installed_S68G21 == TRUE)
            {
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
                STTBX_Print(("fail already installed\n"));
#endif
                return(STTUNER_ERROR_INITSTATE);
            }
            Tuner->ID = STTUNER_TUNER_S68G21;
            Tuner->tuner_Open = tuner_tunsdrv_Open_S68G21;
            Installed_S68G21 = TRUE;
            break;
#endif

#ifdef  STTUNER_DRV_SAT_TUN_VG0011
        case STTUNER_TUNER_VG0011:
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
            STTBX_Print(("%s installing sat:tuner:VG0011...", identity));
#endif
            if (Installed_VG0011 == TRUE)
            {
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
                STTBX_Print(("fail already installed\n"));
#endif
                return(STTUNER_ERROR_INITSTATE);
            }
            Tuner->ID = STTUNER_TUNER_VG0011;
            Tuner->tuner_Open = tuner_tunsdrv_Open_VG0011;
            Installed_VG0011 = TRUE;
            break;
#endif

#ifdef  STTUNER_DRV_SAT_TUN_HZ1184
       case STTUNER_TUNER_HZ1184:
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
            STTBX_Print(("%s installing sat:tuner:HZ1184...", identity));
#endif
            if (Installed_HZ1184 == TRUE)
            {
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
                STTBX_Print(("fail already installed\n"));
#endif
                return(STTUNER_ERROR_INITSTATE);
            }
            Tuner->ID = STTUNER_TUNER_HZ1184;
            Tuner->tuner_Open = tuner_tunsdrv_Open_HZ1184;
            Installed_HZ1184 = TRUE;
            break;
   #endif
       
       #ifdef  STTUNER_DRV_SAT_TUN_MAX2116     
       case STTUNER_TUNER_MAX2116:
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
            STTBX_Print(("%s installing sat:tuner:MAX2116...", identity));
#endif
            if (Installed_MAX2116 == TRUE)
            {
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
                STTBX_Print(("fail already installed\n"));
#endif
                return(STTUNER_ERROR_INITSTATE);
            }
            Tuner->ID = STTUNER_TUNER_MAX2116;
            Tuner->tuner_Open = tuner_tunsdrv_Open_MAX2116;
            Installed_MAX2116 = TRUE;
            break;
     #endif
       

⌨️ 快捷键说明

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