98bd2231ec
PMU interrupts are used to detect USB Vbus, wall adaptor, accessories and holdswitch. A thread is needed to poll the PMU throught I2C, ATM it does nothing but showing the state of the inputs on the HW debug menu, funcionallity for each individual input will be added in next patches. Change-Id: If93bf2044d1052729237a7fd1431c8493e09f1c7
111 lines
3.4 KiB
C
111 lines
3.4 KiB
C
/***************************************************************************
|
|
* __________ __ ___.
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
* \/ \/ \/ \/ \/
|
|
* $Id: pmu-target.h 24721 2010-02-17 15:54:48Z theseven $
|
|
*
|
|
* Copyright © 2009 Michael Sparmann
|
|
*
|
|
* 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.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifndef __PMU_TARGET_H__
|
|
#define __PMU_TARGET_H__
|
|
|
|
#include <stdbool.h>
|
|
#include "config.h"
|
|
|
|
#include "pcf5063x.h"
|
|
|
|
/* undocummented PMU registers */
|
|
#define PCF50635_REG_INT6 0x85
|
|
#define PCF50635_REG_INT6M 0x86
|
|
#define PCF50635_REG_GPIOSTAT 0x87
|
|
|
|
enum pcf50635_reg_int6 {
|
|
PCF50635_INT6_GPIO1 = 0x01, /* TBC */
|
|
PCF50635_INT6_GPIO2 = 0x02,
|
|
};
|
|
|
|
enum pcf50635_reg_gpiostat {
|
|
PCF50635_GPIOSTAT_GPIO1 = 0x01, /* TBC */
|
|
PCF50635_GPIOSTAT_GPIO2 = 0x02,
|
|
};
|
|
|
|
|
|
/* GPIO for external PMU interrupt */
|
|
#define GPIO_EINT_PMU 0x7b
|
|
|
|
/* LDOs */
|
|
#define LDO_UNK1 1 /* TBC: SoC voltage (USB) */
|
|
#define LDO_UNK2 2 /* TBC: SoC voltage (I/O) */
|
|
#define LDO_LCD 3
|
|
#define LDO_CODEC 4
|
|
#define LDO_UNK5 5 /* TBC: nano3g NAND */
|
|
#define LDO_CWHEEL 6
|
|
#define LDO_ACCY 7 /* HCLDO */
|
|
/*
|
|
* Other LDOs:
|
|
* AUTOLDO: Hard Disk
|
|
* DOWN1: CPU
|
|
* DOWN2: SDRAM
|
|
* MEMLDO: SDRAM self-refresh (TBC)
|
|
*
|
|
* EXTON inputs:
|
|
* EXTON1: button/holdswitch related (TBC)
|
|
* EXTON2: USB Vbus (High when present)
|
|
* EXTON3: ACCESSORY (Low when present)
|
|
*
|
|
* PMU GPIO:
|
|
* GPIO1: input, Mikey (jack remote ctrl) interrupt (TBC)
|
|
* GPIO2: input, hold switch (TBC)
|
|
* GPIO3: output, unknown
|
|
*/
|
|
|
|
|
|
unsigned char pmu_read(int address);
|
|
int pmu_write(int address, unsigned char val);
|
|
int pmu_read_multiple(int address, int count, unsigned char* buffer);
|
|
int pmu_write_multiple(int address, int count, unsigned char* buffer);
|
|
int pmu_read_adc(unsigned int adc);
|
|
int pmu_read_battery_voltage(void);
|
|
int pmu_read_battery_current(void);
|
|
void pmu_init(void);
|
|
void pmu_ldo_on_in_standby(unsigned int ldo, int onoff);
|
|
void pmu_ldo_set_voltage(unsigned int ldo, unsigned char voltage);
|
|
void pmu_ldo_power_on(unsigned int ldo);
|
|
void pmu_ldo_power_off(unsigned int ldo);
|
|
void pmu_set_wake_condition(unsigned char condition);
|
|
void pmu_enter_standby(void);
|
|
void pmu_read_rtc(unsigned char* buffer);
|
|
void pmu_write_rtc(unsigned char* buffer);
|
|
void pmu_hdd_power(bool on);
|
|
|
|
int pmu_holdswitch_locked(void);
|
|
int pmu_usb_present(void);
|
|
#if CONFIG_CHARGING
|
|
int pmu_firewire_present(void);
|
|
#endif
|
|
#ifdef IPOD_ACCESSORY_PROTOCOL
|
|
int pmu_accessory_present(void);
|
|
#endif
|
|
|
|
void pmu_preinit(void);
|
|
#ifdef BOOTLOADER
|
|
unsigned char pmu_rd(int address);
|
|
int pmu_wr(int address, unsigned char val);
|
|
int pmu_rd_multiple(int address, int count, unsigned char* buffer);
|
|
int pmu_wr_multiple(int address, int count, unsigned char* buffer);
|
|
#endif
|
|
|
|
#endif /* __PMU_TARGET_H__ */
|