linux/include/linux/mfd/axp20x.h
<<
>>
Prefs
   1/*
   2 * Functions and registers to access AXP20X power management chip.
   3 *
   4 * Copyright (C) 2013, Carlo Caione <carlo@caione.org>
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 */
  10
  11#ifndef __LINUX_MFD_AXP20X_H
  12#define __LINUX_MFD_AXP20X_H
  13
  14#include <linux/regmap.h>
  15
  16enum axp20x_variants {
  17        AXP152_ID = 0,
  18        AXP202_ID,
  19        AXP209_ID,
  20        AXP221_ID,
  21        AXP223_ID,
  22        AXP288_ID,
  23        AXP803_ID,
  24        AXP806_ID,
  25        AXP809_ID,
  26        AXP813_ID,
  27        NR_AXP20X_VARIANTS,
  28};
  29
  30#define AXP20X_DATACACHE(m)             (0x04 + (m))
  31
  32/* Power supply */
  33#define AXP152_PWR_OP_MODE              0x01
  34#define AXP152_LDO3456_DC1234_CTRL      0x12
  35#define AXP152_ALDO_OP_MODE             0x13
  36#define AXP152_LDO0_CTRL                0x15
  37#define AXP152_DCDC2_V_OUT              0x23
  38#define AXP152_DCDC2_V_SCAL             0x25
  39#define AXP152_DCDC1_V_OUT              0x26
  40#define AXP152_DCDC3_V_OUT              0x27
  41#define AXP152_ALDO12_V_OUT             0x28
  42#define AXP152_DLDO1_V_OUT              0x29
  43#define AXP152_DLDO2_V_OUT              0x2a
  44#define AXP152_DCDC4_V_OUT              0x2b
  45#define AXP152_V_OFF                    0x31
  46#define AXP152_OFF_CTRL                 0x32
  47#define AXP152_PEK_KEY                  0x36
  48#define AXP152_DCDC_FREQ                0x37
  49#define AXP152_DCDC_MODE                0x80
  50
  51#define AXP20X_PWR_INPUT_STATUS         0x00
  52#define AXP20X_PWR_OP_MODE              0x01
  53#define AXP20X_USB_OTG_STATUS           0x02
  54#define AXP20X_PWR_OUT_CTRL             0x12
  55#define AXP20X_DCDC2_V_OUT              0x23
  56#define AXP20X_DCDC2_LDO3_V_SCAL        0x25
  57#define AXP20X_DCDC3_V_OUT              0x27
  58#define AXP20X_LDO24_V_OUT              0x28
  59#define AXP20X_LDO3_V_OUT               0x29
  60#define AXP20X_VBUS_IPSOUT_MGMT         0x30
  61#define AXP20X_V_OFF                    0x31
  62#define AXP20X_OFF_CTRL                 0x32
  63#define AXP20X_CHRG_CTRL1               0x33
  64#define AXP20X_CHRG_CTRL2               0x34
  65#define AXP20X_CHRG_BAK_CTRL            0x35
  66#define AXP20X_PEK_KEY                  0x36
  67#define AXP20X_DCDC_FREQ                0x37
  68#define AXP20X_V_LTF_CHRG               0x38
  69#define AXP20X_V_HTF_CHRG               0x39
  70#define AXP20X_APS_WARN_L1              0x3a
  71#define AXP20X_APS_WARN_L2              0x3b
  72#define AXP20X_V_LTF_DISCHRG            0x3c
  73#define AXP20X_V_HTF_DISCHRG            0x3d
  74
  75#define AXP22X_PWR_OUT_CTRL1            0x10
  76#define AXP22X_PWR_OUT_CTRL2            0x12
  77#define AXP22X_PWR_OUT_CTRL3            0x13
  78#define AXP22X_DLDO1_V_OUT              0x15
  79#define AXP22X_DLDO2_V_OUT              0x16
  80#define AXP22X_DLDO3_V_OUT              0x17
  81#define AXP22X_DLDO4_V_OUT              0x18
  82#define AXP22X_ELDO1_V_OUT              0x19
  83#define AXP22X_ELDO2_V_OUT              0x1a
  84#define AXP22X_ELDO3_V_OUT              0x1b
  85#define AXP22X_DC5LDO_V_OUT             0x1c
  86#define AXP22X_DCDC1_V_OUT              0x21
  87#define AXP22X_DCDC2_V_OUT              0x22
  88#define AXP22X_DCDC3_V_OUT              0x23
  89#define AXP22X_DCDC4_V_OUT              0x24
  90#define AXP22X_DCDC5_V_OUT              0x25
  91#define AXP22X_DCDC23_V_RAMP_CTRL       0x27
  92#define AXP22X_ALDO1_V_OUT              0x28
  93#define AXP22X_ALDO2_V_OUT              0x29
  94#define AXP22X_ALDO3_V_OUT              0x2a
  95#define AXP22X_CHRG_CTRL3               0x35
  96
  97#define AXP806_STARTUP_SRC              0x00
  98#define AXP806_CHIP_ID                  0x03
  99#define AXP806_PWR_OUT_CTRL1            0x10
 100#define AXP806_PWR_OUT_CTRL2            0x11
 101#define AXP806_DCDCA_V_CTRL             0x12
 102#define AXP806_DCDCB_V_CTRL             0x13
 103#define AXP806_DCDCC_V_CTRL             0x14
 104#define AXP806_DCDCD_V_CTRL             0x15
 105#define AXP806_DCDCE_V_CTRL             0x16
 106#define AXP806_ALDO1_V_CTRL             0x17
 107#define AXP806_ALDO2_V_CTRL             0x18
 108#define AXP806_ALDO3_V_CTRL             0x19
 109#define AXP806_DCDC_MODE_CTRL1          0x1a
 110#define AXP806_DCDC_MODE_CTRL2          0x1b
 111#define AXP806_DCDC_FREQ_CTRL           0x1c
 112#define AXP806_BLDO1_V_CTRL             0x20
 113#define AXP806_BLDO2_V_CTRL             0x21
 114#define AXP806_BLDO3_V_CTRL             0x22
 115#define AXP806_BLDO4_V_CTRL             0x23
 116#define AXP806_CLDO1_V_CTRL             0x24
 117#define AXP806_CLDO2_V_CTRL             0x25
 118#define AXP806_CLDO3_V_CTRL             0x26
 119#define AXP806_VREF_TEMP_WARN_L         0xf3
 120#define AXP806_BUS_ADDR_EXT             0xfe
 121#define AXP806_REG_ADDR_EXT             0xff
 122
 123#define AXP803_POLYPHASE_CTRL           0x14
 124#define AXP803_FLDO1_V_OUT              0x1c
 125#define AXP803_FLDO2_V_OUT              0x1d
 126#define AXP803_DCDC1_V_OUT              0x20
 127#define AXP803_DCDC2_V_OUT              0x21
 128#define AXP803_DCDC3_V_OUT              0x22
 129#define AXP803_DCDC4_V_OUT              0x23
 130#define AXP803_DCDC5_V_OUT              0x24
 131#define AXP803_DCDC6_V_OUT              0x25
 132#define AXP803_DCDC_FREQ_CTRL           0x3b
 133
 134/* Other DCDC regulator control registers are the same as AXP803 */
 135#define AXP813_DCDC7_V_OUT              0x26
 136
 137/* Interrupt */
 138#define AXP152_IRQ1_EN                  0x40
 139#define AXP152_IRQ2_EN                  0x41
 140#define AXP152_IRQ3_EN                  0x42
 141#define AXP152_IRQ1_STATE               0x48
 142#define AXP152_IRQ2_STATE               0x49
 143#define AXP152_IRQ3_STATE               0x4a
 144
 145#define AXP20X_IRQ1_EN                  0x40
 146#define AXP20X_IRQ2_EN                  0x41
 147#define AXP20X_IRQ3_EN                  0x42
 148#define AXP20X_IRQ4_EN                  0x43
 149#define AXP20X_IRQ5_EN                  0x44
 150#define AXP20X_IRQ6_EN                  0x45
 151#define AXP20X_IRQ1_STATE               0x48
 152#define AXP20X_IRQ2_STATE               0x49
 153#define AXP20X_IRQ3_STATE               0x4a
 154#define AXP20X_IRQ4_STATE               0x4b
 155#define AXP20X_IRQ5_STATE               0x4c
 156#define AXP20X_IRQ6_STATE               0x4d
 157
 158/* ADC */
 159#define AXP20X_ACIN_V_ADC_H             0x56
 160#define AXP20X_ACIN_V_ADC_L             0x57
 161#define AXP20X_ACIN_I_ADC_H             0x58
 162#define AXP20X_ACIN_I_ADC_L             0x59
 163#define AXP20X_VBUS_V_ADC_H             0x5a
 164#define AXP20X_VBUS_V_ADC_L             0x5b
 165#define AXP20X_VBUS_I_ADC_H             0x5c
 166#define AXP20X_VBUS_I_ADC_L             0x5d
 167#define AXP20X_TEMP_ADC_H               0x5e
 168#define AXP20X_TEMP_ADC_L               0x5f
 169#define AXP20X_TS_IN_H                  0x62
 170#define AXP20X_TS_IN_L                  0x63
 171#define AXP20X_GPIO0_V_ADC_H            0x64
 172#define AXP20X_GPIO0_V_ADC_L            0x65
 173#define AXP20X_GPIO1_V_ADC_H            0x66
 174#define AXP20X_GPIO1_V_ADC_L            0x67
 175#define AXP20X_PWR_BATT_H               0x70
 176#define AXP20X_PWR_BATT_M               0x71
 177#define AXP20X_PWR_BATT_L               0x72
 178#define AXP20X_BATT_V_H                 0x78
 179#define AXP20X_BATT_V_L                 0x79
 180#define AXP20X_BATT_CHRG_I_H            0x7a
 181#define AXP20X_BATT_CHRG_I_L            0x7b
 182#define AXP20X_BATT_DISCHRG_I_H         0x7c
 183#define AXP20X_BATT_DISCHRG_I_L         0x7d
 184#define AXP20X_IPSOUT_V_HIGH_H          0x7e
 185#define AXP20X_IPSOUT_V_HIGH_L          0x7f
 186
 187/* Power supply */
 188#define AXP20X_DCDC_MODE                0x80
 189#define AXP20X_ADC_EN1                  0x82
 190#define AXP20X_ADC_EN2                  0x83
 191#define AXP20X_ADC_RATE                 0x84
 192#define AXP20X_GPIO10_IN_RANGE          0x85
 193#define AXP20X_GPIO1_ADC_IRQ_RIS        0x86
 194#define AXP20X_GPIO1_ADC_IRQ_FAL        0x87
 195#define AXP20X_TIMER_CTRL               0x8a
 196#define AXP20X_VBUS_MON                 0x8b
 197#define AXP20X_OVER_TMP                 0x8f
 198
 199#define AXP22X_PWREN_CTRL1              0x8c
 200#define AXP22X_PWREN_CTRL2              0x8d
 201
 202/* GPIO */
 203#define AXP152_GPIO0_CTRL               0x90
 204#define AXP152_GPIO1_CTRL               0x91
 205#define AXP152_GPIO2_CTRL               0x92
 206#define AXP152_GPIO3_CTRL               0x93
 207#define AXP152_LDOGPIO2_V_OUT           0x96
 208#define AXP152_GPIO_INPUT               0x97
 209#define AXP152_PWM0_FREQ_X              0x98
 210#define AXP152_PWM0_FREQ_Y              0x99
 211#define AXP152_PWM0_DUTY_CYCLE          0x9a
 212#define AXP152_PWM1_FREQ_X              0x9b
 213#define AXP152_PWM1_FREQ_Y              0x9c
 214#define AXP152_PWM1_DUTY_CYCLE          0x9d
 215
 216#define AXP20X_GPIO0_CTRL               0x90
 217#define AXP20X_LDO5_V_OUT               0x91
 218#define AXP20X_GPIO1_CTRL               0x92
 219#define AXP20X_GPIO2_CTRL               0x93
 220#define AXP20X_GPIO20_SS                0x94
 221#define AXP20X_GPIO3_CTRL               0x95
 222
 223#define AXP22X_LDO_IO0_V_OUT            0x91
 224#define AXP22X_LDO_IO1_V_OUT            0x93
 225#define AXP22X_GPIO_STATE               0x94
 226#define AXP22X_GPIO_PULL_DOWN           0x95
 227
 228/* Battery */
 229#define AXP20X_CHRG_CC_31_24            0xb0
 230#define AXP20X_CHRG_CC_23_16            0xb1
 231#define AXP20X_CHRG_CC_15_8             0xb2
 232#define AXP20X_CHRG_CC_7_0              0xb3
 233#define AXP20X_DISCHRG_CC_31_24         0xb4
 234#define AXP20X_DISCHRG_CC_23_16         0xb5
 235#define AXP20X_DISCHRG_CC_15_8          0xb6
 236#define AXP20X_DISCHRG_CC_7_0           0xb7
 237#define AXP20X_CC_CTRL                  0xb8
 238#define AXP20X_FG_RES                   0xb9
 239
 240/* OCV */
 241#define AXP20X_RDC_H                    0xba
 242#define AXP20X_RDC_L                    0xbb
 243#define AXP20X_OCV(m)                   (0xc0 + (m))
 244#define AXP20X_OCV_MAX                  0xf
 245
 246/* AXP22X specific registers */
 247#define AXP22X_PMIC_TEMP_H              0x56
 248#define AXP22X_PMIC_TEMP_L              0x57
 249#define AXP22X_TS_ADC_H                 0x58
 250#define AXP22X_TS_ADC_L                 0x59
 251#define AXP22X_BATLOW_THRES1            0xe6
 252
 253/* AXP288/AXP803 specific registers */
 254#define AXP288_POWER_REASON             0x02
 255#define AXP288_BC_GLOBAL                0x2c
 256#define AXP288_BC_VBUS_CNTL             0x2d
 257#define AXP288_BC_USB_STAT              0x2e
 258#define AXP288_BC_DET_STAT              0x2f
 259#define AXP288_PMIC_ADC_H               0x56
 260#define AXP288_PMIC_ADC_L               0x57
 261#define AXP288_TS_ADC_H                 0x58
 262#define AXP288_TS_ADC_L                 0x59
 263#define AXP288_GP_ADC_H                 0x5a
 264#define AXP288_GP_ADC_L                 0x5b
 265#define AXP288_ADC_TS_PIN_CTRL          0x84
 266#define AXP288_RT_BATT_V_H              0xa0
 267#define AXP288_RT_BATT_V_L              0xa1
 268
 269#define AXP813_ADC_RATE                 0x85
 270
 271/* Fuel Gauge */
 272#define AXP288_FG_RDC1_REG          0xba
 273#define AXP288_FG_RDC0_REG          0xbb
 274#define AXP288_FG_OCVH_REG          0xbc
 275#define AXP288_FG_OCVL_REG          0xbd
 276#define AXP288_FG_OCV_CURVE_REG     0xc0
 277#define AXP288_FG_DES_CAP1_REG      0xe0
 278#define AXP288_FG_DES_CAP0_REG      0xe1
 279#define AXP288_FG_CC_MTR1_REG       0xe2
 280#define AXP288_FG_CC_MTR0_REG       0xe3
 281#define AXP288_FG_OCV_CAP_REG       0xe4
 282#define AXP288_FG_CC_CAP_REG        0xe5
 283#define AXP288_FG_LOW_CAP_REG       0xe6
 284#define AXP288_FG_TUNE0             0xe8
 285#define AXP288_FG_TUNE1             0xe9
 286#define AXP288_FG_TUNE2             0xea
 287#define AXP288_FG_TUNE3             0xeb
 288#define AXP288_FG_TUNE4             0xec
 289#define AXP288_FG_TUNE5             0xed
 290
 291/* Regulators IDs */
 292enum {
 293        AXP20X_LDO1 = 0,
 294        AXP20X_LDO2,
 295        AXP20X_LDO3,
 296        AXP20X_LDO4,
 297        AXP20X_LDO5,
 298        AXP20X_DCDC2,
 299        AXP20X_DCDC3,
 300        AXP20X_REG_ID_MAX,
 301};
 302
 303enum {
 304        AXP22X_DCDC1 = 0,
 305        AXP22X_DCDC2,
 306        AXP22X_DCDC3,
 307        AXP22X_DCDC4,
 308        AXP22X_DCDC5,
 309        AXP22X_DC1SW,
 310        AXP22X_DC5LDO,
 311        AXP22X_ALDO1,
 312        AXP22X_ALDO2,
 313        AXP22X_ALDO3,
 314        AXP22X_ELDO1,
 315        AXP22X_ELDO2,
 316        AXP22X_ELDO3,
 317        AXP22X_DLDO1,
 318        AXP22X_DLDO2,
 319        AXP22X_DLDO3,
 320        AXP22X_DLDO4,
 321        AXP22X_RTC_LDO,
 322        AXP22X_LDO_IO0,
 323        AXP22X_LDO_IO1,
 324        AXP22X_REG_ID_MAX,
 325};
 326
 327enum {
 328        AXP806_DCDCA = 0,
 329        AXP806_DCDCB,
 330        AXP806_DCDCC,
 331        AXP806_DCDCD,
 332        AXP806_DCDCE,
 333        AXP806_ALDO1,
 334        AXP806_ALDO2,
 335        AXP806_ALDO3,
 336        AXP806_BLDO1,
 337        AXP806_BLDO2,
 338        AXP806_BLDO3,
 339        AXP806_BLDO4,
 340        AXP806_CLDO1,
 341        AXP806_CLDO2,
 342        AXP806_CLDO3,
 343        AXP806_SW,
 344        AXP806_REG_ID_MAX,
 345};
 346
 347enum {
 348        AXP809_DCDC1 = 0,
 349        AXP809_DCDC2,
 350        AXP809_DCDC3,
 351        AXP809_DCDC4,
 352        AXP809_DCDC5,
 353        AXP809_DC1SW,
 354        AXP809_DC5LDO,
 355        AXP809_ALDO1,
 356        AXP809_ALDO2,
 357        AXP809_ALDO3,
 358        AXP809_ELDO1,
 359        AXP809_ELDO2,
 360        AXP809_ELDO3,
 361        AXP809_DLDO1,
 362        AXP809_DLDO2,
 363        AXP809_RTC_LDO,
 364        AXP809_LDO_IO0,
 365        AXP809_LDO_IO1,
 366        AXP809_SW,
 367        AXP809_REG_ID_MAX,
 368};
 369
 370enum {
 371        AXP803_DCDC1 = 0,
 372        AXP803_DCDC2,
 373        AXP803_DCDC3,
 374        AXP803_DCDC4,
 375        AXP803_DCDC5,
 376        AXP803_DCDC6,
 377        AXP803_DC1SW,
 378        AXP803_ALDO1,
 379        AXP803_ALDO2,
 380        AXP803_ALDO3,
 381        AXP803_DLDO1,
 382        AXP803_DLDO2,
 383        AXP803_DLDO3,
 384        AXP803_DLDO4,
 385        AXP803_ELDO1,
 386        AXP803_ELDO2,
 387        AXP803_ELDO3,
 388        AXP803_FLDO1,
 389        AXP803_FLDO2,
 390        AXP803_RTC_LDO,
 391        AXP803_LDO_IO0,
 392        AXP803_LDO_IO1,
 393        AXP803_REG_ID_MAX,
 394};
 395
 396enum {
 397        AXP813_DCDC1 = 0,
 398        AXP813_DCDC2,
 399        AXP813_DCDC3,
 400        AXP813_DCDC4,
 401        AXP813_DCDC5,
 402        AXP813_DCDC6,
 403        AXP813_DCDC7,
 404        AXP813_ALDO1,
 405        AXP813_ALDO2,
 406        AXP813_ALDO3,
 407        AXP813_DLDO1,
 408        AXP813_DLDO2,
 409        AXP813_DLDO3,
 410        AXP813_DLDO4,
 411        AXP813_ELDO1,
 412        AXP813_ELDO2,
 413        AXP813_ELDO3,
 414        AXP813_FLDO1,
 415        AXP813_FLDO2,
 416        AXP813_FLDO3,
 417        AXP813_RTC_LDO,
 418        AXP813_LDO_IO0,
 419        AXP813_LDO_IO1,
 420        AXP813_SW,
 421        AXP813_REG_ID_MAX,
 422};
 423
 424/* IRQs */
 425enum {
 426        AXP152_IRQ_LDO0IN_CONNECT = 1,
 427        AXP152_IRQ_LDO0IN_REMOVAL,
 428        AXP152_IRQ_ALDO0IN_CONNECT,
 429        AXP152_IRQ_ALDO0IN_REMOVAL,
 430        AXP152_IRQ_DCDC1_V_LOW,
 431        AXP152_IRQ_DCDC2_V_LOW,
 432        AXP152_IRQ_DCDC3_V_LOW,
 433        AXP152_IRQ_DCDC4_V_LOW,
 434        AXP152_IRQ_PEK_SHORT,
 435        AXP152_IRQ_PEK_LONG,
 436        AXP152_IRQ_TIMER,
 437        AXP152_IRQ_PEK_RIS_EDGE,
 438        AXP152_IRQ_PEK_FAL_EDGE,
 439        AXP152_IRQ_GPIO3_INPUT,
 440        AXP152_IRQ_GPIO2_INPUT,
 441        AXP152_IRQ_GPIO1_INPUT,
 442        AXP152_IRQ_GPIO0_INPUT,
 443};
 444
 445enum {
 446        AXP20X_IRQ_ACIN_OVER_V = 1,
 447        AXP20X_IRQ_ACIN_PLUGIN,
 448        AXP20X_IRQ_ACIN_REMOVAL,
 449        AXP20X_IRQ_VBUS_OVER_V,
 450        AXP20X_IRQ_VBUS_PLUGIN,
 451        AXP20X_IRQ_VBUS_REMOVAL,
 452        AXP20X_IRQ_VBUS_V_LOW,
 453        AXP20X_IRQ_BATT_PLUGIN,
 454        AXP20X_IRQ_BATT_REMOVAL,
 455        AXP20X_IRQ_BATT_ENT_ACT_MODE,
 456        AXP20X_IRQ_BATT_EXIT_ACT_MODE,
 457        AXP20X_IRQ_CHARG,
 458        AXP20X_IRQ_CHARG_DONE,
 459        AXP20X_IRQ_BATT_TEMP_HIGH,
 460        AXP20X_IRQ_BATT_TEMP_LOW,
 461        AXP20X_IRQ_DIE_TEMP_HIGH,
 462        AXP20X_IRQ_CHARG_I_LOW,
 463        AXP20X_IRQ_DCDC1_V_LONG,
 464        AXP20X_IRQ_DCDC2_V_LONG,
 465        AXP20X_IRQ_DCDC3_V_LONG,
 466        AXP20X_IRQ_PEK_SHORT = 22,
 467        AXP20X_IRQ_PEK_LONG,
 468        AXP20X_IRQ_N_OE_PWR_ON,
 469        AXP20X_IRQ_N_OE_PWR_OFF,
 470        AXP20X_IRQ_VBUS_VALID,
 471        AXP20X_IRQ_VBUS_NOT_VALID,
 472        AXP20X_IRQ_VBUS_SESS_VALID,
 473        AXP20X_IRQ_VBUS_SESS_END,
 474        AXP20X_IRQ_LOW_PWR_LVL1,
 475        AXP20X_IRQ_LOW_PWR_LVL2,
 476        AXP20X_IRQ_TIMER,
 477        AXP20X_IRQ_PEK_RIS_EDGE,
 478        AXP20X_IRQ_PEK_FAL_EDGE,
 479        AXP20X_IRQ_GPIO3_INPUT,
 480        AXP20X_IRQ_GPIO2_INPUT,
 481        AXP20X_IRQ_GPIO1_INPUT,
 482        AXP20X_IRQ_GPIO0_INPUT,
 483};
 484
 485enum axp22x_irqs {
 486        AXP22X_IRQ_ACIN_OVER_V = 1,
 487        AXP22X_IRQ_ACIN_PLUGIN,
 488        AXP22X_IRQ_ACIN_REMOVAL,
 489        AXP22X_IRQ_VBUS_OVER_V,
 490        AXP22X_IRQ_VBUS_PLUGIN,
 491        AXP22X_IRQ_VBUS_REMOVAL,
 492        AXP22X_IRQ_VBUS_V_LOW,
 493        AXP22X_IRQ_BATT_PLUGIN,
 494        AXP22X_IRQ_BATT_REMOVAL,
 495        AXP22X_IRQ_BATT_ENT_ACT_MODE,
 496        AXP22X_IRQ_BATT_EXIT_ACT_MODE,
 497        AXP22X_IRQ_CHARG,
 498        AXP22X_IRQ_CHARG_DONE,
 499        AXP22X_IRQ_BATT_TEMP_HIGH,
 500        AXP22X_IRQ_BATT_TEMP_LOW,
 501        AXP22X_IRQ_DIE_TEMP_HIGH,
 502        AXP22X_IRQ_PEK_SHORT,
 503        AXP22X_IRQ_PEK_LONG,
 504        AXP22X_IRQ_LOW_PWR_LVL1,
 505        AXP22X_IRQ_LOW_PWR_LVL2,
 506        AXP22X_IRQ_TIMER,
 507        AXP22X_IRQ_PEK_RIS_EDGE,
 508        AXP22X_IRQ_PEK_FAL_EDGE,
 509        AXP22X_IRQ_GPIO1_INPUT,
 510        AXP22X_IRQ_GPIO0_INPUT,
 511};
 512
 513enum axp288_irqs {
 514        AXP288_IRQ_VBUS_FALL     = 2,
 515        AXP288_IRQ_VBUS_RISE,
 516        AXP288_IRQ_OV,
 517        AXP288_IRQ_FALLING_ALT,
 518        AXP288_IRQ_RISING_ALT,
 519        AXP288_IRQ_OV_ALT,
 520        AXP288_IRQ_DONE          = 10,
 521        AXP288_IRQ_CHARGING,
 522        AXP288_IRQ_SAFE_QUIT,
 523        AXP288_IRQ_SAFE_ENTER,
 524        AXP288_IRQ_ABSENT,
 525        AXP288_IRQ_APPEND,
 526        AXP288_IRQ_QWBTU,
 527        AXP288_IRQ_WBTU,
 528        AXP288_IRQ_QWBTO,
 529        AXP288_IRQ_WBTO,
 530        AXP288_IRQ_QCBTU,
 531        AXP288_IRQ_CBTU,
 532        AXP288_IRQ_QCBTO,
 533        AXP288_IRQ_CBTO,
 534        AXP288_IRQ_WL2,
 535        AXP288_IRQ_WL1,
 536        AXP288_IRQ_GPADC,
 537        AXP288_IRQ_OT            = 31,
 538        AXP288_IRQ_GPIO0,
 539        AXP288_IRQ_GPIO1,
 540        AXP288_IRQ_POKO,
 541        AXP288_IRQ_POKL,
 542        AXP288_IRQ_POKS,
 543        AXP288_IRQ_POKN,
 544        AXP288_IRQ_POKP,
 545        AXP288_IRQ_TIMER,
 546        AXP288_IRQ_MV_CHNG,
 547        AXP288_IRQ_BC_USB_CHNG,
 548};
 549
 550enum axp803_irqs {
 551        AXP803_IRQ_ACIN_OVER_V = 1,
 552        AXP803_IRQ_ACIN_PLUGIN,
 553        AXP803_IRQ_ACIN_REMOVAL,
 554        AXP803_IRQ_VBUS_OVER_V,
 555        AXP803_IRQ_VBUS_PLUGIN,
 556        AXP803_IRQ_VBUS_REMOVAL,
 557        AXP803_IRQ_BATT_PLUGIN,
 558        AXP803_IRQ_BATT_REMOVAL,
 559        AXP803_IRQ_BATT_ENT_ACT_MODE,
 560        AXP803_IRQ_BATT_EXIT_ACT_MODE,
 561        AXP803_IRQ_CHARG,
 562        AXP803_IRQ_CHARG_DONE,
 563        AXP803_IRQ_BATT_CHG_TEMP_HIGH,
 564        AXP803_IRQ_BATT_CHG_TEMP_HIGH_END,
 565        AXP803_IRQ_BATT_CHG_TEMP_LOW,
 566        AXP803_IRQ_BATT_CHG_TEMP_LOW_END,
 567        AXP803_IRQ_BATT_ACT_TEMP_HIGH,
 568        AXP803_IRQ_BATT_ACT_TEMP_HIGH_END,
 569        AXP803_IRQ_BATT_ACT_TEMP_LOW,
 570        AXP803_IRQ_BATT_ACT_TEMP_LOW_END,
 571        AXP803_IRQ_DIE_TEMP_HIGH,
 572        AXP803_IRQ_GPADC,
 573        AXP803_IRQ_LOW_PWR_LVL1,
 574        AXP803_IRQ_LOW_PWR_LVL2,
 575        AXP803_IRQ_TIMER,
 576        AXP803_IRQ_PEK_RIS_EDGE,
 577        AXP803_IRQ_PEK_FAL_EDGE,
 578        AXP803_IRQ_PEK_SHORT,
 579        AXP803_IRQ_PEK_LONG,
 580        AXP803_IRQ_PEK_OVER_OFF,
 581        AXP803_IRQ_GPIO1_INPUT,
 582        AXP803_IRQ_GPIO0_INPUT,
 583        AXP803_IRQ_BC_USB_CHNG,
 584        AXP803_IRQ_MV_CHNG,
 585};
 586
 587enum axp806_irqs {
 588        AXP806_IRQ_DIE_TEMP_HIGH_LV1,
 589        AXP806_IRQ_DIE_TEMP_HIGH_LV2,
 590        AXP806_IRQ_DCDCA_V_LOW,
 591        AXP806_IRQ_DCDCB_V_LOW,
 592        AXP806_IRQ_DCDCC_V_LOW,
 593        AXP806_IRQ_DCDCD_V_LOW,
 594        AXP806_IRQ_DCDCE_V_LOW,
 595        AXP806_IRQ_POK_LONG,
 596        AXP806_IRQ_POK_SHORT,
 597        AXP806_IRQ_WAKEUP,
 598        AXP806_IRQ_POK_FALL,
 599        AXP806_IRQ_POK_RISE,
 600};
 601
 602enum axp809_irqs {
 603        AXP809_IRQ_ACIN_OVER_V = 1,
 604        AXP809_IRQ_ACIN_PLUGIN,
 605        AXP809_IRQ_ACIN_REMOVAL,
 606        AXP809_IRQ_VBUS_OVER_V,
 607        AXP809_IRQ_VBUS_PLUGIN,
 608        AXP809_IRQ_VBUS_REMOVAL,
 609        AXP809_IRQ_VBUS_V_LOW,
 610        AXP809_IRQ_BATT_PLUGIN,
 611        AXP809_IRQ_BATT_REMOVAL,
 612        AXP809_IRQ_BATT_ENT_ACT_MODE,
 613        AXP809_IRQ_BATT_EXIT_ACT_MODE,
 614        AXP809_IRQ_CHARG,
 615        AXP809_IRQ_CHARG_DONE,
 616        AXP809_IRQ_BATT_CHG_TEMP_HIGH,
 617        AXP809_IRQ_BATT_CHG_TEMP_HIGH_END,
 618        AXP809_IRQ_BATT_CHG_TEMP_LOW,
 619        AXP809_IRQ_BATT_CHG_TEMP_LOW_END,
 620        AXP809_IRQ_BATT_ACT_TEMP_HIGH,
 621        AXP809_IRQ_BATT_ACT_TEMP_HIGH_END,
 622        AXP809_IRQ_BATT_ACT_TEMP_LOW,
 623        AXP809_IRQ_BATT_ACT_TEMP_LOW_END,
 624        AXP809_IRQ_DIE_TEMP_HIGH,
 625        AXP809_IRQ_LOW_PWR_LVL1,
 626        AXP809_IRQ_LOW_PWR_LVL2,
 627        AXP809_IRQ_TIMER,
 628        AXP809_IRQ_PEK_RIS_EDGE,
 629        AXP809_IRQ_PEK_FAL_EDGE,
 630        AXP809_IRQ_PEK_SHORT,
 631        AXP809_IRQ_PEK_LONG,
 632        AXP809_IRQ_PEK_OVER_OFF,
 633        AXP809_IRQ_GPIO1_INPUT,
 634        AXP809_IRQ_GPIO0_INPUT,
 635};
 636
 637struct axp20x_dev {
 638        struct device                   *dev;
 639        int                             irq;
 640        unsigned long                   irq_flags;
 641        struct regmap                   *regmap;
 642        struct regmap_irq_chip_data     *regmap_irqc;
 643        long                            variant;
 644        int                             nr_cells;
 645        const struct mfd_cell           *cells;
 646        const struct regmap_config      *regmap_cfg;
 647        const struct regmap_irq_chip    *regmap_irq_chip;
 648};
 649
 650/* generic helper function for reading 9-16 bit wide regs */
 651static inline int axp20x_read_variable_width(struct regmap *regmap,
 652        unsigned int reg, unsigned int width)
 653{
 654        unsigned int reg_val, result;
 655        int err;
 656
 657        err = regmap_read(regmap, reg, &reg_val);
 658        if (err)
 659                return err;
 660
 661        result = reg_val << (width - 8);
 662
 663        err = regmap_read(regmap, reg + 1, &reg_val);
 664        if (err)
 665                return err;
 666
 667        result |= reg_val;
 668
 669        return result;
 670}
 671
 672/**
 673 * axp20x_match_device(): Setup axp20x variant related fields
 674 *
 675 * @axp20x: axp20x device to setup (.dev field must be set)
 676 * @dev: device associated with this axp20x device
 677 *
 678 * This lets the axp20x core configure the mfd cells and register maps
 679 * for later use.
 680 */
 681int axp20x_match_device(struct axp20x_dev *axp20x);
 682
 683/**
 684 * axp20x_device_probe(): Probe a configured axp20x device
 685 *
 686 * @axp20x: axp20x device to probe (must be configured)
 687 *
 688 * This function lets the axp20x core register the axp20x mfd devices
 689 * and irqchip. The axp20x device passed in must be fully configured
 690 * with axp20x_match_device, its irq set, and regmap created.
 691 */
 692int axp20x_device_probe(struct axp20x_dev *axp20x);
 693
 694/**
 695 * axp20x_device_remove(): Remove a axp20x device
 696 *
 697 * @axp20x: axp20x device to remove
 698 *
 699 * This tells the axp20x core to remove the associated mfd devices
 700 */
 701int axp20x_device_remove(struct axp20x_dev *axp20x);
 702
 703#endif /* __LINUX_MFD_AXP20X_H */
 704