• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/sound/aoa/codecs/

Lines Matching refs:tas

2  * Apple Onboard Audio driver for tas codec
27 * audacity, or recording the tas output via cable
73 MODULE_DESCRIPTION("tas codec driver for snd-aoa");
75 #include "tas.h"
76 #include "tas-gain-table.h"
77 #include "tas-basstreble.h"
81 #define PFX "snd-aoa-codec-tas: "
84 struct tas {
102 static int tas_reset_init(struct tas *tas);
104 static struct tas *codec_to_tas(struct aoa_codec *codec)
106 return container_of(codec, struct tas, codec);
109 static inline int tas_write_reg(struct tas *tas, u8 reg, u8 len, u8 *data)
112 return i2c_smbus_write_byte_data(tas->i2c, reg, *data);
114 return i2c_smbus_write_i2c_block_data(tas->i2c, reg, len, data);
117 static void tas3004_set_drc(struct tas *tas)
121 if (tas->drc_enabled)
126 if (tas->drc_range > 0xef)
128 else if (tas->drc_range < 0)
131 val[2] = tas->drc_range;
136 tas_write_reg(tas, TAS_REG_DRC, 6, val);
139 static void tas_set_treble(struct tas *tas)
143 tmp = tas3004_treble(tas->treble);
144 tas_write_reg(tas, TAS_REG_TREBLE, 1, &tmp);
147 static void tas_set_bass(struct tas *tas)
151 tmp = tas3004_bass(tas->bass);
152 tas_write_reg(tas, TAS_REG_BASS, 1, &tmp);
155 static void tas_set_volume(struct tas *tas)
161 left = tas->cached_volume_l;
162 right = tas->cached_volume_r;
167 if (tas->mute_l) left = 0;
168 if (tas->mute_r) right = 0;
184 tas_write_reg(tas, TAS_REG_VOL, 6, block);
187 static void tas_set_mixer(struct tas *tas)
194 val = tas->mixer_l[i];
201 tas_write_reg(tas, TAS_REG_LMIX, 9, block);
204 val = tas->mixer_r[i];
211 tas_write_reg(tas, TAS_REG_RMIX, 9, block);
238 struct tas *tas = snd_kcontrol_chip(kcontrol);
240 mutex_lock(&tas->mtx);
241 ucontrol->value.integer.value[0] = tas->cached_volume_l;
242 ucontrol->value.integer.value[1] = tas->cached_volume_r;
243 mutex_unlock(&tas->mtx);
250 struct tas *tas = snd_kcontrol_chip(kcontrol);
259 mutex_lock(&tas->mtx);
260 if (tas->cached_volume_l == ucontrol->value.integer.value[0]
261 && tas->cached_volume_r == ucontrol->value.integer.value[1]) {
262 mutex_unlock(&tas->mtx);
266 tas->cached_volume_l = ucontrol->value.integer.value[0];
267 tas->cached_volume_r = ucontrol->value.integer.value[1];
268 if (tas->hw_enabled)
269 tas_set_volume(tas);
270 mutex_unlock(&tas->mtx);
288 struct tas *tas = snd_kcontrol_chip(kcontrol);
290 mutex_lock(&tas->mtx);
291 ucontrol->value.integer.value[0] = !tas->mute_l;
292 ucontrol->value.integer.value[1] = !tas->mute_r;
293 mutex_unlock(&tas->mtx);
300 struct tas *tas = snd_kcontrol_chip(kcontrol);
302 mutex_lock(&tas->mtx);
303 if (tas->mute_l == !ucontrol->value.integer.value[0]
304 && tas->mute_r == !ucontrol->value.integer.value[1]) {
305 mutex_unlock(&tas->mtx);
309 tas->mute_l = !ucontrol->value.integer.value[0];
310 tas->mute_r = !ucontrol->value.integer.value[1];
311 if (tas->hw_enabled)
312 tas_set_volume(tas);
313 mutex_unlock(&tas->mtx);
339 struct tas *tas = snd_kcontrol_chip(kcontrol);
342 mutex_lock(&tas->mtx);
343 ucontrol->value.integer.value[0] = tas->mixer_l[idx];
344 ucontrol->value.integer.value[1] = tas->mixer_r[idx];
345 mutex_unlock(&tas->mtx);
353 struct tas *tas = snd_kcontrol_chip(kcontrol);
356 mutex_lock(&tas->mtx);
357 if (tas->mixer_l[idx] == ucontrol->value.integer.value[0]
358 && tas->mixer_r[idx] == ucontrol->value.integer.value[1]) {
359 mutex_unlock(&tas->mtx);
363 tas->mixer_l[idx] = ucontrol->value.integer.value[0];
364 tas->mixer_r[idx] = ucontrol->value.integer.value[1];
366 if (tas->hw_enabled)
367 tas_set_mixer(tas);
368 mutex_unlock(&tas->mtx);
399 struct tas *tas = snd_kcontrol_chip(kcontrol);
401 mutex_lock(&tas->mtx);
402 ucontrol->value.integer.value[0] = tas->drc_range;
403 mutex_unlock(&tas->mtx);
410 struct tas *tas = snd_kcontrol_chip(kcontrol);
416 mutex_lock(&tas->mtx);
417 if (tas->drc_range == ucontrol->value.integer.value[0]) {
418 mutex_unlock(&tas->mtx);
422 tas->drc_range = ucontrol->value.integer.value[0];
423 if (tas->hw_enabled)
424 tas3004_set_drc(tas);
425 mutex_unlock(&tas->mtx);
443 struct tas *tas = snd_kcontrol_chip(kcontrol);
445 mutex_lock(&tas->mtx);
446 ucontrol->value.integer.value[0] = tas->drc_enabled;
447 mutex_unlock(&tas->mtx);
454 struct tas *tas = snd_kcontrol_chip(kcontrol);
456 mutex_lock(&tas->mtx);
457 if (tas->drc_enabled == ucontrol->value.integer.value[0]) {
458 mutex_unlock(&tas->mtx);
462 tas->drc_enabled = !!ucontrol->value.integer.value[0];
463 if (tas->hw_enabled)
464 tas3004_set_drc(tas);
465 mutex_unlock(&tas->mtx);
495 struct tas *tas = snd_kcontrol_chip(kcontrol);
497 mutex_lock(&tas->mtx);
498 ucontrol->value.enumerated.item[0] = !!(tas->acr & TAS_ACR_INPUT_B);
499 mutex_unlock(&tas->mtx);
506 struct tas *tas = snd_kcontrol_chip(kcontrol);
511 mutex_lock(&tas->mtx);
512 oldacr = tas->acr;
519 tas->acr &= ~(TAS_ACR_INPUT_B | TAS_ACR_B_MONAUREAL);
521 tas->acr |= TAS_ACR_INPUT_B | TAS_ACR_B_MONAUREAL |
523 if (oldacr == tas->acr) {
524 mutex_unlock(&tas->mtx);
527 if (tas->hw_enabled)
528 tas_write_reg(tas, TAS_REG_ACR, 1, &tas->acr);
529 mutex_unlock(&tas->mtx);
566 struct tas *tas = snd_kcontrol_chip(kcontrol);
568 mutex_lock(&tas->mtx);
569 ucontrol->value.integer.value[0] = tas->treble;
570 mutex_unlock(&tas->mtx);
577 struct tas *tas = snd_kcontrol_chip(kcontrol);
582 mutex_lock(&tas->mtx);
583 if (tas->treble == ucontrol->value.integer.value[0]) {
584 mutex_unlock(&tas->mtx);
588 tas->treble = ucontrol->value.integer.value[0];
589 if (tas->hw_enabled)
590 tas_set_treble(tas);
591 mutex_unlock(&tas->mtx);
617 struct tas *tas = snd_kcontrol_chip(kcontrol);
619 mutex_lock(&tas->mtx);
620 ucontrol->value.integer.value[0] = tas->bass;
621 mutex_unlock(&tas->mtx);
628 struct tas *tas = snd_kcontrol_chip(kcontrol);
633 mutex_lock(&tas->mtx);
634 if (tas->bass == ucontrol->value.integer.value[0]) {
635 mutex_unlock(&tas->mtx);
639 tas->bass = ucontrol->value.integer.value[0];
640 if (tas->hw_enabled)
641 tas_set_bass(tas);
642 mutex_unlock(&tas->mtx);
678 static int tas_reset_init(struct tas *tas)
682 tas->codec.gpio->methods->all_amps_off(tas->codec.gpio);
684 tas->codec.gpio->methods->set_hw_reset(tas->codec.gpio, 0);
686 tas->codec.gpio->methods->set_hw_reset(tas->codec.gpio, 1);
688 tas->codec.gpio->methods->set_hw_reset(tas->codec.gpio, 0);
690 tas->codec.gpio->methods->all_amps_restore(tas->codec.gpio);
693 if (tas_write_reg(tas, TAS_REG_MCS, 1, &tmp))
696 tas->acr |= TAS_ACR_ANALOG_PDOWN;
697 if (tas_write_reg(tas, TAS_REG_ACR, 1, &tas->acr))
701 if (tas_write_reg(tas, TAS_REG_MCS2, 1, &tmp))
704 tas3004_set_drc(tas);
707 tas->treble = TAS3004_TREBLE_ZERO;
708 tas->bass = TAS3004_BASS_ZERO;
709 tas_set_treble(tas);
710 tas_set_bass(tas);
712 tas->acr &= ~TAS_ACR_ANALOG_PDOWN;
713 if (tas_write_reg(tas, TAS_REG_ACR, 1, &tas->acr))
723 struct tas *tas = cii->codec_data;
728 tas->codec.gpio->methods->all_amps_off(tas->codec.gpio);
729 tas->hw_enabled = 0;
733 mutex_lock(&tas->mtx);
734 tas_reset_init(tas);
735 tas_set_volume(tas);
736 tas_set_mixer(tas);
737 tas->hw_enabled = 1;
738 tas->codec.gpio->methods->all_amps_restore(tas->codec.gpio);
739 mutex_unlock(&tas->mtx);
752 static int tas_suspend(struct tas *tas)
754 mutex_lock(&tas->mtx);
755 tas->hw_enabled = 0;
756 tas->acr |= TAS_ACR_ANALOG_PDOWN;
757 tas_write_reg(tas, TAS_REG_ACR, 1, &tas->acr);
758 mutex_unlock(&tas->mtx);
762 static int tas_resume(struct tas *tas)
765 mutex_lock(&tas->mtx);
766 tas_reset_init(tas);
767 tas_set_volume(tas);
768 tas_set_mixer(tas);
769 tas->hw_enabled = 1;
770 mutex_unlock(&tas->mtx);
805 struct tas *tas = codec_to_tas(codec);
808 if (!tas->codec.gpio || !tas->codec.gpio->methods) {
813 mutex_lock(&tas->mtx);
814 if (tas_reset_init(tas)) {
815 printk(KERN_ERR PFX "tas failed to initialise\n");
816 mutex_unlock(&tas->mtx);
819 tas->hw_enabled = 1;
820 mutex_unlock(&tas->mtx);
822 if (tas->codec.soundbus_dev->attach_codec(tas->codec.soundbus_dev,
824 &tas_codec_info, tas)) {
825 printk(KERN_ERR PFX "error attaching tas to soundbus\n");
829 if (aoa_snd_device_new(SNDRV_DEV_LOWLEVEL, tas, &ops)) {
830 printk(KERN_ERR PFX "failed to create tas snd device!\n");
833 err = aoa_snd_ctl_add(snd_ctl_new1(&volume_control, tas));
837 err = aoa_snd_ctl_add(snd_ctl_new1(&mute_control, tas));
841 err = aoa_snd_ctl_add(snd_ctl_new1(&pcm1_control, tas));
845 err = aoa_snd_ctl_add(snd_ctl_new1(&monitor_control, tas));
849 err = aoa_snd_ctl_add(snd_ctl_new1(&capture_source_control, tas));
853 err = aoa_snd_ctl_add(snd_ctl_new1(&drc_range_control, tas));
857 err = aoa_snd_ctl_add(snd_ctl_new1(&drc_switch_control, tas));
861 err = aoa_snd_ctl_add(snd_ctl_new1(&treble_control, tas));
865 err = aoa_snd_ctl_add(snd_ctl_new1(&bass_control, tas));
871 tas->codec.soundbus_dev->detach_codec(tas->codec.soundbus_dev, tas);
872 snd_device_free(aoa_get_card(), tas);
878 struct tas *tas = codec_to_tas(codec);
880 if (!tas->codec.soundbus_dev)
882 tas->codec.soundbus_dev->detach_codec(tas->codec.soundbus_dev, tas);
923 struct tas *tas;
925 tas = kzalloc(sizeof(struct tas), GFP_KERNEL);
927 if (!tas)
930 mutex_init(&tas->mtx);
931 tas->i2c = client;
932 i2c_set_clientdata(client, tas);
935 tas->drc_range = TAS3004_DRC_MAX / 2;
937 strlcpy(tas->codec.name, "tas", MAX_CODEC_NAME_LEN);
938 tas->codec.owner = THIS_MODULE;
939 tas->codec.init = tas_init_codec;
940 tas->codec.exit = tas_exit_codec;
941 tas->codec.node = of_node_get(node);
943 if (aoa_codec_register(&tas->codec)) {
947 "snd-aoa-codec-tas: tas found, addr 0x%02x on %s\n",
951 mutex_destroy(&tas->mtx);
952 kfree(tas);
999 struct tas *tas = i2c_get_clientdata(client);
1002 aoa_codec_unregister(&tas->codec);
1003 of_node_put(tas->codec.node);
1006 tas_write_reg(tas, TAS_REG_ACR, 1, &tmp);
1008 mutex_destroy(&tas->mtx);
1009 kfree(tas);