mc97.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*
  2. * mc97.h
  3. *
  4. * MC97 controller
  5. *
  6. * Copyright (C) 2021 Sylvain Munaut
  7. * SPDX-License-Identifier: LGPL-3.0-or-later
  8. */
  9. #pragma once
  10. #include <stdbool.h>
  11. #include <stdint.h>
  12. enum mc97_hook_state {
  13. ON_HOOK,
  14. CALLER_ID,
  15. OFF_HOOK,
  16. };
  17. enum mc97_loopback_mode {
  18. MC97_LOOPBACK_NONE = 0x0,
  19. MC97_LOOPBACK_DIGITAL_ADC = 0x1,
  20. MC97_LOOPBACK_ANALOG_LOCAL = 0x2,
  21. MC97_LOOPBACK_DIGITAL_DAC = 0x3,
  22. MC97_LOOPBACK_ANALOG_REMOTE = 0x4,
  23. MC97_LOOPBACK_ISOCAP = 0x5, /* Sil3038 */
  24. MC97_LOOPBACK_ANALOG_EXTERNAL = 0x6, /* Sil3038 */
  25. };
  26. #define MC97_FIFO_SIZE 256
  27. void mc97_codec_reg_write(uint8_t addr, uint16_t val);
  28. uint16_t mc97_codec_reg_read(uint8_t addr);
  29. void mc97_init(void);
  30. void mc97_debug(void);
  31. bool mc97_select_country(int cc);
  32. void mc97_set_aux_relay(bool disconnect);
  33. void mc97_set_hook(enum mc97_hook_state s);
  34. bool mc97_get_ring_detect(void);
  35. void mc97_set_loopback(enum mc97_loopback_mode m);
  36. uint8_t mc97_get_rx_gain(void);
  37. void mc97_set_rx_gain(uint8_t gain);
  38. bool mc97_get_rx_mute(void);
  39. void mc97_set_rx_mute(bool mute);
  40. uint8_t mc97_get_tx_attenuation(void);
  41. void mc97_set_tx_attenuation(uint8_t attenuation);
  42. bool mc97_get_tx_mute(void);
  43. void mc97_set_tx_mute(bool mute);
  44. void mc97_flow_rx_reset(void);
  45. void mc97_flow_rx_start(void);
  46. void mc97_flow_rx_stop(void);
  47. int mc97_flow_rx_pull(int16_t *data, int n);
  48. int mc97_flow_rx_level(void);
  49. bool mc97_flow_rx_active(void);
  50. void mc97_flow_tx_reset(void);
  51. void mc97_flow_tx_start(void);
  52. void mc97_flow_tx_stop(void);
  53. int mc97_flow_tx_push(int16_t *data, int n);
  54. int mc97_flow_tx_level(void);
  55. bool mc97_flow_tx_active(void);