1
0
Fork 0
forked from len0rd/rockbox

Charger detection for Gigabeat S

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17093 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Nils Wallménius 2008-04-13 10:04:21 +00:00
parent d715f79ed6
commit 8c5d552ebd
4 changed files with 47 additions and 3 deletions

View file

@ -88,6 +88,9 @@ enum mc13783_regs_enum
MC13783_NUM_REGS,
};
/* INTERRUPT_STATUS0, INTERRUPT_MASK0, INTERRUPT_SENSE0 */
#define MC13783_CHGDET (1 << 6)
/* INTERRUPT_STATUS1, INTERRUPT_MASK1, INTERRUPT_SENSE1 */
#define MC13783_HSL (1 << 0)
#define MC13783_ON1B (1 << 3)

View file

@ -24,6 +24,7 @@
#include "debug.h"
#include "kernel.h"
#include "power-imx31.h"
#include "button-target.h"
/* This is all based on communicating with the MC13783 PMU which is on
@ -64,11 +65,15 @@ static __attribute__((noreturn)) void mc13783_interrupt_thread(void)
gpio_enable_event(MC13783_GPIO_NUM, MC13783_EVENT_ID);
/* Check initial states */
value = mc13783_read(MC13783_INTERRUPT_SENSE0);
set_charger_inserted(value & MC13783_CHGDET);
value = mc13783_read(MC13783_INTERRUPT_SENSE1);
button_power_set_state((value & MC13783_ON1B) == 0);
set_headphones_inserted((value & MC13783_ON2B) == 0);
/* Enable desired PMIC interrupts */
mc13783_clear(MC13783_INTERRUPT_MASK0, MC13783_CHGDET);
mc13783_clear(MC13783_INTERRUPT_MASK1, MC13783_ON1B | MC13783_ON2B);
while (1)
@ -78,12 +83,19 @@ static __attribute__((noreturn)) void mc13783_interrupt_thread(void)
mc13783_read_regset(status_regs, pending, 2);
mc13783_write_regset(status_regs, pending, 2);
#if 0
if (pending[0])
{
/* Handle ...PENDING0 */
if (pending[0] & MC13783_CHGDET)
{
value = mc13783_read(MC13783_INTERRUPT_SENSE0);
if (pending[0] & MC13783_CHGDET)
set_charger_inserted(value & MC13783_CHGDET);
}
}
#endif
if (pending[1])
{

View file

@ -26,13 +26,21 @@
#ifndef SIMULATOR
static bool charger_detect = false;
void power_init(void)
{
}
/* This is called from the mc13783 interrupt thread */
void set_charger_inserted(bool inserted)
{
charger_detect = inserted;
}
bool charger_inserted(void)
{
return false;
return charger_detect;
}
/* Returns true if the unit is charging the batteries. */

View file

@ -0,0 +1,21 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id:$
*
* Copyright (C) 2008 by Nils Wallménius
*
* All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
void set_charger_inserted(bool inserted);