aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Knoth <adi@drcomp.erfurt.thur.de>2013-03-09 18:37:24 -0500
committerTakashi Iwai <tiwai@suse.de>2013-03-11 05:11:18 -0400
commite5b7b1fe3b263441a1fc89bc6a4cca5e80f348b0 (patch)
treeed91afff65ac072417938d13019c41f085ca3154
parent696be0fbe244ca6d267fb1ce67a4a5f6c8fe37bc (diff)
ALSA: hdspm - Remove duplicate code from ALSA controls
Considerably shorten the code by using a macro. Though this won't lower the binary size, it makes the source more readable. Signed-off-by: Adrian Knoth <adi@drcomp.erfurt.thur.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--sound/pci/rme9652/hdspm.c146
1 files changed, 22 insertions, 124 deletions
diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c
index c03ee011bfb6..82f209f283aa 100644
--- a/sound/pci/rme9652/hdspm.c
+++ b/sound/pci/rme9652/hdspm.c
@@ -2175,6 +2175,16 @@ static int hdspm_get_s1_sample_rate(struct hdspm *hdspm, unsigned int idx)
2175 return (status >> (idx*4)) & 0xF; 2175 return (status >> (idx*4)) & 0xF;
2176} 2176}
2177 2177
2178#define ENUMERATED_CTL_INFO(info, texts) \
2179{ \
2180 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; \
2181 uinfo->count = 1; \
2182 uinfo->value.enumerated.items = ARRAY_SIZE(texts); \
2183 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) \
2184 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; \
2185 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); \
2186}
2187
2178 2188
2179 2189
2180#define HDSPM_AUTOSYNC_SAMPLE_RATE(xname, xindex) \ 2190#define HDSPM_AUTOSYNC_SAMPLE_RATE(xname, xindex) \
@@ -2190,14 +2200,7 @@ static int hdspm_get_s1_sample_rate(struct hdspm *hdspm, unsigned int idx)
2190static int snd_hdspm_info_autosync_sample_rate(struct snd_kcontrol *kcontrol, 2200static int snd_hdspm_info_autosync_sample_rate(struct snd_kcontrol *kcontrol,
2191 struct snd_ctl_elem_info *uinfo) 2201 struct snd_ctl_elem_info *uinfo)
2192{ 2202{
2193 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2203 ENUMERATED_CTL_INFO(uinfo, texts_freq);
2194 uinfo->count = 1;
2195 uinfo->value.enumerated.items = 10;
2196
2197 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
2198 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
2199 strcpy(uinfo->value.enumerated.name,
2200 texts_freq[uinfo->value.enumerated.item]);
2201 return 0; 2204 return 0;
2202} 2205}
2203 2206
@@ -2363,15 +2366,7 @@ static int snd_hdspm_info_system_clock_mode(struct snd_kcontrol *kcontrol,
2363 struct snd_ctl_elem_info *uinfo) 2366 struct snd_ctl_elem_info *uinfo)
2364{ 2367{
2365 static char *texts[] = { "Master", "AutoSync" }; 2368 static char *texts[] = { "Master", "AutoSync" };
2366 2369 ENUMERATED_CTL_INFO(uinfo, texts);
2367 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2368 uinfo->count = 1;
2369 uinfo->value.enumerated.items = 2;
2370 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
2371 uinfo->value.enumerated.item =
2372 uinfo->value.enumerated.items - 1;
2373 strcpy(uinfo->value.enumerated.name,
2374 texts[uinfo->value.enumerated.item]);
2375 return 0; 2370 return 0;
2376} 2371}
2377 2372
@@ -3021,17 +3016,7 @@ static int snd_hdspm_info_input_select(struct snd_kcontrol *kcontrol,
3021 struct snd_ctl_elem_info *uinfo) 3016 struct snd_ctl_elem_info *uinfo)
3022{ 3017{
3023 static char *texts[] = { "optical", "coaxial" }; 3018 static char *texts[] = { "optical", "coaxial" };
3024 3019 ENUMERATED_CTL_INFO(uinfo, texts);
3025 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3026 uinfo->count = 1;
3027 uinfo->value.enumerated.items = 2;
3028
3029 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
3030 uinfo->value.enumerated.item =
3031 uinfo->value.enumerated.items - 1;
3032 strcpy(uinfo->value.enumerated.name,
3033 texts[uinfo->value.enumerated.item]);
3034
3035 return 0; 3020 return 0;
3036} 3021}
3037 3022
@@ -3093,17 +3078,7 @@ static int snd_hdspm_info_ds_wire(struct snd_kcontrol *kcontrol,
3093 struct snd_ctl_elem_info *uinfo) 3078 struct snd_ctl_elem_info *uinfo)
3094{ 3079{
3095 static char *texts[] = { "Single", "Double" }; 3080 static char *texts[] = { "Single", "Double" };
3096 3081 ENUMERATED_CTL_INFO(uinfo, texts);
3097 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3098 uinfo->count = 1;
3099 uinfo->value.enumerated.items = 2;
3100
3101 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
3102 uinfo->value.enumerated.item =
3103 uinfo->value.enumerated.items - 1;
3104 strcpy(uinfo->value.enumerated.name,
3105 texts[uinfo->value.enumerated.item]);
3106
3107 return 0; 3082 return 0;
3108} 3083}
3109 3084
@@ -3176,17 +3151,7 @@ static int snd_hdspm_info_qs_wire(struct snd_kcontrol *kcontrol,
3176 struct snd_ctl_elem_info *uinfo) 3151 struct snd_ctl_elem_info *uinfo)
3177{ 3152{
3178 static char *texts[] = { "Single", "Double", "Quad" }; 3153 static char *texts[] = { "Single", "Double", "Quad" };
3179 3154 ENUMERATED_CTL_INFO(uinfo, texts);
3180 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3181 uinfo->count = 1;
3182 uinfo->value.enumerated.items = 3;
3183
3184 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
3185 uinfo->value.enumerated.item =
3186 uinfo->value.enumerated.items - 1;
3187 strcpy(uinfo->value.enumerated.name,
3188 texts[uinfo->value.enumerated.item]);
3189
3190 return 0; 3155 return 0;
3191} 3156}
3192 3157
@@ -3262,17 +3227,7 @@ static int snd_hdspm_info_madi_speedmode(struct snd_kcontrol *kcontrol,
3262 struct snd_ctl_elem_info *uinfo) 3227 struct snd_ctl_elem_info *uinfo)
3263{ 3228{
3264 static char *texts[] = { "Single", "Double", "Quad" }; 3229 static char *texts[] = { "Single", "Double", "Quad" };
3265 3230 ENUMERATED_CTL_INFO(uinfo, texts);
3266 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3267 uinfo->count = 1;
3268 uinfo->value.enumerated.items = 3;
3269
3270 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
3271 uinfo->value.enumerated.item =
3272 uinfo->value.enumerated.items - 1;
3273 strcpy(uinfo->value.enumerated.name,
3274 texts[uinfo->value.enumerated.item]);
3275
3276 return 0; 3231 return 0;
3277} 3232}
3278 3233
@@ -3497,14 +3452,7 @@ static int snd_hdspm_info_sync_check(struct snd_kcontrol *kcontrol,
3497 struct snd_ctl_elem_info *uinfo) 3452 struct snd_ctl_elem_info *uinfo)
3498{ 3453{
3499 static char *texts[] = { "No Lock", "Lock", "Sync", "N/A" }; 3454 static char *texts[] = { "No Lock", "Lock", "Sync", "N/A" };
3500 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 3455 ENUMERATED_CTL_INFO(uinfo, texts);
3501 uinfo->count = 1;
3502 uinfo->value.enumerated.items = 4;
3503 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
3504 uinfo->value.enumerated.item =
3505 uinfo->value.enumerated.items - 1;
3506 strcpy(uinfo->value.enumerated.name,
3507 texts[uinfo->value.enumerated.item]);
3508 return 0; 3456 return 0;
3509} 3457}
3510 3458
@@ -3860,17 +3808,7 @@ static int snd_hdspm_info_tco_sample_rate(struct snd_kcontrol *kcontrol,
3860 struct snd_ctl_elem_info *uinfo) 3808 struct snd_ctl_elem_info *uinfo)
3861{ 3809{
3862 static char *texts[] = { "44.1 kHz", "48 kHz" }; 3810 static char *texts[] = { "44.1 kHz", "48 kHz" };
3863 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 3811 ENUMERATED_CTL_INFO(uinfo, texts);
3864 uinfo->count = 1;
3865 uinfo->value.enumerated.items = 2;
3866
3867 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
3868 uinfo->value.enumerated.item =
3869 uinfo->value.enumerated.items - 1;
3870
3871 strcpy(uinfo->value.enumerated.name,
3872 texts[uinfo->value.enumerated.item]);
3873
3874 return 0; 3812 return 0;
3875} 3813}
3876 3814
@@ -3916,17 +3854,7 @@ static int snd_hdspm_info_tco_pull(struct snd_kcontrol *kcontrol,
3916 struct snd_ctl_elem_info *uinfo) 3854 struct snd_ctl_elem_info *uinfo)
3917{ 3855{
3918 static char *texts[] = { "0", "+ 0.1 %", "- 0.1 %", "+ 4 %", "- 4 %" }; 3856 static char *texts[] = { "0", "+ 0.1 %", "- 0.1 %", "+ 4 %", "- 4 %" };
3919 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 3857 ENUMERATED_CTL_INFO(uinfo, texts);
3920 uinfo->count = 1;
3921 uinfo->value.enumerated.items = 5;
3922
3923 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
3924 uinfo->value.enumerated.item =
3925 uinfo->value.enumerated.items - 1;
3926
3927 strcpy(uinfo->value.enumerated.name,
3928 texts[uinfo->value.enumerated.item]);
3929
3930 return 0; 3858 return 0;
3931} 3859}
3932 3860
@@ -3971,17 +3899,7 @@ static int snd_hdspm_info_tco_wck_conversion(struct snd_kcontrol *kcontrol,
3971 struct snd_ctl_elem_info *uinfo) 3899 struct snd_ctl_elem_info *uinfo)
3972{ 3900{
3973 static char *texts[] = { "1:1", "44.1 -> 48", "48 -> 44.1" }; 3901 static char *texts[] = { "1:1", "44.1 -> 48", "48 -> 44.1" };
3974 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 3902 ENUMERATED_CTL_INFO(uinfo, texts);
3975 uinfo->count = 1;
3976 uinfo->value.enumerated.items = 3;
3977
3978 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
3979 uinfo->value.enumerated.item =
3980 uinfo->value.enumerated.items - 1;
3981
3982 strcpy(uinfo->value.enumerated.name,
3983 texts[uinfo->value.enumerated.item]);
3984
3985 return 0; 3903 return 0;
3986} 3904}
3987 3905
@@ -4028,17 +3946,7 @@ static int snd_hdspm_info_tco_frame_rate(struct snd_kcontrol *kcontrol,
4028{ 3946{
4029 static char *texts[] = { "24 fps", "25 fps", "29.97fps", 3947 static char *texts[] = { "24 fps", "25 fps", "29.97fps",
4030 "29.97 dfps", "30 fps", "30 dfps" }; 3948 "29.97 dfps", "30 fps", "30 dfps" };
4031 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 3949 ENUMERATED_CTL_INFO(uinfo, texts);
4032 uinfo->count = 1;
4033 uinfo->value.enumerated.items = 6;
4034
4035 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
4036 uinfo->value.enumerated.item =
4037 uinfo->value.enumerated.items - 1;
4038
4039 strcpy(uinfo->value.enumerated.name,
4040 texts[uinfo->value.enumerated.item]);
4041
4042 return 0; 3950 return 0;
4043} 3951}
4044 3952
@@ -4084,17 +3992,7 @@ static int snd_hdspm_info_tco_sync_source(struct snd_kcontrol *kcontrol,
4084 struct snd_ctl_elem_info *uinfo) 3992 struct snd_ctl_elem_info *uinfo)
4085{ 3993{
4086 static char *texts[] = { "LTC", "Video", "WCK" }; 3994 static char *texts[] = { "LTC", "Video", "WCK" };
4087 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 3995 ENUMERATED_CTL_INFO(uinfo, texts);
4088 uinfo->count = 1;
4089 uinfo->value.enumerated.items = 3;
4090
4091 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
4092 uinfo->value.enumerated.item =
4093 uinfo->value.enumerated.items - 1;
4094
4095 strcpy(uinfo->value.enumerated.name,
4096 texts[uinfo->value.enumerated.item]);
4097
4098 return 0; 3996 return 0;
4099} 3997}
4100 3998