max8998-private.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * max8998-private.h - Voltage regulator driver for the Maxim 8998
  4. *
  5. * Copyright (C) 2009-2010 Samsung Electrnoics
  6. * Kyungmin Park <[email protected]>
  7. * Marek Szyprowski <[email protected]>
  8. */
  9. #ifndef __LINUX_MFD_MAX8998_PRIV_H
  10. #define __LINUX_MFD_MAX8998_PRIV_H
  11. #define MAX8998_NUM_IRQ_REGS 4
  12. /* MAX 8998 registers */
  13. enum {
  14. MAX8998_REG_IRQ1,
  15. MAX8998_REG_IRQ2,
  16. MAX8998_REG_IRQ3,
  17. MAX8998_REG_IRQ4,
  18. MAX8998_REG_IRQM1,
  19. MAX8998_REG_IRQM2,
  20. MAX8998_REG_IRQM3,
  21. MAX8998_REG_IRQM4,
  22. MAX8998_REG_STATUS1,
  23. MAX8998_REG_STATUS2,
  24. MAX8998_REG_STATUSM1,
  25. MAX8998_REG_STATUSM2,
  26. MAX8998_REG_CHGR1,
  27. MAX8998_REG_CHGR2,
  28. MAX8998_REG_LDO_ACTIVE_DISCHARGE1,
  29. MAX8998_REG_LDO_ACTIVE_DISCHARGE2,
  30. MAX8998_REG_BUCK_ACTIVE_DISCHARGE3,
  31. MAX8998_REG_ONOFF1,
  32. MAX8998_REG_ONOFF2,
  33. MAX8998_REG_ONOFF3,
  34. MAX8998_REG_ONOFF4,
  35. MAX8998_REG_BUCK1_VOLTAGE1,
  36. MAX8998_REG_BUCK1_VOLTAGE2,
  37. MAX8998_REG_BUCK1_VOLTAGE3,
  38. MAX8998_REG_BUCK1_VOLTAGE4,
  39. MAX8998_REG_BUCK2_VOLTAGE1,
  40. MAX8998_REG_BUCK2_VOLTAGE2,
  41. MAX8998_REG_BUCK3,
  42. MAX8998_REG_BUCK4,
  43. MAX8998_REG_LDO2_LDO3,
  44. MAX8998_REG_LDO4,
  45. MAX8998_REG_LDO5,
  46. MAX8998_REG_LDO6,
  47. MAX8998_REG_LDO7,
  48. MAX8998_REG_LDO8_LDO9,
  49. MAX8998_REG_LDO10_LDO11,
  50. MAX8998_REG_LDO12,
  51. MAX8998_REG_LDO13,
  52. MAX8998_REG_LDO14,
  53. MAX8998_REG_LDO15,
  54. MAX8998_REG_LDO16,
  55. MAX8998_REG_LDO17,
  56. MAX8998_REG_BKCHR,
  57. MAX8998_REG_LBCNFG1,
  58. MAX8998_REG_LBCNFG2,
  59. };
  60. /* IRQ definitions */
  61. enum {
  62. MAX8998_IRQ_DCINF,
  63. MAX8998_IRQ_DCINR,
  64. MAX8998_IRQ_JIGF,
  65. MAX8998_IRQ_JIGR,
  66. MAX8998_IRQ_PWRONF,
  67. MAX8998_IRQ_PWRONR,
  68. MAX8998_IRQ_WTSREVNT,
  69. MAX8998_IRQ_SMPLEVNT,
  70. MAX8998_IRQ_ALARM1,
  71. MAX8998_IRQ_ALARM0,
  72. MAX8998_IRQ_ONKEY1S,
  73. MAX8998_IRQ_TOPOFFR,
  74. MAX8998_IRQ_DCINOVPR,
  75. MAX8998_IRQ_CHGRSTF,
  76. MAX8998_IRQ_DONER,
  77. MAX8998_IRQ_CHGFAULT,
  78. MAX8998_IRQ_LOBAT1,
  79. MAX8998_IRQ_LOBAT2,
  80. MAX8998_IRQ_NR,
  81. };
  82. /* MAX8998 various variants */
  83. enum {
  84. TYPE_MAX8998 = 0, /* Default */
  85. TYPE_LP3974, /* National version of MAX8998 */
  86. TYPE_LP3979, /* Added AVS */
  87. };
  88. #define MAX8998_IRQ_DCINF_MASK (1 << 2)
  89. #define MAX8998_IRQ_DCINR_MASK (1 << 3)
  90. #define MAX8998_IRQ_JIGF_MASK (1 << 4)
  91. #define MAX8998_IRQ_JIGR_MASK (1 << 5)
  92. #define MAX8998_IRQ_PWRONF_MASK (1 << 6)
  93. #define MAX8998_IRQ_PWRONR_MASK (1 << 7)
  94. #define MAX8998_IRQ_WTSREVNT_MASK (1 << 0)
  95. #define MAX8998_IRQ_SMPLEVNT_MASK (1 << 1)
  96. #define MAX8998_IRQ_ALARM1_MASK (1 << 2)
  97. #define MAX8998_IRQ_ALARM0_MASK (1 << 3)
  98. #define MAX8998_IRQ_ONKEY1S_MASK (1 << 0)
  99. #define MAX8998_IRQ_TOPOFFR_MASK (1 << 2)
  100. #define MAX8998_IRQ_DCINOVPR_MASK (1 << 3)
  101. #define MAX8998_IRQ_CHGRSTF_MASK (1 << 4)
  102. #define MAX8998_IRQ_DONER_MASK (1 << 5)
  103. #define MAX8998_IRQ_CHGFAULT_MASK (1 << 7)
  104. #define MAX8998_IRQ_LOBAT1_MASK (1 << 0)
  105. #define MAX8998_IRQ_LOBAT2_MASK (1 << 1)
  106. #define MAX8998_ENRAMP (1 << 4)
  107. struct irq_domain;
  108. /**
  109. * struct max8998_dev - max8998 master device for sub-drivers
  110. * @dev: master device of the chip (can be used to access platform data)
  111. * @pdata: platform data for the driver and subdrivers
  112. * @i2c: i2c client private data for regulator
  113. * @rtc: i2c client private data for rtc
  114. * @iolock: mutex for serializing io access
  115. * @irqlock: mutex for buslock
  116. * @irq_base: base IRQ number for max8998, required for IRQs
  117. * @irq: generic IRQ number for max8998
  118. * @ono: power onoff IRQ number for max8998
  119. * @irq_masks_cur: currently active value
  120. * @irq_masks_cache: cached hardware value
  121. * @type: indicate which max8998 "variant" is used
  122. */
  123. struct max8998_dev {
  124. struct device *dev;
  125. struct max8998_platform_data *pdata;
  126. struct i2c_client *i2c;
  127. struct i2c_client *rtc;
  128. struct mutex iolock;
  129. struct mutex irqlock;
  130. unsigned int irq_base;
  131. struct irq_domain *irq_domain;
  132. int irq;
  133. int ono;
  134. u8 irq_masks_cur[MAX8998_NUM_IRQ_REGS];
  135. u8 irq_masks_cache[MAX8998_NUM_IRQ_REGS];
  136. unsigned long type;
  137. bool wakeup;
  138. };
  139. int max8998_irq_init(struct max8998_dev *max8998);
  140. void max8998_irq_exit(struct max8998_dev *max8998);
  141. int max8998_irq_resume(struct max8998_dev *max8998);
  142. extern int max8998_read_reg(struct i2c_client *i2c, u8 reg, u8 *dest);
  143. extern int max8998_bulk_read(struct i2c_client *i2c, u8 reg, int count,
  144. u8 *buf);
  145. extern int max8998_write_reg(struct i2c_client *i2c, u8 reg, u8 value);
  146. extern int max8998_bulk_write(struct i2c_client *i2c, u8 reg, int count,
  147. u8 *buf);
  148. extern int max8998_update_reg(struct i2c_client *i2c, u8 reg, u8 val, u8 mask);
  149. #endif /* __LINUX_MFD_MAX8998_PRIV_H */