📄 l0299.c
字号:
((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 + -