Lines Matching refs:chip
33 static void vx_write_codec_reg(struct vx_core *chip, int codec, unsigned int data) in vx_write_codec_reg() argument
35 if (snd_BUG_ON(!chip->ops->write_codec)) in vx_write_codec_reg()
38 if (chip->chip_status & VX_STAT_IS_STALE) in vx_write_codec_reg()
41 mutex_lock(&chip->lock); in vx_write_codec_reg()
42 chip->ops->write_codec(chip, codec, data); in vx_write_codec_reg()
43 mutex_unlock(&chip->lock); in vx_write_codec_reg()
87 static void vx_set_codec_reg(struct vx_core *chip, int codec, int reg, int val) in vx_set_codec_reg() argument
94 vx_write_codec_reg(chip, codec, data.l); in vx_set_codec_reg()
104 static void vx_set_analog_output_level(struct vx_core *chip, int codec, int left, int right) in vx_set_analog_output_level() argument
106 left = chip->hw->output_level_max - left; in vx_set_analog_output_level()
107 right = chip->hw->output_level_max - right; in vx_set_analog_output_level()
109 if (chip->ops->akm_write) { in vx_set_analog_output_level()
110 chip->ops->akm_write(chip, XX_CODEC_LEVEL_LEFT_REGISTER, left); in vx_set_analog_output_level()
111 chip->ops->akm_write(chip, XX_CODEC_LEVEL_RIGHT_REGISTER, right); in vx_set_analog_output_level()
114 vx_set_codec_reg(chip, codec, XX_CODEC_LEVEL_LEFT_REGISTER, left); in vx_set_analog_output_level()
115 vx_set_codec_reg(chip, codec, XX_CODEC_LEVEL_RIGHT_REGISTER, right); in vx_set_analog_output_level()
128 void vx_toggle_dac_mute(struct vx_core *chip, int mute) in vx_toggle_dac_mute() argument
131 for (i = 0; i < chip->hw->num_codecs; i++) { in vx_toggle_dac_mute()
132 if (chip->ops->akm_write) in vx_toggle_dac_mute()
133 chip->ops->akm_write(chip, XX_CODEC_DAC_CONTROL_REGISTER, mute); /* XXX */ in vx_toggle_dac_mute()
135 vx_set_codec_reg(chip, i, XX_CODEC_DAC_CONTROL_REGISTER, in vx_toggle_dac_mute()
143 void vx_reset_codec(struct vx_core *chip, int cold_reset) in vx_reset_codec() argument
146 int port = chip->type >= VX_TYPE_VXPOCKET ? 0x75 : 0x65; in vx_reset_codec()
148 chip->ops->reset_codec(chip); in vx_reset_codec()
151 if (! chip->ops->akm_write) { in vx_reset_codec()
153 for (i = 0; i < chip->hw->num_codecs; i++) { in vx_reset_codec()
155 vx_set_codec_reg(chip, i, XX_CODEC_DAC_CONTROL_REGISTER, DAC_ATTEN_MAX); in vx_reset_codec()
157 vx_set_codec_reg(chip, i, XX_CODEC_ADC_CONTROL_REGISTER, 0x00); in vx_reset_codec()
159 vx_set_codec_reg(chip, i, XX_CODEC_PORT_MODE_REGISTER, port); in vx_reset_codec()
161 vx_set_codec_reg(chip, i, XX_CODEC_CLOCK_CONTROL_REGISTER, 0x00); in vx_reset_codec()
166 for (i = 0; i < chip->hw->num_codecs; i++) { in vx_reset_codec()
167 chip->output_level[i][0] = 0; in vx_reset_codec()
168 chip->output_level[i][1] = 0; in vx_reset_codec()
169 vx_set_analog_output_level(chip, i, 0, 0); in vx_reset_codec()
177 static void vx_change_audio_source(struct vx_core *chip, int src) in vx_change_audio_source() argument
179 if (chip->chip_status & VX_STAT_IS_STALE) in vx_change_audio_source()
182 mutex_lock(&chip->lock); in vx_change_audio_source()
183 chip->ops->change_audio_source(chip, src); in vx_change_audio_source()
184 mutex_unlock(&chip->lock); in vx_change_audio_source()
192 int vx_sync_audio_source(struct vx_core *chip) in vx_sync_audio_source() argument
194 if (chip->audio_source_target == chip->audio_source || in vx_sync_audio_source()
195 chip->pcm_running) in vx_sync_audio_source()
197 vx_change_audio_source(chip, chip->audio_source_target); in vx_sync_audio_source()
198 chip->audio_source = chip->audio_source_target; in vx_sync_audio_source()
217 static int vx_adjust_audio_level(struct vx_core *chip, int audio, int capture, in vx_adjust_audio_level() argument
222 if (chip->chip_status & VX_STAT_IS_STALE) in vx_adjust_audio_level()
251 return vx_send_msg(chip, &rmh); in vx_adjust_audio_level()
256 static int vx_read_audio_level(struct vx_core *chip, int audio, int capture,
268 err = vx_send_msg(chip, &rmh);
283 int vx_set_monitor_level(struct vx_core *chip, int audio, int level, int active) in vx_set_monitor_level() argument
292 chip->audio_monitor[audio] = level; in vx_set_monitor_level()
293 chip->audio_monitor_active[audio] = active; in vx_set_monitor_level()
294 return vx_adjust_audio_level(chip, audio, 0, &info); /* playback only */ in vx_set_monitor_level()
301 static int vx_set_audio_switch(struct vx_core *chip, int audio, int active) in vx_set_audio_switch() argument
308 chip->audio_active[audio] = active; in vx_set_audio_switch()
309 return vx_adjust_audio_level(chip, audio, 0, &info); /* playback only */ in vx_set_audio_switch()
315 static int vx_set_audio_gain(struct vx_core *chip, int audio, int capture, int level) in vx_set_audio_gain() argument
322 chip->audio_gain[capture][audio] = level; in vx_set_audio_gain()
323 return vx_adjust_audio_level(chip, audio, capture, &info); in vx_set_audio_gain()
329 static void vx_reset_audio_levels(struct vx_core *chip) in vx_reset_audio_levels() argument
334 memset(chip->audio_gain, 0, sizeof(chip->audio_gain)); in vx_reset_audio_levels()
335 memset(chip->audio_active, 0, sizeof(chip->audio_active)); in vx_reset_audio_levels()
336 memset(chip->audio_monitor, 0, sizeof(chip->audio_monitor)); in vx_reset_audio_levels()
337 memset(chip->audio_monitor_active, 0, sizeof(chip->audio_monitor_active)); in vx_reset_audio_levels()
340 for (i = 0; i < chip->hw->num_ins * 2; i++) { in vx_reset_audio_levels()
349 vx_adjust_audio_level(chip, i, c, &info); in vx_reset_audio_levels()
350 chip->audio_gain[c][i] = CVAL_0DB; in vx_reset_audio_levels()
351 chip->audio_monitor[i] = CVAL_0DB; in vx_reset_audio_levels()
375 static int vx_get_audio_vu_meter(struct vx_core *chip, int audio, int capture, struct vx_vu_meter *… in vx_get_audio_vu_meter() argument
380 if (chip->chip_status & VX_STAT_IS_STALE) in vx_get_audio_vu_meter()
392 err = vx_send_msg(chip, &rmh); in vx_get_audio_vu_meter()
415 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_output_level_info() local
419 uinfo->value.integer.max = chip->hw->output_level_max; in vx_output_level_info()
425 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_output_level_get() local
427 mutex_lock(&chip->mixer_mutex); in vx_output_level_get()
428 ucontrol->value.integer.value[0] = chip->output_level[codec][0]; in vx_output_level_get()
429 ucontrol->value.integer.value[1] = chip->output_level[codec][1]; in vx_output_level_get()
430 mutex_unlock(&chip->mixer_mutex); in vx_output_level_get()
436 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_output_level_put() local
440 vmax = chip->hw->output_level_max; in vx_output_level_put()
445 mutex_lock(&chip->mixer_mutex); in vx_output_level_put()
446 if (val[0] != chip->output_level[codec][0] || in vx_output_level_put()
447 val[1] != chip->output_level[codec][1]) { in vx_output_level_put()
448 vx_set_analog_output_level(chip, codec, val[0], val[1]); in vx_output_level_put()
449 chip->output_level[codec][0] = val[0]; in vx_output_level_put()
450 chip->output_level[codec][1] = val[1]; in vx_output_level_put()
451 mutex_unlock(&chip->mixer_mutex); in vx_output_level_put()
454 mutex_unlock(&chip->mixer_mutex); in vx_output_level_put()
480 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_audio_src_info() local
482 if (chip->type >= VX_TYPE_VXPOCKET) in vx_audio_src_info()
490 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_audio_src_get() local
491 ucontrol->value.enumerated.item[0] = chip->audio_source_target; in vx_audio_src_get()
497 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_audio_src_put() local
499 if (chip->type >= VX_TYPE_VXPOCKET) { in vx_audio_src_put()
506 mutex_lock(&chip->mixer_mutex); in vx_audio_src_put()
507 if (chip->audio_source_target != ucontrol->value.enumerated.item[0]) { in vx_audio_src_put()
508 chip->audio_source_target = ucontrol->value.enumerated.item[0]; in vx_audio_src_put()
509 vx_sync_audio_source(chip); in vx_audio_src_put()
510 mutex_unlock(&chip->mixer_mutex); in vx_audio_src_put()
513 mutex_unlock(&chip->mixer_mutex); in vx_audio_src_put()
539 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_clock_mode_get() local
540 ucontrol->value.enumerated.item[0] = chip->clock_mode; in vx_clock_mode_get()
546 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_clock_mode_put() local
550 mutex_lock(&chip->mixer_mutex); in vx_clock_mode_put()
551 if (chip->clock_mode != ucontrol->value.enumerated.item[0]) { in vx_clock_mode_put()
552 chip->clock_mode = ucontrol->value.enumerated.item[0]; in vx_clock_mode_put()
553 vx_set_clock(chip, chip->freq); in vx_clock_mode_put()
554 mutex_unlock(&chip->mixer_mutex); in vx_clock_mode_put()
557 mutex_unlock(&chip->mixer_mutex); in vx_clock_mode_put()
583 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_audio_gain_get() local
587 mutex_lock(&chip->mixer_mutex); in vx_audio_gain_get()
588 ucontrol->value.integer.value[0] = chip->audio_gain[capture][audio]; in vx_audio_gain_get()
589 ucontrol->value.integer.value[1] = chip->audio_gain[capture][audio+1]; in vx_audio_gain_get()
590 mutex_unlock(&chip->mixer_mutex); in vx_audio_gain_get()
596 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_audio_gain_put() local
605 mutex_lock(&chip->mixer_mutex); in vx_audio_gain_put()
606 if (val[0] != chip->audio_gain[capture][audio] || in vx_audio_gain_put()
607 val[1] != chip->audio_gain[capture][audio+1]) { in vx_audio_gain_put()
608 vx_set_audio_gain(chip, audio, capture, val[0]); in vx_audio_gain_put()
609 vx_set_audio_gain(chip, audio+1, capture, val[1]); in vx_audio_gain_put()
610 mutex_unlock(&chip->mixer_mutex); in vx_audio_gain_put()
613 mutex_unlock(&chip->mixer_mutex); in vx_audio_gain_put()
619 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_audio_monitor_get() local
622 mutex_lock(&chip->mixer_mutex); in vx_audio_monitor_get()
623 ucontrol->value.integer.value[0] = chip->audio_monitor[audio]; in vx_audio_monitor_get()
624 ucontrol->value.integer.value[1] = chip->audio_monitor[audio+1]; in vx_audio_monitor_get()
625 mutex_unlock(&chip->mixer_mutex); in vx_audio_monitor_get()
631 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_audio_monitor_put() local
640 mutex_lock(&chip->mixer_mutex); in vx_audio_monitor_put()
641 if (val[0] != chip->audio_monitor[audio] || in vx_audio_monitor_put()
642 val[1] != chip->audio_monitor[audio+1]) { in vx_audio_monitor_put()
643 vx_set_monitor_level(chip, audio, val[0], in vx_audio_monitor_put()
644 chip->audio_monitor_active[audio]); in vx_audio_monitor_put()
645 vx_set_monitor_level(chip, audio+1, val[1], in vx_audio_monitor_put()
646 chip->audio_monitor_active[audio+1]); in vx_audio_monitor_put()
647 mutex_unlock(&chip->mixer_mutex); in vx_audio_monitor_put()
650 mutex_unlock(&chip->mixer_mutex); in vx_audio_monitor_put()
658 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_audio_sw_get() local
661 mutex_lock(&chip->mixer_mutex); in vx_audio_sw_get()
662 ucontrol->value.integer.value[0] = chip->audio_active[audio]; in vx_audio_sw_get()
663 ucontrol->value.integer.value[1] = chip->audio_active[audio+1]; in vx_audio_sw_get()
664 mutex_unlock(&chip->mixer_mutex); in vx_audio_sw_get()
670 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_audio_sw_put() local
673 mutex_lock(&chip->mixer_mutex); in vx_audio_sw_put()
674 if (ucontrol->value.integer.value[0] != chip->audio_active[audio] || in vx_audio_sw_put()
675 ucontrol->value.integer.value[1] != chip->audio_active[audio+1]) { in vx_audio_sw_put()
676 vx_set_audio_switch(chip, audio, in vx_audio_sw_put()
678 vx_set_audio_switch(chip, audio+1, in vx_audio_sw_put()
680 mutex_unlock(&chip->mixer_mutex); in vx_audio_sw_put()
683 mutex_unlock(&chip->mixer_mutex); in vx_audio_sw_put()
689 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_monitor_sw_get() local
692 mutex_lock(&chip->mixer_mutex); in vx_monitor_sw_get()
693 ucontrol->value.integer.value[0] = chip->audio_monitor_active[audio]; in vx_monitor_sw_get()
694 ucontrol->value.integer.value[1] = chip->audio_monitor_active[audio+1]; in vx_monitor_sw_get()
695 mutex_unlock(&chip->mixer_mutex); in vx_monitor_sw_get()
701 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_monitor_sw_put() local
704 mutex_lock(&chip->mixer_mutex); in vx_monitor_sw_put()
705 if (ucontrol->value.integer.value[0] != chip->audio_monitor_active[audio] || in vx_monitor_sw_put()
706 ucontrol->value.integer.value[1] != chip->audio_monitor_active[audio+1]) { in vx_monitor_sw_put()
707 vx_set_monitor_level(chip, audio, chip->audio_monitor[audio], in vx_monitor_sw_put()
709 vx_set_monitor_level(chip, audio+1, chip->audio_monitor[audio+1], in vx_monitor_sw_put()
711 mutex_unlock(&chip->mixer_mutex); in vx_monitor_sw_put()
714 mutex_unlock(&chip->mixer_mutex); in vx_monitor_sw_put()
768 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_iec958_get() local
770 mutex_lock(&chip->mixer_mutex); in vx_iec958_get()
771 ucontrol->value.iec958.status[0] = (chip->uer_bits >> 0) & 0xff; in vx_iec958_get()
772 ucontrol->value.iec958.status[1] = (chip->uer_bits >> 8) & 0xff; in vx_iec958_get()
773 ucontrol->value.iec958.status[2] = (chip->uer_bits >> 16) & 0xff; in vx_iec958_get()
774 ucontrol->value.iec958.status[3] = (chip->uer_bits >> 24) & 0xff; in vx_iec958_get()
775 mutex_unlock(&chip->mixer_mutex); in vx_iec958_get()
790 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_iec958_put() local
797 mutex_lock(&chip->mixer_mutex); in vx_iec958_put()
798 if (chip->uer_bits != val) { in vx_iec958_put()
799 chip->uer_bits = val; in vx_iec958_put()
800 vx_set_iec958_status(chip, val); in vx_iec958_put()
801 mutex_unlock(&chip->mixer_mutex); in vx_iec958_put()
804 mutex_unlock(&chip->mixer_mutex); in vx_iec958_put()
843 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_vu_meter_get() local
848 vx_get_audio_vu_meter(chip, audio, capture, meter); in vx_vu_meter_get()
856 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_peak_meter_get() local
861 vx_get_audio_vu_meter(chip, audio, capture, meter); in vx_peak_meter_get()
871 struct vx_core *chip = snd_kcontrol_chip(kcontrol); in vx_saturation_get() local
875 vx_get_audio_vu_meter(chip, audio, 1, meter); /* capture only */ in vx_saturation_get()
911 int snd_vx_mixer_new(struct vx_core *chip) in snd_vx_mixer_new() argument
916 struct snd_card *card = chip->card; in snd_vx_mixer_new()
922 for (i = 0; i < chip->hw->num_outs; i++) { in snd_vx_mixer_new()
925 temp.tlv.p = chip->hw->output_level_db_scale; in snd_vx_mixer_new()
926 if ((err = snd_ctl_add(card, snd_ctl_new1(&temp, chip))) < 0) in snd_vx_mixer_new()
931 for (i = 0; i < chip->hw->num_outs; i++) { in snd_vx_mixer_new()
937 if ((err = snd_ctl_add(card, snd_ctl_new1(&temp, chip))) < 0) in snd_vx_mixer_new()
942 if ((err = snd_ctl_add(card, snd_ctl_new1(&temp, chip))) < 0) in snd_vx_mixer_new()
947 if ((err = snd_ctl_add(card, snd_ctl_new1(&temp, chip))) < 0) in snd_vx_mixer_new()
952 if ((err = snd_ctl_add(card, snd_ctl_new1(&temp, chip))) < 0) in snd_vx_mixer_new()
955 for (i = 0; i < chip->hw->num_outs; i++) { in snd_vx_mixer_new()
960 if ((err = snd_ctl_add(card, snd_ctl_new1(&temp, chip))) < 0) in snd_vx_mixer_new()
965 if ((err = snd_ctl_add(card, snd_ctl_new1(&vx_control_audio_src, chip))) < 0) in snd_vx_mixer_new()
968 if ((err = snd_ctl_add(card, snd_ctl_new1(&vx_control_clock_mode, chip))) < 0) in snd_vx_mixer_new()
971 if ((err = snd_ctl_add(card, snd_ctl_new1(&vx_control_iec958_mask, chip))) < 0) in snd_vx_mixer_new()
973 if ((err = snd_ctl_add(card, snd_ctl_new1(&vx_control_iec958, chip))) < 0) in snd_vx_mixer_new()
978 for (i = 0; i < chip->hw->num_ins; i++) { in snd_vx_mixer_new()
984 if ((err = snd_ctl_add(card, snd_ctl_new1(&temp, chip))) < 0) in snd_vx_mixer_new()
992 if ((err = snd_ctl_add(card, snd_ctl_new1(&temp, chip))) < 0) in snd_vx_mixer_new()
999 if ((err = snd_ctl_add(card, snd_ctl_new1(&temp, chip))) < 0) in snd_vx_mixer_new()
1003 vx_reset_audio_levels(chip); in snd_vx_mixer_new()