bebob_terratec.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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 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, 0, &enable_ext);
  18. if (err < 0)
  19. goto end;
  20. err = avc_audio_get_selector(bebob->unit, 0, 0, &enable_word);
  21. if (err < 0)
  22. goto end;
  23. *id = (enable_ext & 0x01) | ((enable_word & 0x01) << 1);
  24. end:
  25. return err;
  26. }
  27. static char *const phase24_series_clk_src_labels[] = {
  28. SND_BEBOB_CLOCK_INTERNAL, "Digital In"
  29. };
  30. static int
  31. phase24_series_clk_src_get(struct snd_bebob *bebob, unsigned int *id)
  32. {
  33. return avc_audio_get_selector(bebob->unit, 0, 4, id);
  34. }
  35. static struct snd_bebob_rate_spec phase_series_rate_spec = {
  36. .get = &snd_bebob_stream_get_rate,
  37. .set = &snd_bebob_stream_set_rate,
  38. };
  39. /* PHASE 88 Rack FW */
  40. static struct snd_bebob_clock_spec phase88_rack_clk = {
  41. .num = ARRAY_SIZE(phase88_rack_clk_src_labels),
  42. .labels = phase88_rack_clk_src_labels,
  43. .get = &phase88_rack_clk_src_get,
  44. };
  45. struct snd_bebob_spec phase88_rack_spec = {
  46. .clock = &phase88_rack_clk,
  47. .rate = &phase_series_rate_spec,
  48. .meter = NULL
  49. };
  50. /* 'PHASE 24 FW' and 'PHASE X24 FW' */
  51. static struct snd_bebob_clock_spec phase24_series_clk = {
  52. .num = ARRAY_SIZE(phase24_series_clk_src_labels),
  53. .labels = phase24_series_clk_src_labels,
  54. .get = &phase24_series_clk_src_get,
  55. };
  56. struct snd_bebob_spec phase24_series_spec = {
  57. .clock = &phase24_series_clk,
  58. .rate = &phase_series_rate_spec,
  59. .meter = NULL
  60. };