lp87565.h 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. /*
  2. * Functions to access LP87565 power management chip.
  3. *
  4. * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU General Public License as
  8. * published by the Free Software Foundation version 2.
  9. */
  10. #ifndef __LINUX_MFD_LP87565_H
  11. #define __LINUX_MFD_LP87565_H
  12. #include <linux/i2c.h>
  13. #include <linux/regulator/driver.h>
  14. #include <linux/regulator/machine.h>
  15. enum lp87565_device_type {
  16. LP87565_DEVICE_TYPE_UNKNOWN = 0,
  17. LP87565_DEVICE_TYPE_LP87565_Q1,
  18. };
  19. /* All register addresses */
  20. #define LP87565_REG_DEV_REV 0X00
  21. #define LP87565_REG_OTP_REV 0X01
  22. #define LP87565_REG_BUCK0_CTRL_1 0X02
  23. #define LP87565_REG_BUCK0_CTRL_2 0X03
  24. #define LP87565_REG_BUCK1_CTRL_1 0X04
  25. #define LP87565_REG_BUCK1_CTRL_2 0X05
  26. #define LP87565_REG_BUCK2_CTRL_1 0X06
  27. #define LP87565_REG_BUCK2_CTRL_2 0X07
  28. #define LP87565_REG_BUCK3_CTRL_1 0X08
  29. #define LP87565_REG_BUCK3_CTRL_2 0X09
  30. #define LP87565_REG_BUCK0_VOUT 0X0A
  31. #define LP87565_REG_BUCK0_FLOOR_VOUT 0X0B
  32. #define LP87565_REG_BUCK1_VOUT 0X0C
  33. #define LP87565_REG_BUCK1_FLOOR_VOUT 0X0D
  34. #define LP87565_REG_BUCK2_VOUT 0X0E
  35. #define LP87565_REG_BUCK2_FLOOR_VOUT 0X0F
  36. #define LP87565_REG_BUCK3_VOUT 0X10
  37. #define LP87565_REG_BUCK3_FLOOR_VOUT 0X11
  38. #define LP87565_REG_BUCK0_DELAY 0X12
  39. #define LP87565_REG_BUCK1_DELAY 0X13
  40. #define LP87565_REG_BUCK2_DELAY 0X14
  41. #define LP87565_REG_BUCK3_DELAY 0X15
  42. #define LP87565_REG_GPO2_DELAY 0X16
  43. #define LP87565_REG_GPO3_DELAY 0X17
  44. #define LP87565_REG_RESET 0X18
  45. #define LP87565_REG_CONFIG 0X19
  46. #define LP87565_REG_INT_TOP_1 0X1A
  47. #define LP87565_REG_INT_TOP_2 0X1B
  48. #define LP87565_REG_INT_BUCK_0_1 0X1C
  49. #define LP87565_REG_INT_BUCK_2_3 0X1D
  50. #define LP87565_REG_TOP_STAT 0X1E
  51. #define LP87565_REG_BUCK_0_1_STAT 0X1F
  52. #define LP87565_REG_BUCK_2_3_STAT 0x20
  53. #define LP87565_REG_TOP_MASK_1 0x21
  54. #define LP87565_REG_TOP_MASK_2 0x22
  55. #define LP87565_REG_BUCK_0_1_MASK 0x23
  56. #define LP87565_REG_BUCK_2_3_MASK 0x24
  57. #define LP87565_REG_SEL_I_LOAD 0x25
  58. #define LP87565_REG_I_LOAD_2 0x26
  59. #define LP87565_REG_I_LOAD_1 0x27
  60. #define LP87565_REG_PGOOD_CTRL1 0x28
  61. #define LP87565_REG_PGOOD_CTRL2 0x29
  62. #define LP87565_REG_PGOOD_FLT 0x2A
  63. #define LP87565_REG_PLL_CTRL 0x2B
  64. #define LP87565_REG_PIN_FUNCTION 0x2C
  65. #define LP87565_REG_GPIO_CONFIG 0x2D
  66. #define LP87565_REG_GPIO_IN 0x2E
  67. #define LP87565_REG_GPIO_OUT 0x2F
  68. #define LP87565_REG_MAX LP87565_REG_GPIO_OUT
  69. /* Register field definitions */
  70. #define LP87565_DEV_REV_DEV_ID 0xC0
  71. #define LP87565_DEV_REV_ALL_LAYER 0x30
  72. #define LP87565_DEV_REV_METAL_LAYER 0x0F
  73. #define LP87565_OTP_REV_OTP_ID 0xFF
  74. #define LP87565_BUCK_CTRL_1_EN BIT(7)
  75. #define LP87565_BUCK_CTRL_1_EN_PIN_CTRL BIT(6)
  76. #define LP87565_BUCK_CTRL_1_PIN_SELECT_EN 0x30
  77. #define LP87565_BUCK_CTRL_1_ROOF_FLOOR_EN BIT(3)
  78. #define LP87565_BUCK_CTRL_1_RDIS_EN BIT(2)
  79. #define LP87565_BUCK_CTRL_1_FPWM BIT(1)
  80. /* Bit0 is reserved for BUCK1 and BUCK3 and valid only for BUCK0 and BUCK2 */
  81. #define LP87565_BUCK_CTRL_1_FPWM_MP_0_2 BIT(0)
  82. #define LP87565_BUCK_CTRL_2_ILIM 0x38
  83. #define LP87565_BUCK_CTRL_2_SLEW_RATE 0x07
  84. #define LP87565_BUCK_VSET 0xFF
  85. #define LP87565_BUCK_FLOOR_VSET 0xFF
  86. #define LP87565_BUCK_SHUTDOWN_DELAY 0xF0
  87. #define LP87565_BUCK_STARTUP_DELAY 0x0F
  88. #define LP87565_GPIO_SHUTDOWN_DELAY 0xF0
  89. #define LP87565_GPIO_STARTUP_DELAY 0x0F
  90. #define LP87565_RESET_SW_RESET BIT(0)
  91. #define LP87565_CONFIG_DOUBLE_DELAY BIT(7)
  92. #define LP87565_CONFIG_CLKIN_PD BIT(6)
  93. #define LP87565_CONFIG_EN4_PD BIT(5)
  94. #define LP87565_CONFIG_EN3_PD BIT(4)
  95. #define LP87565_CONFIG_TDIE_WARN_LEVEL BIT(3)
  96. #define LP87565_CONFIG_EN2_PD BIT(2)
  97. #define LP87565_CONFIG_EN1_PD BIT(1)
  98. #define LP87565_INT_GPIO BIT(7)
  99. #define LP87565_INT_BUCK23 BIT(6)
  100. #define LP87565_INT_BUCK01 BIT(5)
  101. #define LP87565_NO_SYNC_CLK BIT(4)
  102. #define LP87565_TDIE_SD BIT(3)
  103. #define LP87565_TDIE_WARN BIT(2)
  104. #define LP87565_INT_OVP BIT(1)
  105. #define LP87565_I_LOAD_READY BIT(0)
  106. #define LP87565_INT_TOP2_RESET_REG BIT(0)
  107. #define LP87565_BUCK1_PG_INT BIT(6)
  108. #define LP87565_BUCK1_SC_INT BIT(5)
  109. #define LP87565_BUCK1_ILIM_INT BIT(4)
  110. #define LP87565_BUCK0_PG_INT BIT(2)
  111. #define LP87565_BUCK0_SC_INT BIT(1)
  112. #define LP87565_BUCK0_ILIM_INT BIT(0)
  113. #define LP87565_BUCK3_PG_INT BIT(6)
  114. #define LP87565_BUCK3_SC_INT BIT(5)
  115. #define LP87565_BUCK3_ILIM_INT BIT(4)
  116. #define LP87565_BUCK2_PG_INT BIT(2)
  117. #define LP87565_BUCK2_SC_INT BIT(1)
  118. #define LP87565_BUCK2_ILIM_INT BIT(0)
  119. #define LP87565_SYNC_CLK_STAT BIT(4)
  120. #define LP87565_TDIE_SD_STAT BIT(3)
  121. #define LP87565_TDIE_WARN_STAT BIT(2)
  122. #define LP87565_OVP_STAT BIT(1)
  123. #define LP87565_BUCK1_STAT BIT(7)
  124. #define LP87565_BUCK1_PG_STAT BIT(6)
  125. #define LP87565_BUCK1_ILIM_STAT BIT(4)
  126. #define LP87565_BUCK0_STAT BIT(3)
  127. #define LP87565_BUCK0_PG_STAT BIT(2)
  128. #define LP87565_BUCK0_ILIM_STAT BIT(0)
  129. #define LP87565_BUCK3_STAT BIT(7)
  130. #define LP87565_BUCK3_PG_STAT BIT(6)
  131. #define LP87565_BUCK3_ILIM_STAT BIT(4)
  132. #define LP87565_BUCK2_STAT BIT(3)
  133. #define LP87565_BUCK2_PG_STAT BIT(2)
  134. #define LP87565_BUCK2_ILIM_STAT BIT(0)
  135. #define LPL87565_GPIO_MASK BIT(7)
  136. #define LPL87565_SYNC_CLK_MASK BIT(4)
  137. #define LPL87565_TDIE_WARN_MASK BIT(2)
  138. #define LPL87565_I_LOAD_READY_MASK BIT(0)
  139. #define LPL87565_RESET_REG_MASK BIT(0)
  140. #define LPL87565_BUCK1_PG_MASK BIT(6)
  141. #define LPL87565_BUCK1_ILIM_MASK BIT(4)
  142. #define LPL87565_BUCK0_PG_MASK BIT(2)
  143. #define LPL87565_BUCK0_ILIM_MASK BIT(0)
  144. #define LPL87565_BUCK3_PG_MASK BIT(6)
  145. #define LPL87565_BUCK3_ILIM_MASK BIT(4)
  146. #define LPL87565_BUCK2_PG_MASK BIT(2)
  147. #define LPL87565_BUCK2_ILIM_MASK BIT(0)
  148. #define LP87565_LOAD_CURRENT_BUCK_SELECT 0x3
  149. #define LP87565_I_LOAD2_BUCK_LOAD_CURRENT 0x3
  150. #define LP87565_I_LOAD1_BUCK_LOAD_CURRENT 0xFF
  151. #define LP87565_PG3_SEL 0xC0
  152. #define LP87565_PG2_SEL 0x30
  153. #define LP87565_PG1_SEL 0x0C
  154. #define LP87565_PG0_SEL 0x03
  155. #define LP87565_HALF_DAY BIT(7)
  156. #define LP87565_EN_PG0_NINT BIT(6)
  157. #define LP87565_PGOOD_SET_DELAY BIT(5)
  158. #define LP87565_EN_PGFLT_STAT BIT(4)
  159. #define LP87565_PGOOD_WINDOW BIT(2)
  160. #define LP87565_PGOOD_OD BIT(1)
  161. #define LP87565_PGOOD_POL BIT(0)
  162. #define LP87565_PG3_FLT BIT(3)
  163. #define LP87565_PG2_FLT BIT(2)
  164. #define LP87565_PG1_FLT BIT(1)
  165. #define LP87565_PG0_FLT BIT(0)
  166. #define LP87565_PLL_MODE 0xC0
  167. #define LP87565_EXT_CLK_FREQ 0x1F
  168. #define LP87565_EN_SPREAD_SPEC BIT(7)
  169. #define LP87565_EN_PIN_CTRL_GPIO3 BIT(6)
  170. #define LP87565_EN_PIN_SELECT_GPIO3 BIT(5)
  171. #define LP87565_EN_PIN_CTRL_GPIO2 BIT(4)
  172. #define LP87565_EN_PIN_SELECT_GPIO2 BIT(3)
  173. #define LP87565_GPIO3_SEL BIT(2)
  174. #define LP87565_GPIO2_SEL BIT(1)
  175. #define LP87565_GPIO1_SEL BIT(0)
  176. #define LP87565_GOIO3_OD BIT(6)
  177. #define LP87565_GOIO2_OD BIT(5)
  178. #define LP87565_GOIO1_OD BIT(4)
  179. #define LP87565_GOIO3_DIR BIT(2)
  180. #define LP87565_GOIO2_DIR BIT(1)
  181. #define LP87565_GOIO1_DIR BIT(0)
  182. #define LP87565_GOIO3_IN BIT(2)
  183. #define LP87565_GOIO2_IN BIT(1)
  184. #define LP87565_GOIO1_IN BIT(0)
  185. #define LP87565_GOIO3_OUT BIT(2)
  186. #define LP87565_GOIO2_OUT BIT(1)
  187. #define LP87565_GOIO1_OUT BIT(0)
  188. /* Number of step-down converters available */
  189. #define LP87565_NUM_BUCK 6
  190. enum LP87565_regulator_id {
  191. /* BUCK's */
  192. LP87565_BUCK_0,
  193. LP87565_BUCK_1,
  194. LP87565_BUCK_2,
  195. LP87565_BUCK_3,
  196. LP87565_BUCK_10,
  197. LP87565_BUCK_23,
  198. };
  199. /**
  200. * struct LP87565 - state holder for the LP87565 driver
  201. * @dev: struct device pointer for MFD device
  202. * @rev: revision of the LP87565
  203. * @dev_type: The device type for example lp87565-q1
  204. * @lock: lock guarding the data structure
  205. * @regmap: register map of the LP87565 PMIC
  206. *
  207. * Device data may be used to access the LP87565 chip
  208. */
  209. struct lp87565 {
  210. struct device *dev;
  211. u8 rev;
  212. u8 dev_type;
  213. struct regmap *regmap;
  214. };
  215. #endif /* __LINUX_MFD_LP87565_H */