xref: /rk3399_rockchip-uboot/include/power/pmic.h (revision c7336815078ff3745e3130aeff35991e3e98e61e)
1*c7336815SŁukasz Majewski /*
2*c7336815SŁukasz Majewski  *  Copyright (C) 2011-2012 Samsung Electronics
3*c7336815SŁukasz Majewski  *  Lukasz Majewski <l.majewski@samsung.com>
4*c7336815SŁukasz Majewski  *
5*c7336815SŁukasz Majewski  * See file CREDITS for list of people who contributed to this
6*c7336815SŁukasz Majewski  * project.
7*c7336815SŁukasz Majewski  *
8*c7336815SŁukasz Majewski  * This program is free software; you can redistribute it and/or
9*c7336815SŁukasz Majewski  * modify it under the terms of the GNU General Public License as
10*c7336815SŁukasz Majewski  * published by the Free Software Foundation; either version 2 of
11*c7336815SŁukasz Majewski  * the License, or (at your option) any later version.
12*c7336815SŁukasz Majewski  *
13*c7336815SŁukasz Majewski  * This program is distributed in the hope that it will be useful,
14*c7336815SŁukasz Majewski  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15*c7336815SŁukasz Majewski  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16*c7336815SŁukasz Majewski  * GNU General Public License for more details.
17*c7336815SŁukasz Majewski  *
18*c7336815SŁukasz Majewski  * You should have received a copy of the GNU General Public License
19*c7336815SŁukasz Majewski  * along with this program; if not, write to the Free Software
20*c7336815SŁukasz Majewski  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21*c7336815SŁukasz Majewski  * MA 02111-1307 USA
22*c7336815SŁukasz Majewski  */
23*c7336815SŁukasz Majewski 
24*c7336815SŁukasz Majewski #ifndef __CORE_PMIC_H_
25*c7336815SŁukasz Majewski #define __CORE_PMIC_H_
26*c7336815SŁukasz Majewski 
27*c7336815SŁukasz Majewski #include <common.h>
28*c7336815SŁukasz Majewski #include <linux/list.h>
29*c7336815SŁukasz Majewski #include <i2c.h>
30*c7336815SŁukasz Majewski 
31*c7336815SŁukasz Majewski enum { PMIC_I2C, PMIC_SPI, };
32*c7336815SŁukasz Majewski enum { I2C_PMIC, I2C_NUM, };
33*c7336815SŁukasz Majewski enum { PMIC_READ, PMIC_WRITE, };
34*c7336815SŁukasz Majewski enum { PMIC_SENSOR_BYTE_ORDER_LITTLE, PMIC_SENSOR_BYTE_ORDER_BIG, };
35*c7336815SŁukasz Majewski 
36*c7336815SŁukasz Majewski struct p_i2c {
37*c7336815SŁukasz Majewski 	unsigned char addr;
38*c7336815SŁukasz Majewski 	unsigned char *buf;
39*c7336815SŁukasz Majewski 	unsigned char tx_num;
40*c7336815SŁukasz Majewski };
41*c7336815SŁukasz Majewski 
42*c7336815SŁukasz Majewski struct p_spi {
43*c7336815SŁukasz Majewski 	unsigned int cs;
44*c7336815SŁukasz Majewski 	unsigned int mode;
45*c7336815SŁukasz Majewski 	unsigned int bitlen;
46*c7336815SŁukasz Majewski 	unsigned int clk;
47*c7336815SŁukasz Majewski 	unsigned int flags;
48*c7336815SŁukasz Majewski 	u32 (*prepare_tx)(u32 reg, u32 *val, u32 write);
49*c7336815SŁukasz Majewski };
50*c7336815SŁukasz Majewski 
51*c7336815SŁukasz Majewski struct pmic {
52*c7336815SŁukasz Majewski 	const char *name;
53*c7336815SŁukasz Majewski 	unsigned char bus;
54*c7336815SŁukasz Majewski 	unsigned char interface;
55*c7336815SŁukasz Majewski 	unsigned char sensor_byte_order;
56*c7336815SŁukasz Majewski 	unsigned int number_of_regs;
57*c7336815SŁukasz Majewski 	union hw {
58*c7336815SŁukasz Majewski 		struct p_i2c i2c;
59*c7336815SŁukasz Majewski 		struct p_spi spi;
60*c7336815SŁukasz Majewski 	} hw;
61*c7336815SŁukasz Majewski 
62*c7336815SŁukasz Majewski 	struct list_head list;
63*c7336815SŁukasz Majewski };
64*c7336815SŁukasz Majewski 
65*c7336815SŁukasz Majewski int pmic_init(unsigned char bus);
66*c7336815SŁukasz Majewski int pmic_dialog_init(unsigned char bus);
67*c7336815SŁukasz Majewski int check_reg(struct pmic *p, u32 reg);
68*c7336815SŁukasz Majewski struct pmic *pmic_alloc(void);
69*c7336815SŁukasz Majewski struct pmic *pmic_get(const char *s);
70*c7336815SŁukasz Majewski int pmic_probe(struct pmic *p);
71*c7336815SŁukasz Majewski int pmic_reg_read(struct pmic *p, u32 reg, u32 *val);
72*c7336815SŁukasz Majewski int pmic_reg_write(struct pmic *p, u32 reg, u32 val);
73*c7336815SŁukasz Majewski int pmic_set_output(struct pmic *p, u32 reg, int ldo, int on);
74*c7336815SŁukasz Majewski 
75*c7336815SŁukasz Majewski #define pmic_i2c_addr (p->hw.i2c.addr)
76*c7336815SŁukasz Majewski #define pmic_i2c_tx_num (p->hw.i2c.tx_num)
77*c7336815SŁukasz Majewski 
78*c7336815SŁukasz Majewski #define pmic_spi_bitlen (p->hw.spi.bitlen)
79*c7336815SŁukasz Majewski #define pmic_spi_flags (p->hw.spi.flags)
80*c7336815SŁukasz Majewski 
81*c7336815SŁukasz Majewski #endif /* __CORE_PMIC_H_ */
82