• Home
  • Raw
  • Download

Lines Matching +full:out +full:- +full:volume +full:- +full:limit

6  *  Multichannel PCM support Copyright (c) Lee Revell <rlrevell@joe-job.com>
8 * Copyright (c) by James Courtier-Dutton <James@superbug.co.uk>
12 * --
15 * --
29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
44 static const DECLARE_TLV_DB_SCALE(snd_audigy_db_scale2, -10350, 50, 1); /* WM8775 gain scale */
48 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958; in snd_emu10k1_spdif_info()
49 uinfo->count = 1; in snd_emu10k1_spdif_info()
57 unsigned int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); in snd_emu10k1_spdif_get()
60 /* Limit: emu->spdif_bits */ in snd_emu10k1_spdif_get()
62 return -EINVAL; in snd_emu10k1_spdif_get()
63 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_spdif_get()
64 ucontrol->value.iec958.status[0] = (emu->spdif_bits[idx] >> 0) & 0xff; in snd_emu10k1_spdif_get()
65 ucontrol->value.iec958.status[1] = (emu->spdif_bits[idx] >> 8) & 0xff; in snd_emu10k1_spdif_get()
66 ucontrol->value.iec958.status[2] = (emu->spdif_bits[idx] >> 16) & 0xff; in snd_emu10k1_spdif_get()
67 ucontrol->value.iec958.status[3] = (emu->spdif_bits[idx] >> 24) & 0xff; in snd_emu10k1_spdif_get()
68 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_spdif_get()
75 ucontrol->value.iec958.status[0] = 0xff; in snd_emu10k1_spdif_get_mask()
76 ucontrol->value.iec958.status[1] = 0xff; in snd_emu10k1_spdif_get_mask()
77 ucontrol->value.iec958.status[2] = 0xff; in snd_emu10k1_spdif_get_mask()
78 ucontrol->value.iec958.status[3] = 0xff; in snd_emu10k1_spdif_get_mask()
310 * Data destinations - physical EMU outputs.
363 * Data destinations - HANA outputs going to Alice2 (audigy) for
397 if (emu->card_capabilities->emu_model == EMU_MODEL_EMU1616) in snd_emu1010_input_output_source_info()
409 channel = (kcontrol->private_value) & 0xff; in snd_emu1010_output_source_get()
410 /* Limit: emu1010_output_dst, emu->emu1010.output_source */ in snd_emu1010_output_source_get()
412 (emu->card_capabilities->emu_model == EMU_MODEL_EMU1616 && in snd_emu1010_output_source_get()
414 return -EINVAL; in snd_emu1010_output_source_get()
415 ucontrol->value.enumerated.item[0] = emu->emu1010.output_source[channel]; in snd_emu1010_output_source_get()
426 val = ucontrol->value.enumerated.item[0]; in snd_emu1010_output_source_put()
428 (emu->card_capabilities->emu_model == EMU_MODEL_EMU1616 && in snd_emu1010_output_source_put()
430 return -EINVAL; in snd_emu1010_output_source_put()
431 channel = (kcontrol->private_value) & 0xff; in snd_emu1010_output_source_put()
432 /* Limit: emu1010_output_dst, emu->emu1010.output_source */ in snd_emu1010_output_source_put()
434 (emu->card_capabilities->emu_model == EMU_MODEL_EMU1616 && in snd_emu1010_output_source_put()
436 return -EINVAL; in snd_emu1010_output_source_put()
437 if (emu->emu1010.output_source[channel] == val) in snd_emu1010_output_source_put()
439 emu->emu1010.output_source[channel] = val; in snd_emu1010_output_source_put()
440 if (emu->card_capabilities->emu_model == EMU_MODEL_EMU1616) in snd_emu1010_output_source_put()
455 channel = (kcontrol->private_value) & 0xff; in snd_emu1010_input_source_get()
456 /* Limit: emu1010_input_dst, emu->emu1010.input_source */ in snd_emu1010_input_source_get()
458 return -EINVAL; in snd_emu1010_input_source_get()
459 ucontrol->value.enumerated.item[0] = emu->emu1010.input_source[channel]; in snd_emu1010_input_source_get()
470 val = ucontrol->value.enumerated.item[0]; in snd_emu1010_input_source_put()
472 (emu->card_capabilities->emu_model == EMU_MODEL_EMU1616 && in snd_emu1010_input_source_put()
474 return -EINVAL; in snd_emu1010_input_source_put()
475 channel = (kcontrol->private_value) & 0xff; in snd_emu1010_input_source_put()
476 /* Limit: emu1010_input_dst, emu->emu1010.input_source */ in snd_emu1010_input_source_put()
478 return -EINVAL; in snd_emu1010_input_source_put()
479 if (emu->emu1010.input_source[channel] == val) in snd_emu1010_input_source_put()
481 emu->emu1010.input_source[channel] = val; in snd_emu1010_input_source_put()
482 if (emu->card_capabilities->emu_model == EMU_MODEL_EMU1616) in snd_emu1010_input_source_put()
594 unsigned int mask = kcontrol->private_value & 0xff; in snd_emu1010_adc_pads_get()
595 ucontrol->value.integer.value[0] = (emu->emu1010.adc_pads & mask) ? 1 : 0; in snd_emu1010_adc_pads_get()
602 unsigned int mask = kcontrol->private_value & 0xff; in snd_emu1010_adc_pads_put()
604 val = ucontrol->value.integer.value[0]; in snd_emu1010_adc_pads_put()
605 cache = emu->emu1010.adc_pads; in snd_emu1010_adc_pads_put()
610 if (cache != emu->emu1010.adc_pads) { in snd_emu1010_adc_pads_put()
612 emu->emu1010.adc_pads = cache; in snd_emu1010_adc_pads_put()
642 unsigned int mask = kcontrol->private_value & 0xff; in snd_emu1010_dac_pads_get()
643 ucontrol->value.integer.value[0] = (emu->emu1010.dac_pads & mask) ? 1 : 0; in snd_emu1010_dac_pads_get()
650 unsigned int mask = kcontrol->private_value & 0xff; in snd_emu1010_dac_pads_put()
652 val = ucontrol->value.integer.value[0]; in snd_emu1010_dac_pads_put()
653 cache = emu->emu1010.dac_pads; in snd_emu1010_dac_pads_put()
658 if (cache != emu->emu1010.dac_pads) { in snd_emu1010_dac_pads_put()
660 emu->emu1010.dac_pads = cache; in snd_emu1010_dac_pads_put()
702 ucontrol->value.enumerated.item[0] = emu->emu1010.internal_clock; in snd_emu1010_internal_clock_get()
713 val = ucontrol->value.enumerated.item[0] ; in snd_emu1010_internal_clock_put()
714 /* Limit: uinfo->value.enumerated.items = 4; */ in snd_emu1010_internal_clock_put()
716 return -EINVAL; in snd_emu1010_internal_clock_put()
717 change = (emu->emu1010.internal_clock != val); in snd_emu1010_internal_clock_put()
719 emu->emu1010.internal_clock = val; in snd_emu1010_internal_clock_put()
824 ucontrol->value.enumerated.item[0] = emu->emu1010.optical_out; in snd_emu1010_optical_out_get()
836 val = ucontrol->value.enumerated.item[0]; in snd_emu1010_optical_out_put()
837 /* Limit: uinfo->value.enumerated.items = 2; */ in snd_emu1010_optical_out_put()
839 return -EINVAL; in snd_emu1010_optical_out_put()
840 change = (emu->emu1010.optical_out != val); in snd_emu1010_optical_out_put()
842 emu->emu1010.optical_out = val; in snd_emu1010_optical_out_put()
843 tmp = (emu->emu1010.optical_in ? EMU_HANA_OPTICAL_IN_ADAT : 0) | in snd_emu1010_optical_out_put()
844 (emu->emu1010.optical_out ? EMU_HANA_OPTICAL_OUT_ADAT : 0); in snd_emu1010_optical_out_put()
875 ucontrol->value.enumerated.item[0] = emu->emu1010.optical_in; in snd_emu1010_optical_in_get()
887 val = ucontrol->value.enumerated.item[0]; in snd_emu1010_optical_in_put()
888 /* Limit: uinfo->value.enumerated.items = 2; */ in snd_emu1010_optical_in_put()
890 return -EINVAL; in snd_emu1010_optical_in_put()
891 change = (emu->emu1010.optical_in != val); in snd_emu1010_optical_in_put()
893 emu->emu1010.optical_in = val; in snd_emu1010_optical_in_put()
894 tmp = (emu->emu1010.optical_in ? EMU_HANA_OPTICAL_IN_ADAT : 0) | in snd_emu1010_optical_in_put()
895 (emu->emu1010.optical_out ? EMU_HANA_OPTICAL_OUT_ADAT : 0); in snd_emu1010_optical_in_put()
931 ucontrol->value.enumerated.item[0] = emu->i2c_capture_source; in snd_audigy_i2c_capture_source_get()
946 * update the capture volume from the cached value in snd_audigy_i2c_capture_source_put()
949 source_id = ucontrol->value.enumerated.item[0]; in snd_audigy_i2c_capture_source_put()
950 /* Limit: uinfo->value.enumerated.items = 2; */ in snd_audigy_i2c_capture_source_put()
951 /* emu->i2c_capture_volume */ in snd_audigy_i2c_capture_source_put()
953 return -EINVAL; in snd_audigy_i2c_capture_source_put()
954 change = (emu->i2c_capture_source != source_id); in snd_audigy_i2c_capture_source_put()
957 spin_lock_irqsave(&emu->emu_lock, flags); in snd_audigy_i2c_capture_source_put()
958 gpio = inl(emu->port + A_IOCFG); in snd_audigy_i2c_capture_source_put()
960 outl(gpio | 0x4, emu->port + A_IOCFG); in snd_audigy_i2c_capture_source_put()
962 outl(gpio & ~0x4, emu->port + A_IOCFG); in snd_audigy_i2c_capture_source_put()
963 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_audigy_i2c_capture_source_put()
965 ngain = emu->i2c_capture_volume[source_id][0]; /* Left */ in snd_audigy_i2c_capture_source_put()
966 ogain = emu->i2c_capture_volume[emu->i2c_capture_source][0]; /* Left */ in snd_audigy_i2c_capture_source_put()
969 ngain = emu->i2c_capture_volume[source_id][1]; /* Right */ in snd_audigy_i2c_capture_source_put()
970 ogain = emu->i2c_capture_volume[emu->i2c_capture_source][1]; /* Right */ in snd_audigy_i2c_capture_source_put()
976 emu->i2c_capture_source = source_id; in snd_audigy_i2c_capture_source_put()
993 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in snd_audigy_i2c_volume_info()
994 uinfo->count = 2; in snd_audigy_i2c_volume_info()
995 uinfo->value.integer.min = 0; in snd_audigy_i2c_volume_info()
996 uinfo->value.integer.max = 255; in snd_audigy_i2c_volume_info()
1006 source_id = kcontrol->private_value; in snd_audigy_i2c_volume_get()
1007 /* Limit: emu->i2c_capture_volume */ in snd_audigy_i2c_volume_get()
1008 /* capture_source: uinfo->value.enumerated.items = 2 */ in snd_audigy_i2c_volume_get()
1010 return -EINVAL; in snd_audigy_i2c_volume_get()
1012 ucontrol->value.integer.value[0] = emu->i2c_capture_volume[source_id][0]; in snd_audigy_i2c_volume_get()
1013 ucontrol->value.integer.value[1] = emu->i2c_capture_volume[source_id][1]; in snd_audigy_i2c_volume_get()
1026 source_id = kcontrol->private_value; in snd_audigy_i2c_volume_put()
1027 /* Limit: emu->i2c_capture_volume */ in snd_audigy_i2c_volume_put()
1028 /* capture_source: uinfo->value.enumerated.items = 2 */ in snd_audigy_i2c_volume_put()
1030 return -EINVAL; in snd_audigy_i2c_volume_put()
1031 ogain = emu->i2c_capture_volume[source_id][0]; /* Left */ in snd_audigy_i2c_volume_put()
1032 ngain = ucontrol->value.integer.value[0]; in snd_audigy_i2c_volume_put()
1036 if (emu->i2c_capture_source == source_id) in snd_audigy_i2c_volume_put()
1038 emu->i2c_capture_volume[source_id][0] = ngain; in snd_audigy_i2c_volume_put()
1041 ogain = emu->i2c_capture_volume[source_id][1]; /* Right */ in snd_audigy_i2c_volume_put()
1042 ngain = ucontrol->value.integer.value[1]; in snd_audigy_i2c_volume_put()
1046 if (emu->i2c_capture_source == source_id) in snd_audigy_i2c_volume_put()
1048 emu->i2c_capture_volume[source_id][1] = ngain; in snd_audigy_i2c_volume_put()
1069 I2C_VOLUME("Mic Capture Volume", 0),
1070 I2C_VOLUME("Line Capture Volume", 0)
1089 spin_lock_irqsave(&emu->reg_lock, flags);
1093 ucontrol->value.enumerated.item[0] = 0;
1096 ucontrol->value.enumerated.item[0] = 1;
1099 ucontrol->value.enumerated.item[0] = 2;
1102 ucontrol->value.enumerated.item[0] = 1;
1104 spin_unlock_irqrestore(&emu->reg_lock, flags);
1116 switch(ucontrol->value.enumerated.item[0]) {
1132 spin_lock_irqsave(&emu->reg_lock, flags);
1138 spin_unlock_irqrestore(&emu->reg_lock, flags);
1158 unsigned int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); in snd_emu10k1_spdif_put()
1163 /* Limit: emu->spdif_bits */ in snd_emu10k1_spdif_put()
1165 return -EINVAL; in snd_emu10k1_spdif_put()
1166 val = (ucontrol->value.iec958.status[0] << 0) | in snd_emu10k1_spdif_put()
1167 (ucontrol->value.iec958.status[1] << 8) | in snd_emu10k1_spdif_put()
1168 (ucontrol->value.iec958.status[2] << 16) | in snd_emu10k1_spdif_put()
1169 (ucontrol->value.iec958.status[3] << 24); in snd_emu10k1_spdif_put()
1170 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_spdif_put()
1171 change = val != emu->spdif_bits[idx]; in snd_emu10k1_spdif_put()
1174 emu->spdif_bits[idx] = val; in snd_emu10k1_spdif_put()
1176 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_spdif_put()
1203 if (emu->audigy) { in update_emu10k1_fxrt()
1214 static void update_emu10k1_send_volume(struct snd_emu10k1 *emu, int voice, unsigned char *volume) in update_emu10k1_send_volume() argument
1216 snd_emu10k1_ptr_write(emu, PTRX_FXSENDAMOUNT_A, voice, volume[0]); in update_emu10k1_send_volume()
1217 snd_emu10k1_ptr_write(emu, PTRX_FXSENDAMOUNT_B, voice, volume[1]); in update_emu10k1_send_volume()
1218 snd_emu10k1_ptr_write(emu, PSST_FXSENDAMOUNT_C, voice, volume[2]); in update_emu10k1_send_volume()
1219 snd_emu10k1_ptr_write(emu, DSL_FXSENDAMOUNT_D, voice, volume[3]); in update_emu10k1_send_volume()
1220 if (emu->audigy) { in update_emu10k1_send_volume()
1221 unsigned int val = ((unsigned int)volume[4] << 24) | in update_emu10k1_send_volume()
1222 ((unsigned int)volume[5] << 16) | in update_emu10k1_send_volume()
1223 ((unsigned int)volume[6] << 8) | in update_emu10k1_send_volume()
1224 (unsigned int)volume[7]; in update_emu10k1_send_volume()
1234 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in snd_emu10k1_send_routing_info()
1235 uinfo->count = emu->audigy ? 3*8 : 3*4; in snd_emu10k1_send_routing_info()
1236 uinfo->value.integer.min = 0; in snd_emu10k1_send_routing_info()
1237 uinfo->value.integer.max = emu->audigy ? 0x3f : 0x0f; in snd_emu10k1_send_routing_info()
1247 &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; in snd_emu10k1_send_routing_get()
1249 int num_efx = emu->audigy ? 8 : 4; in snd_emu10k1_send_routing_get()
1250 int mask = emu->audigy ? 0x3f : 0x0f; in snd_emu10k1_send_routing_get()
1252 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_send_routing_get()
1255 ucontrol->value.integer.value[(voice * num_efx) + idx] = in snd_emu10k1_send_routing_get()
1256 mix->send_routing[voice][idx] & mask; in snd_emu10k1_send_routing_get()
1257 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_send_routing_get()
1267 &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; in snd_emu10k1_send_routing_put()
1269 int num_efx = emu->audigy ? 8 : 4; in snd_emu10k1_send_routing_put()
1270 int mask = emu->audigy ? 0x3f : 0x0f; in snd_emu10k1_send_routing_put()
1272 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_send_routing_put()
1275 val = ucontrol->value.integer.value[(voice * num_efx) + idx] & mask; in snd_emu10k1_send_routing_put()
1276 if (mix->send_routing[voice][idx] != val) { in snd_emu10k1_send_routing_put()
1277 mix->send_routing[voice][idx] = val; in snd_emu10k1_send_routing_put()
1281 if (change && mix->epcm) { in snd_emu10k1_send_routing_put()
1282 if (mix->epcm->voices[0] && mix->epcm->voices[1]) { in snd_emu10k1_send_routing_put()
1283 update_emu10k1_fxrt(emu, mix->epcm->voices[0]->number, in snd_emu10k1_send_routing_put()
1284 &mix->send_routing[1][0]); in snd_emu10k1_send_routing_put()
1285 update_emu10k1_fxrt(emu, mix->epcm->voices[1]->number, in snd_emu10k1_send_routing_put()
1286 &mix->send_routing[2][0]); in snd_emu10k1_send_routing_put()
1287 } else if (mix->epcm->voices[0]) { in snd_emu10k1_send_routing_put()
1288 update_emu10k1_fxrt(emu, mix->epcm->voices[0]->number, in snd_emu10k1_send_routing_put()
1289 &mix->send_routing[0][0]); in snd_emu10k1_send_routing_put()
1292 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_send_routing_put()
1310 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in snd_emu10k1_send_volume_info()
1311 uinfo->count = emu->audigy ? 3*8 : 3*4; in snd_emu10k1_send_volume_info()
1312 uinfo->value.integer.min = 0; in snd_emu10k1_send_volume_info()
1313 uinfo->value.integer.max = 255; in snd_emu10k1_send_volume_info()
1323 &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; in snd_emu10k1_send_volume_get()
1325 int num_efx = emu->audigy ? 8 : 4; in snd_emu10k1_send_volume_get()
1327 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_send_volume_get()
1329 ucontrol->value.integer.value[idx] = mix->send_volume[idx/num_efx][idx%num_efx]; in snd_emu10k1_send_volume_get()
1330 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_send_volume_get()
1340 &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; in snd_emu10k1_send_volume_put()
1342 int num_efx = emu->audigy ? 8 : 4; in snd_emu10k1_send_volume_put()
1344 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_send_volume_put()
1346 val = ucontrol->value.integer.value[idx] & 255; in snd_emu10k1_send_volume_put()
1347 if (mix->send_volume[idx/num_efx][idx%num_efx] != val) { in snd_emu10k1_send_volume_put()
1348 mix->send_volume[idx/num_efx][idx%num_efx] = val; in snd_emu10k1_send_volume_put()
1352 if (change && mix->epcm) { in snd_emu10k1_send_volume_put()
1353 if (mix->epcm->voices[0] && mix->epcm->voices[1]) { in snd_emu10k1_send_volume_put()
1354 update_emu10k1_send_volume(emu, mix->epcm->voices[0]->number, in snd_emu10k1_send_volume_put()
1355 &mix->send_volume[1][0]); in snd_emu10k1_send_volume_put()
1356 update_emu10k1_send_volume(emu, mix->epcm->voices[1]->number, in snd_emu10k1_send_volume_put()
1357 &mix->send_volume[2][0]); in snd_emu10k1_send_volume_put()
1358 } else if (mix->epcm->voices[0]) { in snd_emu10k1_send_volume_put()
1359 update_emu10k1_send_volume(emu, mix->epcm->voices[0]->number, in snd_emu10k1_send_volume_put()
1360 &mix->send_volume[0][0]); in snd_emu10k1_send_volume_put()
1363 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_send_volume_put()
1371 .name = "EMU10K1 PCM Send Volume",
1380 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in snd_emu10k1_attn_info()
1381 uinfo->count = 3; in snd_emu10k1_attn_info()
1382 uinfo->value.integer.min = 0; in snd_emu10k1_attn_info()
1383 uinfo->value.integer.max = 0xffff; in snd_emu10k1_attn_info()
1392 &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; in snd_emu10k1_attn_get()
1396 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_attn_get()
1398 ucontrol->value.integer.value[idx] = mix->attn[idx]; in snd_emu10k1_attn_get()
1399 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_attn_get()
1409 &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; in snd_emu10k1_attn_put()
1412 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_attn_put()
1414 val = ucontrol->value.integer.value[idx] & 0xffff; in snd_emu10k1_attn_put()
1415 if (mix->attn[idx] != val) { in snd_emu10k1_attn_put()
1416 mix->attn[idx] = val; in snd_emu10k1_attn_put()
1420 if (change && mix->epcm) { in snd_emu10k1_attn_put()
1421 if (mix->epcm->voices[0] && mix->epcm->voices[1]) { in snd_emu10k1_attn_put()
1422 snd_emu10k1_ptr_write(emu, VTFT_VOLUMETARGET, mix->epcm->voices[0]->number, mix->attn[1]); in snd_emu10k1_attn_put()
1423 snd_emu10k1_ptr_write(emu, VTFT_VOLUMETARGET, mix->epcm->voices[1]->number, mix->attn[2]); in snd_emu10k1_attn_put()
1424 } else if (mix->epcm->voices[0]) { in snd_emu10k1_attn_put()
1425 snd_emu10k1_ptr_write(emu, VTFT_VOLUMETARGET, mix->epcm->voices[0]->number, mix->attn[0]); in snd_emu10k1_attn_put()
1428 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_attn_put()
1436 .name = "EMU10K1 PCM Volume",
1448 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in snd_emu10k1_efx_send_routing_info()
1449 uinfo->count = emu->audigy ? 8 : 4; in snd_emu10k1_efx_send_routing_info()
1450 uinfo->value.integer.min = 0; in snd_emu10k1_efx_send_routing_info()
1451 uinfo->value.integer.max = emu->audigy ? 0x3f : 0x0f; in snd_emu10k1_efx_send_routing_info()
1461 &emu->efx_pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; in snd_emu10k1_efx_send_routing_get()
1463 int num_efx = emu->audigy ? 8 : 4; in snd_emu10k1_efx_send_routing_get()
1464 int mask = emu->audigy ? 0x3f : 0x0f; in snd_emu10k1_efx_send_routing_get()
1466 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_efx_send_routing_get()
1468 ucontrol->value.integer.value[idx] = in snd_emu10k1_efx_send_routing_get()
1469 mix->send_routing[0][idx] & mask; in snd_emu10k1_efx_send_routing_get()
1470 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_efx_send_routing_get()
1479 int ch = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); in snd_emu10k1_efx_send_routing_put()
1480 struct snd_emu10k1_pcm_mixer *mix = &emu->efx_pcm_mixer[ch]; in snd_emu10k1_efx_send_routing_put()
1482 int num_efx = emu->audigy ? 8 : 4; in snd_emu10k1_efx_send_routing_put()
1483 int mask = emu->audigy ? 0x3f : 0x0f; in snd_emu10k1_efx_send_routing_put()
1485 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_efx_send_routing_put()
1487 val = ucontrol->value.integer.value[idx] & mask; in snd_emu10k1_efx_send_routing_put()
1488 if (mix->send_routing[0][idx] != val) { in snd_emu10k1_efx_send_routing_put()
1489 mix->send_routing[0][idx] = val; in snd_emu10k1_efx_send_routing_put()
1494 if (change && mix->epcm) { in snd_emu10k1_efx_send_routing_put()
1495 if (mix->epcm->voices[ch]) { in snd_emu10k1_efx_send_routing_put()
1496 update_emu10k1_fxrt(emu, mix->epcm->voices[ch]->number, in snd_emu10k1_efx_send_routing_put()
1497 &mix->send_routing[0][0]); in snd_emu10k1_efx_send_routing_put()
1500 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_efx_send_routing_put()
1518 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in snd_emu10k1_efx_send_volume_info()
1519 uinfo->count = emu->audigy ? 8 : 4; in snd_emu10k1_efx_send_volume_info()
1520 uinfo->value.integer.min = 0; in snd_emu10k1_efx_send_volume_info()
1521 uinfo->value.integer.max = 255; in snd_emu10k1_efx_send_volume_info()
1531 &emu->efx_pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; in snd_emu10k1_efx_send_volume_get()
1533 int num_efx = emu->audigy ? 8 : 4; in snd_emu10k1_efx_send_volume_get()
1535 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_efx_send_volume_get()
1537 ucontrol->value.integer.value[idx] = mix->send_volume[0][idx]; in snd_emu10k1_efx_send_volume_get()
1538 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_efx_send_volume_get()
1547 int ch = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); in snd_emu10k1_efx_send_volume_put()
1548 struct snd_emu10k1_pcm_mixer *mix = &emu->efx_pcm_mixer[ch]; in snd_emu10k1_efx_send_volume_put()
1550 int num_efx = emu->audigy ? 8 : 4; in snd_emu10k1_efx_send_volume_put()
1552 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_efx_send_volume_put()
1554 val = ucontrol->value.integer.value[idx] & 255; in snd_emu10k1_efx_send_volume_put()
1555 if (mix->send_volume[0][idx] != val) { in snd_emu10k1_efx_send_volume_put()
1556 mix->send_volume[0][idx] = val; in snd_emu10k1_efx_send_volume_put()
1560 if (change && mix->epcm) { in snd_emu10k1_efx_send_volume_put()
1561 if (mix->epcm->voices[ch]) { in snd_emu10k1_efx_send_volume_put()
1562 update_emu10k1_send_volume(emu, mix->epcm->voices[ch]->number, in snd_emu10k1_efx_send_volume_put()
1563 &mix->send_volume[0][0]); in snd_emu10k1_efx_send_volume_put()
1566 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_efx_send_volume_put()
1575 .name = "Multichannel PCM Send Volume",
1584 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in snd_emu10k1_efx_attn_info()
1585 uinfo->count = 1; in snd_emu10k1_efx_attn_info()
1586 uinfo->value.integer.min = 0; in snd_emu10k1_efx_attn_info()
1587 uinfo->value.integer.max = 0xffff; in snd_emu10k1_efx_attn_info()
1596 &emu->efx_pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; in snd_emu10k1_efx_attn_get()
1599 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_efx_attn_get()
1600 ucontrol->value.integer.value[0] = mix->attn[0]; in snd_emu10k1_efx_attn_get()
1601 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_efx_attn_get()
1610 int ch = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); in snd_emu10k1_efx_attn_put()
1611 struct snd_emu10k1_pcm_mixer *mix = &emu->efx_pcm_mixer[ch]; in snd_emu10k1_efx_attn_put()
1614 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_efx_attn_put()
1615 val = ucontrol->value.integer.value[0] & 0xffff; in snd_emu10k1_efx_attn_put()
1616 if (mix->attn[0] != val) { in snd_emu10k1_efx_attn_put()
1617 mix->attn[0] = val; in snd_emu10k1_efx_attn_put()
1620 if (change && mix->epcm) { in snd_emu10k1_efx_attn_put()
1621 if (mix->epcm->voices[ch]) { in snd_emu10k1_efx_attn_put()
1622 snd_emu10k1_ptr_write(emu, VTFT_VOLUMETARGET, mix->epcm->voices[ch]->number, mix->attn[0]); in snd_emu10k1_efx_attn_put()
1625 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_efx_attn_put()
1633 .name = "Multichannel PCM Volume",
1647 if (emu->audigy) in snd_emu10k1_shared_spdif_get()
1648 ucontrol->value.integer.value[0] = inl(emu->port + A_IOCFG) & A_IOCFG_GPOUT0 ? 1 : 0; in snd_emu10k1_shared_spdif_get()
1650 ucontrol->value.integer.value[0] = inl(emu->port + HCFG) & HCFG_GPOUT0 ? 1 : 0; in snd_emu10k1_shared_spdif_get()
1651 if (emu->card_capabilities->invert_shared_spdif) in snd_emu10k1_shared_spdif_get()
1652 ucontrol->value.integer.value[0] = in snd_emu10k1_shared_spdif_get()
1653 !ucontrol->value.integer.value[0]; in snd_emu10k1_shared_spdif_get()
1666 sw = ucontrol->value.integer.value[0]; in snd_emu10k1_shared_spdif_put()
1667 if (emu->card_capabilities->invert_shared_spdif) in snd_emu10k1_shared_spdif_put()
1669 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_shared_spdif_put()
1670 if ( emu->card_capabilities->i2c_adc) { in snd_emu10k1_shared_spdif_put()
1672 } else if (emu->audigy) { in snd_emu10k1_shared_spdif_put()
1673 reg = inl(emu->port + A_IOCFG); in snd_emu10k1_shared_spdif_put()
1679 outl(reg | val, emu->port + A_IOCFG); in snd_emu10k1_shared_spdif_put()
1682 reg = inl(emu->port + HCFG); in snd_emu10k1_shared_spdif_put()
1688 outl(reg | val, emu->port + HCFG); in snd_emu10k1_shared_spdif_put()
1690 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_shared_spdif_put()
1712 /* workaround for too low volume on Audigy due to 16bit/24bit conversion */
1723 val = snd_ac97_read(emu->ac97, AC97_REC_GAIN); in snd_audigy_capture_boost_get()
1724 ucontrol->value.integer.value[0] = !!val; in snd_audigy_capture_boost_get()
1734 if (ucontrol->value.integer.value[0]) in snd_audigy_capture_boost_put()
1738 return snd_ac97_update(emu->ac97, AC97_REC_GAIN, val); in snd_audigy_capture_boost_put()
1755 struct snd_emu10k1 *emu = ac97->private_data; in snd_emu10k1_mixer_free_ac97()
1756 emu->ac97 = NULL; in snd_emu10k1_mixer_free_ac97()
1783 strcpy(kctl->id.name, dst); in rename_ctl()
1786 return -ENOENT; in rename_ctl()
1794 struct snd_card *card = emu->card; in snd_emu10k1_mixer()
1799 "Master Mono Playback Volume", in snd_emu10k1_mixer()
1800 "PCM Out Path & Mute", in snd_emu10k1_mixer()
1803 "Surround Playback Volume", in snd_emu10k1_mixer()
1805 "Center Playback Volume", in snd_emu10k1_mixer()
1807 "LFE Playback Volume", in snd_emu10k1_mixer()
1811 "Surround Digital Playback Volume", "Surround Playback Volume", in snd_emu10k1_mixer()
1812 "Center Digital Playback Volume", "Center Playback Volume", in snd_emu10k1_mixer()
1813 "LFE Digital Playback Volume", "LFE Playback Volume", in snd_emu10k1_mixer()
1821 "PCM Playback Volume", in snd_emu10k1_mixer()
1823 "Master Playback Volume", in snd_emu10k1_mixer()
1824 "PCM Out Path & Mute", in snd_emu10k1_mixer()
1829 "Capture Volume", in snd_emu10k1_mixer()
1832 "Headphone Playback Volume", in snd_emu10k1_mixer()
1833 "3D Control - Center", in snd_emu10k1_mixer()
1834 "3D Control - Depth", in snd_emu10k1_mixer()
1835 "3D Control - Switch", in snd_emu10k1_mixer()
1837 "Video Playback Volume", in snd_emu10k1_mixer()
1839 "Mic Playback Volume", in snd_emu10k1_mixer()
1845 "Wave Playback Volume", "PCM Playback Volume", in snd_emu10k1_mixer()
1846 /* "Wave Capture Volume", "PCM Capture Volume", */ in snd_emu10k1_mixer()
1847 "Wave Master Playback Volume", "Master Playback Volume", in snd_emu10k1_mixer()
1848 "AMic Playback Volume", "Mic Playback Volume", in snd_emu10k1_mixer()
1850 "Master Mono Playback Volume", "Phone Output Playback Volume", in snd_emu10k1_mixer()
1854 //"Analog Mix Capture Volume","OLD Analog Mix Capture Volume", in snd_emu10k1_mixer()
1855 "Line Capture Volume", "Analog Mix Capture Volume", in snd_emu10k1_mixer()
1856 "Wave Playback Volume", "OLD PCM Playback Volume", in snd_emu10k1_mixer()
1857 "Wave Master Playback Volume", "Master Playback Volume", in snd_emu10k1_mixer()
1858 "AMic Playback Volume", "Old Mic Playback Volume", in snd_emu10k1_mixer()
1859 "CD Capture Volume", "IEC958 Optical Capture Volume", in snd_emu10k1_mixer()
1865 "Mic Capture Volume", in snd_emu10k1_mixer()
1866 "Analog Mix Capture Volume", in snd_emu10k1_mixer()
1867 "Aux Capture Volume", in snd_emu10k1_mixer()
1868 "IEC958 Optical Capture Volume", in snd_emu10k1_mixer()
1875 "PCM Playback Volume", in snd_emu10k1_mixer()
1878 "Capture Volume", in snd_emu10k1_mixer()
1879 "Mic Capture Volume", in snd_emu10k1_mixer()
1881 "Headphone Playback Volume", in snd_emu10k1_mixer()
1882 "3D Control - Center", in snd_emu10k1_mixer()
1883 "3D Control - Depth", in snd_emu10k1_mixer()
1884 "3D Control - Switch", in snd_emu10k1_mixer()
1885 "Line2 Playback Volume", in snd_emu10k1_mixer()
1886 "Line2 Capture Volume", in snd_emu10k1_mixer()
1891 "Master Playback Volume", "Master Capture Volume", in snd_emu10k1_mixer()
1892 "Wave Master Playback Volume", "Master Playback Volume", in snd_emu10k1_mixer()
1894 "Beep Playback Volume", "Beep Capture Volume", in snd_emu10k1_mixer()
1896 "Phone Playback Volume", "Phone Capture Volume", in snd_emu10k1_mixer()
1898 "Mic Playback Volume", "Mic Capture Volume", in snd_emu10k1_mixer()
1900 "Line Playback Volume", "Line Capture Volume", in snd_emu10k1_mixer()
1902 "CD Playback Volume", "CD Capture Volume", in snd_emu10k1_mixer()
1904 "Aux Playback Volume", "Aux Capture Volume", in snd_emu10k1_mixer()
1906 "Video Playback Volume", "Video Capture Volume", in snd_emu10k1_mixer()
1908 "Master Mono Playback Volume", "Phone Output Playback Volume", in snd_emu10k1_mixer()
1912 if (emu->card_capabilities->ac97_chip) { in snd_emu10k1_mixer()
1920 if ((err = snd_ac97_bus(emu->card, 0, &ops, NULL, &pbus)) < 0) in snd_emu10k1_mixer()
1922 pbus->no_vra = 1; /* we don't need VRA */ in snd_emu10k1_mixer()
1928 if ((err = snd_ac97_mixer(pbus, &ac97, &emu->ac97)) < 0) { in snd_emu10k1_mixer()
1929 if (emu->card_capabilities->ac97_chip == 1) in snd_emu10k1_mixer()
1931 dev_info(emu->card->dev, in snd_emu10k1_mixer()
1933 dev_info(emu->card->dev, in snd_emu10k1_mixer()
1935 snd_device_free(emu->card, pbus); in snd_emu10k1_mixer()
1938 if (emu->audigy) { in snd_emu10k1_mixer()
1939 /* set master volume to 0 dB */ in snd_emu10k1_mixer()
1940 snd_ac97_write_cache(emu->ac97, AC97_MASTER, 0x0000); in snd_emu10k1_mixer()
1942 snd_ac97_write_cache(emu->ac97, AC97_REC_SEL, 0x0000); in snd_emu10k1_mixer()
1944 snd_ac97_update_bits(emu->ac97, AC97_GENERAL_PURPOSE, in snd_emu10k1_mixer()
1946 if (emu->card_capabilities->adc_1361t) in snd_emu10k1_mixer()
1953 * James Courtier-Dutton <James@superbug.demon.co.uk> in snd_emu10k1_mixer()
1956 if (emu->ac97->id == AC97_ID_STAC9758) { in snd_emu10k1_mixer()
1957 emu->rear_ac97 = 1; in snd_emu10k1_mixer()
1959 snd_ac97_write_cache(emu->ac97, AC97_HEADPHONE, 0x0202); in snd_emu10k1_mixer()
1960 remove_ctl(card,"Front Playback Volume"); in snd_emu10k1_mixer()
1964 snd_ac97_write_cache(emu->ac97, AC97_SURROUND_MASTER, 0x0202); in snd_emu10k1_mixer()
1965 snd_ac97_write_cache(emu->ac97, AC97_CENTER_LFE_MASTER, 0x0202); in snd_emu10k1_mixer()
1970 } else if (emu->card_capabilities->i2c_adc) { in snd_emu10k1_mixer()
1976 if (emu->card_capabilities->ecard) in snd_emu10k1_mixer()
1977 strcpy(emu->card->mixername, "EMU APS"); in snd_emu10k1_mixer()
1978 else if (emu->audigy) in snd_emu10k1_mixer()
1979 strcpy(emu->card->mixername, "SB Audigy"); in snd_emu10k1_mixer()
1981 strcpy(emu->card->mixername, "Emu10k1"); in snd_emu10k1_mixer()
1984 if (emu->audigy) in snd_emu10k1_mixer()
1985 if (emu->card_capabilities->adc_1361t) in snd_emu10k1_mixer()
1987 else if (emu->card_capabilities->i2c_adc) in snd_emu10k1_mixer()
1996 if (emu->card_capabilities->subsystem == 0x80401102) { /* SB Live! Platinum CT4760P */ in snd_emu10k1_mixer()
1997 remove_ctl(card, "Center Playback Volume"); in snd_emu10k1_mixer()
1998 remove_ctl(card, "LFE Playback Volume"); in snd_emu10k1_mixer()
1999 remove_ctl(card, "Wave Center Playback Volume"); in snd_emu10k1_mixer()
2000 remove_ctl(card, "Wave LFE Playback Volume"); in snd_emu10k1_mixer()
2002 if (emu->card_capabilities->subsystem == 0x20071102) { /* Audigy 4 Pro */ in snd_emu10k1_mixer()
2003 rename_ctl(card, "Line2 Capture Volume", "Line1/Mic Capture Volume"); in snd_emu10k1_mixer()
2004 rename_ctl(card, "Analog Mix Capture Volume", "Line2 Capture Volume"); in snd_emu10k1_mixer()
2005 rename_ctl(card, "Aux2 Capture Volume", "Line3 Capture Volume"); in snd_emu10k1_mixer()
2006 rename_ctl(card, "Mic Capture Volume", "Unknown1 Capture Volume"); in snd_emu10k1_mixer()
2008 if ((kctl = emu->ctl_send_routing = snd_ctl_new1(&snd_emu10k1_send_routing_control, emu)) == NULL) in snd_emu10k1_mixer()
2009 return -ENOMEM; in snd_emu10k1_mixer()
2010 kctl->id.device = pcm_device; in snd_emu10k1_mixer()
2013 if ((kctl = emu->ctl_send_volume = snd_ctl_new1(&snd_emu10k1_send_volume_control, emu)) == NULL) in snd_emu10k1_mixer()
2014 return -ENOMEM; in snd_emu10k1_mixer()
2015 kctl->id.device = pcm_device; in snd_emu10k1_mixer()
2018 if ((kctl = emu->ctl_attn = snd_ctl_new1(&snd_emu10k1_attn_control, emu)) == NULL) in snd_emu10k1_mixer()
2019 return -ENOMEM; in snd_emu10k1_mixer()
2020 kctl->id.device = pcm_device; in snd_emu10k1_mixer()
2024 …if ((kctl = emu->ctl_efx_send_routing = snd_ctl_new1(&snd_emu10k1_efx_send_routing_control, emu)) … in snd_emu10k1_mixer()
2025 return -ENOMEM; in snd_emu10k1_mixer()
2026 kctl->id.device = multi_device; in snd_emu10k1_mixer()
2030 …if ((kctl = emu->ctl_efx_send_volume = snd_ctl_new1(&snd_emu10k1_efx_send_volume_control, emu)) ==… in snd_emu10k1_mixer()
2031 return -ENOMEM; in snd_emu10k1_mixer()
2032 kctl->id.device = multi_device; in snd_emu10k1_mixer()
2036 if ((kctl = emu->ctl_efx_attn = snd_ctl_new1(&snd_emu10k1_efx_attn_control, emu)) == NULL) in snd_emu10k1_mixer()
2037 return -ENOMEM; in snd_emu10k1_mixer()
2038 kctl->id.device = multi_device; in snd_emu10k1_mixer()
2042 /* initialize the routing and volume table for each pcm playback stream */ in snd_emu10k1_mixer()
2047 mix = &emu->pcm_mixer[pcm]; in snd_emu10k1_mixer()
2048 mix->epcm = NULL; in snd_emu10k1_mixer()
2051 mix->send_routing[0][v] = in snd_emu10k1_mixer()
2052 mix->send_routing[1][v] = in snd_emu10k1_mixer()
2053 mix->send_routing[2][v] = v; in snd_emu10k1_mixer()
2055 memset(&mix->send_volume, 0, sizeof(mix->send_volume)); in snd_emu10k1_mixer()
2056 mix->send_volume[0][0] = mix->send_volume[0][1] = in snd_emu10k1_mixer()
2057 mix->send_volume[1][0] = mix->send_volume[2][1] = 255; in snd_emu10k1_mixer()
2059 mix->attn[0] = mix->attn[1] = mix->attn[2] = 0xffff; in snd_emu10k1_mixer()
2062 /* initialize the routing and volume table for the multichannel playback stream */ in snd_emu10k1_mixer()
2067 mix = &emu->efx_pcm_mixer[pcm]; in snd_emu10k1_mixer()
2068 mix->epcm = NULL; in snd_emu10k1_mixer()
2070 mix->send_routing[0][0] = pcm; in snd_emu10k1_mixer()
2071 mix->send_routing[0][1] = (pcm == 0) ? 1 : 0; in snd_emu10k1_mixer()
2073 mix->send_routing[0][2+v] = 13+v; in snd_emu10k1_mixer()
2074 if (emu->audigy) in snd_emu10k1_mixer()
2076 mix->send_routing[0][4+v] = 60+v; in snd_emu10k1_mixer()
2078 memset(&mix->send_volume, 0, sizeof(mix->send_volume)); in snd_emu10k1_mixer()
2079 mix->send_volume[0][0] = 255; in snd_emu10k1_mixer()
2081 mix->attn[0] = 0xffff; in snd_emu10k1_mixer()
2084 if (! emu->card_capabilities->ecard) { /* FIXME: APS has these controls? */ in snd_emu10k1_mixer()
2087 return -ENOMEM; in snd_emu10k1_mixer()
2088 if (!emu->audigy) in snd_emu10k1_mixer()
2089 kctl->id.device = emu->pcm_efx->device; in snd_emu10k1_mixer()
2093 return -ENOMEM; in snd_emu10k1_mixer()
2094 if (!emu->audigy) in snd_emu10k1_mixer()
2095 kctl->id.device = emu->pcm_efx->device; in snd_emu10k1_mixer()
2100 if (emu->card_capabilities->emu_model) { in snd_emu10k1_mixer()
2102 } else if (emu->audigy) { in snd_emu10k1_mixer()
2104 return -ENOMEM; in snd_emu10k1_mixer()
2109 return -ENOMEM; in snd_emu10k1_mixer()
2113 } else if (! emu->card_capabilities->ecard) { in snd_emu10k1_mixer()
2116 return -ENOMEM; in snd_emu10k1_mixer()
2120 if (emu->card_capabilities->ca0151_chip) { /* P16V */ in snd_emu10k1_mixer()
2125 if (emu->card_capabilities->emu_model == EMU_MODEL_EMU1616) { in snd_emu10k1_mixer()
2143 for (i = 0; i < ARRAY_SIZE(snd_emu1010_adc_pads) - 2; i++) { in snd_emu10k1_mixer()
2149 for (i = 0; i < ARRAY_SIZE(snd_emu1010_dac_pads) - 2; i++) { in snd_emu10k1_mixer()
2168 } else if (emu->card_capabilities->emu_model) { in snd_emu10k1_mixer()
2169 /* all other e-mu cards for now */ in snd_emu10k1_mixer()
2212 if ( emu->card_capabilities->i2c_adc) { in snd_emu10k1_mixer()
2226 if (emu->card_capabilities->ac97_chip && emu->audigy) { in snd_emu10k1_mixer()