sun4i-gpadc.h 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /* Header of ADC MFD core driver for sunxi platforms
  3. *
  4. * Copyright (c) 2016 Quentin Schulz <[email protected]>
  5. */
  6. #ifndef __SUN4I_GPADC__H__
  7. #define __SUN4I_GPADC__H__
  8. #define SUN4I_GPADC_CTRL0 0x00
  9. #define SUN4I_GPADC_CTRL0_ADC_FIRST_DLY(x) ((GENMASK(7, 0) & (x)) << 24)
  10. #define SUN4I_GPADC_CTRL0_ADC_FIRST_DLY_MODE BIT(23)
  11. #define SUN4I_GPADC_CTRL0_ADC_CLK_SELECT BIT(22)
  12. #define SUN4I_GPADC_CTRL0_ADC_CLK_DIVIDER(x) ((GENMASK(1, 0) & (x)) << 20)
  13. #define SUN4I_GPADC_CTRL0_FS_DIV(x) ((GENMASK(3, 0) & (x)) << 16)
  14. #define SUN4I_GPADC_CTRL0_T_ACQ(x) (GENMASK(15, 0) & (x))
  15. #define SUN4I_GPADC_CTRL1 0x04
  16. #define SUN4I_GPADC_CTRL1_STYLUS_UP_DEBOUNCE(x) ((GENMASK(7, 0) & (x)) << 12)
  17. #define SUN4I_GPADC_CTRL1_STYLUS_UP_DEBOUNCE_EN BIT(9)
  18. #define SUN4I_GPADC_CTRL1_TOUCH_PAN_CALI_EN BIT(6)
  19. #define SUN4I_GPADC_CTRL1_TP_DUAL_EN BIT(5)
  20. #define SUN4I_GPADC_CTRL1_TP_MODE_EN BIT(4)
  21. #define SUN4I_GPADC_CTRL1_TP_ADC_SELECT BIT(3)
  22. #define SUN4I_GPADC_CTRL1_ADC_CHAN_SELECT(x) (GENMASK(2, 0) & (x))
  23. #define SUN4I_GPADC_CTRL1_ADC_CHAN_MASK GENMASK(2, 0)
  24. /* TP_CTRL1 bits for sun6i SOCs */
  25. #define SUN6I_GPADC_CTRL1_TOUCH_PAN_CALI_EN BIT(7)
  26. #define SUN6I_GPADC_CTRL1_TP_DUAL_EN BIT(6)
  27. #define SUN6I_GPADC_CTRL1_TP_MODE_EN BIT(5)
  28. #define SUN6I_GPADC_CTRL1_TP_ADC_SELECT BIT(4)
  29. #define SUN6I_GPADC_CTRL1_ADC_CHAN_SELECT(x) (GENMASK(3, 0) & BIT(x))
  30. #define SUN6I_GPADC_CTRL1_ADC_CHAN_MASK GENMASK(3, 0)
  31. /* TP_CTRL1 bits for sun8i SoCs */
  32. #define SUN8I_GPADC_CTRL1_CHOP_TEMP_EN BIT(8)
  33. #define SUN8I_GPADC_CTRL1_GPADC_CALI_EN BIT(7)
  34. #define SUN4I_GPADC_CTRL2 0x08
  35. #define SUN4I_GPADC_CTRL2_TP_SENSITIVE_ADJUST(x) ((GENMASK(3, 0) & (x)) << 28)
  36. #define SUN4I_GPADC_CTRL2_TP_MODE_SELECT(x) ((GENMASK(1, 0) & (x)) << 26)
  37. #define SUN4I_GPADC_CTRL2_PRE_MEA_EN BIT(24)
  38. #define SUN4I_GPADC_CTRL2_PRE_MEA_THRE_CNT(x) (GENMASK(23, 0) & (x))
  39. #define SUN4I_GPADC_CTRL3 0x0c
  40. #define SUN4I_GPADC_CTRL3_FILTER_EN BIT(2)
  41. #define SUN4I_GPADC_CTRL3_FILTER_TYPE(x) (GENMASK(1, 0) & (x))
  42. #define SUN4I_GPADC_TPR 0x18
  43. #define SUN4I_GPADC_TPR_TEMP_ENABLE BIT(16)
  44. #define SUN4I_GPADC_TPR_TEMP_PERIOD(x) (GENMASK(15, 0) & (x))
  45. #define SUN4I_GPADC_INT_FIFOC 0x10
  46. #define SUN4I_GPADC_INT_FIFOC_TEMP_IRQ_EN BIT(18)
  47. #define SUN4I_GPADC_INT_FIFOC_TP_OVERRUN_IRQ_EN BIT(17)
  48. #define SUN4I_GPADC_INT_FIFOC_TP_DATA_IRQ_EN BIT(16)
  49. #define SUN4I_GPADC_INT_FIFOC_TP_DATA_XY_CHANGE BIT(13)
  50. #define SUN4I_GPADC_INT_FIFOC_TP_FIFO_TRIG_LEVEL(x) ((GENMASK(4, 0) & (x)) << 8)
  51. #define SUN4I_GPADC_INT_FIFOC_TP_DATA_DRQ_EN BIT(7)
  52. #define SUN4I_GPADC_INT_FIFOC_TP_FIFO_FLUSH BIT(4)
  53. #define SUN4I_GPADC_INT_FIFOC_TP_UP_IRQ_EN BIT(1)
  54. #define SUN4I_GPADC_INT_FIFOC_TP_DOWN_IRQ_EN BIT(0)
  55. #define SUN4I_GPADC_INT_FIFOS 0x14
  56. #define SUN4I_GPADC_INT_FIFOS_TEMP_DATA_PENDING BIT(18)
  57. #define SUN4I_GPADC_INT_FIFOS_FIFO_OVERRUN_PENDING BIT(17)
  58. #define SUN4I_GPADC_INT_FIFOS_FIFO_DATA_PENDING BIT(16)
  59. #define SUN4I_GPADC_INT_FIFOS_TP_IDLE_FLG BIT(2)
  60. #define SUN4I_GPADC_INT_FIFOS_TP_UP_PENDING BIT(1)
  61. #define SUN4I_GPADC_INT_FIFOS_TP_DOWN_PENDING BIT(0)
  62. #define SUN4I_GPADC_CDAT 0x1c
  63. #define SUN4I_GPADC_TEMP_DATA 0x20
  64. #define SUN4I_GPADC_DATA 0x24
  65. #define SUN4I_GPADC_IRQ_FIFO_DATA 0
  66. #define SUN4I_GPADC_IRQ_TEMP_DATA 1
  67. /* 10s delay before suspending the IP */
  68. #define SUN4I_GPADC_AUTOSUSPEND_DELAY 10000
  69. struct sun4i_gpadc_dev {
  70. struct device *dev;
  71. struct regmap *regmap;
  72. struct regmap_irq_chip_data *regmap_irqc;
  73. void __iomem *base;
  74. };
  75. #endif