コード例 #1
0
static int nmi_tnr_init(void *pv)
{
	tNmiDrv *pd = &drv;
	int result	= NMI_S_OK;
	tNmiIn inp;
	tTnrInit *p = (tTnrInit *)pv;

	if (!already_init) {
		nmi_memset((void *)pd, 0, sizeof(tNmiDrv));


		/**
			Asic Init
		**/
		nmi_memset((void *)&inp, 0, sizeof(tNmiIn));		
		inp.xo							= p->xo;
		inp.ldobypass				= p->ldobypass;
		inp.ai2c                    = p->i2c_adr;
		inp.zone                    = N_ERR|N_INFO;
		inp.hlp.c.write				= nmi_bus_write;
		inp.hlp.c.read				= nmi_bus_read;
		inp.hlp.c.getreadblksz      = nmi_bus_get_read_blksz;
		inp.hlp.c.getwriteblksz     = nmi_bus_get_write_blksz;
		inp.hlp.delay				= nmi_delay;
		inp.hlp.gettick				= nmi_get_tick;
		inp.hlp.log					= nmi_log;
		inp.init_bus_only           = p->init_bus_only;
		inp.xo_out_en               = p->xo_out_en;
		inp.ltGain                  = p->ltGain;
		inp.disableOneKhzShift      = p->disableOneKhzShift;

		nmi_common_init(&inp, &pd->tnr);
		//nmi_tuner_os_log("nmi_tnr_init 2\n");
		//print_32hex(pd->tnr.init);
 
		/**
			initialize chip
		**/
		if (pd->tnr.init() < 0) {
			//dPrint(N_ERR, "[NMI] Failed to initialize chip...\n");
			nmi_tuner_os_log("[NMI] Failed to initialize chip...\n");
			result = NMI_E_CHIP_INIT;
			goto _fail_;
		}

		/**
		    Get chip id
		**/
		pd->chipid = pd->tnr.getchipid();
		nmi_tuner_os_log("chip id:");
		print_32hex(pd->chipid);
		already_init = 1;
	}

_fail_:

	return result;
}
コード例 #2
0
uint32_t nmi_tuner_os_get_mutex(uint32_t * mutex)
{	
	uint32_t ret=FALSE;
	nmi_tuner_os_log("nmi_tuner_os_get_mutex in %d\n",*mutex);
	ret =  TRUE;//MsOS_ObtainMutex((_s32MutexId[*mutex]),0xFFFFFFFF);
	nmi_tuner_os_log("nmi_tuner_os_get_mutex out %d %d\n",ret,*mutex);
	//nmi_tuner_os_delay(2000);
	return ret;
}
コード例 #3
0
uint32_t Nmi_Tuner_Interface_init_chip(tTnrInit* pcfg)
{
    	int result;
	nmi_tuner_os_memset((void *)&gChipNowInfo, 0, sizeof(tNmiInterfaceGlobal));
	
	nmi_tuner_os_chip_power_on();
	nmi_tuner_os_chip_enable();

	result = nmi_drv_ctl(NMI_DRV_INIT, (void *)pcfg);
	
	if(result < 0)
	{
		nmi_tuner_os_log(">> NMI_DRV_INIT failed. result = %d\n", result);
		gChipNowInfo.bInit = FALSE;
		return FALSE;
	}
	//Leo else
	{
		uint32_t chipid;
		tNmiDriverVer ver;

		nmi_drv_ctl(NMI_DRV_VERSION, &ver);
		nmi_tuner_os_log("[NMI] driver version (%d.%d.%d.%d) build %d\n", ver.major, ver.minor, ver.rev1, ver.rev2, ver.buildrev);

		nmi_drv_ctl(NMI_DRV_GET_CHIPID, &chipid);
		nmi_tuner_os_log("[NMI] Chip ID:");
		nmi_tuner_os_log("%4x:",(uint16_t)(chipid>>16));
		nmi_tuner_os_log("%4x\n",(uint16_t)((chipid<<16)>>16));
		gChipNowInfo.chip_id =  chipid;

		
	}

	gChipNowInfo.bSleep = FALSE;
	gChipNowInfo.bInit = 	TRUE;
	gChipNowInfo.btuned = FALSE;
	gChipNowInfo.jiffies = nmi_tuner_os_get_tick();

	if(ISNM120(gChipNowInfo.chip_id))//only 120 
	{
		Nmi_Tuner_Interface_LoopThrough();
		nmi_tuner_os_log("before nmi_tuner_os_create_task\n");
		nmi_tuner_os_create_mutex(&gChipNowInfo.mutex);
		nmi_tuner_os_create_task((NmiTaskEntry)Nmi_Tuner_Task);
	}
 	
	return TRUE;
}
コード例 #4
0
int NMI120_GetRSSI(uint8_t outputChoice)
{
	int rssi;

	rssi = (int)Nmi_Tuner_Interface_GetRSSI();
	if (1 == outputChoice) // for percent value
	{
		if ((rssi<=0) && (rssi>=-100))
		{
			rssi = ABS(rssi);
            if(rssi>85)
                rssi = 0;
            else if(rssi > 45)
                rssi = (85-rssi)*100/40;
            else
                rssi = 100;
		}
		else
		{
			if (rssi > 0)
			{
				rssi = 100;
			}

			if (rssi < -100)
			{
				rssi = 0;
			}
		}
	}
    nmi_tuner_os_log("[NMI]SSI=%d\n",rssi);
	return rssi;
}
コード例 #5
0
MS_U32 MDrv_Tuner_SetTuner(MS_U32 dwFreq, MS_U8 ucBw)
{
	uint8_t type=NMI_DVBT2;
/*	if(E_TUNE_TYPE_T2 == MDrv_Tuner_GetTuneType())
		type = NMI_DVBT2;
	else
		type = NMI_DVBT;*/
	nmi_tuner_os_log("120 set tuner dwFreq(%d),ucBw(%d)\n",dwFreq,ucBw);
	return MDrv_NMI120_Tuner_SetTuner(dwFreq,ucBw,type);
}
コード例 #6
0
void Nmi_Tuner_Interface_Sleep_Lt(void)
{
	gChipNowInfo.bSleep = TRUE;
	/*if(ISNM120(gChipNowInfo.chip_id))//only 120 
	{
		nmi_tuner_os_delete_task();
		nmi_tuner_os_log("nmi_tuner_os_delete_task~~~~~~~~111111111111~~~~~~~\n");
	}*/
	nmi_tuner_os_log("Nmi_Tuner_Interface_Sleep_Lt ~~~~~~~~~~~~\n");
	nmi_drv_ctl(NMI_DRV_SLEEP_LT, NULL);
}
コード例 #7
0
uint8_t nmi_tuner_os_reset_demod(uint32_t freq)
{
#if 0
	extern DEMOD_MS_FE_CARRIER_PARAM _demod_param_120;
	extern MS_BOOL MDrv_Demod_Restart(DEMOD_MS_FE_CARRIER_PARAM *pParam);
	_demod_param_120.u32Frequency = (uint32_t)(freq/1000);
	MDrv_Demod_Restart(&_demod_param_120);
	nmi_tuner_os_log("nmi_tuner_os_reset_demod,freq\n");
#endif
	return TRUE;
}
コード例 #8
0
uint32_t Nmi_Tuner_Interface_deinit_chip(void)
{
	if(ISNM120(gChipNowInfo.chip_id))//only 120 
	{
		nmi_tuner_os_log("Nmi_Tuner_Interface_deinit_chip\n");
		nmi_tuner_os_delete_task();
		nmi_tuner_os_delete_mutex(&gChipNowInfo.mutex);
	}
	
	nmi_drv_ctl(NMI_DRV_DEINIT, NULL);
	nmi_tuner_os_chip_power_off();
	gChipNowInfo.bSleep = FALSE;
	gChipNowInfo.bInit =   FALSE;
	gChipNowInfo.btuned = FALSE;
	return TRUE;
}
コード例 #9
0
uint8_t Nmi_Tuner_Interface_Tuning(tNMI_TUNE_PARAM* param)
{
	uint8_t ret;

	if(!nmi_tuner_os_get_mutex(&gChipNowInfo.mutex))
	{
		nmi_tuner_os_log("Obtain NMI Mutex failed\n");
		return FALSE;
	}
	
	gChipNowInfo.bdemodlock = FALSE;
	ret = Nmi_Tuner_Interface_SelfTune(param);
	gChipNowInfo.btuned = TRUE;
	nmi_tuner_os_memcpy((void*)&gChipNowInfo.orgparam,param,sizeof(tNMI_TUNE_PARAM));

	nmi_tuner_os_release_mutex(&gChipNowInfo.mutex);
	
	return ret;
}
コード例 #10
0
static void Nmi_Tuner_Task(void)
{
	while(gChipNowInfo.bInit)
	{
		nmi_tuner_os_delay(130);//ms
		
		//if(gChipNowInfo.bInit != TRUE)
		//	break;
		if(TRUE == gChipNowInfo.bSleep)
		{
			nmi_tuner_os_log("NMI task break for sleep!!!!\n");
			break;
		}
		//nmi_tuner_os_log("task work~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
		//if(gChipNowInfo.currentparam.tvstd == NMI_DVBT || gChipNowInfo.currentparam.tvstd == NMI_DVBT2)
		{
			Nmi_Tuner_Interface_poll();	
		}
	}
}
コード例 #11
0
ファイル: NMI120.c プロジェクト: mrtos/gk6105s-id
uint8_t NMI120_MDrv_Tuner_Init(void)
{
	uint32_t chipid;
	tTnrInit cfg;
	uint32_t ret;
	tTnrLtCtrl lpthru;
	cfg.ldobypass = 0;
	cfg.xo = 24;
	cfg.i2c_adr = 0xce;//0xce;
	cfg.init_bus_only = 0;
	cfg.xo_out_en = XO_OUT_EN;
	cfg.disableOneKhzShift = TRUE;//FALSE for nmi130; TRUE otherwise
	cfg.ltGain = nLtGainMax;

	ret = Nmi_Tuner_Interface_init_chip(&cfg);
	if(ret == FALSE)
	{
		return FALSE;
	}
	else
	{
		chipid = Getchipid();		
	}

	
	lpthru.enable = 0;
	//ret = nmi_drv_ctl(NMI_DRV_LT_CTRL, &lpthru);

	if(ret < 0)
	{
		nmi_tuner_os_log(">> NMI_DRV_LT_CTRL failed.");
	}

	//nmi_drv_ctl(NMI_DRV_WAKE_UP_LT, NULL); //wood, ++, @20120427, must be called if NMI_DRV_SLEEP_LT last time and no power on reset

	return TRUE;
}
コード例 #12
0
uint8_t MDrv_NMI120_Tuner_SetTuner(uint32_t dwFreq, uint8_t ucBw,uint8_t type)//MHZ
{
	tNMI_TUNE_PARAM param;
	uint8_t ret = FALSE;

	nmi_tuner_os_memset((void *)&param, 0x00, sizeof(tNMI_TUNE_PARAM));

	param.freq = dwFreq;//hz
	param.if_freq = 5000000;
	param.dacsel =  nDac2;
	param.if_freq_invert = FALSE;
	param.freq_invert = FALSE;
	param.ucBw = ucBw;
	param.output = nIf;
	param.freq_invert = FALSE;
	param.tvstd       = type;	//NMI_DVBT;

	if(param.tvstd == NMI_DVBT || param.tvstd == NMI_DVBT2)
		nmi_tuner_os_memcpy((void*)&param.poll_param,&SwrfliArg,sizeof(tNmiSwrfliArg));
	if(param.tvstd == NMI_DVBT2)
	{
		param.scan_aci[0] = 0x07;//6mhz
		param.scan_aci[1] = 0x0a;//7mhz
		param.scan_aci[2] = 0x04;//8mhz
		
		param.play_aci[0] = 0x07;//6mhz
		param.play_aci[1] = 0x0a;//7mhz
		param.play_aci[2] = 0x04;//8mhz
	}	
	else if(param.tvstd == NMI_DVBT || param.tvstd == NMI_DVBC)
	{
		param.scan_aci[0] = 0x07;//6mhz
		param.scan_aci[1] = 0x0a;//7mhz
		param.scan_aci[2] = 0x04;//8mhz
		
		param.play_aci[0] = 0x07;//6mhz
		param.play_aci[1] = 0x0a;//7mhz
		param.play_aci[2] = 0x04;//8mhz
	}	
	else
	{
		param.scan_aci[0] = 0x01;//6mhz
		param.scan_aci[1] = 0x03;//7mhz
		param.scan_aci[2] = 0x05;//8mhz
		
		param.play_aci[0] = 0x01;//6mhz
		param.play_aci[1] = 0x03;//7mhz
		param.play_aci[2] = 0x05;//8mhz
	}
	nmi_tuner_os_log("tune: rf=%d, if=%d, bw=%d, tvstd=%d\n", param.freq, param.if_freq, param.ucBw, param.tvstd);
	ret = Nmi_Tuner_Interface_Tuning(&param);

	Nmi_Tuner_Interface_Wreg(0x35,0x18);//0x18 ~ 0x10, 0x5f~ 0x50
	Nmi_Tuner_Interface_Wreg(0x164,0x400);

	if((param.freq >666000000-1500000) &&(param.freq <666000000+1500000))
	{
		Nmi_Tuner_Interface_Wreg(0x05,0x5);
	}

	return ret;

}
コード例 #13
0
static bool_t  Nmi_Tuner_Interface_poll(void)
{
	static uint32_t lockdelay = 0;
	static uint32_t nmi_times=0;
	static uint8_t start_polling = 0;	
	bool_t lock_status;
	nmi_tuner_os_log("Nmi_Tuner_Interface_call_every100ms ~~~\n");
	nmi_tuner_os_log("start_polling(%d)\n",start_polling);

	if(!gChipNowInfo.btuned)
		return FALSE;

	//if(gChipNowInfo.orgparam.tvstd != NMI_DVBT && gChipNowInfo.orgparam.tvstd != NMI_DVBT2)
	//	return FALSE;
	
	lock_status = nmi_tuner_os_get_demod_lock();
	{
		static uint32_t temp_times=0;
		if(start_polling == 1)
		{
			if(0 == nmi_times%2)
			{
				nmi_tuner_os_change_iic_mode(TRUE);
				nm120_rfli_track();
				nmi_tuner_os_log("poll is called \n");
				nmi_tuner_os_change_iic_mode(FALSE);
			}
		    nmi_times++;	
		}
		temp_times++;
	}
		

	if(gChipNowInfo.orgparam.freq != gChipNowInfo.currentparam.freq)
	{
		if(nmi_tuner_os_get_tick()- gChipNowInfo.jiffies<NML120_MAX_RESET_WAITTIME)
		{
			return TRUE;
		}
	}
		
	if(lock_status)//Ƶƫ´¦Àí
	{
		float pFreqOff;	

		nmi_tuner_os_Get_FreqOffset(&pFreqOff, gChipNowInfo.currentparam.ucBw);
		nmi_tuner_os_log("pFreqOff(%f)\n",pFreqOff);	
			
		if(((pFreqOff>10)||(pFreqOff<-10))&&start_polling)
		{
			nmi_tuner_os_log("\n#####offset:%f",pFreqOff);
			if(Nmi_Tuner_Interface_Retune(pFreqOff))
			{
				nmi_tuner_os_log("\n#####reset offset:%f",pFreqOff);				   
				gChipNowInfo.jiffies = nmi_tuner_os_get_tick();
				return TRUE;
			}
		}		
	}
#if 1

	if(lock_status)  //reset ÖØÖòÙ×÷
	{
		uint16_t u16_data;
		static uint32_t tune_120_rest_time =0;
		lockdelay++;
		if(lockdelay<50)
		{
			return TRUE;
		}
		
		nmi_tuner_os_Get_Packet_Error(&u16_data);
		
		nmi_tuner_os_log("u16_data(%d)\n",u16_data);
		if(u16_data!=0)
		{
			start_polling = 1;
			tune_120_rest_time++;
			if(tune_120_rest_time>=TUNER_NML120_MAX_TIME)
			{
				tune_120_rest_time = 0;

				nmi_tuner_os_change_iic_mode(TRUE);
				NM120_ACI_Change(TRUE);
				Nmi_Tuner_Interface_Reset_Moaic();
				nmi_tuner_os_change_iic_mode(FALSE);
				//nmi_tuner_os_reset_demod(gChipNowInfo.currentparam.freq);
				nmi_tuner_os_log("\n##############packeterr_reset1######");
			
				gChipNowInfo.jiffies = nmi_tuner_os_get_tick()-2000;				
			}
		}
		
	}
	else
	{
		static int temp= 0;
		if(temp>=20)
		{
			nmi_tuner_os_change_iic_mode(TRUE);
			NM120_ACI_Change(FALSE);
			Nmi_Tuner_Interface_Reset_Moaic();
			nmi_tuner_os_change_iic_mode(FALSE);
			nmi_tuner_os_reset_demod(gChipNowInfo.currentparam.freq);
			nmi_tuner_os_log("\n##############packeterr_reset2######");

			temp= 0;
		}
		temp++;

	}
#endif

	return TRUE;
}
コード例 #14
0
static uint8_t Nmi_Tuner_Interface_SelfTune(tNMI_TUNE_PARAM* param)
{
	uint8_t ret = TRUE;
	tTnrTune tune;

	nmi_tuner_os_memset((void *)&tune, 0x00, sizeof(tTnrTune));
	tune.aif = param->aif;
	tune.dacSel = param->dacsel;
	tune.is_stereo = param->is_stereo;
	tune.output = param->output;
	tune.rf = param->freq;
	tune.vif = param->if_freq;
	tune.rfinvert = param->freq_invert;
		
	switch(param->tvstd)
	{
		case NMI_NTSC: 
			{
			    //add codes	
				tune.std = nNTSC;
			}
			break;
		case NMI_PAL_G: 
			{
			    //add codes	
			}
			break;
		case NMI_PAL_M: 
			{
			    //add codes	
			}
			break;
		case NMI_PAL_N: 
			{
			    //add codes	
			}
			break;
		case NMI_PAL_K: 
			{
			    //add codes	
			}
			break;
		case NMI_PAL_L: 
			{
			    //add codes	
			}
			break;
		case NMI_PAL_D: 
			{
			    //add codes	
			}
			break;
		case NMI_SECAM_L: 
			{
			    //add codes	
			}
			break;
		case NMI_SECAM_B: 
			{
			    //add codes	
			}
			break;
		case NMI_SECAM_D: 
			{
			    //add codes	
			}
			break;
		case NMI_ATSC_8VSB: 
		case NMI_ATSC_64QAM: 
		case NMI_ATSC_256QAM: 
			{
			    //add codes
				nmi_tuner_os_log("mode NMI_ATSC %d\n",param->ucBw);
			    	switch(param->ucBw)
				{
					case 0:
					case 6: tune.std = nDTV_6; break;
					case 1:
					case 7: tune.std = nDTV_7; break;
					case 2:
					case 8:
					default:
					tune.std = nDTV_8; break;
				}
			}
			break;
		case NMI_DVBT: 
		case NMI_DVBT2: 
			{
			    //add codes	
				switch(param->ucBw)
				{
					case 0:
					case 6: tune.std = nDTV_6; break;
					case 1:
					case 7: tune.std = nDTV_7; break;
					case 2:
					case 8:
					default:
					tune.std = nDTV_8; break;
				}
			}
			break;
		case NMI_DVBC:
			{
				//add codes	
				uint32_t tempfreq;
				tempfreq = tune.rf/1000000;
				if(tempfreq%3 != 0)
				{
					tune.rf = tune.rf + 1000;
				}

				switch(param->ucBw)
				{
					case 0:
					case 6: tune.std = nDTV_6; break;
					case 1:
					case 7: tune.std = nDTV_7; break;
					case 2:
					case 8:
					default:
					tune.std = nDTV_8; break;
				}
			}
			break;
		case NMI_DTMB: 
			{
			    //add codes	
				switch(param->ucBw)
				{
					case 0:
					case 6: tune.std = nDTV_6; break;
					case 1:
					case 7: tune.std = nDTV_7; break;
					case 2:
					case 8:
					default:
					tune.std = nDTV_8; break;
				}
			}
			break;
		case NMI_ISDBT: 
			{
			    //add codes	
			}
			break;
		default: 
			{
			    //add codes	
			}
			break;
	}

	if(param->tvstd <= NMI_SECAM_D &&( param->output == nCvbsSif || param->output == nCvbsBBAud))
	{
		if(nmi_drv_ctl(NMI_DRV_TUNE, &tune) == 0)
		{
			nmi_tuner_os_log("\n tuneFail......\n");
			ret =  FALSE;
		}
	}
      else
      	{
      		if(nmi_drv_ctl(NMI_DRV_TUNE, &tune) < 0)
		{
			nmi_tuner_os_log("\n tuneFail......\n");
			ret = FALSE;
		}
			
		if(param->if_freq_invert == TRUE)
		{
			int spectrum = 1;
			nmi_drv_ctl(NMI_DRV_INVERT_SPECTRUM, (void *)(&spectrum));
			nmi_tuner_os_log("\n swan if invert \n");
		}
      	}
	if(param->tvstd == NMI_DVBC)//yao jin  masic bugs  //swan 2012_5_14  honestar
	{
		uint32_t tempfreq;
		tempfreq = tune.rf/1000000;
		if(tempfreq%3 == 0)
		{
			Nmi_Tuner_Interface_Wreg(0x1b,0x08);
		}
		else
		{
			Nmi_Tuner_Interface_Wreg(0x1b,0x0e);
		}
		if(tempfreq<726)
		{
			if(tempfreq == 602 || tempfreq ==650  || tempfreq ==690  || tempfreq ==698 || tempfreq ==706)
			{
				Nmi_Tuner_Interface_Wreg(0x05,0x85);
			}
			else
			{
				Nmi_Tuner_Interface_Wreg(0x05,0x05);
			}
		}
		else
		{
				Nmi_Tuner_Interface_Wreg(0x05,0x85);
		}
	}
	if(param->tvstd == NMI_DTMB)//swan 2012_6_1  honestar for C/N
	{
		Nmi_Tuner_Interface_Wreg(0x0e,0x25);
	}
	nmi_tuner_os_log("gChipNowInfo.currentparam.freq(%d) \n",gChipNowInfo.currentparam.freq);
	nmi_tuner_os_memcpy((void*)&gChipNowInfo.currentparam,param,sizeof(tNMI_TUNE_PARAM));

	return ret;
}