diff options
Diffstat (limited to 'include/linux/mfd/palmas.h')
| -rw-r--r-- | include/linux/mfd/palmas.h | 232 |
1 files changed, 202 insertions, 30 deletions
diff --git a/include/linux/mfd/palmas.h b/include/linux/mfd/palmas.h index 9cbc642d40ad..29f6616e12f0 100644 --- a/include/linux/mfd/palmas.h +++ b/include/linux/mfd/palmas.h | |||
| @@ -23,6 +23,9 @@ | |||
| 23 | #define PALMAS_NUM_CLIENTS 3 | 23 | #define PALMAS_NUM_CLIENTS 3 |
| 24 | 24 | ||
| 25 | struct palmas_pmic; | 25 | struct palmas_pmic; |
| 26 | struct palmas_gpadc; | ||
| 27 | struct palmas_resource; | ||
| 28 | struct palmas_usb; | ||
| 26 | 29 | ||
| 27 | struct palmas { | 30 | struct palmas { |
| 28 | struct device *dev; | 31 | struct device *dev; |
| @@ -41,6 +44,9 @@ struct palmas { | |||
| 41 | 44 | ||
| 42 | /* Child Devices */ | 45 | /* Child Devices */ |
| 43 | struct palmas_pmic *pmic; | 46 | struct palmas_pmic *pmic; |
| 47 | struct palmas_gpadc *gpadc; | ||
| 48 | struct palmas_resource *resource; | ||
| 49 | struct palmas_usb *usb; | ||
| 44 | 50 | ||
| 45 | /* GPIO MUXing */ | 51 | /* GPIO MUXing */ |
| 46 | u8 gpio_muxed; | 52 | u8 gpio_muxed; |
| @@ -48,6 +54,23 @@ struct palmas { | |||
| 48 | u8 pwm_muxed; | 54 | u8 pwm_muxed; |
| 49 | }; | 55 | }; |
| 50 | 56 | ||
| 57 | struct palmas_gpadc_platform_data { | ||
| 58 | /* Channel 3 current source is only enabled during conversion */ | ||
| 59 | int ch3_current; | ||
| 60 | |||
| 61 | /* Channel 0 current source can be used for battery detection. | ||
| 62 | * If used for battery detection this will cause a permanent current | ||
| 63 | * consumption depending on current level set here. | ||
| 64 | */ | ||
| 65 | int ch0_current; | ||
| 66 | |||
| 67 | /* default BAT_REMOVAL_DAT setting on device probe */ | ||
| 68 | int bat_removal; | ||
| 69 | |||
| 70 | /* Sets the START_POLARITY bit in the RT_CTRL register */ | ||
| 71 | int start_polarity; | ||
| 72 | }; | ||
| 73 | |||
| 51 | struct palmas_reg_init { | 74 | struct palmas_reg_init { |
| 52 | /* warm_rest controls the voltage levels after a warm reset | 75 | /* warm_rest controls the voltage levels after a warm reset |
| 53 | * | 76 | * |
| @@ -107,21 +130,94 @@ struct palmas_reg_init { | |||
| 107 | 130 | ||
| 108 | }; | 131 | }; |
| 109 | 132 | ||
| 133 | enum palmas_regulators { | ||
| 134 | /* SMPS regulators */ | ||
| 135 | PALMAS_REG_SMPS12, | ||
| 136 | PALMAS_REG_SMPS123, | ||
| 137 | PALMAS_REG_SMPS3, | ||
| 138 | PALMAS_REG_SMPS45, | ||
| 139 | PALMAS_REG_SMPS457, | ||
| 140 | PALMAS_REG_SMPS6, | ||
| 141 | PALMAS_REG_SMPS7, | ||
| 142 | PALMAS_REG_SMPS8, | ||
| 143 | PALMAS_REG_SMPS9, | ||
| 144 | PALMAS_REG_SMPS10, | ||
| 145 | /* LDO regulators */ | ||
| 146 | PALMAS_REG_LDO1, | ||
| 147 | PALMAS_REG_LDO2, | ||
| 148 | PALMAS_REG_LDO3, | ||
| 149 | PALMAS_REG_LDO4, | ||
| 150 | PALMAS_REG_LDO5, | ||
| 151 | PALMAS_REG_LDO6, | ||
| 152 | PALMAS_REG_LDO7, | ||
| 153 | PALMAS_REG_LDO8, | ||
| 154 | PALMAS_REG_LDO9, | ||
| 155 | PALMAS_REG_LDOLN, | ||
| 156 | PALMAS_REG_LDOUSB, | ||
| 157 | /* Total number of regulators */ | ||
| 158 | PALMAS_NUM_REGS, | ||
| 159 | }; | ||
| 160 | |||
| 110 | struct palmas_pmic_platform_data { | 161 | struct palmas_pmic_platform_data { |
| 111 | /* An array of pointers to regulator init data indexed by regulator | 162 | /* An array of pointers to regulator init data indexed by regulator |
| 112 | * ID | 163 | * ID |
| 113 | */ | 164 | */ |
| 114 | struct regulator_init_data **reg_data; | 165 | struct regulator_init_data *reg_data[PALMAS_NUM_REGS]; |
| 115 | 166 | ||
| 116 | /* An array of pointers to structures containing sleep mode and DVS | 167 | /* An array of pointers to structures containing sleep mode and DVS |
| 117 | * configuration for regulators indexed by ID | 168 | * configuration for regulators indexed by ID |
| 118 | */ | 169 | */ |
| 119 | struct palmas_reg_init **reg_init; | 170 | struct palmas_reg_init *reg_init[PALMAS_NUM_REGS]; |
| 120 | 171 | ||
| 121 | /* use LDO6 for vibrator control */ | 172 | /* use LDO6 for vibrator control */ |
| 122 | int ldo6_vibrator; | 173 | int ldo6_vibrator; |
| 174 | }; | ||
| 123 | 175 | ||
| 176 | struct palmas_usb_platform_data { | ||
| 177 | /* Set this if platform wishes its own vbus control */ | ||
| 178 | int no_control_vbus; | ||
| 124 | 179 | ||
| 180 | /* Do we enable the wakeup comparator on probe */ | ||
| 181 | int wakeup; | ||
| 182 | }; | ||
| 183 | |||
| 184 | struct palmas_resource_platform_data { | ||
| 185 | int regen1_mode_sleep; | ||
| 186 | int regen2_mode_sleep; | ||
| 187 | int sysen1_mode_sleep; | ||
| 188 | int sysen2_mode_sleep; | ||
| 189 | |||
| 190 | /* bitfield to be loaded to NSLEEP_RES_ASSIGN */ | ||
| 191 | u8 nsleep_res; | ||
| 192 | /* bitfield to be loaded to NSLEEP_SMPS_ASSIGN */ | ||
| 193 | u8 nsleep_smps; | ||
| 194 | /* bitfield to be loaded to NSLEEP_LDO_ASSIGN1 */ | ||
| 195 | u8 nsleep_ldo1; | ||
| 196 | /* bitfield to be loaded to NSLEEP_LDO_ASSIGN2 */ | ||
| 197 | u8 nsleep_ldo2; | ||
| 198 | |||
| 199 | /* bitfield to be loaded to ENABLE1_RES_ASSIGN */ | ||
| 200 | u8 enable1_res; | ||
| 201 | /* bitfield to be loaded to ENABLE1_SMPS_ASSIGN */ | ||
| 202 | u8 enable1_smps; | ||
| 203 | /* bitfield to be loaded to ENABLE1_LDO_ASSIGN1 */ | ||
| 204 | u8 enable1_ldo1; | ||
| 205 | /* bitfield to be loaded to ENABLE1_LDO_ASSIGN2 */ | ||
| 206 | u8 enable1_ldo2; | ||
| 207 | |||
| 208 | /* bitfield to be loaded to ENABLE2_RES_ASSIGN */ | ||
| 209 | u8 enable2_res; | ||
| 210 | /* bitfield to be loaded to ENABLE2_SMPS_ASSIGN */ | ||
| 211 | u8 enable2_smps; | ||
| 212 | /* bitfield to be loaded to ENABLE2_LDO_ASSIGN1 */ | ||
| 213 | u8 enable2_ldo1; | ||
| 214 | /* bitfield to be loaded to ENABLE2_LDO_ASSIGN2 */ | ||
| 215 | u8 enable2_ldo2; | ||
| 216 | }; | ||
| 217 | |||
| 218 | struct palmas_clk_platform_data { | ||
| 219 | int clk32kg_mode_sleep; | ||
| 220 | int clk32kgaudio_mode_sleep; | ||
| 125 | }; | 221 | }; |
| 126 | 222 | ||
| 127 | struct palmas_platform_data { | 223 | struct palmas_platform_data { |
| @@ -138,8 +234,49 @@ struct palmas_platform_data { | |||
| 138 | u8 pad1, pad2; | 234 | u8 pad1, pad2; |
| 139 | 235 | ||
| 140 | struct palmas_pmic_platform_data *pmic_pdata; | 236 | struct palmas_pmic_platform_data *pmic_pdata; |
| 237 | struct palmas_gpadc_platform_data *gpadc_pdata; | ||
| 238 | struct palmas_usb_platform_data *usb_pdata; | ||
| 239 | struct palmas_resource_platform_data *resource_pdata; | ||
| 240 | struct palmas_clk_platform_data *clk_pdata; | ||
| 241 | }; | ||
| 242 | |||
| 243 | struct palmas_gpadc_calibration { | ||
| 244 | s32 gain; | ||
| 245 | s32 gain_error; | ||
| 246 | s32 offset_error; | ||
| 141 | }; | 247 | }; |
| 142 | 248 | ||
| 249 | struct palmas_gpadc { | ||
| 250 | struct device *dev; | ||
| 251 | struct palmas *palmas; | ||
| 252 | |||
| 253 | int ch3_current; | ||
| 254 | int ch0_current; | ||
| 255 | |||
| 256 | int gpadc_force; | ||
| 257 | |||
| 258 | int bat_removal; | ||
| 259 | |||
| 260 | struct mutex reading_lock; | ||
| 261 | struct completion irq_complete; | ||
| 262 | |||
| 263 | int eoc_sw_irq; | ||
| 264 | |||
| 265 | struct palmas_gpadc_calibration *palmas_cal_tbl; | ||
| 266 | |||
| 267 | int conv0_channel; | ||
| 268 | int conv1_channel; | ||
| 269 | int rt_channel; | ||
| 270 | }; | ||
| 271 | |||
| 272 | struct palmas_gpadc_result { | ||
| 273 | s32 raw_code; | ||
| 274 | s32 corrected_code; | ||
| 275 | s32 result; | ||
| 276 | }; | ||
| 277 | |||
| 278 | #define PALMAS_MAX_CHANNELS 16 | ||
| 279 | |||
| 143 | /* Define the palmas IRQ numbers */ | 280 | /* Define the palmas IRQ numbers */ |
| 144 | enum palmas_irqs { | 281 | enum palmas_irqs { |
| 145 | /* INT1 registers */ | 282 | /* INT1 registers */ |
| @@ -182,34 +319,6 @@ enum palmas_irqs { | |||
| 182 | PALMAS_NUM_IRQ, | 319 | PALMAS_NUM_IRQ, |
| 183 | }; | 320 | }; |
| 184 | 321 | ||
| 185 | enum palmas_regulators { | ||
| 186 | /* SMPS regulators */ | ||
| 187 | PALMAS_REG_SMPS12, | ||
| 188 | PALMAS_REG_SMPS123, | ||
| 189 | PALMAS_REG_SMPS3, | ||
| 190 | PALMAS_REG_SMPS45, | ||
| 191 | PALMAS_REG_SMPS457, | ||
| 192 | PALMAS_REG_SMPS6, | ||
| 193 | PALMAS_REG_SMPS7, | ||
| 194 | PALMAS_REG_SMPS8, | ||
| 195 | PALMAS_REG_SMPS9, | ||
| 196 | PALMAS_REG_SMPS10, | ||
| 197 | /* LDO regulators */ | ||
| 198 | PALMAS_REG_LDO1, | ||
| 199 | PALMAS_REG_LDO2, | ||
| 200 | PALMAS_REG_LDO3, | ||
| 201 | PALMAS_REG_LDO4, | ||
| 202 | PALMAS_REG_LDO5, | ||
| 203 | PALMAS_REG_LDO6, | ||
| 204 | PALMAS_REG_LDO7, | ||
| 205 | PALMAS_REG_LDO8, | ||
| 206 | PALMAS_REG_LDO9, | ||
| 207 | PALMAS_REG_LDOLN, | ||
| 208 | PALMAS_REG_LDOUSB, | ||
| 209 | /* Total number of regulators */ | ||
| 210 | PALMAS_NUM_REGS, | ||
| 211 | }; | ||
| 212 | |||
| 213 | struct palmas_pmic { | 322 | struct palmas_pmic { |
| 214 | struct palmas *palmas; | 323 | struct palmas *palmas; |
| 215 | struct device *dev; | 324 | struct device *dev; |
| @@ -223,6 +332,69 @@ struct palmas_pmic { | |||
| 223 | int range[PALMAS_REG_SMPS10]; | 332 | int range[PALMAS_REG_SMPS10]; |
| 224 | }; | 333 | }; |
| 225 | 334 | ||
| 335 | struct palmas_resource { | ||
| 336 | struct palmas *palmas; | ||
| 337 | struct device *dev; | ||
| 338 | }; | ||
| 339 | |||
| 340 | struct palmas_usb { | ||
| 341 | struct palmas *palmas; | ||
| 342 | struct device *dev; | ||
| 343 | |||
| 344 | /* for vbus reporting with irqs disabled */ | ||
| 345 | spinlock_t lock; | ||
| 346 | |||
| 347 | struct regulator *vbus_reg; | ||
| 348 | |||
| 349 | /* used to set vbus, in atomic path */ | ||
| 350 | struct work_struct set_vbus_work; | ||
| 351 | |||
| 352 | int irq1; | ||
| 353 | int irq2; | ||
| 354 | int irq3; | ||
| 355 | int irq4; | ||
| 356 | |||
| 357 | int vbus_enable; | ||
| 358 | |||
| 359 | u8 linkstat; | ||
| 360 | }; | ||
| 361 | |||
| 362 | #define comparator_to_palmas(x) container_of((x), struct palmas_usb, comparator) | ||
| 363 | |||
| 364 | enum usb_irq_events { | ||
| 365 | /* Wakeup events from INT3 */ | ||
| 366 | PALMAS_USB_ID_WAKEPUP, | ||
| 367 | PALMAS_USB_VBUS_WAKEUP, | ||
| 368 | |||
| 369 | /* ID_OTG_EVENTS */ | ||
| 370 | PALMAS_USB_ID_GND, | ||
| 371 | N_PALMAS_USB_ID_GND, | ||
| 372 | PALMAS_USB_ID_C, | ||
| 373 | N_PALMAS_USB_ID_C, | ||
| 374 | PALMAS_USB_ID_B, | ||
| 375 | N_PALMAS_USB_ID_B, | ||
| 376 | PALMAS_USB_ID_A, | ||
| 377 | N_PALMAS_USB_ID_A, | ||
| 378 | PALMAS_USB_ID_FLOAT, | ||
| 379 | N_PALMAS_USB_ID_FLOAT, | ||
| 380 | |||
| 381 | /* VBUS_OTG_EVENTS */ | ||
| 382 | PALMAS_USB_VB_SESS_END, | ||
| 383 | N_PALMAS_USB_VB_SESS_END, | ||
| 384 | PALMAS_USB_VB_SESS_VLD, | ||
| 385 | N_PALMAS_USB_VB_SESS_VLD, | ||
| 386 | PALMAS_USB_VA_SESS_VLD, | ||
| 387 | N_PALMAS_USB_VA_SESS_VLD, | ||
| 388 | PALMAS_USB_VA_VBUS_VLD, | ||
| 389 | N_PALMAS_USB_VA_VBUS_VLD, | ||
| 390 | PALMAS_USB_VADP_SNS, | ||
| 391 | N_PALMAS_USB_VADP_SNS, | ||
| 392 | PALMAS_USB_VADP_PRB, | ||
| 393 | N_PALMAS_USB_VADP_PRB, | ||
| 394 | PALMAS_USB_VOTG_SESS_VLD, | ||
| 395 | N_PALMAS_USB_VOTG_SESS_VLD, | ||
| 396 | }; | ||
| 397 | |||
| 226 | /* defines so we can store the mux settings */ | 398 | /* defines so we can store the mux settings */ |
| 227 | #define PALMAS_GPIO_0_MUXED (1 << 0) | 399 | #define PALMAS_GPIO_0_MUXED (1 << 0) |
| 228 | #define PALMAS_GPIO_1_MUXED (1 << 1) | 400 | #define PALMAS_GPIO_1_MUXED (1 << 1) |
