bebob_terratec.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * bebob_terratec.c - a part of driver for BeBoB based devices
  3. *
  4. * Copyright (c) 2013-2014 Takashi Sakamoto
  5. *
  6. * Licensed under the terms of the GNU General Public License, version 2.
  7. */
  8. #include "./bebob.h"
  9. static const char *const phase88_rack_clk_src_labels[] = {
  10. SND_BEBOB_CLOCK_INTERNAL, "Digital In", "Word Clock"
  11. };
  12. static int
  13. phase88_rack_clk_src_get(struct snd_bebob *bebob, unsigned int *id)
  14. {
  15. unsigned int enable_ext, enable_word;
  16. int err;
  17. err = avc_audio_get_selector(bebob->unit, 0, 9, &enable_ext);
  18. if (err < 0)
  19. goto end;
  20. err = avc_audio_get_selector(bebob->unit, 0, 8, &enable_word);
  21. if (err < 0)
  22. goto end;
  23. if (enable_ext == 0)
  24. *id = 0;
  25. else if (enable_word == 0)
  26. *id = 1;
  27. else
  28. *id = 2;
  29. end:
  30. return err;
  31. }
  32. static const char *const phase24_series_clk_src_labels[] = {
  33. SND_BEBOB_CLOCK_INTERNAL, "Digital In"
  34. };
  35. static int
  36. phase24_series_clk_src_get(struct snd_bebob *bebob, unsigned int *id)
  37. {
  38. return avc_audio_get_selector(bebob->unit, 0, 4, id);
  39. }
  40. static struct snd_bebob_rate_spec phase_series_rate_spec = {
  41. .get = &snd_bebob_stream_get_rate,
  42. .set = &snd_bebob_stream_set_rate,
  43. };
  44. /* PHASE 88 Rack FW */
  45. static struct snd_bebob_clock_spec phase88_rack_clk = {
  46. .num = ARRAY_SIZE(phase88_rack_clk_src_labels),
  47. .labels = phase88_rack_clk_src_labels,
  48. .get = &phase88_rack_clk_src_get,
  49. };
  50. struct snd_bebob_spec phase88_rack_spec = {
  51. .clock = &phase88_rack_clk,
  52. .rate = &phase_series_rate_spec,
  53. .meter = NULL
  54. };
  55. /* 'PHASE 24 FW' and 'PHASE X24 FW' */
  56. static struct snd_bebob_clock_spec phase24_series_clk = {
  57. .num = ARRAY_SIZE(phase24_series_clk_src_labels),
  58. .labels = phase24_series_clk_src_labels,
  59. .get = &phase24_series_clk_src_get,
  60. };
  61. struct snd_bebob_spec phase24_series_spec = {
  62. .clock = &phase24_series_clk,
  63. .rate = &phase_series_rate_spec,
  64. .meter = NULL
  65. };