max77804k-private.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478
  1. /*
  2. * max77804k-private.h - Voltage regulator driver for the Maxim 77804k
  3. *
  4. * Copyright (C) 2011 Samsung Electrnoics
  5. * SangYoung Son <hello.son@samsung.com>
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, write to the Free Software
  19. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  20. */
  21. #ifndef __LINUX_MFD_MAX77804K_PRIV_H
  22. #define __LINUX_MFD_MAX77804K_PRIV_H
  23. #include <linux/i2c.h>
  24. #define MAX77804K_NUM_IRQ_MUIC_REGS 3
  25. #define MAX77804K_REG_INVALID (0xff)
  26. #define MAX77804K_IRQSRC_CHG (1 << 0)
  27. #define MAX77804K_IRQSRC_TOP (1 << 1)
  28. #define MAX77804K_IRQSRC_FLASH (1 << 2)
  29. #define MAX77804K_IRQSRC_MUIC (1 << 3)
  30. /* pmic revision */
  31. enum max77804k_pmic_rev {
  32. MAX77804K_REV_PASS1 = 0x00,
  33. MAX77804K_REV_PASS2 = 0x01,
  34. MAX77804K_REV_PASS3 = 0x02,
  35. };
  36. /* Slave addr = 0xCC: Charger, Flash LED, Haptic */
  37. enum max77804k_pmic_reg {
  38. MAX77804K_LED_REG_IFLASH = 0x00,
  39. MAX77804K_LED_REG_RESERVED_01 = 0x01,
  40. MAX77804K_LED_REG_ITORCH = 0x02,
  41. MAX77804K_LED_REG_ITORCHTORCHTIMER = 0x03,
  42. MAX77804K_LED_REG_FLASH_TIMER = 0x04,
  43. MAX77804K_LED_REG_FLASH_EN = 0x05,
  44. MAX77804K_LED_REG_MAX_FLASH1 = 0x06,
  45. MAX77804K_LED_REG_MAX_FLASH2 = 0x07,
  46. MAX77804K_LED_REG_MAX_FLASH3 = 0x08,
  47. MAX77804K_LED_REG_MAX_FLASH4 = 0x09,
  48. MAX77804K_LED_REG_VOUT_CNTL = 0x0A,
  49. MAX77804K_LED_REG_VOUT_FLASH = 0x0B,
  50. MAX77804K_LED_REG_RESERVED_0C = 0x0C,
  51. MAX77804K_LED_REG_RESERVED_0D = 0x0D,
  52. MAX77804K_LED_REG_FLASH_INT = 0x0E,
  53. MAX77804K_LED_REG_FLASH_INT_MASK = 0x0F,
  54. MAX77804K_LED_REG_FLASH_INT_STATUS = 0x10,
  55. MAX77804K_LED_REG_RESERVED_11 = 0x11,
  56. MAX77804K_PMIC_REG_PMIC_ID1 = 0x20,
  57. MAX77804K_PMIC_REG_PMIC_ID2 = 0x21,
  58. MAX77804K_PMIC_REG_INTSRC = 0x22,
  59. MAX77804K_PMIC_REG_INTSRC_MASK = 0x23,
  60. MAX77804K_PMIC_REG_TOPSYS_INT = 0x24,
  61. MAX77804K_PMIC_REG_RESERVED_25 = 0x25,
  62. MAX77804K_PMIC_REG_TOPSYS_INT_MASK = 0x26,
  63. MAX77804K_PMIC_REG_RESERVED_27 = 0x27,
  64. MAX77804K_PMIC_REG_TOPSYS_STAT = 0x28,
  65. MAX77804K_PMIC_REG_RESERVED_29 = 0x29,
  66. MAX77804K_PMIC_REG_MAINCTRL1 = 0x2A,
  67. MAX77804K_PMIC_REG_LSCNFG = 0x2B,
  68. MAX77804K_PMIC_REG_RESERVED_2C = 0x2C,
  69. MAX77804K_PMIC_REG_RESERVED_2D = 0x2D,
  70. MAX77804K_CHG_REG_CHG_INT = 0xB0,
  71. MAX77804K_CHG_REG_CHG_INT_MASK = 0xB1,
  72. MAX77804K_CHG_REG_CHG_INT_OK = 0xB2,
  73. MAX77804K_CHG_REG_CHG_DTLS_00 = 0xB3,
  74. MAX77804K_CHG_REG_CHG_DTLS_01 = 0xB4,
  75. MAX77804K_CHG_REG_CHG_DTLS_02 = 0xB5,
  76. MAX77804K_CHG_REG_CHG_DTLS_03 = 0xB6,
  77. MAX77804K_CHG_REG_CHG_CNFG_00 = 0xB7,
  78. MAX77804K_CHG_REG_CHG_CNFG_01 = 0xB8,
  79. MAX77804K_CHG_REG_CHG_CNFG_02 = 0xB9,
  80. MAX77804K_CHG_REG_CHG_CNFG_03 = 0xBA,
  81. MAX77804K_CHG_REG_CHG_CNFG_04 = 0xBB,
  82. MAX77804K_CHG_REG_CHG_CNFG_05 = 0xBC,
  83. MAX77804K_CHG_REG_CHG_CNFG_06 = 0xBD,
  84. MAX77804K_CHG_REG_CHG_CNFG_07 = 0xBE,
  85. MAX77804K_CHG_REG_CHG_CNFG_08 = 0xBF,
  86. MAX77804K_CHG_REG_CHG_CNFG_09 = 0xC0,
  87. MAX77804K_CHG_REG_CHG_CNFG_10 = 0xC1,
  88. MAX77804K_CHG_REG_CHG_CNFG_11 = 0xC2,
  89. MAX77804K_CHG_REG_CHG_CNFG_12 = 0xC3,
  90. MAX77804K_CHG_REG_CHG_CNFG_13 = 0xC4,
  91. MAX77804K_CHG_REG_CHG_CNFG_14 = 0xC5,
  92. MAX77804K_CHG_REG_SAFEOUT_CTRL = 0xC6,
  93. MAX77804K_PMIC_REG_END,
  94. };
  95. /* Slave addr = 0x4A: MUIC */
  96. enum max77804k_muic_reg {
  97. MAX77804K_MUIC_REG_ID = 0x00,
  98. MAX77804K_MUIC_REG_INT1 = 0x01,
  99. MAX77804K_MUIC_REG_INT2 = 0x02,
  100. MAX77804K_MUIC_REG_INT3 = 0x03,
  101. MAX77804K_MUIC_REG_STATUS1 = 0x04,
  102. MAX77804K_MUIC_REG_STATUS2 = 0x05,
  103. MAX77804K_MUIC_REG_STATUS3 = 0x06,
  104. MAX77804K_MUIC_REG_INTMASK1 = 0x07,
  105. MAX77804K_MUIC_REG_INTMASK2 = 0x08,
  106. MAX77804K_MUIC_REG_INTMASK3 = 0x09,
  107. MAX77804K_MUIC_REG_CDETCTRL1 = 0x0A,
  108. MAX77804K_MUIC_REG_CDETCTRL2 = 0x0B,
  109. MAX77804K_MUIC_REG_CTRL1 = 0x0C,
  110. MAX77804K_MUIC_REG_CTRL2 = 0x0D,
  111. MAX77804K_MUIC_REG_CTRL3 = 0x0E,
  112. MAX77804K_MUIC_REG_CTRL4 = 0x16,
  113. MAX77804K_MUIC_REG_END,
  114. };
  115. /* Slave addr = 0x90: Haptic */
  116. enum max77804k_haptic_reg {
  117. MAX77804K_HAPTIC_REG_STATUS = 0x00,
  118. MAX77804K_HAPTIC_REG_CONFIG1 = 0x01,
  119. MAX77804K_HAPTIC_REG_CONFIG2 = 0x02,
  120. MAX77804K_HAPTIC_REG_CONFIG_CHNL = 0x03,
  121. MAX77804K_HAPTIC_REG_CONFG_CYC1 = 0x04,
  122. MAX77804K_HAPTIC_REG_CONFG_CYC2 = 0x05,
  123. MAX77804K_HAPTIC_REG_CONFIG_PER1 = 0x06,
  124. MAX77804K_HAPTIC_REG_CONFIG_PER2 = 0x07,
  125. MAX77804K_HAPTIC_REG_CONFIG_PER3 = 0x08,
  126. MAX77804K_HAPTIC_REG_CONFIG_PER4 = 0x09,
  127. MAX77804K_HAPTIC_REG_CONFIG_DUTY1 = 0x0A,
  128. MAX77804K_HAPTIC_REG_CONFIG_DUTY2 = 0x0B,
  129. MAX77804K_HAPTIC_REG_CONFIG_PWM1 = 0x0C,
  130. MAX77804K_HAPTIC_REG_CONFIG_PWM2 = 0x0D,
  131. MAX77804K_HAPTIC_REG_CONFIG_PWM3 = 0x0E,
  132. MAX77804K_HAPTIC_REG_CONFIG_PWM4 = 0x0F,
  133. MAX77804K_HAPTIC_REG_REV = 0x10,
  134. MAX77804K_HAPTIC_REG_END,
  135. };
  136. /* MAX77804K REGISTER ENABLE or DISABLE bit */
  137. #define MAX77804K_ENABLE_BIT 1
  138. #define MAX77804K_DISABLE_BIT 0
  139. /* MAX77804K MAINCNTL1 register */
  140. #define PMIC_MAINCTRL1_MREN_SHIFT 3
  141. #define PMIC_MAINCTRL1_MREN_MASK (1 << PMIC_MAINCTRL1_MREN_SHIFT)
  142. /* MAX77804K CHG_CNFG_00 register */
  143. #define CHG_CNFG_00_MODE_SHIFT 0
  144. #define CHG_CNFG_00_CHG_SHIFT 0
  145. #define CHG_CNFG_00_OTG_SHIFT 1
  146. #define CHG_CNFG_00_BUCK_SHIFT 2
  147. #define CHG_CNFG_00_BOOST_SHIFT 3
  148. #define CHG_CNFG_00_DIS_MUIC_CTRL_SHIFT 5
  149. #define CHG_CNFG_00_MODE_MASK (0xf << CHG_CNFG_00_MODE_SHIFT)
  150. #define CHG_CNFG_00_CHG_MASK (1 << CHG_CNFG_00_CHG_SHIFT)
  151. #define CHG_CNFG_00_OTG_MASK (1 << CHG_CNFG_00_OTG_SHIFT)
  152. #define CHG_CNFG_00_BUCK_MASK (1 << CHG_CNFG_00_BUCK_SHIFT)
  153. #define CHG_CNFG_00_BOOST_MASK (1 << CHG_CNFG_00_BOOST_SHIFT)
  154. #define CHG_CNFG_00_DIS_MUIC_CTRL_MASK (1 << CHG_CNFG_00_DIS_MUIC_CTRL_SHIFT)
  155. #define CHG_CNFG_00_EN_MUIC_CTRL_MASK ~(1 << CHG_CNFG_00_DIS_MUIC_CTRL_SHIFT)
  156. #define CHG_CNFG_00_LANHUB_CTRL \
  157. (CHG_CNFG_00_OTG_MASK | CHG_CNFG_00_BOOST_MASK | CHG_CNFG_00_CHG_MASK | CHG_CNFG_00_BUCK_MASK & CHG_CNFG_00_EN_MUIC_CTRL_MASK)
  158. #define CHG_CNFG_00_OTG_CTRL \
  159. (CHG_CNFG_00_OTG_MASK | CHG_CNFG_00_BOOST_MASK | CHG_CNFG_00_DIS_MUIC_CTRL_MASK)
  160. /* MAX77804K CHG_CNFG_04 register */
  161. #define CHG_CNFG_04_CHG_CV_PRM_SHIFT 0
  162. #define CHG_CNFG_04_CHG_CV_PRM_MASK (0x1f << CHG_CNFG_04_CHG_CV_PRM_SHIFT)
  163. /* MAX77804K CHG_CNFG_12 register */
  164. #define CHG_CNFG_12_CHGINSEL_SHIFT 5
  165. #define CHG_CNFG_12_CHGINSEL_MASK (0x1 << CHG_CNFG_12_CHGINSEL_SHIFT)
  166. /* MAX77804K STATUS1 register */
  167. #define STATUS1_ADC_SHIFT 0
  168. #define STATUS1_ADCLOW_SHIFT 5
  169. #define STATUS1_ADCERR_SHIFT 6
  170. #define STATUS1_ADC1K_SHIFT 7
  171. #define STATUS1_ADC_MASK (0x1f << STATUS1_ADC_SHIFT)
  172. #define STATUS1_ADCLOW_MASK (0x1 << STATUS1_ADCLOW_SHIFT)
  173. #define STATUS1_ADCERR_MASK (0x1 << STATUS1_ADCERR_SHIFT)
  174. #define STATUS1_ADC1K_MASK (0x1 << STATUS1_ADC1K_SHIFT)
  175. /* MAX77804K STATUS2 register */
  176. #define STATUS2_CHGTYP_SHIFT 0
  177. #define STATUS2_CHGDETRUN_SHIFT 3
  178. #define STATUS2_DXOVP_SHIFT 5
  179. #define STATUS2_VBVOLT_SHIFT 6
  180. #define STATUS2_CHGTYP_MASK (0x7 << STATUS2_CHGTYP_SHIFT)
  181. #define STATUS2_CHGDETRUN_MASK (0x1 << STATUS2_CHGDETRUN_SHIFT)
  182. #define STATUS2_DXOVP_MASK (0x1 << STATUS2_DXOVP_SHIFT)
  183. #define STATUS2_VBVOLT_MASK (0x1 << STATUS2_VBVOLT_SHIFT)
  184. /* MAX77804K CDETCTRL1 register */
  185. #define CHGDETEN_SHIFT 0
  186. #define CHGTYPM_SHIFT 1
  187. #define CHGDETEN_MASK (0x1 << CHGDETEN_SHIFT)
  188. #define CHGTYPM_MASK (0x1 << CHGTYPM_SHIFT)
  189. /* MAX77804K CONTROL1 register */
  190. #define CLEAR_IDBEN_MICEN_MASK 0x3f
  191. #define COMN1SW_SHIFT 0x0
  192. #define COMP2SW_SHIFT 0x3
  193. #define MICEN_SHIFT 0x6
  194. #define CTRL_IDBP_SHIFT 7
  195. #define CTRL_IDBP_EN (1 << CTRL_IDBP_SHIFT)
  196. #define COMN1SW_MASK (0x7 << COMN1SW_SHIFT)
  197. #define COMP2SW_MASK (0x7 << COMP2SW_SHIFT)
  198. #define MICEN_MASK (0x1 << MICEN_SHIFT)
  199. /* MAX77804K CONTROL2 register */
  200. #define CTRL2_ACCDET_SHIFT 5
  201. #define CTRL2_ACCDET_MASK (0x1 << CTRL2_ACCDET_SHIFT)
  202. #define CTRL2_CPEn_SHIFT 2
  203. #define CTRL2_CPEn_MASK (0x1 << CTRL2_CPEn_SHIFT)
  204. #define CTRL2_LOWPWD_SHIFT 0
  205. #define CTRL2_LOWPWD_MASK (0x1 << CTRL2_LOWPWD_SHIFT)
  206. #define CTRL2_CPEn1_LOWPWD0 ((MAX77804K_ENABLE_BIT << CTRL2_CPEn_SHIFT) | \
  207. (MAX77804K_DISABLE_BIT << CTRL2_LOWPWD_SHIFT))
  208. #define CTRL2_CPEn0_LOWPWD1 ((MAX77804K_DISABLE_BIT << CTRL2_CPEn_SHIFT) | \
  209. (MAX77804K_ENABLE_BIT << CTRL2_LOWPWD_SHIFT))
  210. /* MAX77804K CONTROL3 register */
  211. #define CTRL3_JIGSET_SHIFT 0
  212. #define CTRL3_BOOTSET_SHIFT 2
  213. #define CTRL3_ADCDBSET_SHIFT 4
  214. #define CTRL3_JIGSET_MASK (0x3 << CTRL3_JIGSET_SHIFT)
  215. #define CTRL3_BOOTSET_MASK (0x3 << CTRL3_BOOTSET_SHIFT)
  216. #define CTRL3_ADCDBSET_MASK (0x3 << CTRL3_ADCDBSET_SHIFT)
  217. /* MAX77804 CONTROL4 register */
  218. #define CTRL4_ADCMODE_SHIFT 6
  219. #define CTRL4_ADCDBSET_SHIFT 0
  220. #define CTRL4_ADCMODE_MASK (0x3 << CTRL4_ADCMODE_SHIFT)
  221. #define CTRL4_ADCDBSET_MASK (0x3 << CTRL4_ADCDBSET_SHIFT)
  222. /* Interrupt 1 */
  223. #define INT_DETACH (0x1 << 1)
  224. #define INT_ATTACH (0x1 << 0)
  225. /* muic register value for COMN1, COMN2 in CTRL1 reg */
  226. enum max77804k_reg_ctrl1_val {
  227. MAX77804K_MUIC_CTRL1_BIN_0_000 = 0x00,
  228. MAX77804K_MUIC_CTRL1_BIN_1_001 = 0x01,
  229. MAX77804K_MUIC_CTRL1_BIN_2_010 = 0x02,
  230. MAX77804K_MUIC_CTRL1_BIN_3_011 = 0x03,
  231. MAX77804K_MUIC_CTRL1_BIN_4_100 = 0x04,
  232. MAX77804K_MUIC_CTRL1_BIN_5_101 = 0x05,
  233. MAX77804K_MUIC_CTRL1_BIN_6_110 = 0x06,
  234. MAX77804K_MUIC_CTRL1_BIN_7_111 = 0x07,
  235. };
  236. enum max77804k_switch_sel_val {
  237. MAX77804K_SWITCH_SEL_1st_BIT_USB = 0x1 << 0,
  238. MAX77804K_SWITCH_SEL_2nd_BIT_UART = 0x1 << 1,
  239. };
  240. enum max77804k_reg_ctrl1_type {
  241. CTRL1_AP_USB =
  242. (MAX77804K_MUIC_CTRL1_BIN_1_001 << COMP2SW_SHIFT)
  243. | MAX77804K_MUIC_CTRL1_BIN_1_001 ,
  244. CTRL1_AUDIO =
  245. (MAX77804K_MUIC_CTRL1_BIN_2_010 << COMP2SW_SHIFT)
  246. | MAX77804K_MUIC_CTRL1_BIN_2_010 ,
  247. CTRL1_CP_USB =
  248. (MAX77804K_MUIC_CTRL1_BIN_4_100 << COMP2SW_SHIFT)
  249. | MAX77804K_MUIC_CTRL1_BIN_4_100 ,
  250. CTRL1_AP_UART =
  251. (MAX77804K_MUIC_CTRL1_BIN_3_011 << COMP2SW_SHIFT)
  252. | MAX77804K_MUIC_CTRL1_BIN_3_011 ,
  253. CTRL1_CP_UART =
  254. (MAX77804K_MUIC_CTRL1_BIN_5_101 << COMP2SW_SHIFT)
  255. | MAX77804K_MUIC_CTRL1_BIN_5_101 ,
  256. };
  257. /*TODO must modify H/W rev.5*/
  258. enum max77804k_irq_source {
  259. LED_INT = 0,
  260. TOPSYS_INT,
  261. CHG_INT,
  262. MUIC_INT1,
  263. MUIC_INT2,
  264. MUIC_INT3,
  265. MAX77804K_IRQ_GROUP_NR,
  266. };
  267. enum max77804k_irq {
  268. /* PMIC; FLASH */
  269. MAX77804K_LED_IRQ_FLED2_OPEN,
  270. MAX77804K_LED_IRQ_FLED2_SHORT,
  271. MAX77804K_LED_IRQ_FLED1_OPEN,
  272. MAX77804K_LED_IRQ_FLED1_SHORT,
  273. MAX77804K_LED_IRQ_MAX_FLASH,
  274. /* PMIC; TOPSYS */
  275. MAX77804K_TOPSYS_IRQ_T120C_INT,
  276. MAX77804K_TOPSYS_IRQ_T140C_INT,
  277. MAX77804K_TOPSYS_IRQLOWSYS_INT,
  278. /* PMIC; Charger */
  279. MAX77804K_CHG_IRQ_BYP_I,
  280. MAX77804K_CHG_IRQ_BATP_I,
  281. MAX77804K_CHG_IRQ_BAT_I,
  282. MAX77804K_CHG_IRQ_CHG_I,
  283. MAX77804K_CHG_IRQ_WCIN_I,
  284. MAX77804K_CHG_IRQ_CHGIN_I,
  285. /* MUIC INT1 */
  286. MAX77804K_MUIC_IRQ_INT1_ADC,
  287. MAX77804K_MUIC_IRQ_INT1_ADCLOW,
  288. MAX77804K_MUIC_IRQ_INT1_ADCERR,
  289. MAX77804K_MUIC_IRQ_INT1_ADC1K,
  290. /* MUIC INT2 */
  291. MAX77804K_MUIC_IRQ_INT2_CHGTYP,
  292. MAX77804K_MUIC_IRQ_INT2_CHGDETREUN,
  293. MAX77804K_MUIC_IRQ_INT2_DCDTMR,
  294. MAX77804K_MUIC_IRQ_INT2_DXOVP,
  295. MAX77804K_MUIC_IRQ_INT2_VBVOLT,
  296. MAX77804K_MUIC_IRQ_INT2_VIDRM,
  297. /* MUIC INT3 */
  298. MAX77804K_MUIC_IRQ_INT3_EOC,
  299. MAX77804K_MUIC_IRQ_INT3_CGMBC,
  300. MAX77804K_MUIC_IRQ_INT3_OVP,
  301. MAX77804K_MUIC_IRQ_INT3_MBCCHGERR,
  302. MAX77804K_MUIC_IRQ_INT3_CHGENABLED,
  303. MAX77804K_MUIC_IRQ_INT3_BATDET,
  304. MAX77804K_IRQ_NR,
  305. };
  306. #if defined (CONFIG_MUIC_MAX77804K_SUPPORT_LANHUB)
  307. enum {
  308. LANHUB = 0,
  309. LANHUB_TA
  310. };
  311. #endif
  312. struct max77804k_dev {
  313. struct device *dev;
  314. struct i2c_client *i2c; /* 0xCC; Charger, Flash LED */
  315. struct i2c_client *muic; /* 0x4A; MUIC */
  316. struct i2c_client *haptic; /* 0x90; Haptic */
  317. struct mutex iolock;
  318. int type;
  319. int irq;
  320. int irq_base;
  321. int irq_gpio;
  322. bool wakeup;
  323. struct mutex irqlock;
  324. int irq_masks_cur[MAX77804K_IRQ_GROUP_NR];
  325. int irq_masks_cache[MAX77804K_IRQ_GROUP_NR];
  326. #ifdef CONFIG_HIBERNATION
  327. /* For hibernation */
  328. u8 reg_pmic_dump[MAX77804K_PMIC_REG_END];
  329. u8 reg_muic_dump[MAX77804K_MUIC_REG_END];
  330. u8 reg_haptic_dump[MAX77804K_HAPTIC_REG_END];
  331. #endif
  332. /* pmic revision */
  333. u8 pmic_rev; /* REV */
  334. u8 pmic_ver; /* VERSION */
  335. };
  336. enum max77804k_types {
  337. TYPE_MAX77804K,
  338. };
  339. extern struct device *switch_dev;
  340. extern int max77804k_irq_init(struct max77804k_dev *max77804k);
  341. extern void max77804k_irq_exit(struct max77804k_dev *max77804k);
  342. extern int max77804k_irq_resume(struct max77804k_dev *max77804k);
  343. extern int max77804k_read_reg(struct i2c_client *i2c, u8 reg, u8 *dest);
  344. extern int max77804k_bulk_read(struct i2c_client *i2c, u8 reg, int count,
  345. u8 *buf);
  346. extern int max77804k_write_reg(struct i2c_client *i2c, u8 reg, u8 value);
  347. extern int max77804k_bulk_write(struct i2c_client *i2c, u8 reg, int count,
  348. u8 *buf);
  349. extern int max77804k_update_reg(struct i2c_client *i2c,
  350. u8 reg, u8 val, u8 mask);
  351. #if !defined(CONFIG_EXTCON_MAX77804K)
  352. extern int max77804k_muic_get_charging_type(void);
  353. #endif
  354. extern int max77804k_muic_get_status1_adc1k_value(void);
  355. extern int max77804k_muic_get_status1_adc_value(void);
  356. extern void otg_control(int);
  357. extern void powered_otg_control(int);
  358. extern int max77804k_muic_set_audio_switch(bool enable);
  359. #ifdef CONFIG_MFD_MAX77804K
  360. enum cable_type_muic {
  361. CABLE_TYPE_NONE_MUIC = 0, /* 0 */
  362. CABLE_TYPE_USB_MUIC, /* 1 */
  363. CABLE_TYPE_OTG_MUIC, /* 2 */
  364. CABLE_TYPE_TA_MUIC, /* 3 */
  365. CABLE_TYPE_DESKDOCK_MUIC, /* 4 */
  366. CABLE_TYPE_CARDOCK_MUIC, /* 5 */
  367. CABLE_TYPE_JIG_UART_OFF_MUIC, /* 6 */
  368. CABLE_TYPE_JIG_UART_OFF_VB_MUIC, /* 7 VBUS enabled */
  369. CABLE_TYPE_JIG_UART_ON_MUIC, /* 8 */
  370. CABLE_TYPE_JIG_USB_OFF_MUIC, /* 9 */
  371. CABLE_TYPE_JIG_USB_ON_MUIC, /* 10 */
  372. CABLE_TYPE_MHL_MUIC, /* 11 */
  373. CABLE_TYPE_MHL_VB_MUIC, /* 12 */
  374. CABLE_TYPE_SMARTDOCK_MUIC, /* 13 */
  375. CABLE_TYPE_SMARTDOCK_TA_MUIC, /* 14 */
  376. CABLE_TYPE_SMARTDOCK_USB_MUIC, /* 15 */
  377. CABLE_TYPE_AUDIODOCK_MUIC, /* 16 */
  378. CABLE_TYPE_INCOMPATIBLE_MUIC, /* 17 */
  379. CABLE_TYPE_CDP_MUIC, /* 18 */
  380. #if defined(CONFIG_MUIC_MAX77804K_SUPPORT_HMT_DETECTION)
  381. CABLE_TYPE_HMT_MUIC, /* 19 */
  382. CABLE_TYPE_HMT_TA_MUIC, /* 20 */
  383. #endif
  384. #if defined(CONFIG_MUIC_DET_JACK)
  385. CABLE_TYPE_EARJACK_MUIC,
  386. #endif
  387. CABLE_TYPE_UNKNOWN_MUIC
  388. };
  389. enum {
  390. OPEN_USB_MODE = 0,
  391. AP_USB_MODE,
  392. AUDIO_MODE,
  393. CP_USB_MODE,
  394. };
  395. enum {
  396. ADC_ALWAYS = 0,
  397. ADC_ALWAYS_1M,
  398. ADC_ONESHOT,
  399. ADC_PULSE,
  400. };
  401. enum usb_cable_status {
  402. USB_CABLE_DETACHED = 0,
  403. USB_CABLE_ATTACHED,
  404. USB_OTGHOST_DETACHED,
  405. USB_OTGHOST_ATTACHED,
  406. USB_POWERED_HOST_DETACHED,
  407. USB_POWERED_HOST_ATTACHED,
  408. USB_CABLE_DETACHED_WITHOUT_NOTI,
  409. };
  410. enum {
  411. UART_PATH_CP = 0,
  412. UART_PATH_AP,
  413. };
  414. #if defined(CONFIG_MUIC_DET_JACK)
  415. enum {
  416. NOT_INIT = 0,
  417. INIT_START,
  418. INIT_DONE,
  419. };
  420. #endif
  421. #endif /* CONFIG_MFD_MAX77804K */
  422. #endif /* __LINUX_MFD_MAX77804K_PRIV_H */