mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-11-09 21:22:39 -05:00
Move radio power handling from apps/ to drivers.
Remove direct calls to tuner_power(...) in apps/ and let the driver manage tuner power with the RADIO_SLEEP setting. Change-Id: I37cd0472e60db5d666dae1b9fe4755dd65c03edd Reviewed-on: http://gerrit.rockbox.org/84 Reviewed-by: Amaury Pouly <amaury.pouly@gmail.com>
This commit is contained in:
parent
58b226edc5
commit
906e90eb7b
8 changed files with 39 additions and 41 deletions
|
|
@ -192,9 +192,6 @@ void radio_start(void)
|
|||
/* clear flag before any yielding */
|
||||
radio_status &= ~FMRADIO_START_PAUSED;
|
||||
|
||||
if(radio_status == FMRADIO_OFF)
|
||||
tuner_power(true);
|
||||
|
||||
curr_freq = global_status.last_frequency * fmr->freq_step + fmr->freq_min;
|
||||
|
||||
tuner_set(RADIO_SLEEP, 0); /* wake up the tuner */
|
||||
|
|
@ -246,9 +243,6 @@ void radio_pause(void)
|
|||
}
|
||||
|
||||
tuner_set(RADIO_MUTE, 1);
|
||||
/* For si4700: 2==this is really 'pause'. other tuners treat it
|
||||
* like 'bool'. */
|
||||
tuner_set(RADIO_SLEEP, 2);
|
||||
|
||||
radio_status = FMRADIO_PAUSED;
|
||||
} /* radio_pause */
|
||||
|
|
@ -258,7 +252,6 @@ static void radio_off(void)
|
|||
tuner_set(RADIO_MUTE, 1);
|
||||
tuner_set(RADIO_SLEEP, 1); /* low power mode, if available */
|
||||
radio_status = FMRADIO_OFF;
|
||||
tuner_power(false); /* status update, power off if avail. */
|
||||
}
|
||||
|
||||
void radio_stop(void)
|
||||
|
|
|
|||
|
|
@ -31,8 +31,6 @@
|
|||
#include "settings.h"
|
||||
#include "power.h"
|
||||
|
||||
static bool powered = false;
|
||||
|
||||
static unsigned char tuner_param = 0x00, old_tuner_param = 0xFF;
|
||||
/* temp var for tests to avoid looping execution in submenus settings*/
|
||||
static int mono_mode = -1, old_region = -1;
|
||||
|
|
@ -150,7 +148,6 @@ static void rmt_tuner_scan(int param)
|
|||
iap_send_pkt(data1, sizeof(data1));
|
||||
}
|
||||
|
||||
#if 0 /* function is not used */
|
||||
static void rmt_tuner_mute(int value)
|
||||
{
|
||||
/* mute flag off (play) */
|
||||
|
|
@ -162,7 +159,6 @@ static void rmt_tuner_mute(int value)
|
|||
}
|
||||
iap_send_pkt(data, sizeof(data));
|
||||
}
|
||||
#endif
|
||||
|
||||
static void rmt_tuner_region(int region)
|
||||
{
|
||||
|
|
@ -362,7 +358,7 @@ int ipod_rmt_tuner_set(int setting, int value)
|
|||
case RADIO_MUTE:
|
||||
{
|
||||
/* mute flag sent to accessory */
|
||||
/* rmt_tuner_mute(value); */
|
||||
rmt_tuner_mute(value);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -453,10 +449,3 @@ char* ipod_get_rds_info(int setting)
|
|||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
bool tuner_power(bool status)
|
||||
{
|
||||
bool oldstatus = powered;
|
||||
powered = status;
|
||||
return oldstatus;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -740,6 +740,8 @@ static int sd_setcmp(int regval)
|
|||
|
||||
static void set_sleep(bool sleep)
|
||||
{
|
||||
if (sleep)
|
||||
tuner_power(false);
|
||||
if (sleep || tuner_awake())
|
||||
return;
|
||||
|
||||
|
|
@ -747,6 +749,7 @@ static void set_sleep(bool sleep)
|
|||
(TUNER_PRESENT | TUNER_POWERED))
|
||||
return;
|
||||
|
||||
tuner_power(true);
|
||||
enable_afc(false);
|
||||
|
||||
/* 2. Calibrate the IF frequency at 110 kHz: */
|
||||
|
|
|
|||
|
|
@ -177,9 +177,12 @@ static void rda5802_sleep(int snooze)
|
|||
rda5802_write_clear(POWERCFG, POWERCFG_ENABLE);
|
||||
}
|
||||
else {
|
||||
tuner_power(true);
|
||||
rda5802_write_set(POWERCFG, POWERCFG_ENABLE);
|
||||
}
|
||||
rda5802_write_cache();
|
||||
if(snooze)
|
||||
tuner_power(false);
|
||||
}
|
||||
|
||||
bool rda5802_detect(void)
|
||||
|
|
|
|||
|
|
@ -47,12 +47,16 @@ int s1a0903x01_set(int setting, int value)
|
|||
{
|
||||
case RADIO_SLEEP:
|
||||
if (!value)
|
||||
{ /* wakeup: just unit */
|
||||
{
|
||||
tuner_power(true);
|
||||
/* wakeup: just unit */
|
||||
fm_in1 = DEFAULT_IN1;
|
||||
fm_in2 = DEFAULT_IN2;
|
||||
fmradio_set(1, fm_in1);
|
||||
fmradio_set(2, fm_in2);
|
||||
}
|
||||
else
|
||||
tuner_power(false);
|
||||
/* else we have no sleep mode? */
|
||||
break;
|
||||
|
||||
|
|
|
|||
|
|
@ -304,9 +304,20 @@ static void si4700_sleep(int snooze)
|
|||
POWERCFG_DISABLE | POWERCFG_ENABLE);
|
||||
/* Bits self-clear once placed in powerdown. */
|
||||
cache[POWERCFG] &= ~(POWERCFG_DISABLE | POWERCFG_ENABLE);
|
||||
|
||||
tuner_power(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
tuner_power(true);
|
||||
/* read all registers */
|
||||
si4700_read(16);
|
||||
#ifdef SI4700_USE_INTERNAL_OSCILLATOR
|
||||
/* Enable the internal oscillator
|
||||
(Si4702-16 needs this register to be initialised to 0x100) */
|
||||
si4700_write_set(TEST1, TEST1_XOSCEN | 0x100);
|
||||
sleep(HZ/2);
|
||||
#endif
|
||||
/** power up **/
|
||||
/* ENABLE high, DISABLE low */
|
||||
si4700_write_masked(POWERCFG, POWERCFG_ENABLE,
|
||||
|
|
@ -354,26 +365,9 @@ bool si4700_detect(void)
|
|||
|
||||
void si4700_init(void)
|
||||
{
|
||||
mutex_init(&fmr_mutex);
|
||||
/* check device id */
|
||||
if (si4700_detect()) {
|
||||
mutex_init(&fmr_mutex);
|
||||
|
||||
tuner_power(true);
|
||||
|
||||
/* read all registers */
|
||||
si4700_read(16);
|
||||
si4700_sleep(0);
|
||||
|
||||
#ifdef SI4700_USE_INTERNAL_OSCILLATOR
|
||||
/* Enable the internal oscillator
|
||||
(Si4702-16 needs this register to be initialised to 0x100) */
|
||||
si4700_write_set(TEST1, TEST1_XOSCEN | 0x100);
|
||||
sleep(HZ/2);
|
||||
#endif
|
||||
|
||||
si4700_sleep(1);
|
||||
tuner_power(false);
|
||||
|
||||
#ifdef HAVE_RDS_CAP
|
||||
si4700_rds_init();
|
||||
#endif
|
||||
|
|
@ -445,6 +439,9 @@ int si4700_set(int setting, int value)
|
|||
{
|
||||
int val = 1;
|
||||
|
||||
if(!tuner_powered() && setting != RADIO_SLEEP)
|
||||
return -1;
|
||||
|
||||
mutex_lock(&fmr_mutex);
|
||||
|
||||
switch(setting)
|
||||
|
|
@ -483,7 +480,7 @@ int si4700_set(int setting, int value)
|
|||
si4700_write_masked(POWERCFG, value ? POWERCFG_MONO : 0,
|
||||
POWERCFG_MONO);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
val = -1;
|
||||
break;
|
||||
|
|
@ -499,12 +496,15 @@ int si4700_get(int setting)
|
|||
{
|
||||
int val = -1; /* default for unsupported query */
|
||||
|
||||
if(!tuner_powered() && setting != RADIO_PRESENT)
|
||||
return -1;
|
||||
|
||||
mutex_lock(&fmr_mutex);
|
||||
|
||||
switch(setting)
|
||||
{
|
||||
case RADIO_PRESENT:
|
||||
val = tuner_present ? 1 : 0;
|
||||
val = tuner_present;
|
||||
break;
|
||||
|
||||
case RADIO_TUNED:
|
||||
|
|
@ -526,7 +526,7 @@ int si4700_get(int setting)
|
|||
case RADIO_RSSI_MAX:
|
||||
val = RSSI_MAX;
|
||||
break;
|
||||
|
||||
|
||||
#ifdef HAVE_RDS_CAP
|
||||
case RADIO_EVENT:
|
||||
{
|
||||
|
|
|
|||
|
|
@ -61,8 +61,10 @@ int tea5760_set(int setting, int value)
|
|||
if (value) {
|
||||
/* sleep / standby mode */
|
||||
tea5760_set_clear(3, (1<<6), 0);
|
||||
tuner_power(false);
|
||||
}
|
||||
else {
|
||||
tuner_power(true);
|
||||
/* active mode */
|
||||
tea5760_set_clear(3, (1<<6), 1);
|
||||
/* disable hard mute */
|
||||
|
|
|
|||
|
|
@ -106,7 +106,11 @@ int tea5767_set(int setting, int value)
|
|||
return -1;
|
||||
}
|
||||
|
||||
if(setting == RADIO_SLEEP && !value)
|
||||
tuner_power(true); /* wakeup */
|
||||
fmradio_i2c_write(I2C_ADR, write_bytes, sizeof(write_bytes));
|
||||
if(setting == RADIO_SLEEP && value)
|
||||
tuner_power(false); /* sleep */
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue