diff options
Diffstat (limited to 'include/linux/mfd')
| -rw-r--r-- | include/linux/mfd/88pm860x.h | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/include/linux/mfd/88pm860x.h b/include/linux/mfd/88pm860x.h index 5845ae47df30..b4d6018ba0d6 100644 --- a/include/linux/mfd/88pm860x.h +++ b/include/linux/mfd/88pm860x.h | |||
| @@ -12,6 +12,8 @@ | |||
| 12 | #ifndef __LINUX_MFD_88PM860X_H | 12 | #ifndef __LINUX_MFD_88PM860X_H |
| 13 | #define __LINUX_MFD_88PM860X_H | 13 | #define __LINUX_MFD_88PM860X_H |
| 14 | 14 | ||
| 15 | #include <linux/interrupt.h> | ||
| 16 | |||
| 15 | enum { | 17 | enum { |
| 16 | CHIP_INVALID = 0, | 18 | CHIP_INVALID = 0, |
| 17 | CHIP_PM8606, | 19 | CHIP_PM8606, |
| @@ -109,33 +111,10 @@ enum { | |||
| 109 | 111 | ||
| 110 | /* Misc Registers */ | 112 | /* Misc Registers */ |
| 111 | #define PM8607_CHIP_ID (0x00) | 113 | #define PM8607_CHIP_ID (0x00) |
| 114 | #define PM8607_B0_MISC1 (0x0C) | ||
| 112 | #define PM8607_LDO1 (0x10) | 115 | #define PM8607_LDO1 (0x10) |
| 113 | #define PM8607_DVC3 (0x26) | 116 | #define PM8607_DVC3 (0x26) |
| 114 | #define PM8607_MISC1 (0x40) | 117 | #define PM8607_A1_MISC1 (0x40) |
| 115 | |||
| 116 | /* bit definitions for PM8607 events */ | ||
| 117 | #define PM8607_EVENT_ONKEY (1 << 0) | ||
| 118 | #define PM8607_EVENT_EXTON (1 << 1) | ||
| 119 | #define PM8607_EVENT_CHG (1 << 2) | ||
| 120 | #define PM8607_EVENT_BAT (1 << 3) | ||
| 121 | #define PM8607_EVENT_RTC (1 << 4) | ||
| 122 | #define PM8607_EVENT_CC (1 << 5) | ||
| 123 | #define PM8607_EVENT_VBAT (1 << 8) | ||
| 124 | #define PM8607_EVENT_VCHG (1 << 9) | ||
| 125 | #define PM8607_EVENT_VSYS (1 << 10) | ||
| 126 | #define PM8607_EVENT_TINT (1 << 11) | ||
| 127 | #define PM8607_EVENT_GPADC0 (1 << 12) | ||
| 128 | #define PM8607_EVENT_GPADC1 (1 << 13) | ||
| 129 | #define PM8607_EVENT_GPADC2 (1 << 14) | ||
| 130 | #define PM8607_EVENT_GPADC3 (1 << 15) | ||
| 131 | #define PM8607_EVENT_AUDIO_SHORT (1 << 16) | ||
| 132 | #define PM8607_EVENT_PEN (1 << 17) | ||
| 133 | #define PM8607_EVENT_HEADSET (1 << 18) | ||
| 134 | #define PM8607_EVENT_HOOK (1 << 19) | ||
| 135 | #define PM8607_EVENT_MICIN (1 << 20) | ||
| 136 | #define PM8607_EVENT_CHG_TIMEOUT (1 << 21) | ||
| 137 | #define PM8607_EVENT_CHG_DONE (1 << 22) | ||
| 138 | #define PM8607_EVENT_CHG_FAULT (1 << 23) | ||
| 139 | 118 | ||
| 140 | /* bit definitions of Status Query Interface */ | 119 | /* bit definitions of Status Query Interface */ |
| 141 | #define PM8607_STATUS_CC (1 << 3) | 120 | #define PM8607_STATUS_CC (1 << 3) |
| @@ -154,7 +133,12 @@ enum { | |||
| 154 | #define PM8607_BUCK3_DOUBLE (1 << 6) | 133 | #define PM8607_BUCK3_DOUBLE (1 << 6) |
| 155 | 134 | ||
| 156 | /* bit definitions of Misc1 */ | 135 | /* bit definitions of Misc1 */ |
| 157 | #define PM8607_MISC1_PI2C (1 << 0) | 136 | #define PM8607_A1_MISC1_PI2C (1 << 0) |
| 137 | #define PM8607_B0_MISC1_INV_INT (1 << 0) | ||
| 138 | #define PM8607_B0_MISC1_INT_CLEAR (1 << 1) | ||
| 139 | #define PM8607_B0_MISC1_INT_MASK (1 << 2) | ||
| 140 | #define PM8607_B0_MISC1_PI2C (1 << 3) | ||
| 141 | #define PM8607_B0_MISC1_RESET (1 << 6) | ||
| 158 | 142 | ||
| 159 | /* Interrupt Number in 88PM8607 */ | 143 | /* Interrupt Number in 88PM8607 */ |
| 160 | enum { | 144 | enum { |
| @@ -187,15 +171,26 @@ enum { | |||
| 187 | PM8607_CHIP_B0 = 0x48, | 171 | PM8607_CHIP_B0 = 0x48, |
| 188 | }; | 172 | }; |
| 189 | 173 | ||
| 174 | #define PM860X_NUM_IRQ 24 | ||
| 175 | |||
| 176 | struct pm860x_irq { | ||
| 177 | irq_handler_t handler; | ||
| 178 | void *data; | ||
| 179 | }; | ||
| 180 | |||
| 190 | struct pm860x_chip { | 181 | struct pm860x_chip { |
| 191 | struct device *dev; | 182 | struct device *dev; |
| 192 | struct mutex io_lock; | 183 | struct mutex io_lock; |
| 184 | struct mutex irq_lock; | ||
| 193 | struct i2c_client *client; | 185 | struct i2c_client *client; |
| 194 | struct i2c_client *companion; /* companion chip client */ | 186 | struct i2c_client *companion; /* companion chip client */ |
| 187 | struct pm860x_irq irq[PM860X_NUM_IRQ]; | ||
| 195 | 188 | ||
| 196 | int buck3_double; /* DVC ramp slope double */ | 189 | int buck3_double; /* DVC ramp slope double */ |
| 197 | unsigned short companion_addr; | 190 | unsigned short companion_addr; |
| 198 | int id; | 191 | int id; |
| 192 | int irq_mode; | ||
| 193 | int chip_irq; | ||
| 199 | unsigned char chip_version; | 194 | unsigned char chip_version; |
| 200 | 195 | ||
| 201 | }; | 196 | }; |
| @@ -210,6 +205,7 @@ enum { | |||
| 210 | struct pm860x_platform_data { | 205 | struct pm860x_platform_data { |
| 211 | unsigned short companion_addr; /* I2C address of companion chip */ | 206 | unsigned short companion_addr; /* I2C address of companion chip */ |
| 212 | int i2c_port; /* Controlled by GI2C or PI2C */ | 207 | int i2c_port; /* Controlled by GI2C or PI2C */ |
| 208 | int irq_mode; /* Clear interrupt by read/write(0/1) */ | ||
| 213 | struct regulator_init_data *regulator[PM8607_MAX_REGULATOR]; | 209 | struct regulator_init_data *regulator[PM8607_MAX_REGULATOR]; |
| 214 | }; | 210 | }; |
| 215 | 211 | ||
| @@ -220,6 +216,12 @@ extern int pm860x_bulk_write(struct i2c_client *, int, int, unsigned char *); | |||
| 220 | extern int pm860x_set_bits(struct i2c_client *, int, unsigned char, | 216 | extern int pm860x_set_bits(struct i2c_client *, int, unsigned char, |
| 221 | unsigned char); | 217 | unsigned char); |
| 222 | 218 | ||
| 219 | extern int pm860x_mask_irq(struct pm860x_chip *, int); | ||
| 220 | extern int pm860x_unmask_irq(struct pm860x_chip *, int); | ||
| 221 | extern int pm860x_request_irq(struct pm860x_chip *, int, | ||
| 222 | irq_handler_t handler, void *); | ||
| 223 | extern int pm860x_free_irq(struct pm860x_chip *, int); | ||
| 224 | |||
| 223 | extern int pm860x_device_init(struct pm860x_chip *chip, | 225 | extern int pm860x_device_init(struct pm860x_chip *chip, |
| 224 | struct pm860x_platform_data *pdata); | 226 | struct pm860x_platform_data *pdata); |
| 225 | extern void pm860x_device_exit(struct pm860x_chip *chip); | 227 | extern void pm860x_device_exit(struct pm860x_chip *chip); |
