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

📄 hamaro_cx24128.c

📁 机顶盒Hamaro解调器驱动。包含自动搜台
💻 C
📖 第 1 页 / 共 5 页
字号:
			}
		}
		if (HAMARO_RegisterWrite(p_nim, (unsigned short)(HAMARO_CX24128_ICP_MAN), reg_value, p_nim->tuner.cx24128.io_method) != 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 = (unsigned long)p_viperparms->ICPauto_Lo;
			break;
		default:
		{
			/* Need define a new ERROR number. */
			//HAMARO_DRIVER_SET_ERROR(p_nim,HAMARO_TUNERREF);
			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 |= (unsigned long)p_viperparms->ICPauto_MedLo << 2UL;
			break;
		default:
		{
			/* Need define a new ERROR number. */
			//HAMARO_DRIVER_SET_ERROR(p_nim,HAMARO_TUNERREF);
			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 |= (unsigned long)p_viperparms->ICPauto_MedHi << 4UL;
			break;
		default:
		{
			/* Need define a new ERROR number. */
			//HAMARO_DRIVER_SET_ERROR(p_nim,HAMARO_TUNERREF);
			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 |= (unsigned long)p_viperparms->ICPauto_Hi << 6UL;
			break;
		default:
		{
			/* Need define a new ERROR number. */
			//HAMARO_DRIVER_SET_ERROR(p_nim,HAMARO_TUNERREF);
			return(False);
		}
	}

	if (HAMARO_RegisterWrite(p_nim, (unsigned short)(HAMARO_CX24128_ICP_LEVEL), reg_value, p_nim->tuner.cx24128.io_method) != True)  
	{
		return(False);
	}
  
	/* ICP digital. */
	switch(p_viperparms->ICPdig)
	{
		case HAMARO_ICPDIG_LEVEL1:
		case HAMARO_ICPDIG_LEVEL2:
		case HAMARO_ICPDIG_LEVEL3:
		case HAMARO_ICPDIG_LEVEL4:
			reg_value = (unsigned long)p_viperparms->ICPdig;
			break;
		default:
		{
			/* Need define a new ERROR number. */
			//HAMARO_DRIVER_SET_ERROR(p_nim,HAMARO_TUNERREF);
			return(False);
		}
	}
	if (HAMARO_RegisterWrite(p_nim, (unsigned short)(HAMARO_CX24128_IDIG_SEL), reg_value, p_nim->tuner.cx24128.io_method) != True)  
	{
		return(False);
	}

#if HAMARO_INCLUDE_RATTLER
         /* Rattler specific */
         if (p_nim->tuner_type == HAMARO_CX24113)
         {
             switch(p_viperparms->lna_gain)
             {
     	        case HAMARO_LNA_MIN_GAIN:
     	        case HAMARO_LNA_MID_GAIN:
     	        case HAMARO_LNA_MAX_GAIN:
     		        reg_value = (unsigned long)p_viperparms->lna_gain;
     		        break;
     	        default:
     	        {
     		        return(False);
     	        }
             }
             if (HAMARO_RegisterWrite(p_nim, (unsigned short)(HAMARO_CX24128_LNA_GC), reg_value, p_nim->tuner.cx24128.io_method) != True)  
             {
     	        return(False);
             }
         }
#endif /* HAMARO_INCLUDE_RATTLER */

	/* Analog CP ON. */
	reg_value = (unsigned long)p_viperparms->ACP_on;

	if (HAMARO_RegisterWrite(p_nim, (unsigned short)(HAMARO_CX24128_ACP_ON_ALW), reg_value, p_nim->tuner.cx24128.io_method) != True)  
	{
		return(False);
	}

	/* Set VCO settings to tuner. */
	switch(p_viperparms->VcoMode)
	{
		case HAMARO_VCOMODE_AUTO:
		case HAMARO_VCOMODE_TEST:
			reg_value = (unsigned long)p_viperparms->VcoMode;
			break;
		default:
			//HAMARO_DRIVER_SET_ERROR(p_nim,HAMARO_TUNERREF); /* need define a new err number. */
			return(False);
	}

	/* set the vco mode to the tuner */
	if (HAMARO_RegisterWrite(p_nim, (unsigned short)(HAMARO_CX24128_BS_VCOMT), reg_value, p_nim->tuner.cx24128.io_method) != True)  
	{
		return(False);
	}

	switch(p_viperparms->Vcobs)
	{
	case HAMARO_VCOBANDSHIFT_HIGH:
	case HAMARO_VCOBANDSHIFT_LOW:
		reg_value = (unsigned long)p_viperparms->Vcobs;
		break;
	default:
		//HAMARO_DRIVER_SET_ERROR(p_nim,HAMARO_TUNERREF); /* need define a new err number. */
		return(False);
	}

	/* set the vco band shift to the tuner */
	if(HAMARO_RegisterWrite(p_nim, (unsigned short)(HAMARO_CX24128_VCO_BSH_SPI), reg_value, p_nim->tuner.cx24128.io_method) != True)  
	{
		return(False);
	}
  
	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_value = (unsigned long)p_viperparms->VcobandSel;
			break;
		default:
			//HAMARO_DRIVER_SET_ERROR(p_nim,HAMARO_TUNERREF); /* need define a new err number. */
			return(False);
	}

    /* set the vco band shift to the tuner */
    if (p_viperparms->VcobandSel == HAMARO_VCOBANDSEL_6)
    {
	    if (HAMARO_RegisterWrite(p_nim, (unsigned short)(HAMARO_CX24128_VCO6_SEL_SPI), reg_value, p_nim->tuner.cx24128.io_method) != True)                  
	    {
		    return(False);
	    }
    }
    else
    {
	    if (HAMARO_RegisterWrite(p_nim, (unsigned short)(HAMARO_CX24128_VCO_SEL_SPI), reg_value, p_nim->tuner.cx24128.io_method) != True)  
	    {
		    return(False);
	    }
    }

	/* Set other VCO parameters. */
	reg_value = (unsigned long)p_viperparms->Bsdelay;
	if (HAMARO_RegisterWrite(p_nim, (unsigned short)(HAMARO_CX24128_BS_DELAY), reg_value, p_nim->tuner.cx24128.io_method) != True)  
	{
		return(False);
	}

	reg_value = (unsigned long)p_viperparms->Bsfreqcnt;
	if (HAMARO_RegisterWrite(p_nim, (unsigned short)(HAMARO_CX24128_BS_FREQ), reg_value, p_nim->tuner.cx24128.io_method) != True)  
	{
		return(False);
	}

	reg_value = (unsigned long)p_viperparms->Bsrdiv;
	if (HAMARO_RegisterWrite(p_nim, (unsigned short)(HAMARO_CX24128_BS_DIV_CNT), reg_value, p_nim->tuner.cx24128.io_method) != True)  
	{
		return(False);
	}
     
	/* Set pre-scaler mode. */
	switch(p_viperparms->PrescalerMode)
	{
		case True:
			reg_value = 0x01UL;
			break;
		case False:
			reg_value = 0x00UL;
			break;
		default:
			//HAMARO_DRIVER_SET_ERROR(p_nim,HAMARO_TUNERREF); /* need define a new err number. */
			return(False);
			break;
	}

	if (HAMARO_RegisterWrite(p_nim, (unsigned short)(HAMARO_CX24128_PS_TEST), reg_value, p_nim->tuner.cx24128.io_method) != True)  
	{
		return(False);
	}

         /* -- Mongoose RevB -- */
         reg_value = (p_viperparms->RFVGABiasControl == True) ? 0x01 : 0x00;
         if (HAMARO_RegisterWrite(p_nim, (unsigned short)(HAMARO_CX24128_RFBC_DISABLE), reg_value, p_nim->tuner.cx24128.io_method) != 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 long 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;
         if(HAMARO_TunerRegisterWrite(p_nim, (unsigned short)(0x1B), (unsigned long)reg_value, HAMARO_IO_UNKNOWN) != True) 
         {
            return(False);
         }
         
         /* F[2:0]=0x1C[7:5] */
         reg_vlue_temp = (fvalue <<5) & 0xE0;
         if(HAMARO_TunerRegisterRead(p_nim, (unsigned short)(0x1C), (unsigned long*)&reg_value, HAMARO_IO_UNKNOWN)!= True)
         {
            return(False);
         }
         reg_value = reg_value & 0x1F;
         reg_value |= reg_vlue_temp;
         if(HAMARO_TunerRegisterWrite(p_nim, (unsigned short)(0x1C), (unsigned long)reg_value, HAMARO_IO_UNKNOWN) != True) 
         {
            return(False);
         }
         
         
         reg_value = (unsigned long)(rvalue - 1);
         
         if (HAMARO_TUNER_CX24128_SetReferenceFreq(p_nim, (HAMARO_RFREQVAL)reg_value) == False)
         {
            return (False);
         }


	/* multiplication factor of 10000 is used to improve precision */
	Nfrac = ( (fvalue * 10000L) / HAMARO_CX24128_DIVIDER) + (nvalue * 10000UL) + (32UL * 10000UL);

	HAMARO_BCD_set(&bcd, (p_nim->tuner_crystal_freq / p_nim->tuner.cx24128.R));


	HAMARO_BCD_mult(&bcd, Nfrac);
	HAMARO_BCD_mult(&bcd, 2);
	HAMARO_BCD_div(&bcd, 10000);

	HAMARO_BCD_div(&bcd, p_nim->tuner.cx24128.vcodiv);
    	if ((p_nim->tuner_crystal_freq) / HAMARO_MM >= 20)
	{
		HAMARO_BCD_mult(&bcd, 2);
	}

	pllfreq = HAMARO_BCD_out(&bcd); 

	/* Now tuner is set to a new frequency. */
	p_nim->pll_frequency = pllfreq;

	return(True);
}  /* HAMARO_TUNER_CX24128_set_NFRregisters() */


/*******************************************************************************************************
 * HAMARO_TUNER_CX24128_SetFrequency() 
 * Set specified tuner pll frequency 
 ******************************************************************************************************/
BOOL           
HAMARO_TUNER_CX24128_SetFrequency(HAMARO_NIM      *p_nim, /* pointer to nim */
                                 unsigned long  frequency) /* pointer to unsigned long  */
{
    unsigned short nvalue;
    int   fvalue;
    unsigned long  reg_value;

    HAMARO_TUNER_CX24128_VALIDATE(p_nim);

    HAMARO_CX24128_refresh_tuner_pll_lock = True;

    p_nim->pll_frequency = frequency;

    /* Switch to normal mode: set 0x14[7:6] to 0x00 */
    /* Read 0x14, and clear 0x14[7:6] */
    if (HAMARO_TunerRegisterRead(p_nim, (unsigned short)(0x14), (unsigned long*)&reg_value, HAMARO_IO_UNKNOWN) != True)  
    {
         return(False);
    }
    reg_value &= 0x3F; 
    
    if (HAMARO_TunerRegisterWrite(p_nim, (unsigned short)(0x14), (unsigned long)reg_value, HAMARO_IO_UNKNOWN) != True)  
    {
         return(False); 
    }

⌨️ 快捷键说明

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