aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/mfd
diff options
context:
space:
mode:
authorJoonyoung Shim <jy0922.shim@samsung.com>2010-09-10 12:36:39 -0400
committerSamuel Ortiz <sameo@linux.intel.com>2010-10-28 18:29:03 -0400
commit2c7e6f5797140b33ec2b967ff28941e1c7eff4b2 (patch)
treec05033ac7712ab253981dc43ac512577113c91c4 /include/linux/mfd
parent676e02d7a2ed9bb02994670a07df533a29a99de6 (diff)
mfd: Add MAX8998 interrupts support
Use genirq and provide seperated file for interrupts support. Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Reviewed-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'include/linux/mfd')
-rw-r--r--include/linux/mfd/max8998-private.h72
-rw-r--r--include/linux/mfd/max8998.h11
2 files changed, 77 insertions, 6 deletions
diff --git a/include/linux/mfd/max8998-private.h b/include/linux/mfd/max8998-private.h
index f0a20cdc288c..3bd2371a05f7 100644
--- a/include/linux/mfd/max8998-private.h
+++ b/include/linux/mfd/max8998-private.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * max8698.h - Voltage regulator driver for the Maxim 8998 2 * max8998.h - Voltage regulator driver for the Maxim 8998
3 * 3 *
4 * Copyright (C) 2009-2010 Samsung Electrnoics 4 * Copyright (C) 2009-2010 Samsung Electrnoics
5 * Kyungmin Park <kyungmin.park@samsung.com> 5 * Kyungmin Park <kyungmin.park@samsung.com>
@@ -23,6 +23,8 @@
23#ifndef __LINUX_MFD_MAX8998_PRIV_H 23#ifndef __LINUX_MFD_MAX8998_PRIV_H
24#define __LINUX_MFD_MAX8998_PRIV_H 24#define __LINUX_MFD_MAX8998_PRIV_H
25 25
26#define MAX8998_NUM_IRQ_REGS 4
27
26/* MAX 8998 registers */ 28/* MAX 8998 registers */
27enum { 29enum {
28 MAX8998_REG_IRQ1, 30 MAX8998_REG_IRQ1,
@@ -72,20 +74,86 @@ enum {
72 MAX8998_REG_LBCNFG2, 74 MAX8998_REG_LBCNFG2,
73}; 75};
74 76
77/* IRQ definitions */
78enum {
79 MAX8998_IRQ_DCINF,
80 MAX8998_IRQ_DCINR,
81 MAX8998_IRQ_JIGF,
82 MAX8998_IRQ_JIGR,
83 MAX8998_IRQ_PWRONF,
84 MAX8998_IRQ_PWRONR,
85
86 MAX8998_IRQ_WTSREVNT,
87 MAX8998_IRQ_SMPLEVNT,
88 MAX8998_IRQ_ALARM1,
89 MAX8998_IRQ_ALARM0,
90
91 MAX8998_IRQ_ONKEY1S,
92 MAX8998_IRQ_TOPOFFR,
93 MAX8998_IRQ_DCINOVPR,
94 MAX8998_IRQ_CHGRSTF,
95 MAX8998_IRQ_DONER,
96 MAX8998_IRQ_CHGFAULT,
97
98 MAX8998_IRQ_LOBAT1,
99 MAX8998_IRQ_LOBAT2,
100
101 MAX8998_IRQ_NR,
102};
103
104#define MAX8998_IRQ_DCINF_MASK (1 << 2)
105#define MAX8998_IRQ_DCINR_MASK (1 << 3)
106#define MAX8998_IRQ_JIGF_MASK (1 << 4)
107#define MAX8998_IRQ_JIGR_MASK (1 << 5)
108#define MAX8998_IRQ_PWRONF_MASK (1 << 6)
109#define MAX8998_IRQ_PWRONR_MASK (1 << 7)
110
111#define MAX8998_IRQ_WTSREVNT_MASK (1 << 0)
112#define MAX8998_IRQ_SMPLEVNT_MASK (1 << 1)
113#define MAX8998_IRQ_ALARM1_MASK (1 << 2)
114#define MAX8998_IRQ_ALARM0_MASK (1 << 3)
115
116#define MAX8998_IRQ_ONKEY1S_MASK (1 << 0)
117#define MAX8998_IRQ_TOPOFFR_MASK (1 << 2)
118#define MAX8998_IRQ_DCINOVPR_MASK (1 << 3)
119#define MAX8998_IRQ_CHGRSTF_MASK (1 << 4)
120#define MAX8998_IRQ_DONER_MASK (1 << 5)
121#define MAX8998_IRQ_CHGFAULT_MASK (1 << 7)
122
123#define MAX8998_IRQ_LOBAT1_MASK (1 << 0)
124#define MAX8998_IRQ_LOBAT2_MASK (1 << 1)
125
75/** 126/**
76 * struct max8998_dev - max8998 master device for sub-drivers 127 * struct max8998_dev - max8998 master device for sub-drivers
77 * @dev: master device of the chip (can be used to access platform data) 128 * @dev: master device of the chip (can be used to access platform data)
78 * @i2c: i2c client private data 129 * @i2c: i2c client private data
79 * @iolock: mutex for serializing io access 130 * @iolock: mutex for serializing io access
131 * @irqlock: mutex for buslock
132 * @irq_base: base IRQ number for max8998, required for IRQs
133 * @irq: generic IRQ number for max8998
134 * @ono: power onoff IRQ number for max8998
135 * @irq_masks_cur: currently active value
136 * @irq_masks_cache: cached hardware value
80 */ 137 */
81
82struct max8998_dev { 138struct max8998_dev {
83 struct device *dev; 139 struct device *dev;
84 struct i2c_client *i2c; 140 struct i2c_client *i2c;
85 struct mutex iolock; 141 struct mutex iolock;
142 struct mutex irqlock;
143
144 int irq_base;
145 int irq;
146 int ono;
147 u8 irq_masks_cur[MAX8998_NUM_IRQ_REGS];
148 u8 irq_masks_cache[MAX8998_NUM_IRQ_REGS];
86}; 149};
87 150
151int max8998_irq_init(struct max8998_dev *max8998);
152void max8998_irq_exit(struct max8998_dev *max8998);
153
88extern int max8998_read_reg(struct i2c_client *i2c, u8 reg, u8 *dest); 154extern int max8998_read_reg(struct i2c_client *i2c, u8 reg, u8 *dest);
155extern int max8998_bulk_read(struct i2c_client *i2c, u8 reg, int count,
156 u8 *buf);
89extern int max8998_write_reg(struct i2c_client *i2c, u8 reg, u8 value); 157extern int max8998_write_reg(struct i2c_client *i2c, u8 reg, u8 value);
90extern int max8998_update_reg(struct i2c_client *i2c, u8 reg, u8 val, u8 mask); 158extern int max8998_update_reg(struct i2c_client *i2c, u8 reg, u8 val, u8 mask);
91 159
diff --git a/include/linux/mfd/max8998.h b/include/linux/mfd/max8998.h
index 1d3601a2d853..d47ed4c190fe 100644
--- a/include/linux/mfd/max8998.h
+++ b/include/linux/mfd/max8998.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * max8698.h - Voltage regulator driver for the Maxim 8998 2 * max8998.h - Voltage regulator driver for the Maxim 8998
3 * 3 *
4 * Copyright (C) 2009-2010 Samsung Electrnoics 4 * Copyright (C) 2009-2010 Samsung Electrnoics
5 * Kyungmin Park <kyungmin.park@samsung.com> 5 * Kyungmin Park <kyungmin.park@samsung.com>
@@ -66,13 +66,16 @@ struct max8998_regulator_data {
66 66
67/** 67/**
68 * struct max8998_board - packages regulator init data 68 * struct max8998_board - packages regulator init data
69 * @num_regulators: number of regultors used
70 * @regulators: array of defined regulators 69 * @regulators: array of defined regulators
70 * @num_regulators: number of regultors used
71 * @irq_base: base IRQ number for max8998, required for IRQs
72 * @ono: power onoff IRQ number for max8998
71 */ 73 */
72
73struct max8998_platform_data { 74struct max8998_platform_data {
74 int num_regulators;
75 struct max8998_regulator_data *regulators; 75 struct max8998_regulator_data *regulators;
76 int num_regulators;
77 int irq_base;
78 int ono;
76}; 79};
77 80
78#endif /* __LINUX_MFD_MAX8998_H */ 81#endif /* __LINUX_MFD_MAX8998_H */