At Fri, 29 Aug 2008 14:54:42 +0200, Harald Radke wrote: > > Hi there! > > Please be patient with me, I am quite inexperienced with alsa programming, so > this might be a dumb question: > > We have a WM8750 working in our PDA, the codec is working so far but I want to > remove some of the control since they aren't needed. > > Instead of copying the wm8750.c file and adjusting it, I want to write another > module which basically get rid of those controls, something like: > > [...] > > static const char* unused_controls[] = {"AAAA", "BBBB,"CCCC"}; > > struct snd_kcontrol *ctl; > > list_for_each_entry(ctl, &card->controls, list) You can't use list_for_each_entry() together with removal. Use list_for_each_entry_safe() for such a purpose. But... > for(i=0; i < ARRAY_SIZE(unused_controls); i++) > if (!strcmp(unused_controls[i],ctl->id.name)) { > down_write(&card->controls_rwsem); > snd_ctl_remove(card,ctl); > up_write(&card->controls_rwsem); > break; > } It'd be easier like the following: for (i = 0; i < ARRAY_SIZE(unused_controls); i++) { struct snd_ctl_elem_id id; memset(&id, 0, sizeof(id)); strcpy(id.name, unused_controls[i]); id.iface = SNDRV_CTL_ELEM_IFACE_MIXER; snd_ctl_remove_id(card, &id); } Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel