ALSA: bebob: preparation for replacing string literals by normalized representation...
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sun, 14 Jun 2015 03:49:29 +0000 (12:49 +0900)
committerTakashi Iwai <tiwai@suse.de>
Mon, 15 Jun 2015 11:34:47 +0000 (13:34 +0200)
Previous commit adds a enumerator as a normalized representation of
clock source, while model-dependent structures still use string literals
for this purpose.

This commit is a preparation for replacement.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/bebob/bebob_focusrite.c
sound/firewire/bebob/bebob_maudio.c
sound/firewire/bebob/bebob_terratec.c
sound/firewire/bebob/bebob_yamaha.c

index fc67c1b7cb5b7576be3fbd88c948c7813c1aa57d..45c8f76d81878c4313f7c515efe3d9568533a7ca 100644 (file)
@@ -106,9 +106,21 @@ saffire_write_quad(struct snd_bebob *bebob, u64 offset, u32 value)
 static const char *const saffirepro_10_clk_src_labels[] = {
        SND_BEBOB_CLOCK_INTERNAL, "S/PDIF", "Word Clock"
 };
+static enum snd_bebob_clock_type saffirepro_10_clk_src_types[] = {
+       SND_BEBOB_CLOCK_TYPE_INTERNAL,
+       SND_BEBOB_CLOCK_TYPE_EXTERNAL,  /* S/PDIF */
+       SND_BEBOB_CLOCK_TYPE_EXTERNAL,  /* Word Clock */
+};
 static const char *const saffirepro_26_clk_src_labels[] = {
        SND_BEBOB_CLOCK_INTERNAL, "S/PDIF", "ADAT1", "ADAT2", "Word Clock"
 };
+static enum snd_bebob_clock_type saffirepro_26_clk_src_types[] = {
+       SND_BEBOB_CLOCK_TYPE_INTERNAL,
+       SND_BEBOB_CLOCK_TYPE_EXTERNAL,  /* S/PDIF */
+       SND_BEBOB_CLOCK_TYPE_EXTERNAL,  /* ADAT1 */
+       SND_BEBOB_CLOCK_TYPE_EXTERNAL,  /* ADAT2 */
+       SND_BEBOB_CLOCK_TYPE_EXTERNAL,  /* Word Clock */
+};
 /* Value maps between registers and labels for SaffirePro 10/26. */
 static const signed char saffirepro_clk_maps[][SAFFIREPRO_CLOCK_SOURCE_COUNT] = {
        /* SaffirePro 10 */
@@ -178,7 +190,7 @@ saffirepro_both_clk_src_get(struct snd_bebob *bebob, unsigned int *id)
                goto end;
 
        /* depending on hardware, use a different mapping */
-       if (bebob->spec->clock->labels == saffirepro_10_clk_src_labels)
+       if (bebob->spec->clock->types == saffirepro_10_clk_src_types)
                map = saffirepro_clk_maps[0];
        else
                map = saffirepro_clk_maps[1];
@@ -198,6 +210,10 @@ struct snd_bebob_spec saffire_le_spec;
 static const char *const saffire_both_clk_src_labels[] = {
        SND_BEBOB_CLOCK_INTERNAL, "S/PDIF"
 };
+static enum snd_bebob_clock_type saffire_both_clk_src_types[] = {
+       SND_BEBOB_CLOCK_TYPE_INTERNAL,
+       SND_BEBOB_CLOCK_TYPE_EXTERNAL,
+};
 static int
 saffire_both_clk_src_get(struct snd_bebob *bebob, unsigned int *id)
 {
@@ -259,8 +275,9 @@ static struct snd_bebob_rate_spec saffirepro_both_rate_spec = {
 };
 /* Saffire Pro 26 I/O  */
 static struct snd_bebob_clock_spec saffirepro_26_clk_spec = {
-       .num    = ARRAY_SIZE(saffirepro_26_clk_src_labels),
+       .num    = ARRAY_SIZE(saffirepro_26_clk_src_types),
        .labels = saffirepro_26_clk_src_labels,
+       .types  = saffirepro_26_clk_src_types,
        .get    = &saffirepro_both_clk_src_get,
 };
 struct snd_bebob_spec saffirepro_26_spec = {
@@ -270,8 +287,9 @@ struct snd_bebob_spec saffirepro_26_spec = {
 };
 /* Saffire Pro 10 I/O */
 static struct snd_bebob_clock_spec saffirepro_10_clk_spec = {
-       .num    = ARRAY_SIZE(saffirepro_10_clk_src_labels),
+       .num    = ARRAY_SIZE(saffirepro_10_clk_src_types),
        .labels = saffirepro_10_clk_src_labels,
+       .types  = saffirepro_10_clk_src_types,
        .get    = &saffirepro_both_clk_src_get,
 };
 struct snd_bebob_spec saffirepro_10_spec = {
@@ -285,8 +303,9 @@ static struct snd_bebob_rate_spec saffire_both_rate_spec = {
        .set    = &snd_bebob_stream_set_rate,
 };
 static struct snd_bebob_clock_spec saffire_both_clk_spec = {
-       .num    = ARRAY_SIZE(saffire_both_clk_src_labels),
+       .num    = ARRAY_SIZE(saffire_both_clk_src_types),
        .labels = saffire_both_clk_src_labels,
+       .types  = saffire_both_clk_src_types,
        .get    = &saffire_both_clk_src_get,
 };
 /* Saffire LE */
index 9ee25a63f684269c8fc600b1293b9b4421a7f020..7a43afcfa9bd39c7b3795cb9585804ffe58b9d0e 100644 (file)
@@ -343,6 +343,12 @@ end:
 static const char *const special_clk_labels[] = {
        SND_BEBOB_CLOCK_INTERNAL " with Digital Mute", "Digital",
        "Word Clock", SND_BEBOB_CLOCK_INTERNAL};
+static enum snd_bebob_clock_type special_clk_types[] = {
+       SND_BEBOB_CLOCK_TYPE_INTERNAL,  /* With digital mute */
+       SND_BEBOB_CLOCK_TYPE_EXTERNAL,  /* SPDIF/ADAT */
+       SND_BEBOB_CLOCK_TYPE_EXTERNAL,  /* Word Clock */
+       SND_BEBOB_CLOCK_TYPE_INTERNAL,
+};
 static int special_clk_get(struct snd_bebob *bebob, unsigned int *id)
 {
        struct special_params *params = bebob->maudio_special_quirk;
@@ -352,7 +358,7 @@ static int special_clk_get(struct snd_bebob *bebob, unsigned int *id)
 static int special_clk_ctl_info(struct snd_kcontrol *kctl,
                                struct snd_ctl_elem_info *einf)
 {
-       return snd_ctl_enum_info(einf, 1, ARRAY_SIZE(special_clk_labels),
+       return snd_ctl_enum_info(einf, 1, ARRAY_SIZE(special_clk_types),
                                 special_clk_labels);
 }
 static int special_clk_ctl_get(struct snd_kcontrol *kctl,
@@ -371,7 +377,7 @@ static int special_clk_ctl_put(struct snd_kcontrol *kctl,
        int err, id;
 
        id = uval->value.enumerated.item[0];
-       if (id >= ARRAY_SIZE(special_clk_labels))
+       if (id >= ARRAY_SIZE(special_clk_types))
                return -EINVAL;
 
        mutex_lock(&bebob->mutex);
@@ -708,8 +714,9 @@ static struct snd_bebob_rate_spec special_rate_spec = {
        .set    = &special_set_rate,
 };
 static struct snd_bebob_clock_spec special_clk_spec = {
-       .num    = ARRAY_SIZE(special_clk_labels),
+       .num    = ARRAY_SIZE(special_clk_types),
        .labels = special_clk_labels,
+       .types  = special_clk_types,
        .get    = &special_clk_get,
 };
 static struct snd_bebob_meter_spec special_meter_spec = {
index ad635004d6996f62edaca828e07fe9a6a308c5a1..3b64d8db8e143439e7c7c476c69a474107b17990 100644 (file)
 static const char *const phase88_rack_clk_src_labels[] = {
        SND_BEBOB_CLOCK_INTERNAL, "Digital In", "Word Clock"
 };
+static enum snd_bebob_clock_type phase88_rack_clk_src_types[] = {
+       SND_BEBOB_CLOCK_TYPE_INTERNAL,
+       SND_BEBOB_CLOCK_TYPE_EXTERNAL,  /* S/PDIF */
+       SND_BEBOB_CLOCK_TYPE_EXTERNAL,  /* Word Clock */
+};
 static int
 phase88_rack_clk_src_get(struct snd_bebob *bebob, unsigned int *id)
 {
@@ -37,10 +42,23 @@ end:
 static const char *const phase24_series_clk_src_labels[] = {
        SND_BEBOB_CLOCK_INTERNAL, "Digital In"
 };
+static enum snd_bebob_clock_type phase24_series_clk_src_types[] = {
+       SND_BEBOB_CLOCK_TYPE_INTERNAL,
+       SND_BEBOB_CLOCK_TYPE_EXTERNAL,  /* S/PDIF */
+};
 static int
 phase24_series_clk_src_get(struct snd_bebob *bebob, unsigned int *id)
 {
-       return avc_audio_get_selector(bebob->unit, 0, 4, id);
+       int err;
+
+       err = avc_audio_get_selector(bebob->unit, 0, 4, id);
+       if (err < 0)
+               return err;
+
+       if (*id >= ARRAY_SIZE(phase24_series_clk_src_types))
+               return -EIO;
+
+       return 0;
 }
 
 static struct snd_bebob_rate_spec phase_series_rate_spec = {
@@ -50,8 +68,9 @@ static struct snd_bebob_rate_spec phase_series_rate_spec = {
 
 /* PHASE 88 Rack FW */
 static struct snd_bebob_clock_spec phase88_rack_clk = {
-       .num    = ARRAY_SIZE(phase88_rack_clk_src_labels),
+       .num    = ARRAY_SIZE(phase88_rack_clk_src_types),
        .labels = phase88_rack_clk_src_labels,
+       .types  = phase88_rack_clk_src_types,
        .get    = &phase88_rack_clk_src_get,
 };
 struct snd_bebob_spec phase88_rack_spec = {
@@ -62,8 +81,9 @@ struct snd_bebob_spec phase88_rack_spec = {
 
 /* 'PHASE 24 FW' and 'PHASE X24 FW' */
 static struct snd_bebob_clock_spec phase24_series_clk = {
-       .num    = ARRAY_SIZE(phase24_series_clk_src_labels),
+       .num    = ARRAY_SIZE(phase24_series_clk_src_types),
        .labels = phase24_series_clk_src_labels,
+       .types  = phase24_series_clk_src_types,
        .get    = &phase24_series_clk_src_get,
 };
 struct snd_bebob_spec phase24_series_spec = {
index ef1fe3823a9c637869ea1c2a182a679846257b36..2f59512ad91e3be7c77b60813a88a38ee41fcfae 100644 (file)
  */
 
 static const char *const clk_src_labels[] = {SND_BEBOB_CLOCK_INTERNAL, "SPDIF"};
+static enum snd_bebob_clock_type clk_src_types[] = {
+       SND_BEBOB_CLOCK_TYPE_INTERNAL,
+       SND_BEBOB_CLOCK_TYPE_EXTERNAL,  /* S/PDIF */
+};
 static int
 clk_src_get(struct snd_bebob *bebob, unsigned int *id)
 {
-       return avc_audio_get_selector(bebob->unit, 0, 4, id);
+       int err;
+
+       err = avc_audio_get_selector(bebob->unit, 0, 4, id);
+       if (err < 0)
+               return err;
+
+       if (*id >= ARRAY_SIZE(clk_src_types))
+               return -EIO;
+
+       return 0;
 }
 static struct snd_bebob_clock_spec clock_spec = {
-       .num    = ARRAY_SIZE(clk_src_labels),
+       .num    = ARRAY_SIZE(clk_src_types),
+       .types  = clk_src_types,
        .labels = clk_src_labels,
        .get    = &clk_src_get,
 };
This page took 0.030863 seconds and 5 git commands to generate.