Lines Matching refs:mixer

8  * This file contains the implementation of alsa mixer device functions.
219 ct_mixer_recording_select(struct ct_mixer *mixer, enum CT_AMIXER_CTL type);
222 ct_mixer_recording_unselect(struct ct_mixer *mixer, enum CT_AMIXER_CTL type);
267 get_switch_state(struct ct_mixer *mixer, enum CTALSA_MIXER_CTL type)
269 return (mixer->switch_state & (0x1 << (type - SWH_MIXER_START)))
274 set_switch_state(struct ct_mixer *mixer,
278 mixer->switch_state |= (0x1 << (type - SWH_MIXER_START));
280 mixer->switch_state &= ~(0x1 << (type - SWH_MIXER_START));
350 amixer = ((struct ct_mixer *)atc->mixer)->
367 struct ct_mixer *mixer = atc->mixer;
379 amixer = mixer->amixers[type*CHN_NUM+i];
388 amixer = mixer->
487 set_switch_state(atc->mixer, MIXER_MIC_C_S, 0);
492 set_switch_state(atc->mixer, MIXER_LINEIN_C_S, 0);
501 struct ct_mixer *mixer = atc->mixer;
506 get_switch_state(mixer, MIXER_SPDIFO_P_S));
512 if (get_switch_state(mixer, MIXER_LINEIN_C_S))
514 else if (get_switch_state(mixer, MIXER_MIC_C_S))
525 struct ct_mixer *mixer = atc->mixer;
528 /* Do changes in mixer. */
531 ct_mixer_recording_select(mixer,
534 ct_mixer_recording_unselect(mixer,
538 /* Do changes out of mixer. */
581 struct ct_mixer *mixer =
582 ((struct ct_atc *)snd_kcontrol_chip(kcontrol))->mixer;
585 ucontrol->value.integer.value[0] = get_switch_state(mixer, type);
593 struct ct_mixer *mixer = atc->mixer;
598 if (get_switch_state(mixer, type) == state)
601 set_switch_state(mixer, type, state);
706 ct_mixer_kcontrol_new(struct ct_mixer *mixer, struct snd_kcontrol_new *new)
711 kctl = snd_ctl_new1(new, mixer->atc);
718 err = snd_ctl_add(mixer->atc->card, kctl);
734 static int ct_mixer_kcontrols_create(struct ct_mixer *mixer)
737 struct ct_atc *atc = mixer->atc;
746 err = ct_mixer_kcontrol_new(mixer, &vol_ctl);
758 err = ct_mixer_kcontrol_new(mixer, &swh_ctl);
764 err = ct_mixer_kcontrol_new(mixer, &iec958_mask_ctl);
768 err = ct_mixer_kcontrol_new(mixer, &iec958_default_ctl);
772 err = ct_mixer_kcontrol_new(mixer, &iec958_ctl);
777 err = ct_mixer_kcontrol_new(mixer, &output_ctl);
783 err = ct_mixer_kcontrol_new(mixer, &mic_source_ctl);
788 set_switch_state(mixer, MIXER_WAVEF_P_S, 1);
790 set_switch_state(mixer, MIXER_WAVES_P_S, 0);
792 set_switch_state(mixer, MIXER_WAVEC_P_S, 0);
794 set_switch_state(mixer, MIXER_WAVER_P_S, 0);
796 set_switch_state(mixer, MIXER_SPDIFO_P_S, 0);
801 set_switch_state(mixer, MIXER_PCM_C_S, 0);
802 set_switch_state(mixer, MIXER_LINEIN_C_S, 0);
803 set_switch_state(mixer, MIXER_SPDIFI_C_S, 0);
809 ct_mixer_recording_select(struct ct_mixer *mixer, enum CT_AMIXER_CTL type)
816 amix_d = mixer->amixers[type*CHN_NUM+i];
817 sum_c = mixer->sums[SUM_IN_F_C*CHN_NUM+i];
824 ct_mixer_recording_unselect(struct ct_mixer *mixer, enum CT_AMIXER_CTL type)
830 amix_d = mixer->amixers[type*CHN_NUM+i];
836 static int ct_mixer_get_resources(struct ct_mixer *mixer)
847 /* Allocate sum resources for mixer obj */
848 sum_mgr = (struct sum_mgr *)mixer->atc->rsc_mgrs[SUM];
849 sum_desc.msr = mixer->atc->msr;
853 dev_err(mixer->atc->card->dev,
857 mixer->sums[i] = sum;
862 /* Allocate amixer resources for mixer obj */
863 amixer_mgr = (struct amixer_mgr *)mixer->atc->rsc_mgrs[AMIXER];
864 am_desc.msr = mixer->atc->msr;
868 dev_err(mixer->atc->card->dev,
869 "Failed to get amixer resources for mixer obj!\n");
872 mixer->amixers[i] = amixer;
881 if (NULL != mixer->amixers[i]) {
882 amixer = mixer->amixers[i];
884 mixer->amixers[i] = NULL;
889 if (NULL != mixer->sums[i]) {
890 sum_mgr->put_sum(sum_mgr, (struct sum *)mixer->sums[i]);
891 mixer->sums[i] = NULL;
900 struct ct_mixer *mixer;
904 /* Allocate mem for mixer obj */
905 mixer = kzalloc(sizeof(*mixer), GFP_KERNEL);
906 if (!mixer)
909 mixer->amixers = kcalloc(NUM_CT_AMIXERS * CHN_NUM, sizeof(void *),
911 if (!mixer->amixers) {
915 mixer->sums = kcalloc(NUM_CT_SUMS * CHN_NUM, sizeof(void *),
917 if (!mixer->sums) {
922 *rmixer = mixer;
926 kfree(mixer->amixers);
928 kfree(mixer);
932 static int ct_mixer_topology_build(struct ct_mixer *mixer)
941 /* Set up Master mixer */
944 amix_d = mixer->amixers[i*CHN_NUM];
945 sum = mixer->sums[k*CHN_NUM];
947 amix_d = mixer->amixers[i*CHN_NUM+1];
948 sum = mixer->sums[k*CHN_NUM+1];
952 /* Set up Wave-out mixer */
955 amix_d = mixer->amixers[i*CHN_NUM];
956 amix_s = mixer->amixers[j*CHN_NUM];
958 amix_d = mixer->amixers[i*CHN_NUM+1];
959 amix_s = mixer->amixers[j*CHN_NUM+1];
963 /* Set up S/PDIF-out mixer */
964 amix_d = mixer->amixers[AMIXER_SPDIFO*CHN_NUM];
965 amix_s = mixer->amixers[AMIXER_MASTER_F*CHN_NUM];
967 amix_d = mixer->amixers[AMIXER_SPDIFO*CHN_NUM+1];
968 amix_s = mixer->amixers[AMIXER_MASTER_F*CHN_NUM+1];
971 /* Set up PCM-in mixer */
973 amix_d = mixer->amixers[i*CHN_NUM];
974 sum = mixer->sums[k*CHN_NUM];
976 amix_d = mixer->amixers[i*CHN_NUM+1];
977 sum = mixer->sums[k*CHN_NUM+1];
981 /* Set up Line-in mixer */
982 amix_d = mixer->amixers[AMIXER_LINEIN*CHN_NUM];
983 sum = mixer->sums[SUM_IN_F*CHN_NUM];
985 amix_d = mixer->amixers[AMIXER_LINEIN*CHN_NUM+1];
986 sum = mixer->sums[SUM_IN_F*CHN_NUM+1];
989 /* Set up Mic-in mixer */
990 amix_d = mixer->amixers[AMIXER_MIC*CHN_NUM];
991 sum = mixer->sums[SUM_IN_F*CHN_NUM];
993 amix_d = mixer->amixers[AMIXER_MIC*CHN_NUM+1];
994 sum = mixer->sums[SUM_IN_F*CHN_NUM+1];
997 /* Set up S/PDIF-in mixer */
998 amix_d = mixer->amixers[AMIXER_SPDIFI*CHN_NUM];
999 sum = mixer->sums[SUM_IN_F*CHN_NUM];
1001 amix_d = mixer->amixers[AMIXER_SPDIFI*CHN_NUM+1];
1002 sum = mixer->sums[SUM_IN_F*CHN_NUM+1];
1005 /* Set up Master recording mixer */
1006 amix_d = mixer->amixers[AMIXER_MASTER_F_C*CHN_NUM];
1007 sum = mixer->sums[SUM_IN_F_C*CHN_NUM];
1009 amix_d = mixer->amixers[AMIXER_MASTER_F_C*CHN_NUM+1];
1010 sum = mixer->sums[SUM_IN_F_C*CHN_NUM+1];
1013 /* Set up PCM-in recording mixer */
1014 amix_d = mixer->amixers[AMIXER_PCM_F_C*CHN_NUM];
1015 sum = mixer->sums[SUM_IN_F_C*CHN_NUM];
1017 amix_d = mixer->amixers[AMIXER_PCM_F_C*CHN_NUM+1];
1018 sum = mixer->sums[SUM_IN_F_C*CHN_NUM+1];
1021 /* Set up Line-in recording mixer */
1022 amix_d = mixer->amixers[AMIXER_LINEIN_C*CHN_NUM];
1023 sum = mixer->sums[SUM_IN_F_C*CHN_NUM];
1025 amix_d = mixer->amixers[AMIXER_LINEIN_C*CHN_NUM+1];
1026 sum = mixer->sums[SUM_IN_F_C*CHN_NUM+1];
1029 /* Set up Mic-in recording mixer */
1030 amix_d = mixer->amixers[AMIXER_MIC_C*CHN_NUM];
1031 sum = mixer->sums[SUM_IN_F_C*CHN_NUM];
1033 amix_d = mixer->amixers[AMIXER_MIC_C*CHN_NUM+1];
1034 sum = mixer->sums[SUM_IN_F_C*CHN_NUM+1];
1037 /* Set up S/PDIF-in recording mixer */
1038 amix_d = mixer->amixers[AMIXER_SPDIFI_C*CHN_NUM];
1039 sum = mixer->sums[SUM_IN_F_C*CHN_NUM];
1041 amix_d = mixer->amixers[AMIXER_SPDIFI_C*CHN_NUM+1];
1042 sum = mixer->sums[SUM_IN_F_C*CHN_NUM+1];
1076 static int mixer_get_output_ports(struct ct_mixer *mixer,
1083 *rleft = &((struct amixer *)mixer->amixers[amix*CHN_NUM])->rsc;
1087 &((struct amixer *)mixer->amixers[amix*CHN_NUM+1])->rsc;
1092 static int mixer_set_input_left(struct ct_mixer *mixer,
1097 mixer_set_input_port(mixer->amixers[amix*CHN_NUM], rsc);
1100 mixer_set_input_port(mixer->amixers[amix*CHN_NUM], rsc);
1106 mixer_set_input_right(struct ct_mixer *mixer,
1111 mixer_set_input_port(mixer->amixers[amix*CHN_NUM+1], rsc);
1114 mixer_set_input_port(mixer->amixers[amix*CHN_NUM+1], rsc);
1120 static int mixer_resume(struct ct_mixer *mixer)
1127 amixer = mixer->amixers[i];
1133 state = get_switch_state(mixer, i);
1134 do_switch(mixer->atc, i, state);
1141 int ct_mixer_destroy(struct ct_mixer *mixer)
1143 struct sum_mgr *sum_mgr = (struct sum_mgr *)mixer->atc->rsc_mgrs[SUM];
1145 (struct amixer_mgr *)mixer->atc->rsc_mgrs[AMIXER];
1151 if (NULL != mixer->amixers[i]) {
1152 amixer = mixer->amixers[i];
1159 if (NULL != mixer->sums[i])
1160 sum_mgr->put_sum(sum_mgr, (struct sum *)mixer->sums[i]);
1163 /* Release mem assigned to mixer object */
1164 kfree(mixer->sums);
1165 kfree(mixer->amixers);
1166 kfree(mixer);
1173 struct ct_mixer *mixer;
1178 /* Allocate mem for mixer obj */
1179 err = ct_mixer_get_mem(&mixer);
1183 mixer->switch_state = 0;
1184 mixer->atc = atc;
1186 mixer->get_output_ports = mixer_get_output_ports;
1187 mixer->set_input_left = mixer_set_input_left;
1188 mixer->set_input_right = mixer_set_input_right;
1190 mixer->resume = mixer_resume;
1193 /* Allocate chip resources for mixer obj */
1194 err = ct_mixer_get_resources(mixer);
1198 /* Build internal mixer topology */
1199 ct_mixer_topology_build(mixer);
1201 *rmixer = mixer;
1206 ct_mixer_destroy(mixer);
1218 err = ct_mixer_kcontrols_create((struct ct_mixer *)atc->mixer);