/* ---------------------------------------------------------------------------- | |
* SAM Software Package License | |
* ---------------------------------------------------------------------------- | |
* Copyright (c) 2015, Atmel Corporation | |
* | |
* All rights reserved. | |
* | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions are met: | |
* | |
* - Redistributions of source code must retain the above copyright notice, | |
* this list of conditions and the disclaimer below. | |
* | |
* Atmel's name may not be used to endorse or promote products derived from | |
* this software without specific prior written permission. | |
* | |
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR | |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE | |
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, | |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, | |
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | |
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
* ---------------------------------------------------------------------------- | |
*/ | |
#ifndef _ACT_8945A_H_ | |
#define _ACT_8945A_H_ | |
#include <stdint.h> | |
#include <stdbool.h> | |
#include "peripherals/twid.h" | |
/*------------------------------------------------------------------------------ | |
* Types | |
*----------------------------------------------------------------------------*/ | |
enum _act8945a_charge_level | |
{ | |
ACT8945A_CHARGE_LEVEL_100MA, | |
ACT8945A_CHARGE_LEVEL_450MA, | |
}; | |
enum _act8945a_interrupt | |
{ | |
CHARGE_STATE_OUT_EOC_STATE, | |
INPUT_VOLTAGE_OUT_VALID_RANGE, | |
BATTERY_TEMPERATURE_OUT_RANGE, | |
PRECHARGE_TIME_OUT, | |
CHARGE_STATE_INTO_EOC_STATE, | |
INPUT_VOLTAGE_INTO_VALID_RANGE, | |
BATTERY_TEMPERATURE_INTO_RANGE, | |
TOTAL_CHARGE_TIME_OUT, | |
}; | |
struct _act8945a_desc { | |
const struct _pin pin_chglev; | |
const struct _pin pin_irq; | |
const struct _pin pin_lbo; | |
}; | |
struct _act8945a { | |
struct _twi_desc* twid; | |
struct _act8945a_desc desc; | |
uint8_t sys0; | |
uint8_t apch78; | |
uint8_t apch79; | |
uint8_t apch7a; | |
uint8_t lbo_count; | |
}; | |
/*------------------------------------------------------------------------------ | |
* Exported functions | |
*----------------------------------------------------------------------------*/ | |
extern bool act8945a_configure(struct _act8945a *act8945a, | |
struct _twi_desc *twid); | |
extern void act8945a_set_charge_level(struct _act8945a *act8945a, | |
enum _act8945a_charge_level level); | |
extern bool act8945a_configure_apch_interrupt(struct _act8945a *act8945a, | |
enum _act8945a_interrupt interrupt, bool enable); | |
extern bool act8945a_disable_all_apch_interrupts(struct _act8945a *act8945a); | |
// Set the Programmable System Voltage Monitor | |
// Input: Value in mv from 2300mv to 3800mv | |
extern bool act8945a_set_system_voltage_detect_threshold(struct _act8945a *act8945a, | |
uint16_t threshold); | |
// System Voltage Level Interrupt Mask. SYSLEV interrupt is masked by default, | |
// set to 1 to unmask this interrupt. | |
extern bool act8945a_enable_system_voltage_level_interrupt( | |
struct _act8945a *act8945a, bool enable); | |
extern bool act8945a_set_regulator_voltage(struct _act8945a *act8945a, | |
uint8_t reg, uint16_t vout); | |
extern bool act8945a_enable_regulator(struct _act8945a *act8945a, | |
uint8_t reg, bool enable); | |
// Regulator Fault Mask Control. | |
// Set bit to 1 enable fault-interrupts, clear bit to 0 to disable fault-interrupts | |
// Input: regulator (1-7) | |
bool act8945a_enable_regulator_fault_interrupt(struct _act8945a *act8945a, | |
uint8_t reg, bool enable); | |
extern bool act8945a_get_lbo_pin_state(struct _act8945a *act8945a); | |
extern void act8945a_display_voltage_settings(struct _act8945a *act8945a); | |
extern void act8945a_dump_registers(struct _act8945a *act8945a); | |
extern void act8945a_display_apch_registers(struct _act8945a *act8945a); | |
extern void act8945a_display_system_registers(struct _act8945a *act8945a); | |
extern void act8945a_display_charge_state(struct _act8945a *act8945a); | |
#endif /* _ACT_8945A_H_ */ |