Lines Matching refs:ak
26 void snd_akm4xxx_write(struct snd_akm4xxx *ak, int chip, unsigned char reg,
29 ak->ops.lock(ak, chip);
30 ak->ops.write(ak, chip, reg, val);
33 snd_akm4xxx_set(ak, chip, reg, val);
34 ak->ops.unlock(ak, chip);
40 static void ak4524_reset(struct snd_akm4xxx *ak, int state)
45 for (chip = 0; chip < ak->num_dacs/2; chip++) {
46 snd_akm4xxx_write(ak, chip, 0x01, state ? 0x00 : 0x03);
50 for (reg = 0x04; reg < ak->total_regs; reg++)
51 snd_akm4xxx_write(ak, chip, reg,
52 snd_akm4xxx_get(ak, chip, reg));
57 static void ak435X_reset(struct snd_akm4xxx *ak, int state)
62 snd_akm4xxx_write(ak, 0, 0x01, 0x02); /* reset and soft-mute */
65 for (reg = 0x00; reg < ak->total_regs; reg++)
67 snd_akm4xxx_write(ak, 0, reg,
68 snd_akm4xxx_get(ak, 0, reg));
69 snd_akm4xxx_write(ak, 0, 0x01, 0x01); /* un-reset, unmute */
73 static void ak4381_reset(struct snd_akm4xxx *ak, int state)
77 for (chip = 0; chip < ak->num_dacs/2; chip++) {
78 snd_akm4xxx_write(ak, chip, 0x00, state ? 0x0c : 0x0f);
81 for (reg = 0x01; reg < ak->total_regs; reg++)
82 snd_akm4xxx_write(ak, chip, reg,
83 snd_akm4xxx_get(ak, chip, reg));
93 void snd_akm4xxx_reset(struct snd_akm4xxx *ak, int state)
95 switch (ak->type) {
99 ak4524_reset(ak, state);
105 ak435X_reset(ak, state);
108 ak435X_reset(ak, state);
111 ak4381_reset(ak, state);
158 void snd_akm4xxx_init(struct snd_akm4xxx *ak)
264 memset(ak->images, 0, sizeof(ak->images));
265 memset(ak->volumes, 0, sizeof(ak->volumes));
267 switch (ak->type) {
270 ak->num_chips = ak->num_dacs / 2;
271 ak->name = "ak4524";
272 ak->total_regs = 0x08;
276 ak->num_chips = ak->num_dacs / 2;
277 ak->name = "ak4528";
278 ak->total_regs = 0x06;
282 ak->num_chips = 1;
283 ak->name = "ak4529";
284 ak->total_regs = 0x0d;
288 ak->num_chips = 1;
289 ak->name = "ak4355";
290 ak->total_regs = 0x0b;
294 ak->num_chips = 1;
295 ak->name = "ak4358";
296 ak->total_regs = 0x10;
300 ak->num_chips = ak->num_dacs / 2;
301 ak->name = "ak4381";
302 ak->total_regs = 0x05;
306 ak->num_chips = 1;
307 ak->name = "ak5365";
308 ak->total_regs = 0x08;
312 ak->num_chips = ak->num_dacs / 2;
313 ak->name = "ak4620";
314 ak->total_regs = 0x08;
321 for (chip = 0; chip < ak->num_chips; chip++) {
326 snd_akm4xxx_write(ak, chip, reg, data);
367 struct snd_akm4xxx *ak = snd_kcontrol_chip(kcontrol);
371 ucontrol->value.integer.value[0] = snd_akm4xxx_get_vol(ak, chip, addr);
378 struct snd_akm4xxx *ak = snd_kcontrol_chip(kcontrol);
382 if (snd_akm4xxx_get_vol(ak, chip, addr) == nval)
385 snd_akm4xxx_set_vol(ak, chip, addr, nval);
396 snd_akm4xxx_write(ak, chip, addr, nval);
425 struct snd_akm4xxx *ak = snd_kcontrol_chip(kcontrol);
429 ucontrol->value.integer.value[0] = snd_akm4xxx_get_vol(ak, chip, addr);
430 ucontrol->value.integer.value[1] = snd_akm4xxx_get_vol(ak, chip, addr+1);
463 struct snd_akm4xxx *ak = snd_kcontrol_chip(kcontrol);
468 (snd_akm4xxx_get(ak, chip, addr) >> shift) & 3;
475 struct snd_akm4xxx *ak = snd_kcontrol_chip(kcontrol);
483 (snd_akm4xxx_get(ak, chip, addr) & ~(3 << shift));
484 change = snd_akm4xxx_get(ak, chip, addr) != nval;
486 snd_akm4xxx_write(ak, chip, addr, nval);
495 struct snd_akm4xxx *ak = snd_kcontrol_chip(kcontrol);
501 unsigned char val = snd_akm4xxx_get(ak, chip, addr) & (1<<shift);
511 struct snd_akm4xxx *ak = snd_kcontrol_chip(kcontrol);
522 oval = snd_akm4xxx_get(ak, chip, addr);
529 snd_akm4xxx_write(ak, chip, addr, val);
535 static int ak4xxx_capture_num_inputs(struct snd_akm4xxx *ak, int mixer_ch)
540 input_names = ak->adc_info[mixer_ch].input_names;
550 struct snd_akm4xxx *ak = snd_kcontrol_chip(kcontrol);
554 num_names = ak4xxx_capture_num_inputs(ak, mixer_ch);
558 ak->adc_info[mixer_ch].input_names);
564 struct snd_akm4xxx *ak = snd_kcontrol_chip(kcontrol);
570 val = snd_akm4xxx_get(ak, chip, addr) & mask;
578 struct snd_akm4xxx *ak = snd_kcontrol_chip(kcontrol);
584 int num_names = ak4xxx_capture_num_inputs(ak, mixer_ch);
589 oval = snd_akm4xxx_get(ak, chip, addr);
593 snd_akm4xxx_write(ak, chip, addr, val);
603 static int build_dac_controls(struct snd_akm4xxx *ak)
609 for (idx = 0; idx < ak->num_dacs; ) {
611 if (ak->type == SND_AK4381
612 && ak->dac_info[mixer_ch].switch_name) {
617 knew.name = ak->dac_info[mixer_ch].switch_name;
626 err = snd_ctl_add(ak->card, snd_ctl_new1(&knew, ak));
631 if (! ak->dac_info || ! ak->dac_info[mixer_ch].name) {
633 knew.index = mixer_ch + ak->idx_offset * 2;
636 knew.name = ak->dac_info[mixer_ch].name;
637 num_stereo = ak->dac_info[mixer_ch].num_channels;
652 switch (ak->type) {
704 err = snd_ctl_add(ak->card, snd_ctl_new1(&knew, ak));
714 static int build_adc_controls(struct snd_akm4xxx *ak)
720 if (ak->type == SND_AK4528)
722 for (idx = 0; idx < ak->num_adcs;) {
724 if (! ak->adc_info || ! ak->adc_info[mixer_ch].name) {
726 knew.index = mixer_ch + ak->idx_offset * 2;
729 knew.name = ak->adc_info[mixer_ch].name;
730 num_stereo = ak->adc_info[mixer_ch].num_channels;
746 if (ak->type == SND_AK5365)
754 err = snd_ctl_add(ak->card, snd_ctl_new1(&knew, ak));
758 if (ak->type == SND_AK5365 && (idx % 2) == 0) {
759 if (! ak->adc_info ||
760 ! ak->adc_info[mixer_ch].switch_name) {
762 knew.index = mixer_ch + ak->idx_offset * 2;
764 knew.name = ak->adc_info[mixer_ch].switch_name;
773 err = snd_ctl_add(ak->card, snd_ctl_new1(&knew, ak));
778 if (!ak->adc_info ||
779 !ak->adc_info[mixer_ch].selector_name) {
781 knew.index = mixer_ch + ak->idx_offset * 2;
783 knew.name = ak->adc_info[mixer_ch].selector_name;
794 err = snd_ctl_add(ak->card, snd_ctl_new1(&knew, ak));
805 static int build_deemphasis(struct snd_akm4xxx *ak, int num_emphs)
813 knew.index = idx + ak->idx_offset;
819 switch (ak->type) {
842 err = snd_ctl_add(ak->card, snd_ctl_new1(&knew, ak));
852 struct snd_akm4xxx *ak = entry->private_data;
854 for (chip = 0; chip < ak->num_chips; chip++) {
855 for (reg = 0; reg < ak->total_regs; reg++) {
856 val = snd_akm4xxx_get(ak, chip, reg);
863 static int proc_init(struct snd_akm4xxx *ak)
865 return snd_card_ro_proc_new(ak->card, ak->name, ak, proc_regs_read);
868 int snd_akm4xxx_build_controls(struct snd_akm4xxx *ak)
872 err = build_dac_controls(ak);
876 err = build_adc_controls(ak);
879 if (ak->type == SND_AK4355 || ak->type == SND_AK4358)
881 else if (ak->type == SND_AK4620)
884 num_emphs = ak->num_dacs / 2;
885 err = build_deemphasis(ak, num_emphs);
888 err = proc_init(ak);