max77620.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. /*
  2. * Defining registers address and its bit definitions of MAX77620 and MAX20024
  3. *
  4. * Copyright (C) 2016 NVIDIA CORPORATION. All rights reserved.
  5. *
  6. * This program is free software; you can redistribute it and/or modify it
  7. * under the terms and conditions of the GNU General Public License,
  8. * version 2, as published by the Free Software Foundation.
  9. */
  10. #ifndef _MFD_MAX77620_H_
  11. #define _MFD_MAX77620_H_
  12. #include <linux/types.h>
  13. /* GLOBAL, PMIC, GPIO, FPS, ONOFFC, CID Registers */
  14. #define MAX77620_REG_CNFGGLBL1 0x00
  15. #define MAX77620_REG_CNFGGLBL2 0x01
  16. #define MAX77620_REG_CNFGGLBL3 0x02
  17. #define MAX77620_REG_CNFG1_32K 0x03
  18. #define MAX77620_REG_CNFGBBC 0x04
  19. #define MAX77620_REG_IRQTOP 0x05
  20. #define MAX77620_REG_INTLBT 0x06
  21. #define MAX77620_REG_IRQSD 0x07
  22. #define MAX77620_REG_IRQ_LVL2_L0_7 0x08
  23. #define MAX77620_REG_IRQ_LVL2_L8 0x09
  24. #define MAX77620_REG_IRQ_LVL2_GPIO 0x0A
  25. #define MAX77620_REG_ONOFFIRQ 0x0B
  26. #define MAX77620_REG_NVERC 0x0C
  27. #define MAX77620_REG_IRQTOPM 0x0D
  28. #define MAX77620_REG_INTENLBT 0x0E
  29. #define MAX77620_REG_IRQMASKSD 0x0F
  30. #define MAX77620_REG_IRQ_MSK_L0_7 0x10
  31. #define MAX77620_REG_IRQ_MSK_L8 0x11
  32. #define MAX77620_REG_ONOFFIRQM 0x12
  33. #define MAX77620_REG_STATLBT 0x13
  34. #define MAX77620_REG_STATSD 0x14
  35. #define MAX77620_REG_ONOFFSTAT 0x15
  36. /* SD and LDO Registers */
  37. #define MAX77620_REG_SD0 0x16
  38. #define MAX77620_REG_SD1 0x17
  39. #define MAX77620_REG_SD2 0x18
  40. #define MAX77620_REG_SD3 0x19
  41. #define MAX77620_REG_SD4 0x1A
  42. #define MAX77620_REG_DVSSD0 0x1B
  43. #define MAX77620_REG_DVSSD1 0x1C
  44. #define MAX77620_REG_SD0_CFG 0x1D
  45. #define MAX77620_REG_SD1_CFG 0x1E
  46. #define MAX77620_REG_SD2_CFG 0x1F
  47. #define MAX77620_REG_SD3_CFG 0x20
  48. #define MAX77620_REG_SD4_CFG 0x21
  49. #define MAX77620_REG_SD_CFG2 0x22
  50. #define MAX77620_REG_LDO0_CFG 0x23
  51. #define MAX77620_REG_LDO0_CFG2 0x24
  52. #define MAX77620_REG_LDO1_CFG 0x25
  53. #define MAX77620_REG_LDO1_CFG2 0x26
  54. #define MAX77620_REG_LDO2_CFG 0x27
  55. #define MAX77620_REG_LDO2_CFG2 0x28
  56. #define MAX77620_REG_LDO3_CFG 0x29
  57. #define MAX77620_REG_LDO3_CFG2 0x2A
  58. #define MAX77620_REG_LDO4_CFG 0x2B
  59. #define MAX77620_REG_LDO4_CFG2 0x2C
  60. #define MAX77620_REG_LDO5_CFG 0x2D
  61. #define MAX77620_REG_LDO5_CFG2 0x2E
  62. #define MAX77620_REG_LDO6_CFG 0x2F
  63. #define MAX77620_REG_LDO6_CFG2 0x30
  64. #define MAX77620_REG_LDO7_CFG 0x31
  65. #define MAX77620_REG_LDO7_CFG2 0x32
  66. #define MAX77620_REG_LDO8_CFG 0x33
  67. #define MAX77620_REG_LDO8_CFG2 0x34
  68. #define MAX77620_REG_LDO_CFG3 0x35
  69. #define MAX77620_LDO_SLEW_RATE_MASK 0x1
  70. /* LDO Configuration 3 */
  71. #define MAX77620_TRACK4_MASK BIT(5)
  72. #define MAX77620_TRACK4_SHIFT 5
  73. /* Voltage */
  74. #define MAX77620_SDX_VOLT_MASK 0xFF
  75. #define MAX77620_SD0_VOLT_MASK 0x3F
  76. #define MAX77620_SD1_VOLT_MASK 0x7F
  77. #define MAX77620_LDO_VOLT_MASK 0x3F
  78. #define MAX77620_REG_GPIO0 0x36
  79. #define MAX77620_REG_GPIO1 0x37
  80. #define MAX77620_REG_GPIO2 0x38
  81. #define MAX77620_REG_GPIO3 0x39
  82. #define MAX77620_REG_GPIO4 0x3A
  83. #define MAX77620_REG_GPIO5 0x3B
  84. #define MAX77620_REG_GPIO6 0x3C
  85. #define MAX77620_REG_GPIO7 0x3D
  86. #define MAX77620_REG_PUE_GPIO 0x3E
  87. #define MAX77620_REG_PDE_GPIO 0x3F
  88. #define MAX77620_REG_AME_GPIO 0x40
  89. #define MAX77620_REG_ONOFFCNFG1 0x41
  90. #define MAX77620_REG_ONOFFCNFG2 0x42
  91. /* FPS Registers */
  92. #define MAX77620_REG_FPS_CFG0 0x43
  93. #define MAX77620_REG_FPS_CFG1 0x44
  94. #define MAX77620_REG_FPS_CFG2 0x45
  95. #define MAX77620_REG_FPS_LDO0 0x46
  96. #define MAX77620_REG_FPS_LDO1 0x47
  97. #define MAX77620_REG_FPS_LDO2 0x48
  98. #define MAX77620_REG_FPS_LDO3 0x49
  99. #define MAX77620_REG_FPS_LDO4 0x4A
  100. #define MAX77620_REG_FPS_LDO5 0x4B
  101. #define MAX77620_REG_FPS_LDO6 0x4C
  102. #define MAX77620_REG_FPS_LDO7 0x4D
  103. #define MAX77620_REG_FPS_LDO8 0x4E
  104. #define MAX77620_REG_FPS_SD0 0x4F
  105. #define MAX77620_REG_FPS_SD1 0x50
  106. #define MAX77620_REG_FPS_SD2 0x51
  107. #define MAX77620_REG_FPS_SD3 0x52
  108. #define MAX77620_REG_FPS_SD4 0x53
  109. #define MAX77620_REG_FPS_NONE 0
  110. #define MAX77620_FPS_SRC_MASK 0xC0
  111. #define MAX77620_FPS_SRC_SHIFT 6
  112. #define MAX77620_FPS_PU_PERIOD_MASK 0x38
  113. #define MAX77620_FPS_PU_PERIOD_SHIFT 3
  114. #define MAX77620_FPS_PD_PERIOD_MASK 0x07
  115. #define MAX77620_FPS_PD_PERIOD_SHIFT 0
  116. #define MAX77620_FPS_TIME_PERIOD_MASK 0x38
  117. #define MAX77620_FPS_TIME_PERIOD_SHIFT 3
  118. #define MAX77620_FPS_EN_SRC_MASK 0x06
  119. #define MAX77620_FPS_EN_SRC_SHIFT 1
  120. #define MAX77620_FPS_ENFPS_SW_MASK 0x01
  121. #define MAX77620_FPS_ENFPS_SW 0x01
  122. /* Minimum and maximum FPS period time (in microseconds) are
  123. * different for MAX77620 and Max20024.
  124. */
  125. #define MAX77620_FPS_PERIOD_MIN_US 40
  126. #define MAX20024_FPS_PERIOD_MIN_US 20
  127. #define MAX77620_FPS_PERIOD_MAX_US 2560
  128. #define MAX20024_FPS_PERIOD_MAX_US 5120
  129. #define MAX77620_REG_FPS_GPIO1 0x54
  130. #define MAX77620_REG_FPS_GPIO2 0x55
  131. #define MAX77620_REG_FPS_GPIO3 0x56
  132. #define MAX77620_REG_FPS_RSO 0x57
  133. #define MAX77620_REG_CID0 0x58
  134. #define MAX77620_REG_CID1 0x59
  135. #define MAX77620_REG_CID2 0x5A
  136. #define MAX77620_REG_CID3 0x5B
  137. #define MAX77620_REG_CID4 0x5C
  138. #define MAX77620_REG_CID5 0x5D
  139. #define MAX77620_REG_DVSSD4 0x5E
  140. #define MAX20024_REG_MAX_ADD 0x70
  141. #define MAX77620_CID_DIDM_MASK 0xF0
  142. #define MAX77620_CID_DIDM_SHIFT 4
  143. /* CNCG2SD */
  144. #define MAX77620_SD_CNF2_ROVS_EN_SD1 BIT(1)
  145. #define MAX77620_SD_CNF2_ROVS_EN_SD0 BIT(2)
  146. /* Device Identification Metal */
  147. #define MAX77620_CID5_DIDM(n) (((n) >> 4) & 0xF)
  148. /* Device Indentification OTP */
  149. #define MAX77620_CID5_DIDO(n) ((n) & 0xF)
  150. /* SD CNFG1 */
  151. #define MAX77620_SD_SR_MASK 0xC0
  152. #define MAX77620_SD_SR_SHIFT 6
  153. #define MAX77620_SD_POWER_MODE_MASK 0x30
  154. #define MAX77620_SD_POWER_MODE_SHIFT 4
  155. #define MAX77620_SD_CFG1_ADE_MASK BIT(3)
  156. #define MAX77620_SD_CFG1_ADE_DISABLE 0
  157. #define MAX77620_SD_CFG1_ADE_ENABLE BIT(3)
  158. #define MAX77620_SD_FPWM_MASK 0x04
  159. #define MAX77620_SD_FPWM_SHIFT 2
  160. #define MAX77620_SD_FSRADE_MASK 0x01
  161. #define MAX77620_SD_FSRADE_SHIFT 0
  162. #define MAX77620_SD_CFG1_FPWM_SD_MASK BIT(2)
  163. #define MAX77620_SD_CFG1_FPWM_SD_SKIP 0
  164. #define MAX77620_SD_CFG1_FPWM_SD_FPWM BIT(2)
  165. #define MAX77620_SD_CFG1_FSRADE_SD_MASK BIT(0)
  166. #define MAX77620_SD_CFG1_FSRADE_SD_DISABLE 0
  167. #define MAX77620_SD_CFG1_FSRADE_SD_ENABLE BIT(0)
  168. /* LDO_CNFG2 */
  169. #define MAX77620_LDO_POWER_MODE_MASK 0xC0
  170. #define MAX77620_LDO_POWER_MODE_SHIFT 6
  171. #define MAX77620_LDO_CFG2_ADE_MASK BIT(1)
  172. #define MAX77620_LDO_CFG2_ADE_DISABLE 0
  173. #define MAX77620_LDO_CFG2_ADE_ENABLE BIT(1)
  174. #define MAX77620_LDO_CFG2_SS_MASK BIT(0)
  175. #define MAX77620_LDO_CFG2_SS_FAST BIT(0)
  176. #define MAX77620_LDO_CFG2_SS_SLOW 0
  177. #define MAX77620_IRQ_TOP_GLBL_MASK BIT(7)
  178. #define MAX77620_IRQ_TOP_SD_MASK BIT(6)
  179. #define MAX77620_IRQ_TOP_LDO_MASK BIT(5)
  180. #define MAX77620_IRQ_TOP_GPIO_MASK BIT(4)
  181. #define MAX77620_IRQ_TOP_RTC_MASK BIT(3)
  182. #define MAX77620_IRQ_TOP_32K_MASK BIT(2)
  183. #define MAX77620_IRQ_TOP_ONOFF_MASK BIT(1)
  184. #define MAX77620_IRQ_LBM_MASK BIT(3)
  185. #define MAX77620_IRQ_TJALRM1_MASK BIT(2)
  186. #define MAX77620_IRQ_TJALRM2_MASK BIT(1)
  187. #define MAX77620_PWR_I2C_ADDR 0x3c
  188. #define MAX77620_RTC_I2C_ADDR 0x68
  189. #define MAX77620_CNFG_GPIO_DRV_MASK BIT(0)
  190. #define MAX77620_CNFG_GPIO_DRV_PUSHPULL BIT(0)
  191. #define MAX77620_CNFG_GPIO_DRV_OPENDRAIN 0
  192. #define MAX77620_CNFG_GPIO_DIR_MASK BIT(1)
  193. #define MAX77620_CNFG_GPIO_DIR_INPUT BIT(1)
  194. #define MAX77620_CNFG_GPIO_DIR_OUTPUT 0
  195. #define MAX77620_CNFG_GPIO_INPUT_VAL_MASK BIT(2)
  196. #define MAX77620_CNFG_GPIO_OUTPUT_VAL_MASK BIT(3)
  197. #define MAX77620_CNFG_GPIO_OUTPUT_VAL_HIGH BIT(3)
  198. #define MAX77620_CNFG_GPIO_OUTPUT_VAL_LOW 0
  199. #define MAX77620_CNFG_GPIO_INT_MASK (0x3 << 4)
  200. #define MAX77620_CNFG_GPIO_INT_FALLING BIT(4)
  201. #define MAX77620_CNFG_GPIO_INT_RISING BIT(5)
  202. #define MAX77620_CNFG_GPIO_DBNC_MASK (0x3 << 6)
  203. #define MAX77620_CNFG_GPIO_DBNC_None (0x0 << 6)
  204. #define MAX77620_CNFG_GPIO_DBNC_8ms (0x1 << 6)
  205. #define MAX77620_CNFG_GPIO_DBNC_16ms (0x2 << 6)
  206. #define MAX77620_CNFG_GPIO_DBNC_32ms (0x3 << 6)
  207. #define MAX77620_IRQ_LVL2_GPIO_EDGE0 BIT(0)
  208. #define MAX77620_IRQ_LVL2_GPIO_EDGE1 BIT(1)
  209. #define MAX77620_IRQ_LVL2_GPIO_EDGE2 BIT(2)
  210. #define MAX77620_IRQ_LVL2_GPIO_EDGE3 BIT(3)
  211. #define MAX77620_IRQ_LVL2_GPIO_EDGE4 BIT(4)
  212. #define MAX77620_IRQ_LVL2_GPIO_EDGE5 BIT(5)
  213. #define MAX77620_IRQ_LVL2_GPIO_EDGE6 BIT(6)
  214. #define MAX77620_IRQ_LVL2_GPIO_EDGE7 BIT(7)
  215. #define MAX77620_CNFG1_32K_OUT0_EN BIT(2)
  216. #define MAX77620_ONOFFCNFG1_SFT_RST BIT(7)
  217. #define MAX77620_ONOFFCNFG1_MRT_MASK 0x38
  218. #define MAX77620_ONOFFCNFG1_MRT_SHIFT 0x3
  219. #define MAX77620_ONOFFCNFG1_SLPEN BIT(2)
  220. #define MAX77620_ONOFFCNFG1_PWR_OFF BIT(1)
  221. #define MAX20024_ONOFFCNFG1_CLRSE 0x18
  222. #define MAX77620_ONOFFCNFG2_SFT_RST_WK BIT(7)
  223. #define MAX77620_ONOFFCNFG2_WD_RST_WK BIT(6)
  224. #define MAX77620_ONOFFCNFG2_SLP_LPM_MSK BIT(5)
  225. #define MAX77620_ONOFFCNFG2_WK_ALARM1 BIT(2)
  226. #define MAX77620_ONOFFCNFG2_WK_EN0 BIT(0)
  227. #define MAX77620_GLBLM_MASK BIT(0)
  228. #define MAX77620_WDTC_MASK 0x3
  229. #define MAX77620_WDTOFFC BIT(4)
  230. #define MAX77620_WDTSLPC BIT(3)
  231. #define MAX77620_WDTEN BIT(2)
  232. #define MAX77620_TWD_MASK 0x3
  233. #define MAX77620_TWD_2s 0x0
  234. #define MAX77620_TWD_16s 0x1
  235. #define MAX77620_TWD_64s 0x2
  236. #define MAX77620_TWD_128s 0x3
  237. #define MAX77620_CNFGGLBL1_LBDAC_EN BIT(7)
  238. #define MAX77620_CNFGGLBL1_MPPLD BIT(6)
  239. #define MAX77620_CNFGGLBL1_LBHYST (BIT(5) | BIT(4))
  240. #define MAX77620_CNFGGLBL1_LBDAC 0x0E
  241. #define MAX77620_CNFGGLBL1_LBRSTEN BIT(0)
  242. /* CNFG BBC registers */
  243. #define MAX77620_CNFGBBC_ENABLE BIT(0)
  244. #define MAX77620_CNFGBBC_CURRENT_MASK 0x06
  245. #define MAX77620_CNFGBBC_CURRENT_SHIFT 1
  246. #define MAX77620_CNFGBBC_VOLTAGE_MASK 0x18
  247. #define MAX77620_CNFGBBC_VOLTAGE_SHIFT 3
  248. #define MAX77620_CNFGBBC_LOW_CURRENT_DISABLE BIT(5)
  249. #define MAX77620_CNFGBBC_RESISTOR_MASK 0xC0
  250. #define MAX77620_CNFGBBC_RESISTOR_SHIFT 6
  251. #define MAX77620_FPS_COUNT 3
  252. /* Interrupts */
  253. enum {
  254. MAX77620_IRQ_TOP_GLBL, /* Low-Battery */
  255. MAX77620_IRQ_TOP_SD, /* SD power fail */
  256. MAX77620_IRQ_TOP_LDO, /* LDO power fail */
  257. MAX77620_IRQ_TOP_GPIO, /* TOP GPIO internal int to MAX77620 */
  258. MAX77620_IRQ_TOP_RTC, /* RTC */
  259. MAX77620_IRQ_TOP_32K, /* 32kHz oscillator */
  260. MAX77620_IRQ_TOP_ONOFF, /* ON/OFF oscillator */
  261. MAX77620_IRQ_LBT_MBATLOW, /* Thermal alarm status, > 120C */
  262. MAX77620_IRQ_LBT_TJALRM1, /* Thermal alarm status, > 120C */
  263. MAX77620_IRQ_LBT_TJALRM2, /* Thermal alarm status, > 140C */
  264. };
  265. /* GPIOs */
  266. enum {
  267. MAX77620_GPIO0,
  268. MAX77620_GPIO1,
  269. MAX77620_GPIO2,
  270. MAX77620_GPIO3,
  271. MAX77620_GPIO4,
  272. MAX77620_GPIO5,
  273. MAX77620_GPIO6,
  274. MAX77620_GPIO7,
  275. MAX77620_GPIO_NR,
  276. };
  277. /* FPS Source */
  278. enum max77620_fps_src {
  279. MAX77620_FPS_SRC_0,
  280. MAX77620_FPS_SRC_1,
  281. MAX77620_FPS_SRC_2,
  282. MAX77620_FPS_SRC_NONE,
  283. MAX77620_FPS_SRC_DEF,
  284. };
  285. enum max77620_chip_id {
  286. MAX77620,
  287. MAX20024,
  288. };
  289. struct max77620_chip {
  290. struct device *dev;
  291. struct regmap *rmap;
  292. int chip_irq;
  293. int irq_base;
  294. /* chip id */
  295. enum max77620_chip_id chip_id;
  296. bool sleep_enable;
  297. bool enable_global_lpm;
  298. int shutdown_fps_period[MAX77620_FPS_COUNT];
  299. int suspend_fps_period[MAX77620_FPS_COUNT];
  300. struct regmap_irq_chip_data *top_irq_data;
  301. struct regmap_irq_chip_data *gpio_irq_data;
  302. };
  303. #endif /* _MFD_MAX77620_H_ */