From 4ad62b7656c656641c9176276acb73294871a220 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Sun, 30 Oct 2011 14:32:42 +0000 Subject: 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 --- .../arm/imx31/gigabeat-s/powermgmt-gigabeat-s.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) (limited to 'firmware/target/arm') diff --git a/firmware/target/arm/imx31/gigabeat-s/powermgmt-gigabeat-s.c b/firmware/target/arm/imx31/gigabeat-s/powermgmt-gigabeat-s.c index 2df461015e..d87e367cba 100644 --- a/firmware/target/arm/imx31/gigabeat-s/powermgmt-gigabeat-s.c +++ b/firmware/target/arm/imx31/gigabeat-s/powermgmt-gigabeat-s.c @@ -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. */ -- cgit v1.2.3