/*
 * Copyright (c) 2017-2019, ARM Limited and Contributors. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef AXP_H
#define AXP_H

#include <stdint.h>

#define NA 0xff

enum {
	AXP803_CHIP_ID = 0x41,
	AXP805_CHIP_ID = 0x40,
};

struct axp_regulator {
	const char *dt_name;
	uint16_t min_volt;
	uint16_t max_volt;
	uint16_t step;
	unsigned char split;
	unsigned char volt_reg;
	unsigned char switch_reg;
	unsigned char switch_bit;
};

extern const uint8_t axp_chip_id;
extern const char *const axp_compatible;
extern const struct axp_regulator axp_regulators[];

/*
 * Since the PMIC can be connected to multiple bus types,
 * low-level read/write functions must be provided by the platform
 */
int axp_read(uint8_t reg);
int axp_write(uint8_t reg, uint8_t val);
int axp_clrsetbits(uint8_t reg, uint8_t clr_mask, uint8_t set_mask);
#define axp_clrbits(reg, clr_mask) axp_clrsetbits(reg, clr_mask, 0)
#define axp_setbits(reg, set_mask) axp_clrsetbits(reg, 0, set_mask)

int axp_check_id(void);
void axp_power_off(void);
void axp_setup_regulators(const void *fdt);

#endif /* AXP_H */
