From 59b9e3ab3f64c17aaf093f0031a5e93ea5120170 Mon Sep 17 00:00:00 2001 From: Bertrik Sikken Date: Sun, 12 Jul 2009 14:32:38 +0000 Subject: Meizu: implement power driver (USB power detect / charging status / poweroff) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21805 a1c6a512-1295-4272-9138-f99709370657 --- firmware/export/config-meizu-m3.h | 4 +- firmware/target/arm/s5l8700/power-meizu.c | 92 +++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 firmware/target/arm/s5l8700/power-meizu.c diff --git a/firmware/export/config-meizu-m3.h b/firmware/export/config-meizu-m3.h index 4bb2e68725..18228226e3 100644 --- a/firmware/export/config-meizu-m3.h +++ b/firmware/export/config-meizu-m3.h @@ -116,8 +116,8 @@ #define BATTERY_CAPACITY_INC 50 /* capacity increment */ #define BATTERY_TYPES_COUNT 1 /* only one type */ -/* Hardware controlled charging? FIXME */ -#define CONFIG_CHARGING CHARGING_SIMPLE +/* Hardware controlled charging, software can monitor plug and charge state */ +#define CONFIG_CHARGING CHARGING_MONITOR #ifndef SIMULATOR diff --git a/firmware/target/arm/s5l8700/power-meizu.c b/firmware/target/arm/s5l8700/power-meizu.c new file mode 100644 index 0000000000..516bfc976d --- /dev/null +++ b/firmware/target/arm/s5l8700/power-meizu.c @@ -0,0 +1,92 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright © 2009 Bertrik Sikken + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include +#include "config.h" +#include "inttypes.h" +#include "s5l8700.h" +#include "power.h" + +/* Power handling for S5L8700 based Meizu players + + The M3 and M6 players appear to use the same pins for power, USB detection + and charging status. +*/ + +void power_off(void) +{ + /* take down PWRON_M (P1.3) */ + PDAT1 &= ~(1 << 3); +} + +void power_init(void) +{ + /* configure PWRON_M (P1.3) as output and set it to keep power turned on */ + PCON1 = (PCON1 & ~(0xF << 12)) | (0x1 << 12); + PDAT1 |= (1 << 3); + + /* configure PBSTAT (P1.4) as input */ + PCON1 &= ~(0xF << 16); + + /* configure CHRG (P5.7) as input to monitor charging state */ + PCON5 &= ~(0xF << 28); + + /* enable USB2.0 function controller to allow VBUS monitoring */ + PWRCON &= ~(1 << 15); +} + +#if CONFIG_CHARGING +unsigned int power_input_status(void) +{ + /* check VBUS in the USB2.0 function controller */ + if (TR & (1 << 15)) { + return POWER_INPUT_USB; + } + + return POWER_INPUT_NONE; +} + +bool charging_state(void) +{ + /* CHRG pin goes low when charging */ + return ((PDAT5 & (1 << 7)) == 0); +} +#endif /* CONFIG_CHARGING */ + +#if CONFIG_TUNER +static bool tuner_on = false; + +bool tuner_power(bool status) +{ + if (status != tuner_on) + { + tuner_on = status; + status = !status; + } + + return status; +} + +bool tuner_powered(void) +{ + return tuner_on; /* No debug info */ +} +#endif /* CONFIG_TUNER */ + -- cgit v1.2.3