Gigabeat S: Maintain power thread at realtime priority at all times so it may always service the watchdog on time regardless of playback priority.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30867 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Michael Sevakis 2011-10-30 14:32:42 +00:00
parent 01706d9c0f
commit 4ad62b7656

View file

@ -193,16 +193,6 @@ static enum
TEMP_HIGH_LIMIT = 1, /* Max temp */
} temp_state = TEMP_STATE_NORMAL;
/* Set power thread priority for charging mode or not */
static inline void charging_set_thread_priority(bool charging)
{
#ifdef HAVE_PRIORITY_SCHEDULING
thread_set_priority(thread_self(),
charging ? PRIORITY_REALTIME : PRIORITY_SYSTEM);
#endif
(void)charging;
}
/* Update filtered charger current - exponential moving average */
static bool charger_current_filter_step(void)
{
@ -411,8 +401,6 @@ static bool adjust_charger_current(void)
if (i != MC13783_DATA_ERROR)
{
charging_set_thread_priority(true);
/* Turn regulator logically ON. Hardware may still override.
*/
i = mc13783_write_masked(MC13783_CHARGER, charger_setting,
@ -467,7 +455,6 @@ static bool adjust_charger_current(void)
adc_enable_channel(ADC_CHARGER_CURRENT, false);
update_filtered_battery_voltage();
charging_set_thread_priority(false);
return success;
}
@ -615,6 +602,10 @@ void INIT_ATTR powermgmt_init_target(void)
MC13783_VCHRG_4_050V | MC13783_ICHRG_0MA |
MC13783_ICHRGTR_0MA | MC13783_OVCTRL_6_90V;
/* Must maintain watchdog timer and charger thus must always be able to
run even if playback is starved. */
thread_set_priority(thread_self(), PRIORITY_REALTIME);
/* Use watchdog to shut system down if we lose control of the charging
* hardware. */
watchdog_init(WATCHDOG_TIMEOUT);
@ -809,8 +800,6 @@ static void charger_control(void)
autorecharge_counter = 0;
charging_set_thread_priority(true);
if (stat_battery_reading(ADC_BATTERY) < BATT_VTRICKLE_CHARGE)
{
/* Battery is deeply discharged - precharge at lower current. */