1c7336815SŁukasz Majewski /* 2c7336815SŁukasz Majewski * Copyright (C) 2011-2012 Samsung Electronics 3c7336815SŁukasz Majewski * Lukasz Majewski <l.majewski@samsung.com> 4c7336815SŁukasz Majewski * 51a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 6c7336815SŁukasz Majewski */ 7c7336815SŁukasz Majewski 8c7336815SŁukasz Majewski #ifndef __CORE_PMIC_H_ 9c7336815SŁukasz Majewski #define __CORE_PMIC_H_ 10c7336815SŁukasz Majewski 11c7336815SŁukasz Majewski #include <linux/list.h> 12c7336815SŁukasz Majewski #include <i2c.h> 13bd8479e8SŁukasz Majewski #include <power/power_chrg.h> 14c7336815SŁukasz Majewski 15bd8479e8SŁukasz Majewski enum { PMIC_I2C, PMIC_SPI, PMIC_NONE}; 16c7336815SŁukasz Majewski enum { I2C_PMIC, I2C_NUM, }; 17c7336815SŁukasz Majewski enum { PMIC_READ, PMIC_WRITE, }; 18c7336815SŁukasz Majewski enum { PMIC_SENSOR_BYTE_ORDER_LITTLE, PMIC_SENSOR_BYTE_ORDER_BIG, }; 19c7336815SŁukasz Majewski 2078a36c3eSSimon Glass enum { 2178a36c3eSSimon Glass PMIC_CHARGER_DISABLE, 2278a36c3eSSimon Glass PMIC_CHARGER_ENABLE, 2378a36c3eSSimon Glass }; 2478a36c3eSSimon Glass 25c7336815SŁukasz Majewski struct p_i2c { 26c7336815SŁukasz Majewski unsigned char addr; 27c7336815SŁukasz Majewski unsigned char *buf; 28c7336815SŁukasz Majewski unsigned char tx_num; 29c7336815SŁukasz Majewski }; 30c7336815SŁukasz Majewski 31c7336815SŁukasz Majewski struct p_spi { 32c7336815SŁukasz Majewski unsigned int cs; 33c7336815SŁukasz Majewski unsigned int mode; 34c7336815SŁukasz Majewski unsigned int bitlen; 35c7336815SŁukasz Majewski unsigned int clk; 36c7336815SŁukasz Majewski unsigned int flags; 37c7336815SŁukasz Majewski u32 (*prepare_tx)(u32 reg, u32 *val, u32 write); 38c7336815SŁukasz Majewski }; 39c7336815SŁukasz Majewski 40bd8479e8SŁukasz Majewski struct pmic; 41bd8479e8SŁukasz Majewski struct power_fg { 42bd8479e8SŁukasz Majewski int (*fg_battery_check) (struct pmic *p, struct pmic *bat); 43bd8479e8SŁukasz Majewski int (*fg_battery_update) (struct pmic *p, struct pmic *bat); 44bd8479e8SŁukasz Majewski }; 45bd8479e8SŁukasz Majewski 46bd8479e8SŁukasz Majewski struct power_chrg { 47bd8479e8SŁukasz Majewski int (*chrg_type) (struct pmic *p); 48bd8479e8SŁukasz Majewski int (*chrg_bat_present) (struct pmic *p); 49bd8479e8SŁukasz Majewski int (*chrg_state) (struct pmic *p, int state, int current); 50bd8479e8SŁukasz Majewski }; 51bd8479e8SŁukasz Majewski 52bd8479e8SŁukasz Majewski struct power_battery { 53bd8479e8SŁukasz Majewski struct battery *bat; 54bd8479e8SŁukasz Majewski int (*battery_init) (struct pmic *bat, struct pmic *p1, 55bd8479e8SŁukasz Majewski struct pmic *p2, struct pmic *p3); 56bd8479e8SŁukasz Majewski int (*battery_charge) (struct pmic *bat); 57bd8479e8SŁukasz Majewski /* Keep info about power devices involved with battery operation */ 58bd8479e8SŁukasz Majewski struct pmic *chrg, *fg, *muic; 59bd8479e8SŁukasz Majewski }; 60bd8479e8SŁukasz Majewski 61c7336815SŁukasz Majewski struct pmic { 62c7336815SŁukasz Majewski const char *name; 63c7336815SŁukasz Majewski unsigned char bus; 64c7336815SŁukasz Majewski unsigned char interface; 65c7336815SŁukasz Majewski unsigned char sensor_byte_order; 66c7336815SŁukasz Majewski unsigned int number_of_regs; 67c7336815SŁukasz Majewski union hw { 68c7336815SŁukasz Majewski struct p_i2c i2c; 69c7336815SŁukasz Majewski struct p_spi spi; 70c7336815SŁukasz Majewski } hw; 71c7336815SŁukasz Majewski 72bd8479e8SŁukasz Majewski void (*low_power_mode) (void); 73bd8479e8SŁukasz Majewski struct power_battery *pbat; 74bd8479e8SŁukasz Majewski struct power_chrg *chrg; 75bd8479e8SŁukasz Majewski struct power_fg *fg; 76bd8479e8SŁukasz Majewski 77bd8479e8SŁukasz Majewski struct pmic *parent; 78c7336815SŁukasz Majewski struct list_head list; 79c7336815SŁukasz Majewski }; 80c7336815SŁukasz Majewski 81c7336815SŁukasz Majewski int pmic_init(unsigned char bus); 82*5c44dd6bSTom Rini int power_init_board(void); 83c7336815SŁukasz Majewski int pmic_dialog_init(unsigned char bus); 84c7336815SŁukasz Majewski int check_reg(struct pmic *p, u32 reg); 85c7336815SŁukasz Majewski struct pmic *pmic_alloc(void); 86c7336815SŁukasz Majewski struct pmic *pmic_get(const char *s); 87c7336815SŁukasz Majewski int pmic_probe(struct pmic *p); 88c7336815SŁukasz Majewski int pmic_reg_read(struct pmic *p, u32 reg, u32 *val); 89c7336815SŁukasz Majewski int pmic_reg_write(struct pmic *p, u32 reg, u32 val); 90c7336815SŁukasz Majewski int pmic_set_output(struct pmic *p, u32 reg, int ldo, int on); 91c7336815SŁukasz Majewski 92c7336815SŁukasz Majewski #define pmic_i2c_addr (p->hw.i2c.addr) 93c7336815SŁukasz Majewski #define pmic_i2c_tx_num (p->hw.i2c.tx_num) 94c7336815SŁukasz Majewski 95c7336815SŁukasz Majewski #define pmic_spi_bitlen (p->hw.spi.bitlen) 96c7336815SŁukasz Majewski #define pmic_spi_flags (p->hw.spi.flags) 97c7336815SŁukasz Majewski 98c7336815SŁukasz Majewski #endif /* __CORE_PMIC_H_ */ 99