int Si4709_dev_chan_select(u32 frequency) { int ret = 0; debug("Si4709_dev_chan_select called"); if (Si4709_dev.valid == eFALSE) { debug("Si4709_dev_chan_select called when DS is invalid"); ret = -1; } else { Si4709_dev.state.seek_state = RADIO_SEEK_ON; ret = tune_freq(frequency); debug("Si4709_dev_chan_select called1"); Si4709_dev.state.seek_state = RADIO_SEEK_OFF; } return ret; }
int Si47xx_dev_powerup(void) { int ret = 0; u32 value = 100; debug("Si47xx_dev_powerup called"); if (!(RADIO_ON == Si47xx_dev->state.power_state)) { ret = powerup(); if (ret < 0) { dev_err(Si47xx_dev->dev, "%s failed %d\n", __func__, ret); } else if (Si47xx_dev->valid_client_state == eFALSE) { dev_err(Si47xx_dev->dev, "Si47xx_dev_powerup called " "when DS(state, client) is invalid"); ret = -1; } else { /* initial settings */ #ifdef CONFIG_RADIO_USE_MI2S si47xx_set_property(DIGITAL_OUTPUT_SAMPLE_RATE, 0xBB80); //44100 si47xx_set_property(DIGITAL_OUTPUT_FORMAT, 0x0000); //I2S, 16bit, Riging edge #endif #ifdef _ENABLE_RDS_ si47xx_set_property(FM_RDS_CONFIG, 1); si47xx_set_property(GPO_IEN, GPO_IEN_STCIEN_MASK | GPO_IEN_STCREP_MASK); si47xx_set_property(GPO_IEN, GPO_IEN_STCIEN_MASK | GPO_IEN_RDSIEN_MASK | GPO_IEN_STCREP_MASK); si47xx_set_property(FM_RDS_INTERRUPT_SOURCE, FM_RDS_INTERRUPT_SOURCE_RECV_MASK); si47xx_set_property(FM_RDS_CONFIG, FM_RDS_CONFIG_RDSEN_MASK | (3 << FM_RDS_CONFIG_BLETHA_SHFT) | (3 << FM_RDS_CONFIG_BLETHB_SHFT) | (3 << FM_RDS_CONFIG_BLETHC_SHFT) | (3 << FM_RDS_CONFIG_BLETHD_SHFT)); #endif /*VNVS:18-NOV'09 : Setting DE-Time Constant as 50us(Europe,Japan,Australia)*/ si47xx_set_property(FM_DEEMPHASIS, FM_DEEMPH_50US); /* SYSCONFIG2_BITSET_SEEKTH( */ /* &Si47xx_dev->registers[SYSCONFIG2],2); */ /*VNVS:18-NOV'09 : modified for detecting more stations of good quality*/ si47xx_set_property(FM_SEEK_TUNE_RSSI_THRESHOLD, TUNE_RSSI_THRESHOLD); si47xx_set_property(FM_SEEK_BAND_BOTTOM, 8750); si47xx_set_property(FM_SEEK_BAND_TOP, 10800); Si47xx_dev->settings.band = BAND_87500_108000_kHz; Si47xx_dev->settings.bottom_of_band = FREQ_87500_kHz; si47xx_set_property(FM_SEEK_FREQ_SPACING, CHAN_SPACING_100_kHz); Si47xx_dev->settings.channel_spacing = CHAN_SPACING_100_kHz; /* SYSCONFIG3_BITSET_SKSNR( */ /* &Si47xx_dev->registers[SYSCONFIG3],3); */ /*VNVS:18-NOV'09 : modified for detecting more stations of good quality*/ si47xx_set_property(FM_SEEK_TUNE_SNR_THRESHOLD, TUNE_SNR_THRESHOLD); Si47xx_dev->settings.timeout_RDS = msecs_to_jiffies(value); Si47xx_dev->settings.curr_snr = TUNE_SNR_THRESHOLD; Si47xx_dev->settings.curr_rssi_th = TUNE_RSSI_THRESHOLD; Si47xx_dev->valid = eTRUE; Si47xx_dev_STEREO_SET(); #ifdef RDS_INTERRUPT_ON_ALWAYS /*Initialising read and write indices */ RDS_Buffer_Index_read = 0; RDS_Buffer_Index_write = 0; RDS_Data_Available = 0; RDS_Data_Lost = 0; RDS_Groups_Available_till_now = 0; #endif } } else debug("Device already Powered-ON"); ret = request_irq(si47xx_irq, Si47xx_isr, IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, "Si47xx", NULL); si47xx_set_property(0xff00, 0); /* tune initial frequency to remove tunestatus func err * sometimes occur tunestatus func err when execute tunestatus function * before to complete tune_freq. * so run tune_freq just after to complete booting sequence*/ ret = tune_freq(Si47xx_dev->settings.bottom_of_band); return ret; }