/* Common operations. */ static int add_elem_set(struct elem_set_trial *trial) { snd_ctl_elem_info_t *info; char name[64] = {0}; int err; snprintf(name, 64, "userspace-control-element-%s", snd_ctl_elem_type_name(trial->type)); snd_ctl_elem_info_alloca(&info); snd_ctl_elem_info_set_interface(info, SND_CTL_ELEM_IFACE_MIXER); snd_ctl_elem_info_set_name(info, name); snd_ctl_elem_info_set_dimension(info, trial->dimension); err = trial->add_elem_set(trial, info); if (err >= 0) snd_ctl_elem_info_get_id(info, trial->id); return err; }
void analog_volume_init(void) { snd_ctl_elem_info_t *info; int i; snd_ctl_elem_info_alloca(&info); snd_ctl_elem_info_set_interface(info, SND_CTL_ELEM_IFACE_MIXER); for (i = 0; i < 10; i++) { snd_ctl_elem_info_set_name(info, DAC_VOLUME_NAME); snd_ctl_elem_info_set_numid(info, 0); snd_ctl_elem_info_set_index(info, i); if (snd_ctl_elem_info(ctl, info) < 0) break; dac_max = snd_ctl_elem_info_get_max(info); } if (i < output_channels - 1) dac_volumes = i; else dac_volumes = output_channels; snd_ctl_elem_info_set_name(info, DAC_SENSE_NAME); for (i = 0; i < dac_volumes; i++) { snd_ctl_elem_info_set_numid(info, 0); snd_ctl_elem_info_set_index(info, i); if (snd_ctl_elem_info(ctl, info) < 0) break; } dac_senses = i; if (dac_senses > 0) { snd_ctl_elem_info_set_numid(info, 0); snd_ctl_elem_info_set_index(info, 0); snd_ctl_elem_info(ctl, info); dac_sense_items = snd_ctl_elem_info_get_items(info); for (i = 0; i < dac_sense_items; i++) { snd_ctl_elem_info_set_item(info, i); snd_ctl_elem_info(ctl, info); dac_sense_name[i] = strdup(snd_ctl_elem_info_get_item_name(info)); } } for (i = 0; i < 10; i++) { snd_ctl_elem_info_set_name(info, ADC_VOLUME_NAME); snd_ctl_elem_info_set_numid(info, 0); snd_ctl_elem_info_set_index(info, i); if (snd_ctl_elem_info(ctl, info) < 0) break; adc_max = snd_ctl_elem_info_get_max(info); } if (i < input_channels - 1) adc_volumes = i; else adc_volumes = input_channels; snd_ctl_elem_info_set_name(info, ADC_SENSE_NAME); for (i = 0; i < adc_volumes; i++) { snd_ctl_elem_info_set_numid(info, 0); snd_ctl_elem_info_set_index(info, i); if (snd_ctl_elem_info(ctl, info) < 0) break; } adc_senses = i; if (adc_senses > 0) { snd_ctl_elem_info_set_numid(info, 0); snd_ctl_elem_info_set_index(info, 0); snd_ctl_elem_info(ctl, info); adc_sense_items = snd_ctl_elem_info_get_items(info); for (i = 0; i < adc_sense_items; i++) { snd_ctl_elem_info_set_item(info, i); snd_ctl_elem_info(ctl, info); adc_sense_name[i] = strdup(snd_ctl_elem_info_get_item_name(info)); } } for (i = 0; i < 10; i++) { snd_ctl_elem_info_set_name(info, IPGA_VOLUME_NAME); snd_ctl_elem_info_set_numid(info, 0); snd_ctl_elem_info_set_index(info, i); if (snd_ctl_elem_info(ctl, info) < 0) break; } if (i < input_channels - 1) ipga_volumes = i; else ipga_volumes = input_channels; }