rk808.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. /*
  2. * rk808.h for Rockchip RK808
  3. *
  4. * Copyright (c) 2014, Fuzhou Rockchip Electronics Co., Ltd
  5. *
  6. * Author: Chris Zhong <zyw@rock-chips.com>
  7. * Author: Zhang Qing <zhangqing@rock-chips.com>
  8. *
  9. * This program is free software; you can redistribute it and/or modify it
  10. * under the terms and conditions of the GNU General Public License,
  11. * version 2, as published by the Free Software Foundation.
  12. *
  13. * This program is distributed in the hope it will be useful, but WITHOUT
  14. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  15. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  16. * more details.
  17. */
  18. #ifndef __LINUX_REGULATOR_rk808_H
  19. #define __LINUX_REGULATOR_rk808_H
  20. #include <linux/regulator/machine.h>
  21. #include <linux/regmap.h>
  22. /*
  23. * rk808 Global Register Map.
  24. */
  25. #define RK808_DCDC1 0 /* (0+RK808_START) */
  26. #define RK808_LDO1 4 /* (4+RK808_START) */
  27. #define RK808_NUM_REGULATORS 14
  28. enum rk808_reg {
  29. RK808_ID_DCDC1,
  30. RK808_ID_DCDC2,
  31. RK808_ID_DCDC3,
  32. RK808_ID_DCDC4,
  33. RK808_ID_LDO1,
  34. RK808_ID_LDO2,
  35. RK808_ID_LDO3,
  36. RK808_ID_LDO4,
  37. RK808_ID_LDO5,
  38. RK808_ID_LDO6,
  39. RK808_ID_LDO7,
  40. RK808_ID_LDO8,
  41. RK808_ID_SWITCH1,
  42. RK808_ID_SWITCH2,
  43. };
  44. #define RK808_SECONDS_REG 0x00
  45. #define RK808_MINUTES_REG 0x01
  46. #define RK808_HOURS_REG 0x02
  47. #define RK808_DAYS_REG 0x03
  48. #define RK808_MONTHS_REG 0x04
  49. #define RK808_YEARS_REG 0x05
  50. #define RK808_WEEKS_REG 0x06
  51. #define RK808_ALARM_SECONDS_REG 0x08
  52. #define RK808_ALARM_MINUTES_REG 0x09
  53. #define RK808_ALARM_HOURS_REG 0x0a
  54. #define RK808_ALARM_DAYS_REG 0x0b
  55. #define RK808_ALARM_MONTHS_REG 0x0c
  56. #define RK808_ALARM_YEARS_REG 0x0d
  57. #define RK808_RTC_CTRL_REG 0x10
  58. #define RK808_RTC_STATUS_REG 0x11
  59. #define RK808_RTC_INT_REG 0x12
  60. #define RK808_RTC_COMP_LSB_REG 0x13
  61. #define RK808_RTC_COMP_MSB_REG 0x14
  62. #define RK808_CLK32OUT_REG 0x20
  63. #define RK808_VB_MON_REG 0x21
  64. #define RK808_THERMAL_REG 0x22
  65. #define RK808_DCDC_EN_REG 0x23
  66. #define RK808_LDO_EN_REG 0x24
  67. #define RK808_SLEEP_SET_OFF_REG1 0x25
  68. #define RK808_SLEEP_SET_OFF_REG2 0x26
  69. #define RK808_DCDC_UV_STS_REG 0x27
  70. #define RK808_DCDC_UV_ACT_REG 0x28
  71. #define RK808_LDO_UV_STS_REG 0x29
  72. #define RK808_LDO_UV_ACT_REG 0x2a
  73. #define RK808_DCDC_PG_REG 0x2b
  74. #define RK808_LDO_PG_REG 0x2c
  75. #define RK808_VOUT_MON_TDB_REG 0x2d
  76. #define RK808_BUCK1_CONFIG_REG 0x2e
  77. #define RK808_BUCK1_ON_VSEL_REG 0x2f
  78. #define RK808_BUCK1_SLP_VSEL_REG 0x30
  79. #define RK808_BUCK1_DVS_VSEL_REG 0x31
  80. #define RK808_BUCK2_CONFIG_REG 0x32
  81. #define RK808_BUCK2_ON_VSEL_REG 0x33
  82. #define RK808_BUCK2_SLP_VSEL_REG 0x34
  83. #define RK808_BUCK2_DVS_VSEL_REG 0x35
  84. #define RK808_BUCK3_CONFIG_REG 0x36
  85. #define RK808_BUCK4_CONFIG_REG 0x37
  86. #define RK808_BUCK4_ON_VSEL_REG 0x38
  87. #define RK808_BUCK4_SLP_VSEL_REG 0x39
  88. #define RK808_BOOST_CONFIG_REG 0x3a
  89. #define RK808_LDO1_ON_VSEL_REG 0x3b
  90. #define RK808_LDO1_SLP_VSEL_REG 0x3c
  91. #define RK808_LDO2_ON_VSEL_REG 0x3d
  92. #define RK808_LDO2_SLP_VSEL_REG 0x3e
  93. #define RK808_LDO3_ON_VSEL_REG 0x3f
  94. #define RK808_LDO3_SLP_VSEL_REG 0x40
  95. #define RK808_LDO4_ON_VSEL_REG 0x41
  96. #define RK808_LDO4_SLP_VSEL_REG 0x42
  97. #define RK808_LDO5_ON_VSEL_REG 0x43
  98. #define RK808_LDO5_SLP_VSEL_REG 0x44
  99. #define RK808_LDO6_ON_VSEL_REG 0x45
  100. #define RK808_LDO6_SLP_VSEL_REG 0x46
  101. #define RK808_LDO7_ON_VSEL_REG 0x47
  102. #define RK808_LDO7_SLP_VSEL_REG 0x48
  103. #define RK808_LDO8_ON_VSEL_REG 0x49
  104. #define RK808_LDO8_SLP_VSEL_REG 0x4a
  105. #define RK808_DEVCTRL_REG 0x4b
  106. #define RK808_INT_STS_REG1 0x4c
  107. #define RK808_INT_STS_MSK_REG1 0x4d
  108. #define RK808_INT_STS_REG2 0x4e
  109. #define RK808_INT_STS_MSK_REG2 0x4f
  110. #define RK808_IO_POL_REG 0x50
  111. /* IRQ Definitions */
  112. #define RK808_IRQ_VOUT_LO 0
  113. #define RK808_IRQ_VB_LO 1
  114. #define RK808_IRQ_PWRON 2
  115. #define RK808_IRQ_PWRON_LP 3
  116. #define RK808_IRQ_HOTDIE 4
  117. #define RK808_IRQ_RTC_ALARM 5
  118. #define RK808_IRQ_RTC_PERIOD 6
  119. #define RK808_IRQ_PLUG_IN_INT 7
  120. #define RK808_IRQ_PLUG_OUT_INT 8
  121. #define RK808_NUM_IRQ 9
  122. #define RK808_IRQ_VOUT_LO_MSK BIT(0)
  123. #define RK808_IRQ_VB_LO_MSK BIT(1)
  124. #define RK808_IRQ_PWRON_MSK BIT(2)
  125. #define RK808_IRQ_PWRON_LP_MSK BIT(3)
  126. #define RK808_IRQ_HOTDIE_MSK BIT(4)
  127. #define RK808_IRQ_RTC_ALARM_MSK BIT(5)
  128. #define RK808_IRQ_RTC_PERIOD_MSK BIT(6)
  129. #define RK808_IRQ_PLUG_IN_INT_MSK BIT(0)
  130. #define RK808_IRQ_PLUG_OUT_INT_MSK BIT(1)
  131. #define RK808_VBAT_LOW_2V8 0x00
  132. #define RK808_VBAT_LOW_2V9 0x01
  133. #define RK808_VBAT_LOW_3V0 0x02
  134. #define RK808_VBAT_LOW_3V1 0x03
  135. #define RK808_VBAT_LOW_3V2 0x04
  136. #define RK808_VBAT_LOW_3V3 0x05
  137. #define RK808_VBAT_LOW_3V4 0x06
  138. #define RK808_VBAT_LOW_3V5 0x07
  139. #define VBAT_LOW_VOL_MASK (0x07 << 0)
  140. #define EN_VABT_LOW_SHUT_DOWN (0x00 << 4)
  141. #define EN_VBAT_LOW_IRQ (0x1 << 4)
  142. #define VBAT_LOW_ACT_MASK (0x1 << 4)
  143. #define BUCK_ILMIN_MASK (7 << 0)
  144. #define BOOST_ILMIN_MASK (7 << 0)
  145. #define BUCK1_RATE_MASK (3 << 3)
  146. #define BUCK2_RATE_MASK (3 << 3)
  147. #define MASK_ALL 0xff
  148. #define SWITCH2_EN BIT(6)
  149. #define SWITCH1_EN BIT(5)
  150. #define DEV_OFF_RST BIT(3)
  151. #define VB_LO_ACT BIT(4)
  152. #define VB_LO_SEL_3500MV (7 << 0)
  153. #define VOUT_LO_INT BIT(0)
  154. #define CLK32KOUT2_EN BIT(0)
  155. enum {
  156. BUCK_ILMIN_50MA,
  157. BUCK_ILMIN_100MA,
  158. BUCK_ILMIN_150MA,
  159. BUCK_ILMIN_200MA,
  160. BUCK_ILMIN_250MA,
  161. BUCK_ILMIN_300MA,
  162. BUCK_ILMIN_350MA,
  163. BUCK_ILMIN_400MA,
  164. };
  165. enum {
  166. BOOST_ILMIN_75MA,
  167. BOOST_ILMIN_100MA,
  168. BOOST_ILMIN_125MA,
  169. BOOST_ILMIN_150MA,
  170. BOOST_ILMIN_175MA,
  171. BOOST_ILMIN_200MA,
  172. BOOST_ILMIN_225MA,
  173. BOOST_ILMIN_250MA,
  174. };
  175. struct rk808 {
  176. struct i2c_client *i2c;
  177. struct regmap_irq_chip_data *irq_data;
  178. struct regmap *regmap;
  179. };
  180. #endif /* __LINUX_REGULATOR_rk808_H */