wcd-clsh.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
  4. */
  5. #ifndef _WCD_CLSH
  6. #define _WCD_CLSH
  7. #include <linux/stringify.h>
  8. #define WCD_CLSH_STRINGIFY(s) __stringify(s)
  9. #define CLSH_REQ_ENABLE true
  10. #define CLSH_REQ_DISABLE false
  11. #define WCD_CLSH_EVENT_PRE_DAC 0x01
  12. #define WCD_CLSH_EVENT_POST_PA 0x02
  13. /*
  14. * Basic states for Class H state machine.
  15. * represented as a bit mask within a u8 data type
  16. * bit 0: EAR mode
  17. * bit 1: HPH Left mode
  18. * bit 2: HPH Right mode
  19. * bit 3: AUX mode
  20. */
  21. #define WCD_CLSH_STATE_IDLE 0x00
  22. #define WCD_CLSH_STATE_EAR (0x01 << 0)
  23. #define WCD_CLSH_STATE_HPHL (0x01 << 1)
  24. #define WCD_CLSH_STATE_HPHR (0x01 << 2)
  25. #define WCD_CLSH_STATE_AUX (0x01 << 3)
  26. /*
  27. * Though number of CLSH states is 4, max state should be 5
  28. * because state array index starts from 1.
  29. */
  30. #define WCD_CLSH_STATE_MAX 5
  31. #define NUM_CLSH_STATES (0x01 << WCD_CLSH_STATE_MAX)
  32. /* Derived State: Bits 1 and 2 should be set for Headphone stereo */
  33. #define WCD_CLSH_STATE_HPH_ST (WCD_CLSH_STATE_HPHL | \
  34. WCD_CLSH_STATE_HPHR)
  35. #define WCD_CLSH_STATE_HPHL_AUX (WCD_CLSH_STATE_HPHL | \
  36. WCD_CLSH_STATE_AUX)
  37. #define WCD_CLSH_STATE_HPHR_AUX (WCD_CLSH_STATE_HPHR | \
  38. WCD_CLSH_STATE_AUX)
  39. #define WCD_CLSH_STATE_HPH_ST_AUX (WCD_CLSH_STATE_HPH_ST | \
  40. WCD_CLSH_STATE_AUX)
  41. #define WCD_CLSH_STATE_EAR_AUX (WCD_CLSH_STATE_EAR | \
  42. WCD_CLSH_STATE_AUX)
  43. #define WCD_CLSH_STATE_HPHL_EAR (WCD_CLSH_STATE_HPHL | \
  44. WCD_CLSH_STATE_EAR)
  45. #define WCD_CLSH_STATE_HPHR_EAR (WCD_CLSH_STATE_HPHR | \
  46. WCD_CLSH_STATE_EAR)
  47. #define WCD_CLSH_STATE_HPH_ST_EAR (WCD_CLSH_STATE_HPH_ST | \
  48. WCD_CLSH_STATE_EAR)
  49. enum {
  50. CLS_H_NORMAL = 0, /* Class-H Default */
  51. CLS_H_HIFI, /* Class-H HiFi */
  52. CLS_H_LP, /* Class-H Low Power */
  53. CLS_AB, /* Class-AB Low HIFI*/
  54. CLS_H_LOHIFI, /* LoHIFI */
  55. CLS_H_ULP, /* Ultra Low power */
  56. CLS_AB_HIFI, /* Class-AB */
  57. CLS_NONE, /* None of the above modes */
  58. };
  59. /* Class H data that the codec driver will maintain */
  60. struct wcd_clsh_cdc_info {
  61. u8 state;
  62. int flyback_users;
  63. int buck_users;
  64. int interpolator_modes[WCD_CLSH_STATE_MAX];
  65. };
  66. #ifdef CONFIG_SND_SOC_WCD9XXX_V2
  67. extern void wcd_cls_h_fsm(struct snd_soc_component *component,
  68. struct wcd_clsh_cdc_info *cdc_clsh_d,
  69. u8 clsh_event, u8 req_state,
  70. int int_mode);
  71. extern void wcd_cls_h_init(struct wcd_clsh_cdc_info *clsh);
  72. #else
  73. extern void wcd_cls_h_fsm(struct snd_soc_component *component,
  74. struct wcd_clsh_cdc_info *cdc_clsh_d,
  75. u8 clsh_event, u8 req_state,
  76. int int_mode)
  77. {
  78. }
  79. extern void wcd_cls_h_init(struct wcd_clsh_cdc_info *clsh)
  80. {
  81. }
  82. #endif /* CONFIG_SND_SOC_WCD9XXX_V2 */
  83. #endif