aqt1000-regmap.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
  3. */
  4. #include <linux/regmap.h>
  5. #include <linux/device.h>
  6. #include "aqt1000-registers.h"
  7. #include "aqt1000-reg-defaults.h"
  8. #include "aqt1000-internal.h"
  9. static bool aqt1000_is_readable_register(struct device *dev, unsigned int reg)
  10. {
  11. u8 pg_num, reg_offset;
  12. const u8 *reg_tbl = NULL;
  13. /*
  14. * Get the page number from MSB of codec register. If its 0x80, assign
  15. * the corresponding page index PAGE_0x80.
  16. */
  17. pg_num = reg >> 0x8;
  18. if (pg_num == 0x80)
  19. pg_num = AQT1000_PAGE_128;
  20. else if (pg_num > 15)
  21. return false;
  22. reg_tbl = aqt1000_reg[pg_num];
  23. reg_offset = reg & 0xFF;
  24. if (reg_tbl && reg_tbl[reg_offset])
  25. return true;
  26. else
  27. return false;
  28. }
  29. static bool aqt1000_is_volatile_register(struct device *dev, unsigned int reg)
  30. {
  31. u8 pg_num, reg_offset;
  32. const u8 *reg_tbl = NULL;
  33. pg_num = reg >> 0x8;
  34. if (pg_num == 0x80)
  35. pg_num = AQT1000_PAGE_128;
  36. else if (pg_num > 15)
  37. return false;
  38. reg_tbl = aqt1000_reg[pg_num];
  39. reg_offset = reg & 0xFF;
  40. if (reg_tbl && reg_tbl[reg_offset] == AQT1000_RO)
  41. return true;
  42. /* IIR Coeff registers are not cacheable */
  43. if ((reg >= AQT1000_CDC_SIDETONE_IIR0_IIR_COEF_B1_CTL) &&
  44. (reg <= AQT1000_CDC_SIDETONE_IIR0_IIR_COEF_B2_CTL))
  45. return true;
  46. if ((reg >= AQT1000_CDC_ANC0_IIR_COEFF_1_CTL) &&
  47. (reg <= AQT1000_CDC_ANC0_FB_GAIN_CTL))
  48. return true;
  49. if ((reg >= AQT1000_CDC_ANC1_IIR_COEFF_1_CTL) &&
  50. (reg <= AQT1000_CDC_ANC1_FB_GAIN_CTL))
  51. return true;
  52. /*
  53. * Need to mark volatile for registers that are writable but
  54. * only few bits are read-only
  55. */
  56. switch (reg) {
  57. case AQT1000_BUCK_5V_CTRL_CCL_1:
  58. case AQT1000_BIAS_CCOMP_FINE_ADJ:
  59. case AQT1000_ANA_BIAS:
  60. case AQT1000_BUCK_5V_IBIAS_CTL_4:
  61. case AQT1000_BUCK_5V_CTRL_CCL_2:
  62. case AQT1000_CHIP_CFG0_RST_CTL:
  63. case AQT1000_CHIP_CFG0_CLK_CTL_CDC_DIG:
  64. case AQT1000_CHIP_CFG0_CLK_CFG_MCLK:
  65. case AQT1000_CHIP_CFG0_EFUSE_CTL:
  66. case AQT1000_CDC_CLK_RST_CTRL_FS_CNT_CONTROL:
  67. case AQT1000_CDC_CLK_RST_CTRL_MCLK_CONTROL:
  68. case AQT1000_ANA_RX_SUPPLIES:
  69. case AQT1000_ANA_MBHC_MECH:
  70. case AQT1000_ANA_MBHC_ELECT:
  71. case AQT1000_ANA_MBHC_ZDET:
  72. case AQT1000_ANA_MICB1:
  73. case AQT1000_BUCK_5V_EN_CTL:
  74. return true;
  75. }
  76. return false;
  77. }
  78. struct regmap_config aqt1000_regmap_config = {
  79. .reg_bits = 16,
  80. .val_bits = 8,
  81. .cache_type = REGCACHE_RBTREE,
  82. .reg_defaults = aqt1000_defaults,
  83. .num_reg_defaults = ARRAY_SIZE(aqt1000_defaults),
  84. .max_register = AQT1000_MAX_REGISTER,
  85. .volatile_reg = aqt1000_is_volatile_register,
  86. .readable_reg = aqt1000_is_readable_register,
  87. };