core.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * Definitions for DA9063 MFD driver
  3. *
  4. * Copyright 2012 Dialog Semiconductor Ltd.
  5. *
  6. * Author: Michal Hajduk <michal.hajduk@diasemi.com>
  7. * Krystian Garbaciak <krystian.garbaciak@diasemi.com>
  8. *
  9. * This program is free software; you can redistribute it and/or modify it
  10. * under the terms of the GNU General Public License as published by the
  11. * Free Software Foundation; either version 2 of the License, or (at your
  12. * option) any later version.
  13. *
  14. */
  15. #ifndef __MFD_DA9063_CORE_H__
  16. #define __MFD_DA9063_CORE_H__
  17. #include <linux/interrupt.h>
  18. #include <linux/mfd/da9063/registers.h>
  19. /* DA9063 modules */
  20. #define DA9063_DRVNAME_CORE "da9063-core"
  21. #define DA9063_DRVNAME_REGULATORS "da9063-regulators"
  22. #define DA9063_DRVNAME_LEDS "da9063-leds"
  23. #define DA9063_DRVNAME_WATCHDOG "da9063-watchdog"
  24. #define DA9063_DRVNAME_HWMON "da9063-hwmon"
  25. #define DA9063_DRVNAME_ONKEY "da9063-onkey"
  26. #define DA9063_DRVNAME_RTC "da9063-rtc"
  27. #define DA9063_DRVNAME_VIBRATION "da9063-vibration"
  28. enum da9063_models {
  29. PMIC_DA9063 = 0x61,
  30. };
  31. enum da9063_variant_codes {
  32. PMIC_DA9063_AD = 0x3,
  33. PMIC_DA9063_BB = 0x5,
  34. };
  35. /* Interrupts */
  36. enum da9063_irqs {
  37. DA9063_IRQ_ONKEY = 0,
  38. DA9063_IRQ_ALARM,
  39. DA9063_IRQ_TICK,
  40. DA9063_IRQ_ADC_RDY,
  41. DA9063_IRQ_SEQ_RDY,
  42. DA9063_IRQ_WAKE,
  43. DA9063_IRQ_TEMP,
  44. DA9063_IRQ_COMP_1V2,
  45. DA9063_IRQ_LDO_LIM,
  46. DA9063_IRQ_REG_UVOV,
  47. DA9063_IRQ_VDD_MON,
  48. DA9063_IRQ_WARN,
  49. DA9063_IRQ_GPI0,
  50. DA9063_IRQ_GPI1,
  51. DA9063_IRQ_GPI2,
  52. DA9063_IRQ_GPI3,
  53. DA9063_IRQ_GPI4,
  54. DA9063_IRQ_GPI5,
  55. DA9063_IRQ_GPI6,
  56. DA9063_IRQ_GPI7,
  57. DA9063_IRQ_GPI8,
  58. DA9063_IRQ_GPI9,
  59. DA9063_IRQ_GPI10,
  60. DA9063_IRQ_GPI11,
  61. DA9063_IRQ_GPI12,
  62. DA9063_IRQ_GPI13,
  63. DA9063_IRQ_GPI14,
  64. DA9063_IRQ_GPI15,
  65. };
  66. #define DA9063_IRQ_BASE_OFFSET 0
  67. #define DA9063_NUM_IRQ (DA9063_IRQ_GPI15 + 1 - DA9063_IRQ_BASE_OFFSET)
  68. struct da9063 {
  69. /* Device */
  70. struct device *dev;
  71. unsigned short model;
  72. unsigned char variant_code;
  73. unsigned int flags;
  74. /* Control interface */
  75. struct regmap *regmap;
  76. /* Interrupts */
  77. int chip_irq;
  78. unsigned int irq_base;
  79. struct regmap_irq_chip_data *regmap_irq;
  80. };
  81. int da9063_device_init(struct da9063 *da9063, unsigned int irq);
  82. int da9063_irq_init(struct da9063 *da9063);
  83. void da9063_device_exit(struct da9063 *da9063);
  84. void da9063_irq_exit(struct da9063 *da9063);
  85. #endif /* __MFD_DA9063_CORE_H__ */