Commit 8c558076 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: usb-audio: Clean up mixer element list traverse

Introduce a new macro for iterating over mixer element list for
avoiding the open codes in many places.  Also the open-coded
container_of() and the forced cast to struct usb_mixer_elem_info are
replaced with another simple macro, too.

No functional changes but just readability improvement.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 207459a2
...@@ -2598,9 +2598,9 @@ void snd_usb_mixer_notify_id(struct usb_mixer_interface *mixer, int unitid) ...@@ -2598,9 +2598,9 @@ void snd_usb_mixer_notify_id(struct usb_mixer_interface *mixer, int unitid)
{ {
struct usb_mixer_elem_list *list; struct usb_mixer_elem_list *list;
for (list = mixer->id_elems[unitid]; list; list = list->next_id_elem) { for_each_mixer_elem(list, mixer, unitid) {
struct usb_mixer_elem_info *info = struct usb_mixer_elem_info *info =
(struct usb_mixer_elem_info *)list; mixer_elem_list_to_info(list);
/* invalidate cache, so the value is read from the device */ /* invalidate cache, so the value is read from the device */
info->cached = 0; info->cached = 0;
snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE, snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
...@@ -2611,7 +2611,7 @@ void snd_usb_mixer_notify_id(struct usb_mixer_interface *mixer, int unitid) ...@@ -2611,7 +2611,7 @@ void snd_usb_mixer_notify_id(struct usb_mixer_interface *mixer, int unitid)
static void snd_usb_mixer_dump_cval(struct snd_info_buffer *buffer, static void snd_usb_mixer_dump_cval(struct snd_info_buffer *buffer,
struct usb_mixer_elem_list *list) struct usb_mixer_elem_list *list)
{ {
struct usb_mixer_elem_info *cval = (struct usb_mixer_elem_info *)list; struct usb_mixer_elem_info *cval = mixer_elem_list_to_info(list);
static char *val_types[] = {"BOOLEAN", "INV_BOOLEAN", static char *val_types[] = {"BOOLEAN", "INV_BOOLEAN",
"S8", "U8", "S16", "U16"}; "S8", "U8", "S16", "U16"};
snd_iprintf(buffer, " Info: id=%i, control=%i, cmask=0x%x, " snd_iprintf(buffer, " Info: id=%i, control=%i, cmask=0x%x, "
...@@ -2637,8 +2637,7 @@ static void snd_usb_mixer_proc_read(struct snd_info_entry *entry, ...@@ -2637,8 +2637,7 @@ static void snd_usb_mixer_proc_read(struct snd_info_entry *entry,
mixer->ignore_ctl_error); mixer->ignore_ctl_error);
snd_iprintf(buffer, "Card: %s\n", chip->card->longname); snd_iprintf(buffer, "Card: %s\n", chip->card->longname);
for (unitid = 0; unitid < MAX_ID_ELEMS; unitid++) { for (unitid = 0; unitid < MAX_ID_ELEMS; unitid++) {
for (list = mixer->id_elems[unitid]; list; for_each_mixer_elem(list, mixer, unitid) {
list = list->next_id_elem) {
snd_iprintf(buffer, " Unit: %i\n", list->id); snd_iprintf(buffer, " Unit: %i\n", list->id);
if (list->kctl) if (list->kctl)
snd_iprintf(buffer, snd_iprintf(buffer,
...@@ -2668,19 +2667,19 @@ static void snd_usb_mixer_interrupt_v2(struct usb_mixer_interface *mixer, ...@@ -2668,19 +2667,19 @@ static void snd_usb_mixer_interrupt_v2(struct usb_mixer_interface *mixer,
return; return;
} }
for (list = mixer->id_elems[unitid]; list; list = list->next_id_elem) for_each_mixer_elem(list, mixer, unitid)
count++; count++;
if (count == 0) if (count == 0)
return; return;
for (list = mixer->id_elems[unitid]; list; list = list->next_id_elem) { for_each_mixer_elem(list, mixer, unitid) {
struct usb_mixer_elem_info *info; struct usb_mixer_elem_info *info;
if (!list->kctl) if (!list->kctl)
continue; continue;
info = (struct usb_mixer_elem_info *)list; info = mixer_elem_list_to_info(list);
if (count > 1 && info->control != control) if (count > 1 && info->control != control)
continue; continue;
...@@ -2946,7 +2945,7 @@ int snd_usb_mixer_suspend(struct usb_mixer_interface *mixer) ...@@ -2946,7 +2945,7 @@ int snd_usb_mixer_suspend(struct usb_mixer_interface *mixer)
static int restore_mixer_value(struct usb_mixer_elem_list *list) static int restore_mixer_value(struct usb_mixer_elem_list *list)
{ {
struct usb_mixer_elem_info *cval = (struct usb_mixer_elem_info *)list; struct usb_mixer_elem_info *cval = mixer_elem_list_to_info(list);
int c, err, idx; int c, err, idx;
if (cval->cmask) { if (cval->cmask) {
...@@ -2982,8 +2981,7 @@ int snd_usb_mixer_resume(struct usb_mixer_interface *mixer, bool reset_resume) ...@@ -2982,8 +2981,7 @@ int snd_usb_mixer_resume(struct usb_mixer_interface *mixer, bool reset_resume)
if (reset_resume) { if (reset_resume) {
/* restore cached mixer values */ /* restore cached mixer values */
for (id = 0; id < MAX_ID_ELEMS; id++) { for (id = 0; id < MAX_ID_ELEMS; id++) {
for (list = mixer->id_elems[id]; list; for_each_mixer_elem(list, mixer, id) {
list = list->next_id_elem) {
if (list->resume) { if (list->resume) {
err = list->resume(list); err = list->resume(list);
if (err < 0) if (err < 0)
......
...@@ -53,6 +53,12 @@ struct usb_mixer_elem_list { ...@@ -53,6 +53,12 @@ struct usb_mixer_elem_list {
usb_mixer_elem_resume_func_t resume; usb_mixer_elem_resume_func_t resume;
}; };
/* iterate over mixer element list of the given unit id */
#define for_each_mixer_elem(list, mixer, id) \
for ((list) = (mixer)->id_elems[id]; (list); (list) = (list)->next_id_elem)
#define mixer_elem_list_to_info(list) \
container_of(list, struct usb_mixer_elem_info, head)
struct usb_mixer_elem_info { struct usb_mixer_elem_info {
struct usb_mixer_elem_list head; struct usb_mixer_elem_list head;
unsigned int control; /* CS or ICN (high byte) */ unsigned int control; /* CS or ICN (high byte) */
......
...@@ -1172,7 +1172,7 @@ void snd_emuusb_set_samplerate(struct snd_usb_audio *chip, ...@@ -1172,7 +1172,7 @@ void snd_emuusb_set_samplerate(struct snd_usb_audio *chip,
int unitid = 12; /* SamleRate ExtensionUnit ID */ int unitid = 12; /* SamleRate ExtensionUnit ID */
list_for_each_entry(mixer, &chip->mixer_list, list) { list_for_each_entry(mixer, &chip->mixer_list, list) {
cval = (struct usb_mixer_elem_info *)mixer->id_elems[unitid]; cval = mixer_elem_list_to_info(mixer->id_elems[unitid]);
if (cval) { if (cval) {
snd_usb_mixer_set_ctl_value(cval, UAC_SET_CUR, snd_usb_mixer_set_ctl_value(cval, UAC_SET_CUR,
cval->control << 8, cval->control << 8,
......
...@@ -287,8 +287,7 @@ static int scarlett_ctl_switch_put(struct snd_kcontrol *kctl, ...@@ -287,8 +287,7 @@ static int scarlett_ctl_switch_put(struct snd_kcontrol *kctl,
static int scarlett_ctl_resume(struct usb_mixer_elem_list *list) static int scarlett_ctl_resume(struct usb_mixer_elem_list *list)
{ {
struct usb_mixer_elem_info *elem = struct usb_mixer_elem_info *elem = mixer_elem_list_to_info(list);
container_of(list, struct usb_mixer_elem_info, head);
int i; int i;
for (i = 0; i < elem->channels; i++) for (i = 0; i < elem->channels; i++)
...@@ -447,8 +446,7 @@ static int scarlett_ctl_enum_put(struct snd_kcontrol *kctl, ...@@ -447,8 +446,7 @@ static int scarlett_ctl_enum_put(struct snd_kcontrol *kctl,
static int scarlett_ctl_enum_resume(struct usb_mixer_elem_list *list) static int scarlett_ctl_enum_resume(struct usb_mixer_elem_list *list)
{ {
struct usb_mixer_elem_info *elem = struct usb_mixer_elem_info *elem = mixer_elem_list_to_info(list);
container_of(list, struct usb_mixer_elem_info, head);
if (elem->cached) if (elem->cached)
snd_usb_set_cur_mix_value(elem, 0, 0, *elem->cache_val); snd_usb_set_cur_mix_value(elem, 0, 0, *elem->cache_val);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment