📄 tunsdrv.c
字号:
#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 + -