xref: /openbmc/linux/drivers/mfd/mc13xxx.h (revision c39cf60f)
1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2a0c7c1d4SMarc Reilly /*
3a0c7c1d4SMarc Reilly  * Copyright 2012 Creative Product Design
4a0c7c1d4SMarc Reilly  * Marc Reilly <marc@cpdesign.com.au>
5a0c7c1d4SMarc Reilly  */
6a0c7c1d4SMarc Reilly #ifndef __DRIVERS_MFD_MC13XXX_H
7a0c7c1d4SMarc Reilly #define __DRIVERS_MFD_MC13XXX_H
8a0c7c1d4SMarc Reilly 
9a0c7c1d4SMarc Reilly #include <linux/mutex.h>
10a0c7c1d4SMarc Reilly #include <linux/regmap.h>
11a0c7c1d4SMarc Reilly #include <linux/mfd/mc13xxx.h>
12a0c7c1d4SMarc Reilly 
13cd0f34b0SUwe Kleine-König #define MC13XXX_NUMREGS		0x3f
1410f9edaeSAlexander Shiyan #define MC13XXX_IRQ_REG_CNT	2
1510f9edaeSAlexander Shiyan #define MC13XXX_IRQ_PER_REG	24
16cd0f34b0SUwe Kleine-König 
17cd0f34b0SUwe Kleine-König struct mc13xxx;
18cd0f34b0SUwe Kleine-König 
19cd0f34b0SUwe Kleine-König struct mc13xxx_variant {
20cd0f34b0SUwe Kleine-König 	const char *name;
21cd0f34b0SUwe Kleine-König 	void (*print_revision)(struct mc13xxx *mc13xxx, u32 revision);
22a0c7c1d4SMarc Reilly };
23a0c7c1d4SMarc Reilly 
24cd0f34b0SUwe Kleine-König extern struct mc13xxx_variant
25cd0f34b0SUwe Kleine-König 		mc13xxx_variant_mc13783,
260312e024SUwe Kleine-König 		mc13xxx_variant_mc13892,
270312e024SUwe Kleine-König 		mc13xxx_variant_mc34708;
28a0c7c1d4SMarc Reilly 
29a0c7c1d4SMarc Reilly struct mc13xxx {
30a0c7c1d4SMarc Reilly 	struct regmap *regmap;
31a0c7c1d4SMarc Reilly 
32a0c7c1d4SMarc Reilly 	struct device *dev;
33cd0f34b0SUwe Kleine-König 	const struct mc13xxx_variant *variant;
34a0c7c1d4SMarc Reilly 
3510f9edaeSAlexander Shiyan 	struct regmap_irq irqs[MC13XXX_IRQ_PER_REG * MC13XXX_IRQ_REG_CNT];
3610f9edaeSAlexander Shiyan 	struct regmap_irq_chip irq_chip;
3710f9edaeSAlexander Shiyan 	struct regmap_irq_chip_data *irq_data;
3810f9edaeSAlexander Shiyan 
39a0c7c1d4SMarc Reilly 	struct mutex lock;
40a0c7c1d4SMarc Reilly 	int irq;
41a0c7c1d4SMarc Reilly 	int flags;
42a0c7c1d4SMarc Reilly 
43a0c7c1d4SMarc Reilly 	int adcflags;
44a0c7c1d4SMarc Reilly };
45a0c7c1d4SMarc Reilly 
46db9ef449SAlexander Shiyan int mc13xxx_common_init(struct device *dev);
47*c39cf60fSUwe Kleine-König void mc13xxx_common_exit(struct device *dev);
48a0c7c1d4SMarc Reilly 
49a0c7c1d4SMarc Reilly #endif /* __DRIVERS_MFD_MC13XXX_H */
50