ctmixer.c (d905163c5b23f6d8511971e06081a1b525e8a0bd) | ctmixer.c (29959a09cc1aabd2d5f4f03afc0305de6bd29248) |
---|---|
1/** 2 * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved. 3 * 4 * This source file is released under GPL v2 license (no other versions). 5 * See the COPYING file included in the main directory of this source 6 * distribution for the license terms and conditions. 7 * 8 * @File ctmixer.c --- 448 unchanged lines hidden (view full) --- 457 atc->select_mic_in(atc); 458 459 atc->spdif_out_unmute(atc, 0); 460 atc->spdif_in_unmute(atc, 0); 461 atc->line_in_unmute(atc, 1); 462 return; 463} 464 | 1/** 2 * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved. 3 * 4 * This source file is released under GPL v2 license (no other versions). 5 * See the COPYING file included in the main directory of this source 6 * distribution for the license terms and conditions. 7 * 8 * @File ctmixer.c --- 448 unchanged lines hidden (view full) --- 457 atc->select_mic_in(atc); 458 459 atc->spdif_out_unmute(atc, 0); 460 atc->spdif_in_unmute(atc, 0); 461 atc->line_in_unmute(atc, 1); 462 return; 463} 464 |
465static void do_switch(struct ct_atc *atc, enum CTALSA_MIXER_CTL type, int state) 466{ 467 struct ct_mixer *mixer = atc->mixer; 468 469 /* Do changes in mixer. */ 470 if ((SWH_CAPTURE_START <= type) && (SWH_CAPTURE_END >= type)) { 471 if (state) { 472 ct_mixer_recording_select(mixer, 473 get_amixer_index(type)); 474 } else { 475 ct_mixer_recording_unselect(mixer, 476 get_amixer_index(type)); 477 } 478 } 479 /* Do changes out of mixer. */ 480 if (state && (MIXER_LINEIN_C_S == type || MIXER_MIC_C_S == type)) 481 do_line_mic_switch(atc, type); 482 else if (MIXER_WAVEF_P_S == type) 483 atc->line_front_unmute(atc, state); 484 else if (MIXER_WAVES_P_S == type) 485 atc->line_surround_unmute(atc, state); 486 else if (MIXER_WAVEC_P_S == type) 487 atc->line_clfe_unmute(atc, state); 488 else if (MIXER_WAVER_P_S == type) 489 atc->line_rear_unmute(atc, state); 490 else if (MIXER_LINEIN_P_S == type) 491 atc->line_in_unmute(atc, state); 492 else if (MIXER_SPDIFO_P_S == type) 493 atc->spdif_out_unmute(atc, state); 494 else if (MIXER_SPDIFI_P_S == type) 495 atc->spdif_in_unmute(atc, state); 496 else if (MIXER_DIGITAL_IO_S == type) 497 do_digit_io_switch(atc, state); 498 499 return; 500} 501 |
|
465static int ct_alsa_mix_switch_info(struct snd_kcontrol *kcontrol, 466 struct snd_ctl_elem_info *uinfo) 467{ 468 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 469 uinfo->count = 1; 470 uinfo->value.integer.min = 0; 471 uinfo->value.integer.max = 1; 472 uinfo->value.integer.step = 1; --- 20 unchanged lines hidden (view full) --- 493 enum CTALSA_MIXER_CTL type = kcontrol->private_value; 494 int state; 495 496 state = ucontrol->value.integer.value[0]; 497 if (get_switch_state(mixer, type) == state) 498 return 0; 499 500 set_switch_state(mixer, type, state); | 502static int ct_alsa_mix_switch_info(struct snd_kcontrol *kcontrol, 503 struct snd_ctl_elem_info *uinfo) 504{ 505 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 506 uinfo->count = 1; 507 uinfo->value.integer.min = 0; 508 uinfo->value.integer.max = 1; 509 uinfo->value.integer.step = 1; --- 20 unchanged lines hidden (view full) --- 530 enum CTALSA_MIXER_CTL type = kcontrol->private_value; 531 int state; 532 533 state = ucontrol->value.integer.value[0]; 534 if (get_switch_state(mixer, type) == state) 535 return 0; 536 537 set_switch_state(mixer, type, state); |
501 /* Do changes in mixer. */ 502 if ((SWH_CAPTURE_START <= type) && (SWH_CAPTURE_END >= type)) { 503 if (state) { 504 ct_mixer_recording_select(mixer, 505 get_amixer_index(type)); 506 } else { 507 ct_mixer_recording_unselect(mixer, 508 get_amixer_index(type)); 509 } 510 } 511 /* Do changes out of mixer. */ 512 if (state && (MIXER_LINEIN_C_S == type || MIXER_MIC_C_S == type)) 513 do_line_mic_switch(atc, type); 514 else if (MIXER_WAVEF_P_S == type) 515 atc->line_front_unmute(atc, state); 516 else if (MIXER_WAVES_P_S == type) 517 atc->line_surround_unmute(atc, state); 518 else if (MIXER_WAVEC_P_S == type) 519 atc->line_clfe_unmute(atc, state); 520 else if (MIXER_WAVER_P_S == type) 521 atc->line_rear_unmute(atc, state); 522 else if (MIXER_LINEIN_P_S == type) 523 atc->line_in_unmute(atc, state); 524 else if (MIXER_SPDIFO_P_S == type) 525 atc->spdif_out_unmute(atc, state); 526 else if (MIXER_SPDIFI_P_S == type) 527 atc->spdif_in_unmute(atc, state); 528 else if (MIXER_DIGITAL_IO_S == type) 529 do_digit_io_switch(atc, state); | 538 do_switch(atc, type, state); |
530 531 return 1; 532} 533 534static struct snd_kcontrol_new swh_ctl = { 535 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, 536 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 537 .info = ct_alsa_mix_switch_info, --- 496 unchanged lines hidden (view full) --- 1034 mixer_set_input_port(mixer->amixers[amix*CHN_NUM+1], rsc); 1035 amix = get_recording_amixer(amix); 1036 if (amix < NUM_CT_AMIXERS) 1037 mixer_set_input_port(mixer->amixers[amix*CHN_NUM+1], rsc); 1038 1039 return 0; 1040} 1041 | 539 540 return 1; 541} 542 543static struct snd_kcontrol_new swh_ctl = { 544 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, 545 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 546 .info = ct_alsa_mix_switch_info, --- 496 unchanged lines hidden (view full) --- 1043 mixer_set_input_port(mixer->amixers[amix*CHN_NUM+1], rsc); 1044 amix = get_recording_amixer(amix); 1045 if (amix < NUM_CT_AMIXERS) 1046 mixer_set_input_port(mixer->amixers[amix*CHN_NUM+1], rsc); 1047 1048 return 0; 1049} 1050 |
1051#ifdef CONFIG_PM 1052static int mixer_resume(struct ct_mixer *mixer) 1053{ 1054 int i, state; 1055 struct amixer *amixer; 1056 1057 /* resume topology and volume gain. */ 1058 for (i = 0; i < NUM_CT_AMIXERS*CHN_NUM; i++) { 1059 amixer = mixer->amixers[i]; 1060 amixer->ops->commit_write(amixer); 1061 } 1062 1063 /* resume switch state. */ 1064 for (i = SWH_MIXER_START; i <= SWH_MIXER_END; i++) { 1065 state = get_switch_state(mixer, i); 1066 do_switch(mixer->atc, i, state); 1067 } 1068 1069 return 0; 1070} 1071#endif 1072 |
|
1042int ct_mixer_destroy(struct ct_mixer *mixer) 1043{ 1044 struct sum_mgr *sum_mgr = (struct sum_mgr *)mixer->atc->rsc_mgrs[SUM]; 1045 struct amixer_mgr *amixer_mgr = 1046 (struct amixer_mgr *)mixer->atc->rsc_mgrs[AMIXER]; 1047 struct amixer *amixer; 1048 int i = 0; 1049 --- 32 unchanged lines hidden (view full) --- 1082 return err; 1083 1084 mixer->switch_state = 0; 1085 mixer->atc = atc; 1086 /* Set operations */ 1087 mixer->get_output_ports = mixer_get_output_ports; 1088 mixer->set_input_left = mixer_set_input_left; 1089 mixer->set_input_right = mixer_set_input_right; | 1073int ct_mixer_destroy(struct ct_mixer *mixer) 1074{ 1075 struct sum_mgr *sum_mgr = (struct sum_mgr *)mixer->atc->rsc_mgrs[SUM]; 1076 struct amixer_mgr *amixer_mgr = 1077 (struct amixer_mgr *)mixer->atc->rsc_mgrs[AMIXER]; 1078 struct amixer *amixer; 1079 int i = 0; 1080 --- 32 unchanged lines hidden (view full) --- 1113 return err; 1114 1115 mixer->switch_state = 0; 1116 mixer->atc = atc; 1117 /* Set operations */ 1118 mixer->get_output_ports = mixer_get_output_ports; 1119 mixer->set_input_left = mixer_set_input_left; 1120 mixer->set_input_right = mixer_set_input_right; |
1121#ifdef CONFIG_PM 1122 mixer->resume = mixer_resume; 1123#endif |
|
1090 1091 /* Allocate chip resources for mixer obj */ 1092 err = ct_mixer_get_resources(mixer); 1093 if (err) 1094 goto error; 1095 1096 /* Build internal mixer topology */ 1097 ct_mixer_topology_build(mixer); --- 26 unchanged lines hidden --- | 1124 1125 /* Allocate chip resources for mixer obj */ 1126 err = ct_mixer_get_resources(mixer); 1127 if (err) 1128 goto error; 1129 1130 /* Build internal mixer topology */ 1131 ct_mixer_topology_build(mixer); --- 26 unchanged lines hidden --- |