diff options
author | Adrian Knoth <adi@drcomp.erfurt.thur.de> | 2013-03-09 18:37:24 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2013-03-11 05:11:18 -0400 |
commit | e5b7b1fe3b263441a1fc89bc6a4cca5e80f348b0 (patch) | |
tree | ed91afff65ac072417938d13019c41f085ca3154 | |
parent | 696be0fbe244ca6d267fb1ce67a4a5f6c8fe37bc (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.c | 146 |
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) | |||
2190 | static int snd_hdspm_info_autosync_sample_rate(struct snd_kcontrol *kcontrol, | 2200 | static 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 | ||