pdata.h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /* Copyright (c) 2011-2019, The Linux Foundation. All rights reserved.
  3. */
  4. #ifndef __MFD_WCD9XXX_PDATA_H__
  5. #define __MFD_WCD9XXX_PDATA_H__
  6. #if IS_ENABLED(CONFIG_WCD9XXX_CODEC_CORE)
  7. #include <linux/slimbus/slimbus.h>
  8. #endif
  9. #include "msm-cdc-supply.h"
  10. #define MICBIAS_EXT_BYP_CAP 0x00
  11. #define MICBIAS_NO_EXT_BYP_CAP 0x01
  12. #define SITAR_LDOH_1P95_V 0x0
  13. #define SITAR_LDOH_2P35_V 0x1
  14. #define SITAR_LDOH_2P75_V 0x2
  15. #define SITAR_LDOH_2P85_V 0x3
  16. #define SITAR_CFILT1_SEL 0x0
  17. #define SITAR_CFILT2_SEL 0x1
  18. #define SITAR_CFILT3_SEL 0x2
  19. #define WCD9XXX_LDOH_1P95_V 0x0
  20. #define WCD9XXX_LDOH_2P35_V 0x1
  21. #define WCD9XXX_LDOH_2P75_V 0x2
  22. #define WCD9XXX_LDOH_2P85_V 0x3
  23. #define WCD9XXX_LDOH_3P0_V 0x3
  24. #define TABLA_LDOH_1P95_V 0x0
  25. #define TABLA_LDOH_2P35_V 0x1
  26. #define TABLA_LDOH_2P75_V 0x2
  27. #define TABLA_LDOH_2P85_V 0x3
  28. #define TABLA_CFILT1_SEL 0x0
  29. #define TABLA_CFILT2_SEL 0x1
  30. #define TABLA_CFILT3_SEL 0x2
  31. #define MAX_AMIC_CHANNEL 7
  32. #define TABLA_OCP_300_MA 0x0
  33. #define TABLA_OCP_350_MA 0x2
  34. #define TABLA_OCP_365_MA 0x3
  35. #define TABLA_OCP_150_MA 0x4
  36. #define TABLA_OCP_190_MA 0x6
  37. #define TABLA_OCP_220_MA 0x7
  38. #define TABLA_DCYCLE_255 0x0
  39. #define TABLA_DCYCLE_511 0x1
  40. #define TABLA_DCYCLE_767 0x2
  41. #define TABLA_DCYCLE_1023 0x3
  42. #define TABLA_DCYCLE_1279 0x4
  43. #define TABLA_DCYCLE_1535 0x5
  44. #define TABLA_DCYCLE_1791 0x6
  45. #define TABLA_DCYCLE_2047 0x7
  46. #define TABLA_DCYCLE_2303 0x8
  47. #define TABLA_DCYCLE_2559 0x9
  48. #define TABLA_DCYCLE_2815 0xA
  49. #define TABLA_DCYCLE_3071 0xB
  50. #define TABLA_DCYCLE_3327 0xC
  51. #define TABLA_DCYCLE_3583 0xD
  52. #define TABLA_DCYCLE_3839 0xE
  53. #define TABLA_DCYCLE_4095 0xF
  54. #define WCD9XXX_MCLK_CLK_12P288MHZ 12288000
  55. #define WCD9XXX_MCLK_CLK_9P6HZ 9600000
  56. /* Only valid for 9.6 MHz mclk */
  57. #define WCD9XXX_DMIC_SAMPLE_RATE_600KHZ 600000
  58. #define WCD9XXX_DMIC_SAMPLE_RATE_2P4MHZ 2400000
  59. #define WCD9XXX_DMIC_SAMPLE_RATE_3P2MHZ 3200000
  60. #define WCD9XXX_DMIC_SAMPLE_RATE_4P8MHZ 4800000
  61. /* Only valid for 12.288 MHz mclk */
  62. #define WCD9XXX_DMIC_SAMPLE_RATE_768KHZ 768000
  63. #define WCD9XXX_DMIC_SAMPLE_RATE_2P048MHZ 2048000
  64. #define WCD9XXX_DMIC_SAMPLE_RATE_3P072MHZ 3072000
  65. #define WCD9XXX_DMIC_SAMPLE_RATE_4P096MHZ 4096000
  66. #define WCD9XXX_DMIC_SAMPLE_RATE_6P144MHZ 6144000
  67. #define WCD9XXX_DMIC_SAMPLE_RATE_UNDEFINED 0
  68. #define WCD9XXX_DMIC_CLK_DRIVE_UNDEFINED 0
  69. struct wcd9xxx_amic {
  70. /*legacy mode, txfe_enable and txfe_buff take 7 input
  71. * each bit represent the channel / TXFE number
  72. * and numbered as below
  73. * bit 0 = channel 1 / TXFE1_ENABLE / TXFE1_BUFF
  74. * bit 1 = channel 2 / TXFE2_ENABLE / TXFE2_BUFF
  75. * ...
  76. * bit 7 = channel 7 / TXFE7_ENABLE / TXFE7_BUFF
  77. */
  78. u8 legacy_mode:MAX_AMIC_CHANNEL;
  79. u8 txfe_enable:MAX_AMIC_CHANNEL;
  80. u8 txfe_buff:MAX_AMIC_CHANNEL;
  81. u8 use_pdata:MAX_AMIC_CHANNEL;
  82. };
  83. /* Each micbias can be assigned to one of three cfilters
  84. * Vbatt_min >= .15V + ldoh_v
  85. * ldoh_v >= .15v + cfiltx_mv
  86. * If ldoh_v = 1.95 160 mv < cfiltx_mv < 1800 mv
  87. * If ldoh_v = 2.35 200 mv < cfiltx_mv < 2200 mv
  88. * If ldoh_v = 2.75 240 mv < cfiltx_mv < 2600 mv
  89. * If ldoh_v = 2.85 250 mv < cfiltx_mv < 2700 mv
  90. */
  91. struct wcd9xxx_micbias_setting {
  92. u8 ldoh_v;
  93. u32 cfilt1_mv; /* in mv */
  94. u32 cfilt2_mv; /* in mv */
  95. u32 cfilt3_mv; /* in mv */
  96. u32 micb1_mv;
  97. u32 micb2_mv;
  98. u32 micb3_mv;
  99. u32 micb4_mv;
  100. /* Different WCD9xxx series codecs may not
  101. * have 4 mic biases. If a codec has fewer
  102. * mic biases, some of these properties will
  103. * not be used.
  104. */
  105. u8 bias1_cfilt_sel;
  106. u8 bias2_cfilt_sel;
  107. u8 bias3_cfilt_sel;
  108. u8 bias4_cfilt_sel;
  109. u8 bias1_cap_mode;
  110. u8 bias2_cap_mode;
  111. u8 bias3_cap_mode;
  112. u8 bias4_cap_mode;
  113. bool bias2_is_headset_only;
  114. };
  115. struct wcd9xxx_ocp_setting {
  116. unsigned int use_pdata:1; /* 0 - use sys default as recommended */
  117. unsigned int num_attempts:4; /* up to 15 attempts */
  118. unsigned int run_time:4; /* in duty cycle */
  119. unsigned int wait_time:4; /* in duty cycle */
  120. unsigned int hph_ocp_limit:3; /* Headphone OCP current limit */
  121. };
  122. #define WCD9XXX_MAX_REGULATOR 9
  123. /*
  124. * format : TABLA_<POWER_SUPPLY_PIN_NAME>_CUR_MAX
  125. *
  126. * <POWER_SUPPLY_PIN_NAME> from Tabla objective spec
  127. */
  128. #define WCD9XXX_CDC_VDDA_CP_CUR_MAX 500000
  129. #define WCD9XXX_CDC_VDDA_RX_CUR_MAX 20000
  130. #define WCD9XXX_CDC_VDDA_TX_CUR_MAX 20000
  131. #define WCD9XXX_VDDIO_CDC_CUR_MAX 5000
  132. #define WCD9XXX_VDDD_CDC_D_CUR_MAX 5000
  133. #define WCD9XXX_VDDD_CDC_A_CUR_MAX 5000
  134. #define WCD9XXX_VDD_SPKDRV_NAME "cdc-vdd-spkdrv"
  135. #define WCD9XXX_VDD_SPKDRV2_NAME "cdc-vdd-spkdrv-2"
  136. struct wcd9xxx_regulator {
  137. const char *name;
  138. int min_uV;
  139. int max_uV;
  140. int optimum_uA;
  141. bool ondemand;
  142. struct regulator *regulator;
  143. };
  144. struct wcd9xxx_pdata {
  145. int irq;
  146. int irq_base;
  147. int num_irqs;
  148. int reset_gpio;
  149. bool has_buck_vsel_gpio;
  150. bool has_micb_supply_en_gpio;
  151. struct device_node *buck_vsel_ctl_np;
  152. struct device_node *micb_en_ctl;
  153. struct device_node *wcd_rst_np;
  154. struct wcd9xxx_amic amic_settings;
  155. #if IS_ENABLED(CONFIG_WCD9XXX_CODEC_CORE)
  156. struct slim_device slimbus_slave_device;
  157. #endif
  158. struct wcd9xxx_micbias_setting micbias;
  159. struct wcd9xxx_ocp_setting ocp;
  160. struct cdc_regulator *regulator;
  161. int num_supplies;
  162. u32 mclk_rate;
  163. u32 dmic_sample_rate;
  164. u32 mad_dmic_sample_rate;
  165. u32 ecpp_dmic_sample_rate;
  166. u32 dmic_clk_drv;
  167. u16 use_pinctrl;
  168. u32 vote_regulator_on_demand;
  169. };
  170. #endif