1c7336815SŁukasz Majewski /* 24d9057e8SPrzemyslaw Marczak * Copyright (C) 2014-2015 Samsung Electronics 34d9057e8SPrzemyslaw Marczak * Przemyslaw Marczak <p.marczak@samsung.com> 44d9057e8SPrzemyslaw Marczak * 5c7336815SŁukasz Majewski * Copyright (C) 2011-2012 Samsung Electronics 6c7336815SŁukasz Majewski * Lukasz Majewski <l.majewski@samsung.com> 7c7336815SŁukasz Majewski * 81a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 9c7336815SŁukasz Majewski */ 10c7336815SŁukasz Majewski 11c7336815SŁukasz Majewski #ifndef __CORE_PMIC_H_ 12c7336815SŁukasz Majewski #define __CORE_PMIC_H_ 13c7336815SŁukasz Majewski 1492671781SPeng Fan #include <dm/ofnode.h> 15c7336815SŁukasz Majewski #include <i2c.h> 16f415a3ecSPrzemyslaw Marczak #include <linux/list.h> 17bd8479e8SŁukasz Majewski #include <power/power_chrg.h> 18c7336815SŁukasz Majewski 19bd8479e8SŁukasz Majewski enum { PMIC_I2C, PMIC_SPI, PMIC_NONE}; 204d9057e8SPrzemyslaw Marczak 214d9057e8SPrzemyslaw Marczak #ifdef CONFIG_POWER 22c7336815SŁukasz Majewski enum { I2C_PMIC, I2C_NUM, }; 23c7336815SŁukasz Majewski enum { PMIC_READ, PMIC_WRITE, }; 24c7336815SŁukasz Majewski enum { PMIC_SENSOR_BYTE_ORDER_LITTLE, PMIC_SENSOR_BYTE_ORDER_BIG, }; 25c7336815SŁukasz Majewski 2678a36c3eSSimon Glass enum { 2778a36c3eSSimon Glass PMIC_CHARGER_DISABLE, 2878a36c3eSSimon Glass PMIC_CHARGER_ENABLE, 2978a36c3eSSimon Glass }; 3078a36c3eSSimon Glass 31c7336815SŁukasz Majewski struct p_i2c { 32c7336815SŁukasz Majewski unsigned char addr; 33c7336815SŁukasz Majewski unsigned char *buf; 34c7336815SŁukasz Majewski unsigned char tx_num; 35c7336815SŁukasz Majewski }; 36c7336815SŁukasz Majewski 37c7336815SŁukasz Majewski struct p_spi { 38c7336815SŁukasz Majewski unsigned int cs; 39c7336815SŁukasz Majewski unsigned int mode; 40c7336815SŁukasz Majewski unsigned int bitlen; 41c7336815SŁukasz Majewski unsigned int clk; 42c7336815SŁukasz Majewski unsigned int flags; 43c7336815SŁukasz Majewski u32 (*prepare_tx)(u32 reg, u32 *val, u32 write); 44c7336815SŁukasz Majewski }; 45c7336815SŁukasz Majewski 46bd8479e8SŁukasz Majewski struct pmic; 47bd8479e8SŁukasz Majewski struct power_fg { 48bd8479e8SŁukasz Majewski int (*fg_battery_check) (struct pmic *p, struct pmic *bat); 49bd8479e8SŁukasz Majewski int (*fg_battery_update) (struct pmic *p, struct pmic *bat); 50bd8479e8SŁukasz Majewski }; 51bd8479e8SŁukasz Majewski 52bd8479e8SŁukasz Majewski struct power_chrg { 53bd8479e8SŁukasz Majewski int (*chrg_type) (struct pmic *p); 54bd8479e8SŁukasz Majewski int (*chrg_bat_present) (struct pmic *p); 55bd8479e8SŁukasz Majewski int (*chrg_state) (struct pmic *p, int state, int current); 56bd8479e8SŁukasz Majewski }; 57bd8479e8SŁukasz Majewski 58bd8479e8SŁukasz Majewski struct power_battery { 59bd8479e8SŁukasz Majewski struct battery *bat; 60bd8479e8SŁukasz Majewski int (*battery_init) (struct pmic *bat, struct pmic *p1, 61bd8479e8SŁukasz Majewski struct pmic *p2, struct pmic *p3); 62bd8479e8SŁukasz Majewski int (*battery_charge) (struct pmic *bat); 63bd8479e8SŁukasz Majewski /* Keep info about power devices involved with battery operation */ 64bd8479e8SŁukasz Majewski struct pmic *chrg, *fg, *muic; 65bd8479e8SŁukasz Majewski }; 66bd8479e8SŁukasz Majewski 67c7336815SŁukasz Majewski struct pmic { 68c7336815SŁukasz Majewski const char *name; 69c7336815SŁukasz Majewski unsigned char bus; 70c7336815SŁukasz Majewski unsigned char interface; 71c7336815SŁukasz Majewski unsigned char sensor_byte_order; 72c7336815SŁukasz Majewski unsigned int number_of_regs; 73c7336815SŁukasz Majewski union hw { 74c7336815SŁukasz Majewski struct p_i2c i2c; 75c7336815SŁukasz Majewski struct p_spi spi; 76c7336815SŁukasz Majewski } hw; 77c7336815SŁukasz Majewski 78bd8479e8SŁukasz Majewski void (*low_power_mode) (void); 79bd8479e8SŁukasz Majewski struct power_battery *pbat; 80bd8479e8SŁukasz Majewski struct power_chrg *chrg; 81bd8479e8SŁukasz Majewski struct power_fg *fg; 82bd8479e8SŁukasz Majewski 83bd8479e8SŁukasz Majewski struct pmic *parent; 84c7336815SŁukasz Majewski struct list_head list; 85c7336815SŁukasz Majewski }; 864d9057e8SPrzemyslaw Marczak #endif /* CONFIG_POWER */ 87c7336815SŁukasz Majewski 884d9057e8SPrzemyslaw Marczak #ifdef CONFIG_DM_PMIC 894d9057e8SPrzemyslaw Marczak /** 904d9057e8SPrzemyslaw Marczak * U-Boot PMIC Framework 914d9057e8SPrzemyslaw Marczak * ===================== 924d9057e8SPrzemyslaw Marczak * 93f415a3ecSPrzemyslaw Marczak * UCLASS_PMIC - This is designed to provide an I/O interface for PMIC devices. 944d9057e8SPrzemyslaw Marczak * 954d9057e8SPrzemyslaw Marczak * For the multi-function PMIC devices, this can be used as parent I/O device 96f415a3ecSPrzemyslaw Marczak * for each IC's interface. Then, each child uses its parent for read/write. 974d9057e8SPrzemyslaw Marczak * 984d9057e8SPrzemyslaw Marczak * The driver model tree could look like this: 994d9057e8SPrzemyslaw Marczak * 1004d9057e8SPrzemyslaw Marczak *_ root device 1014d9057e8SPrzemyslaw Marczak * |_ BUS 0 device (e.g. I2C0) - UCLASS_I2C/SPI/... 1024d9057e8SPrzemyslaw Marczak * | |_ PMIC device (READ/WRITE ops) - UCLASS_PMIC 1034d9057e8SPrzemyslaw Marczak * | |_ REGULATOR device (ldo/buck/... ops) - UCLASS_REGULATOR 1044d9057e8SPrzemyslaw Marczak * | |_ CHARGER device (charger ops) - UCLASS_CHARGER (in the future) 1054d9057e8SPrzemyslaw Marczak * | |_ MUIC device (microUSB connector ops) - UCLASS_MUIC (in the future) 1064d9057e8SPrzemyslaw Marczak * | |_ ... 1074d9057e8SPrzemyslaw Marczak * | 1084d9057e8SPrzemyslaw Marczak * |_ BUS 1 device (e.g. I2C1) - UCLASS_I2C/SPI/... 1094d9057e8SPrzemyslaw Marczak * |_ PMIC device (READ/WRITE ops) - UCLASS_PMIC 1104d9057e8SPrzemyslaw Marczak * |_ RTC device (rtc ops) - UCLASS_RTC (in the future) 1114d9057e8SPrzemyslaw Marczak * 1124d9057e8SPrzemyslaw Marczak * We can find two PMIC cases in boards design: 1134d9057e8SPrzemyslaw Marczak * - single I/O interface 1144d9057e8SPrzemyslaw Marczak * - multiple I/O interfaces 115f415a3ecSPrzemyslaw Marczak * We bind a single PMIC device for each interface, to provide an I/O for 116f415a3ecSPrzemyslaw Marczak * its child devices. And each child usually implements a different function, 1174d9057e8SPrzemyslaw Marczak * controlled by the same interface. 1184d9057e8SPrzemyslaw Marczak * 1194d9057e8SPrzemyslaw Marczak * The binding should be done automatically. If device tree nodes/subnodes are 1204d9057e8SPrzemyslaw Marczak * proper defined, then: 1214d9057e8SPrzemyslaw Marczak * 1224d9057e8SPrzemyslaw Marczak * |_ the ROOT driver will bind the device for I2C/SPI node: 1234d9057e8SPrzemyslaw Marczak * |_ the I2C/SPI driver should bind a device for pmic node: 1244d9057e8SPrzemyslaw Marczak * |_ the PMIC driver should bind devices for its childs: 1254d9057e8SPrzemyslaw Marczak * |_ regulator (child) 1264d9057e8SPrzemyslaw Marczak * |_ charger (child) 1274d9057e8SPrzemyslaw Marczak * |_ other (child) 1284d9057e8SPrzemyslaw Marczak * 1294d9057e8SPrzemyslaw Marczak * The same for other device nodes, for multi-interface PMIC. 1304d9057e8SPrzemyslaw Marczak * 1314d9057e8SPrzemyslaw Marczak * Note: 1324d9057e8SPrzemyslaw Marczak * Each PMIC interface driver should use a different compatible string. 1334d9057e8SPrzemyslaw Marczak * 134f415a3ecSPrzemyslaw Marczak * If a PMIC child device driver needs access the PMIC-specific registers, 1354d9057e8SPrzemyslaw Marczak * it need know only the register address and the access can be done through 1364d9057e8SPrzemyslaw Marczak * the parent pmic driver. Like in the example: 1374d9057e8SPrzemyslaw Marczak * 1384d9057e8SPrzemyslaw Marczak *_ root driver 1394d9057e8SPrzemyslaw Marczak * |_ dev: bus I2C0 - UCLASS_I2C 1404d9057e8SPrzemyslaw Marczak * | |_ dev: my_pmic (read/write) (is parent) - UCLASS_PMIC 1414d9057e8SPrzemyslaw Marczak * | |_ dev: my_regulator (set value/etc..) (is child) - UCLASS_REGULATOR 1424d9057e8SPrzemyslaw Marczak * 1434d9057e8SPrzemyslaw Marczak * To ensure such device relationship, the pmic device driver should also bind 144f415a3ecSPrzemyslaw Marczak * all its child devices, like in the example below. It can be done by calling 145f415a3ecSPrzemyslaw Marczak * the 'pmic_bind_children()' - please refer to the function description, which 146f415a3ecSPrzemyslaw Marczak * can be found in this header file. This function, should be called inside the 147f415a3ecSPrzemyslaw Marczak * driver's bind() method. 1484d9057e8SPrzemyslaw Marczak * 1494d9057e8SPrzemyslaw Marczak * For the example driver, please refer the MAX77686 driver: 1504d9057e8SPrzemyslaw Marczak * - 'drivers/power/pmic/max77686.c' 1514d9057e8SPrzemyslaw Marczak */ 1524d9057e8SPrzemyslaw Marczak 1534d9057e8SPrzemyslaw Marczak /** 1544d9057e8SPrzemyslaw Marczak * struct dm_pmic_ops - PMIC device I/O interface 1554d9057e8SPrzemyslaw Marczak * 1564d9057e8SPrzemyslaw Marczak * Should be implemented by UCLASS_PMIC device drivers. The standard 1574d9057e8SPrzemyslaw Marczak * device operations provides the I/O interface for it's childs. 1584d9057e8SPrzemyslaw Marczak * 159f415a3ecSPrzemyslaw Marczak * @reg_count: device's register count 1604d9057e8SPrzemyslaw Marczak * @read: read 'len' bytes at "reg" and store it into the 'buffer' 1614d9057e8SPrzemyslaw Marczak * @write: write 'len' bytes from the 'buffer' to the register at 'reg' address 1624d9057e8SPrzemyslaw Marczak */ 1634d9057e8SPrzemyslaw Marczak struct dm_pmic_ops { 164f415a3ecSPrzemyslaw Marczak int (*reg_count)(struct udevice *dev); 1654d9057e8SPrzemyslaw Marczak int (*read)(struct udevice *dev, uint reg, uint8_t *buffer, int len); 1664d9057e8SPrzemyslaw Marczak int (*write)(struct udevice *dev, uint reg, const uint8_t *buffer, 1674d9057e8SPrzemyslaw Marczak int len); 168*2a7051beSJoseph Chen int (*suspend)(struct udevice *dev); 169*2a7051beSJoseph Chen int (*resume)(struct udevice *dev); 170c8d15c43SJoseph Chen int (*shutdown)(struct udevice *dev); 1714d9057e8SPrzemyslaw Marczak }; 1724d9057e8SPrzemyslaw Marczak 173f415a3ecSPrzemyslaw Marczak /** 174f415a3ecSPrzemyslaw Marczak * enum pmic_op_type - used for various pmic devices operation calls, 1754d9057e8SPrzemyslaw Marczak * for reduce a number of lines with the same code for read/write or get/set. 1764d9057e8SPrzemyslaw Marczak * 1774d9057e8SPrzemyslaw Marczak * @PMIC_OP_GET - get operation 1784d9057e8SPrzemyslaw Marczak * @PMIC_OP_SET - set operation 1794d9057e8SPrzemyslaw Marczak */ 1804d9057e8SPrzemyslaw Marczak enum pmic_op_type { 1814d9057e8SPrzemyslaw Marczak PMIC_OP_GET, 1824d9057e8SPrzemyslaw Marczak PMIC_OP_SET, 1834d9057e8SPrzemyslaw Marczak }; 1844d9057e8SPrzemyslaw Marczak 1854d9057e8SPrzemyslaw Marczak /** 1864d9057e8SPrzemyslaw Marczak * struct pmic_child_info - basic device's child info for bind child nodes with 1874d9057e8SPrzemyslaw Marczak * the driver by the node name prefix and driver name. This is a helper struct 188f415a3ecSPrzemyslaw Marczak * for function: pmic_bind_children(). 1894d9057e8SPrzemyslaw Marczak * 1904d9057e8SPrzemyslaw Marczak * @prefix - child node name prefix (or its name if is unique or single) 1914d9057e8SPrzemyslaw Marczak * @driver - driver name for the sub-node with prefix 1924d9057e8SPrzemyslaw Marczak */ 1934d9057e8SPrzemyslaw Marczak struct pmic_child_info { 19450454a09SJoseph Chen const char *addr; 1954d9057e8SPrzemyslaw Marczak const char *prefix; 1964d9057e8SPrzemyslaw Marczak const char *driver; 1974d9057e8SPrzemyslaw Marczak }; 1984d9057e8SPrzemyslaw Marczak 1994d9057e8SPrzemyslaw Marczak /* drivers/power/pmic-uclass.c */ 2004d9057e8SPrzemyslaw Marczak 2014d9057e8SPrzemyslaw Marczak /** 202f415a3ecSPrzemyslaw Marczak * pmic_bind_children() - bind drivers for given parent pmic, using child info 2034d9057e8SPrzemyslaw Marczak * found in 'child_info' array. 2044d9057e8SPrzemyslaw Marczak * 2054d9057e8SPrzemyslaw Marczak * @pmic - pmic device - the parent of found child's 2064d9057e8SPrzemyslaw Marczak * @child_info - N-childs info array 2074d9057e8SPrzemyslaw Marczak * @return a positive number of childs, or 0 if no child found (error) 2084d9057e8SPrzemyslaw Marczak * 2094d9057e8SPrzemyslaw Marczak * Note: For N-childs the child_info array should have N+1 entries and the last 2104d9057e8SPrzemyslaw Marczak * entry prefix should be NULL - the same as for drivers compatible. 2114d9057e8SPrzemyslaw Marczak * 2124d9057e8SPrzemyslaw Marczak * For example, a single prefix info (N=1): 2134d9057e8SPrzemyslaw Marczak * static const struct pmic_child_info bind_info[] = { 2144d9057e8SPrzemyslaw Marczak * { .prefix = "ldo", .driver = "ldo_driver" }, 2154d9057e8SPrzemyslaw Marczak * { }, 2164d9057e8SPrzemyslaw Marczak * }; 2174d9057e8SPrzemyslaw Marczak * 2184d9057e8SPrzemyslaw Marczak * This function is useful for regulator sub-nodes: 2194d9057e8SPrzemyslaw Marczak * my_regulator@0xa { 2204d9057e8SPrzemyslaw Marczak * reg = <0xa>; 2214d9057e8SPrzemyslaw Marczak * (pmic - bind automatically by compatible) 2224d9057e8SPrzemyslaw Marczak * compatible = "my_pmic"; 2234d9057e8SPrzemyslaw Marczak * ... 224f415a3ecSPrzemyslaw Marczak * (pmic's childs - bind by pmic_bind_children()) 2254d9057e8SPrzemyslaw Marczak * (nodes prefix: "ldo", driver: "my_regulator_ldo") 2264d9057e8SPrzemyslaw Marczak * ldo1 { ... }; 2274d9057e8SPrzemyslaw Marczak * ldo2 { ... }; 2284d9057e8SPrzemyslaw Marczak * 2294d9057e8SPrzemyslaw Marczak * (nodes prefix: "buck", driver: "my_regulator_buck") 2304d9057e8SPrzemyslaw Marczak * buck1 { ... }; 2314d9057e8SPrzemyslaw Marczak * buck2 { ... }; 2324d9057e8SPrzemyslaw Marczak * }; 2334d9057e8SPrzemyslaw Marczak */ 2347a869e6cSSimon Glass int pmic_bind_children(struct udevice *pmic, ofnode parent, 2354d9057e8SPrzemyslaw Marczak const struct pmic_child_info *child_info); 2364d9057e8SPrzemyslaw Marczak 2374d9057e8SPrzemyslaw Marczak /** 2384d9057e8SPrzemyslaw Marczak * pmic_get: get the pmic device using its name 2394d9057e8SPrzemyslaw Marczak * 2404d9057e8SPrzemyslaw Marczak * @name - device name 2414d9057e8SPrzemyslaw Marczak * @devp - returned pointer to the pmic device 2424d9057e8SPrzemyslaw Marczak * @return 0 on success or negative value of errno. 2434d9057e8SPrzemyslaw Marczak * 2444d9057e8SPrzemyslaw Marczak * The returned devp device can be used with pmic_read/write calls 2454d9057e8SPrzemyslaw Marczak */ 2464d9057e8SPrzemyslaw Marczak int pmic_get(const char *name, struct udevice **devp); 2474d9057e8SPrzemyslaw Marczak 2484d9057e8SPrzemyslaw Marczak /** 2494d9057e8SPrzemyslaw Marczak * pmic_reg_count: get the pmic register count 2504d9057e8SPrzemyslaw Marczak * 2514d9057e8SPrzemyslaw Marczak * The required pmic device can be obtained by 'pmic_get()' 2524d9057e8SPrzemyslaw Marczak * 2534d9057e8SPrzemyslaw Marczak * @dev - pointer to the UCLASS_PMIC device 2544d9057e8SPrzemyslaw Marczak * @return register count value on success or negative value of errno. 2554d9057e8SPrzemyslaw Marczak */ 2564d9057e8SPrzemyslaw Marczak int pmic_reg_count(struct udevice *dev); 2574d9057e8SPrzemyslaw Marczak 2584d9057e8SPrzemyslaw Marczak /** 2594d9057e8SPrzemyslaw Marczak * pmic_read/write: read/write to the UCLASS_PMIC device 2604d9057e8SPrzemyslaw Marczak * 2614d9057e8SPrzemyslaw Marczak * The required pmic device can be obtained by 'pmic_get()' 2624d9057e8SPrzemyslaw Marczak * 2634d9057e8SPrzemyslaw Marczak * @pmic - pointer to the UCLASS_PMIC device 2644d9057e8SPrzemyslaw Marczak * @reg - device register offset 2654d9057e8SPrzemyslaw Marczak * @buffer - pointer to read/write buffer 2664d9057e8SPrzemyslaw Marczak * @len - byte count for read/write 2674d9057e8SPrzemyslaw Marczak * @return 0 on success or negative value of errno. 2684d9057e8SPrzemyslaw Marczak */ 2694d9057e8SPrzemyslaw Marczak int pmic_read(struct udevice *dev, uint reg, uint8_t *buffer, int len); 2704d9057e8SPrzemyslaw Marczak int pmic_write(struct udevice *dev, uint reg, const uint8_t *buffer, int len); 2716c69c7fbSSimon Glass 2726c69c7fbSSimon Glass /** 2736c69c7fbSSimon Glass * pmic_reg_read() - read a PMIC register value 2746c69c7fbSSimon Glass * 2756c69c7fbSSimon Glass * @dev: PMIC device to read 2766c69c7fbSSimon Glass * @reg: Register to read 2776c69c7fbSSimon Glass * @return value read on success or negative value of errno. 2786c69c7fbSSimon Glass */ 2796c69c7fbSSimon Glass int pmic_reg_read(struct udevice *dev, uint reg); 2806c69c7fbSSimon Glass 2816c69c7fbSSimon Glass /** 2826c69c7fbSSimon Glass * pmic_reg_write() - write a PMIC register value 2836c69c7fbSSimon Glass * 2846c69c7fbSSimon Glass * @dev: PMIC device to write 2856c69c7fbSSimon Glass * @reg: Register to write 2866c69c7fbSSimon Glass * @value: Value to write 2876c69c7fbSSimon Glass * @return 0 on success or negative value of errno. 2886c69c7fbSSimon Glass */ 2896c69c7fbSSimon Glass int pmic_reg_write(struct udevice *dev, uint reg, uint value); 2906c69c7fbSSimon Glass 2916c69c7fbSSimon Glass /** 2926c69c7fbSSimon Glass * pmic_clrsetbits() - clear and set bits in a PMIC register 2936c69c7fbSSimon Glass * 2946c69c7fbSSimon Glass * This reads a register, optionally clears some bits, optionally sets some 2956c69c7fbSSimon Glass * bits, then writes the register. 2966c69c7fbSSimon Glass * 2976c69c7fbSSimon Glass * @dev: PMIC device to update 2986c69c7fbSSimon Glass * @reg: Register to update 2996c69c7fbSSimon Glass * @clr: Bit mask to clear (set those bits that you want cleared) 3006c69c7fbSSimon Glass * @set: Bit mask to set (set those bits that you want set) 3016c69c7fbSSimon Glass * @return 0 on success or negative value of errno. 3026c69c7fbSSimon Glass */ 3036c69c7fbSSimon Glass int pmic_clrsetbits(struct udevice *dev, uint reg, uint clr, uint set); 3046c69c7fbSSimon Glass 305c8d15c43SJoseph Chen /** 306*2a7051beSJoseph Chen * pmic_suspend() - suspend of PMIC 307*2a7051beSJoseph Chen * 308*2a7051beSJoseph Chen * @dev: PMIC device 309*2a7051beSJoseph Chen * @return 0 on success or negative value of errno. 310*2a7051beSJoseph Chen */ 311*2a7051beSJoseph Chen int pmic_suspend(struct udevice *dev); 312*2a7051beSJoseph Chen 313*2a7051beSJoseph Chen /** 314*2a7051beSJoseph Chen * pmic_resume() - resume of PMIC 315*2a7051beSJoseph Chen * 316*2a7051beSJoseph Chen * @dev: PMIC device 317*2a7051beSJoseph Chen * @return 0 on success or negative value of errno. 318*2a7051beSJoseph Chen */ 319*2a7051beSJoseph Chen int pmic_resume(struct udevice *dev); 320*2a7051beSJoseph Chen 321*2a7051beSJoseph Chen /** 322c8d15c43SJoseph Chen * pmic_shutdown() - power off supplies of PMIC 323c8d15c43SJoseph Chen * 324c8d15c43SJoseph Chen * @dev: PMIC device to update 325c8d15c43SJoseph Chen * @return 0 on success or negative value of errno. 326c8d15c43SJoseph Chen */ 327c8d15c43SJoseph Chen int pmic_shutdown(struct udevice *dev); 328c8d15c43SJoseph Chen 3294d9057e8SPrzemyslaw Marczak #endif /* CONFIG_DM_PMIC */ 3304d9057e8SPrzemyslaw Marczak 3314d9057e8SPrzemyslaw Marczak #ifdef CONFIG_POWER 332c7336815SŁukasz Majewski int pmic_init(unsigned char bus); 3335c44dd6bSTom Rini int power_init_board(void); 334c7336815SŁukasz Majewski int pmic_dialog_init(unsigned char bus); 335c7336815SŁukasz Majewski int check_reg(struct pmic *p, u32 reg); 336c7336815SŁukasz Majewski struct pmic *pmic_alloc(void); 337c7336815SŁukasz Majewski struct pmic *pmic_get(const char *s); 338c7336815SŁukasz Majewski int pmic_probe(struct pmic *p); 339c7336815SŁukasz Majewski int pmic_reg_read(struct pmic *p, u32 reg, u32 *val); 340c7336815SŁukasz Majewski int pmic_reg_write(struct pmic *p, u32 reg, u32 val); 341c7336815SŁukasz Majewski int pmic_set_output(struct pmic *p, u32 reg, int ldo, int on); 3424d9057e8SPrzemyslaw Marczak #endif 343c7336815SŁukasz Majewski 344c7336815SŁukasz Majewski #define pmic_i2c_addr (p->hw.i2c.addr) 345c7336815SŁukasz Majewski #define pmic_i2c_tx_num (p->hw.i2c.tx_num) 346c7336815SŁukasz Majewski 347c7336815SŁukasz Majewski #define pmic_spi_bitlen (p->hw.spi.bitlen) 348c7336815SŁukasz Majewski #define pmic_spi_flags (p->hw.spi.flags) 349c7336815SŁukasz Majewski 350c7336815SŁukasz Majewski #endif /* __CORE_PMIC_H_ */ 351