max8925.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /*
  2. * Maxim8925 Interface
  3. *
  4. * Copyright (C) 2009 Marvell International Ltd.
  5. * Haojian Zhuang <haojian.zhuang@marvell.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 version 2 as
  9. * published by the Free Software Foundation.
  10. */
  11. #ifndef __LINUX_MFD_MAX8925_H
  12. #define __LINUX_MFD_MAX8925_H
  13. #include <linux/interrupt.h>
  14. /* Charger registers */
  15. #define MAX8925_CHG_IRQ1 (0x7e)
  16. #define MAX8925_CHG_IRQ2 (0x7f)
  17. #define MAX8925_CHG_IRQ1_MASK (0x80)
  18. #define MAX8925_CHG_IRQ2_MASK (0x81)
  19. /* GPM registers */
  20. #define MAX8925_SYSENSEL (0x00)
  21. #define MAX8925_ON_OFF_IRQ1 (0x01)
  22. #define MAX8925_ON_OFF_IRQ1_MASK (0x02)
  23. #define MAX8925_ON_OFF_STAT (0x03)
  24. #define MAX8925_ON_OFF_IRQ2 (0x0d)
  25. #define MAX8925_ON_OFF_IRQ2_MASK (0x0e)
  26. #define MAX8925_RESET_CNFG (0x0f)
  27. /* Touch registers */
  28. #define MAX8925_TSC_IRQ (0x00)
  29. #define MAX8925_TSC_IRQ_MASK (0x01)
  30. /* RTC registers */
  31. #define MAX8925_RTC_STATUS (0x1a)
  32. #define MAX8925_RTC_IRQ (0x1c)
  33. #define MAX8925_RTC_IRQ_MASK (0x1d)
  34. /* bit definitions */
  35. #define CHG_IRQ1_MASK (0x07)
  36. #define CHG_IRQ2_MASK (0xff)
  37. #define ON_OFF_IRQ1_MASK (0xff)
  38. #define ON_OFF_IRQ2_MASK (0x03)
  39. #define TSC_IRQ_MASK (0x03)
  40. #define RTC_IRQ_MASK (0x0c)
  41. #define MAX8925_NUM_IRQ (32)
  42. #define MAX8925_NAME_SIZE (32)
  43. enum {
  44. MAX8925_INVALID = 0,
  45. MAX8925_RTC,
  46. MAX8925_ADC,
  47. MAX8925_GPM, /* general power management */
  48. MAX8925_MAX,
  49. };
  50. #define MAX8925_IRQ_VCHG_OVP (0)
  51. #define MAX8925_IRQ_VCHG_F (1)
  52. #define MAX8925_IRQ_VCHG_R (2)
  53. #define MAX8925_IRQ_VCHG_THM_OK_R (8)
  54. #define MAX8925_IRQ_VCHG_THM_OK_F (9)
  55. #define MAX8925_IRQ_VCHG_BATTLOW_F (10)
  56. #define MAX8925_IRQ_VCHG_BATTLOW_R (11)
  57. #define MAX8925_IRQ_VCHG_RST (12)
  58. #define MAX8925_IRQ_VCHG_DONE (13)
  59. #define MAX8925_IRQ_VCHG_TOPOFF (14)
  60. #define MAX8925_IRQ_VCHG_TMR_FAULT (15)
  61. #define MAX8925_IRQ_GPM_RSTIN (16)
  62. #define MAX8925_IRQ_GPM_MPL (17)
  63. #define MAX8925_IRQ_GPM_SW_3SEC (18)
  64. #define MAX8925_IRQ_GPM_EXTON_F (19)
  65. #define MAX8925_IRQ_GPM_EXTON_R (20)
  66. #define MAX8925_IRQ_GPM_SW_1SEC (21)
  67. #define MAX8925_IRQ_GPM_SW_F (22)
  68. #define MAX8925_IRQ_GPM_SW_R (23)
  69. #define MAX8925_IRQ_GPM_SYSCKEN_F (24)
  70. #define MAX8925_IRQ_GPM_SYSCKEN_R (25)
  71. #define MAX8925_IRQ_TSC_STICK (0)
  72. #define MAX8925_IRQ_TSC_NSTICK (1)
  73. struct max8925_irq {
  74. irq_handler_t handler;
  75. void *data;
  76. };
  77. struct max8925_chip {
  78. struct device *dev;
  79. struct mutex io_lock;
  80. struct mutex irq_lock;
  81. struct i2c_client *i2c;
  82. struct max8925_irq irq[MAX8925_NUM_IRQ];
  83. const char *name;
  84. int chip_id;
  85. int chip_irq;
  86. };
  87. struct max8925_platform_data {
  88. int chip_id;
  89. int chip_irq;
  90. };
  91. extern int max8925_reg_read(struct i2c_client *, int);
  92. extern int max8925_reg_write(struct i2c_client *, int, unsigned char);
  93. extern int max8925_bulk_read(struct i2c_client *, int, int, unsigned char *);
  94. extern int max8925_bulk_write(struct i2c_client *, int, int, unsigned char *);
  95. extern int max8925_set_bits(struct i2c_client *, int, unsigned char,
  96. unsigned char);
  97. extern int max8925_device_init(struct max8925_chip *,
  98. struct max8925_platform_data *);
  99. extern void max8925_device_exit(struct max8925_chip *);
  100. #endif /* __LINUX_MFD_MAX8925_H */