1 /*
2  * da9052 declarations for DA9052 PMICs.
3  *
4  * Copyright(c) 2011 Dialog Semiconductor Ltd.
5  *
6  * Author: David Dajun Chen <dchen@diasemi.com>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21  *
22  */
23 
24 #ifndef __MFD_DA9052_DA9052_H
25 #define __MFD_DA9052_DA9052_H
26 
27 #include <linux/interrupt.h>
28 #include <linux/regmap.h>
29 #include <linux/slab.h>
30 #include <linux/completion.h>
31 #include <linux/list.h>
32 #include <linux/mfd/core.h>
33 
34 #include <linux/mfd/da9052/reg.h>
35 
36 #define DA9052_IRQ_DCIN	0
37 #define DA9052_IRQ_VBUS	1
38 #define DA9052_IRQ_DCINREM	2
39 #define DA9052_IRQ_VBUSREM	3
40 #define DA9052_IRQ_VDDLOW	4
41 #define DA9052_IRQ_ALARM	5
42 #define DA9052_IRQ_SEQRDY	6
43 #define DA9052_IRQ_COMP1V2	7
44 #define DA9052_IRQ_NONKEY	8
45 #define DA9052_IRQ_IDFLOAT	9
46 #define DA9052_IRQ_IDGND	10
47 #define DA9052_IRQ_CHGEND	11
48 #define DA9052_IRQ_TBAT	12
49 #define DA9052_IRQ_ADC_EOM	13
50 #define DA9052_IRQ_PENDOWN	14
51 #define DA9052_IRQ_TSIREADY	15
52 #define DA9052_IRQ_GPI0	16
53 #define DA9052_IRQ_GPI1	17
54 #define DA9052_IRQ_GPI2	18
55 #define DA9052_IRQ_GPI3	19
56 #define DA9052_IRQ_GPI4	20
57 #define DA9052_IRQ_GPI5	21
58 #define DA9052_IRQ_GPI6	22
59 #define DA9052_IRQ_GPI7	23
60 #define DA9052_IRQ_GPI8	24
61 #define DA9052_IRQ_GPI9	25
62 #define DA9052_IRQ_GPI10	26
63 #define DA9052_IRQ_GPI11	27
64 #define DA9052_IRQ_GPI12	28
65 #define DA9052_IRQ_GPI13	29
66 #define DA9052_IRQ_GPI14	30
67 #define DA9052_IRQ_GPI15	31
68 
69 enum da9052_chip_id {
70 	DA9052,
71 	DA9053_AA,
72 	DA9053_BA,
73 	DA9053_BB,
74 };
75 
76 struct da9052_pdata;
77 
78 struct da9052 {
79 	struct mutex io_lock;
80 
81 	struct device *dev;
82 	struct regmap *regmap;
83 
84 	int irq_base;
85 	u8 chip_id;
86 
87 	int chip_irq;
88 };
89 
90 /* Device I/O API */
da9052_reg_read(struct da9052 * da9052,unsigned char reg)91 static inline int da9052_reg_read(struct da9052 *da9052, unsigned char reg)
92 {
93 	int val, ret;
94 
95 	ret = regmap_read(da9052->regmap, reg, &val);
96 	if (ret < 0)
97 		return ret;
98 	return val;
99 }
100 
da9052_reg_write(struct da9052 * da9052,unsigned char reg,unsigned char val)101 static inline int da9052_reg_write(struct da9052 *da9052, unsigned char reg,
102 				    unsigned char val)
103 {
104 	return regmap_write(da9052->regmap, reg, val);
105 }
106 
da9052_group_read(struct da9052 * da9052,unsigned char reg,unsigned reg_cnt,unsigned char * val)107 static inline int da9052_group_read(struct da9052 *da9052, unsigned char reg,
108 				     unsigned reg_cnt, unsigned char *val)
109 {
110 	return regmap_bulk_read(da9052->regmap, reg, val, reg_cnt);
111 }
112 
da9052_group_write(struct da9052 * da9052,unsigned char reg,unsigned reg_cnt,unsigned char * val)113 static inline int da9052_group_write(struct da9052 *da9052, unsigned char reg,
114 				      unsigned reg_cnt, unsigned char *val)
115 {
116 	return regmap_raw_write(da9052->regmap, reg, val, reg_cnt);
117 }
118 
da9052_reg_update(struct da9052 * da9052,unsigned char reg,unsigned char bit_mask,unsigned char reg_val)119 static inline int da9052_reg_update(struct da9052 *da9052, unsigned char reg,
120 				     unsigned char bit_mask,
121 				     unsigned char reg_val)
122 {
123 	return regmap_update_bits(da9052->regmap, reg, bit_mask, reg_val);
124 }
125 
126 int da9052_device_init(struct da9052 *da9052, u8 chip_id);
127 void da9052_device_exit(struct da9052 *da9052);
128 
129 extern struct regmap_config da9052_regmap_config;
130 
131 #endif /* __MFD_DA9052_DA9052_H */
132