hamaro_cx24128.c
来自「QPSK Tuner details, for conexant chipset」· C语言 代码 · 共 1,877 行 · 第 1/5 页
C
1,877 行
reg_value = reg_val_temp & 0x3E;
p_viperparms->VcobandSel = (HAMARO_VCOBANDSEL)reg_value;
/* -- Mongoose RevB -- */
if (reg_value == 0) /* could be VCO6 */
{
/* Read 0x18[7] */
reg_value = reg_val_temp & 0x80;
if (reg_value != 0)
{
p_viperparms->VcobandSel = HAMARO_VCOBANDSEL_6;
}
}
return(True);
} /* HAMARO_TUNER_CX24128_GetParameters() */
/*******************************************************************************************************
* HAMARO_TUNER_CX24128_SetParameters()
* sets passed in parameters in nim and into tuner
*******************************************************************************************************/
BOOL
HAMARO_TUNER_CX24128_SetParameters(HAMARO_NIM *p_nim, /* pointer to nim */
HAMARO_VIPERPARMS *p_viperparms) /* copy of HAMARO_VIPERPARMS to use as default */
{
unsigned long reg_value;
unsigned char reg_val_temp;
HAMARO_TUNER_CX24128_VALIDATE(p_nim);
if (p_viperparms == 0)
{
return(False);
}
/* copy from user-buffer to tuner buffer */
memcpy(&p_nim->tuner.cx24128.viperparms, p_viperparms, sizeof(HAMARO_VIPERPARMS));
/* Read 0x10, and clear 0x10[6], 0x10[3:2], 0x10[0] */
if (HAMARO_TunerRegisterRead(p_nim, (unsigned short)(0x10), (unsigned long*)®_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
reg_value &= 0xB2;
/* Set pre-scaler mode. 0x10[6] */
switch(p_viperparms->PrescalerMode)
{
case True:
reg_val_temp = 0x40UL;
break;
case False:
reg_val_temp = 0x00UL;
break;
default:
return(False);
break;
}
reg_value |= reg_val_temp;
/* ICP manual level. It's O.K if manual level is undefined. 0x10[5:4] */
if (p_viperparms->ICPman != HAMARO_ICPMAN_UNDEF)
{
/* clear 0x10[5:4] */
reg_value &= 0xCF;
switch(p_viperparms->ICPman)
{
case HAMARO_ICPMAN_LEVEL1:
case HAMARO_ICPMAN_LEVEL2:
case HAMARO_ICPMAN_LEVEL3:
case HAMARO_ICPMAN_LEVEL4:
{
reg_val_temp = ((unsigned char)p_viperparms->ICPman << 4) & 0x30;
reg_value |= reg_val_temp;
break;
}
default:
{
return(False);
}
}
}
/* ICP digital. 0x10[3:2]*/
switch(p_viperparms->ICPdig)
{
case HAMARO_ICPDIG_LEVEL1:
case HAMARO_ICPDIG_LEVEL2:
case HAMARO_ICPDIG_LEVEL3:
case HAMARO_ICPDIG_LEVEL4:
{
reg_val_temp = ((unsigned char)p_viperparms->ICPdig << 2) & 0x0C;
reg_value |= reg_val_temp;
break;
}
default:
{
return(False);
}
}
/* Set ICP settings to tuner. 0x10[0] */
reg_val_temp = ((unsigned char)p_viperparms->ICPmode) & 0x01;
reg_value |= reg_val_temp;
/* write to 0x10 */
if (HAMARO_TunerRegisterWrite(p_nim, (unsigned short)(0x10), (unsigned long)reg_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
/* ICP auto level. */
switch(p_viperparms->ICPauto_Lo)
{
case HAMARO_ICPAUTO_LEVEL1:
case HAMARO_ICPAUTO_LEVEL2:
case HAMARO_ICPAUTO_LEVEL3:
case HAMARO_ICPAUTO_LEVEL4:
reg_value = p_viperparms->ICPauto_Lo; /* 0x11[1:0] */
break;
default:
{
return(False);
}
}
switch(p_viperparms->ICPauto_MedLo)
{
case HAMARO_ICPAUTO_LEVEL1:
case HAMARO_ICPAUTO_LEVEL2:
case HAMARO_ICPAUTO_LEVEL3:
case HAMARO_ICPAUTO_LEVEL4:
reg_value |= p_viperparms->ICPauto_MedLo << 2; /* 0x11[3:2] */
break;
default:
{
return(False);
}
}
switch(p_viperparms->ICPauto_MedHi)
{
case HAMARO_ICPAUTO_LEVEL1:
case HAMARO_ICPAUTO_LEVEL2:
case HAMARO_ICPAUTO_LEVEL3:
case HAMARO_ICPAUTO_LEVEL4:
reg_value |= p_viperparms->ICPauto_MedHi << 4; /* 0x11[5:4] */
break;
default:
{
return(False);
}
}
switch(p_viperparms->ICPauto_Hi)
{
case HAMARO_ICPAUTO_LEVEL1:
case HAMARO_ICPAUTO_LEVEL2:
case HAMARO_ICPAUTO_LEVEL3:
case HAMARO_ICPAUTO_LEVEL4:
reg_value |= p_viperparms->ICPauto_Hi << 6; /* 0x11[7:6] */
break;
default:
{
return(False);
}
}
/* write to 0x11[7:0] */
if (HAMARO_TunerRegisterWrite(p_nim, (unsigned short)(0x11), (unsigned long)reg_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
/* Read 0x12, and clear 0x12[7:4], 0x12[2] */
if (HAMARO_TunerRegisterRead(p_nim, (unsigned short)(0x12), (unsigned long*)®_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
reg_value &= 0x0B;
/* Set other VCO parameters. 0x12[7:4] */
reg_val_temp = (p_viperparms->Bsdelay << 4) & 0xF0;
reg_value |= reg_val_temp;
/* Analog CP ON. 0x12[2] */
reg_val_temp = ((unsigned char)p_viperparms->ACP_on << 2) & 0x04;
reg_value |= reg_val_temp;
if (HAMARO_TunerRegisterWrite(p_nim, (unsigned short)(0x12), (unsigned long)reg_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
/* Read 0x14, and clear 0x14[7:6], 0x14[4:0] */
if (HAMARO_TunerRegisterRead(p_nim, (unsigned short)(0x14), (unsigned long*)®_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
reg_value &= 0x20; /*clear 0x14[7:6], 0x14[4:0] */
/* Set VCO settings to tuner. */
switch(p_viperparms->VcoMode)
{
case HAMARO_VCOMODE_AUTO:
case HAMARO_VCOMODE_TEST:
reg_val_temp = ((unsigned char)p_viperparms->VcoMode << 6) & 0xC0; /* 0x14[7:6] */
reg_value |= reg_val_temp;/* 0x14[7:6] */ /* set the vco mode to the tuner */
break;
default:
return(False);
}
reg_val_temp = (p_viperparms->Bsfreqcnt >> 8) & 0x1F; /* 0x14[4:0] */
reg_value |= reg_val_temp;
if (HAMARO_TunerRegisterWrite(p_nim, (unsigned short)(0x14), (unsigned long)reg_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
/* Write 0x15[7:0] */
reg_value = (p_viperparms->Bsfreqcnt) & 0xFF; /* 0x15[7:0] */
if (HAMARO_TunerRegisterWrite(p_nim, (unsigned short)(0x15), (unsigned long)reg_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
/* write to 0x16[7:0] */
reg_value = (p_viperparms->Bsrdiv >> 4) & 0xFF;/*get 0x16[7:0] */
if (HAMARO_TunerRegisterWrite(p_nim, (unsigned short)(0x16), (unsigned long)reg_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
/* Read 0x17, and clear 0x17[7:4] */
if (HAMARO_TunerRegisterRead(p_nim, (unsigned short)(0x17), (unsigned long*)®_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
reg_value &= 0x0F; /* clear 0x17[7:4] */
reg_val_temp = (p_viperparms->Bsrdiv & 0x0F) << 4;/*get the high 4bits for 0x17[7:4] */
reg_value |= reg_val_temp;
if (HAMARO_TunerRegisterWrite(p_nim, (unsigned short)(0x17), (unsigned long)reg_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
/* Read 0x18, and clear 0x18[0] */
if (HAMARO_TunerRegisterRead(p_nim, (unsigned short)(0x18), (unsigned long*)®_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
reg_value &= 0xFE;
/* 0x18[0] */
switch(p_viperparms->Vcobs)
{
case HAMARO_VCOBANDSHIFT_HIGH:
case HAMARO_VCOBANDSHIFT_LOW:
reg_val_temp = (unsigned long)p_viperparms->Vcobs;
break;
default:
return(False);
}
reg_value |= reg_val_temp;
switch(p_viperparms->VcobandSel)
{
case HAMARO_VCOBANDSEL_1:
case HAMARO_VCOBANDSEL_2:
case HAMARO_VCOBANDSEL_3:
case HAMARO_VCOBANDSEL_4:
case HAMARO_VCOBANDSEL_5:
case HAMARO_VCOBANDSEL_6: /* -- Mongoose RevB -- */
reg_val_temp = (unsigned char)p_viperparms->VcobandSel;
break;
default:
return(False);
}
if (p_viperparms->VcobandSel == HAMARO_VCOBANDSEL_6)
{
/* clear 0x18[7] */
reg_value &= 0x7F;
reg_value |= (reg_val_temp << 7);
}
else
{
/* clear 0x18[5:1] */
reg_value &= 0xC1;
reg_value |= (reg_val_temp << 1);
}
if (HAMARO_TunerRegisterWrite(p_nim, (unsigned short)(0x18), (unsigned long)reg_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
/* Read 0x20, and clear 0x20[4] */
if (HAMARO_TunerRegisterRead(p_nim, (unsigned short)(0x20), (unsigned long*)®_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
reg_value &= 0xEF; /* clear 0x20[4] */
#if HAMARO_INCLUDE_RATTLER
/* Rattler specific */
if (p_nim->tuner_type == HAMARO_CX24113)
{
reg_value &= 0xFC;/* clear 0x20[1:0] */
switch(p_viperparms->lna_gain)
{
case HAMARO_LNA_MIN_GAIN:
case HAMARO_LNA_MID_GAIN:
case HAMARO_LNA_MAX_GAIN:
reg_val_temp= (unsigned char)p_viperparms->lna_gain;
break;
default:
{
return(False);
}
}
reg_value |= reg_val_temp;
}
#endif /* HAMARO_INCLUDE_RATTLER */
/* -- Mongoose RevB -- 0x20[4] */
reg_val_temp = ((p_viperparms->RFVGABiasControl == True) ? 0x01 : 0x00) << 4;
reg_value |= reg_val_temp;
if (HAMARO_TunerRegisterWrite(p_nim, (unsigned short)(0x20), (unsigned long)reg_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
return(True);
} /* HAMARO_TUNER_CX24128_SetParameters() */
/*******************************************************************************************************
* HAMARO_TUNER_CX24128_set_NFRregisters()
* function to set N, F, R registers in tuner
*******************************************************************************************************/
BOOL
HAMARO_TUNER_CX24128_SetNFRRegisters(HAMARO_NIM *p_nim, /* pointer to nim */
unsigned int nvalue, /* N register */
int fvalue, /* F register */
HAMARO_RDIVVAL rvalue) /* R register */
{
unsigned char reg_value, reg_vlue_temp;
unsigned long pllfreq;
unsigned long Nfrac;
HAMARO_BCDNO bcd;
/* save last n,a,r settings */
p_nim->tuner.cx24128.N = nvalue;
p_nim->tuner.cx24128.F = fvalue;
p_nim->tuner.cx24128.R = rvalue;
/* High 8bits of N will be set to 0x19 */
reg_value = (nvalue >>1) & 0xFF;
/* Write */
if(HAMARO_TunerRegisterWrite(p_nim, (unsigned short)(0x19), (unsigned long)reg_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
/* N[0] = 0x1A[7] F[17:11]=0x1A[6:0] */
reg_value = (nvalue & 0x01) << 7;
reg_vlue_temp = (fvalue >> 11) & 0x7F;
reg_value = reg_value | reg_vlue_temp;
if(HAMARO_TunerRegisterWrite(p_nim, (unsigned short)(0x1A), (unsigned long)reg_value, HAMARO_IO_UNKNOWN) != True)
{
return(False);
}
/* F[10:3]=0x1B[7:0] */
reg_value = (fvalue >> 3) & 0xFF;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?