Lines Matching full:as
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
48 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
332 int ac97_add_port(struct ac97_softc *as, struct ac97_source_info *src);
598 ac97_read(struct ac97_softc *as, u_int8_t reg, u_int16_t *val) in ac97_read() argument
602 if (((as->host_flags & AC97_HOST_DONT_READ) && in ac97_read()
605 (as->host_flags & AC97_HOST_DONT_READANY)) { in ac97_read()
606 *val = as->shadow_reg[reg >> 1]; in ac97_read()
610 if ((error = as->host_if->read(as->host_if->arg, reg, val))) in ac97_read()
611 *val = as->shadow_reg[reg >> 1]; in ac97_read()
616 ac97_write(struct ac97_softc *as, u_int8_t reg, u_int16_t val) in ac97_write() argument
618 as->shadow_reg[reg >> 1] = val; in ac97_write()
619 return (as->host_if->write(as->host_if->arg, reg, val)); in ac97_write()
623 ac97_setup_defaults(struct ac97_softc *as) in ac97_setup_defaults() argument
627 bzero(as->shadow_reg, sizeof(as->shadow_reg)); in ac97_setup_defaults()
632 ac97_write(as, si->reg, si->default_value); in ac97_setup_defaults()
643 ac97_check_capability(struct ac97_softc *as, int check) in ac97_check_capability() argument
649 return as->ext_id & AC97_EXT_AUDIO_SDAC; in ac97_check_capability()
651 return as->ext_id & AC97_EXT_AUDIO_CDAC; in ac97_check_capability()
653 return as->ext_id & AC97_EXT_AUDIO_LDAC; in ac97_check_capability()
655 return as->ext_id & AC97_EXT_AUDIO_SPDIF; in ac97_check_capability()
657 return as->caps & AC97_CAPS_HEADPHONES; in ac97_check_capability()
659 return as->caps & AC97_CAPS_TONECTRL; in ac97_check_capability()
661 return as->caps & AC97_CAPS_MICIN; in ac97_check_capability()
663 return as->caps & AC97_CAPS_LOUDNESS; in ac97_check_capability()
665 return AC97_CAPS_ENHANCEMENT(as->caps) != 0; in ac97_check_capability()
673 ac97_setup_source_info(struct ac97_softc *as) in ac97_setup_source_info() argument
679 si = &as->source_info[ouridx]; in ac97_setup_source_info()
681 if (!ac97_check_capability(as, source_info[idx].req_feature)) in ac97_setup_source_info()
697 si = &as->source_info[ouridx]; in ac97_setup_source_info()
720 as->num_source_info = ouridx; in ac97_setup_source_info()
722 for (idx = 0; idx < as->num_source_info; idx++) { in ac97_setup_source_info()
725 si = &as->source_info[idx]; in ac97_setup_source_info()
728 for (idx2 = 0; idx2 < as->num_source_info; idx2++) { in ac97_setup_source_info()
729 si2 = &as->source_info[idx2]; in ac97_setup_source_info()
745 for (idx2 = 0; idx2 < as->num_source_info; idx2++) { in ac97_setup_source_info()
749 si2 = &as->source_info[idx2]; in ac97_setup_source_info()
754 as->source_info[previdx].next = idx2; in ac97_setup_source_info()
755 as->source_info[idx2].prev = previdx; in ac97_setup_source_info()
761 as->source_info[previdx].next = AUDIO_MIXER_LAST; in ac97_setup_source_info()
768 struct ac97_softc *as; in ac97_attach() local
778 if (!(as = malloc(sizeof(*as), M_DEVBUF, M_NOWAIT | M_ZERO))) in ac97_attach()
781 as->codec_if.as = as; in ac97_attach()
782 as->codec_if.vtbl = &ac97civ; in ac97_attach()
783 as->host_if = host_if; in ac97_attach()
785 if ((error = host_if->attach(host_if->arg, &as->codec_if))) { in ac97_attach()
786 free(as, M_DEVBUF, sizeof(*as)); in ac97_attach()
798 as->host_flags = host_if->flags(host_if->arg); in ac97_attach()
800 ac97_setup_defaults(as); in ac97_attach()
801 ac97_read(as, AC97_REG_VENDOR_ID1, &id1); in ac97_attach()
802 ac97_read(as, AC97_REG_VENDOR_ID2, &id2); in ac97_attach()
803 ac97_read(as, AC97_REG_RESET, &as->caps); in ac97_attach()
836 if (as->caps) { in ac97_attach()
839 if (as->caps & (1 << i)) in ac97_attach()
843 ac97enhancement[AC97_CAPS_ENHANCEMENT(as->caps)]); in ac97_attach()
847 as->ac97_clock = AC97_STANDARD_CLOCK; in ac97_attach()
848 ac97_read(as, AC97_REG_EXT_AUDIO_ID, &as->ext_id); in ac97_attach()
849 if (as->ext_id & (AC97_EXT_AUDIO_VRA | AC97_EXT_AUDIO_DRA in ac97_attach()
854 ac97_read(as, AC97_REG_EXT_AUDIO_CTRL, &extstat); in ac97_attach()
857 if (as->ext_id & AC97_EXT_AUDIO_VRM) in ac97_attach()
860 if (as->ext_id & AC97_EXT_AUDIO_LDAC) in ac97_attach()
862 if (as->ext_id & AC97_EXT_AUDIO_SDAC) in ac97_attach()
864 if (as->ext_id & AC97_EXT_AUDIO_CDAC) in ac97_attach()
866 if (as->ext_id & AC97_EXT_AUDIO_SPDIF) { in ac97_attach()
867 /* XXX S/PDIF gets same data as DAC? in ac97_attach()
873 ac97_read(as, AC97_REG_SPDIF_CTRL, &val); in ac97_attach()
876 ac97_write(as, AC97_REG_SPDIF_CTRL, val); in ac97_attach()
878 if (as->ext_id & AC97_EXT_AUDIO_VRA) in ac97_attach()
880 ac97_write(as, AC97_REG_EXT_AUDIO_CTRL, extstat); in ac97_attach()
881 if (as->ext_id & AC97_EXT_AUDIO_VRA) { in ac97_attach()
884 ac97_write(as, AC97_REG_PCM_FRONT_DAC_RATE, 44100); in ac97_attach()
885 ac97_read(as, AC97_REG_PCM_FRONT_DAC_RATE, &rate); in ac97_attach()
888 as->ext_id = 0; in ac97_attach()
891 ac97_write(as, AC97_REG_PCM_FRONT_DAC_RATE, in ac97_attach()
896 ac97_setup_source_info(as); in ac97_attach()
901 as->codec_if.initfunc = initfunc; in ac97_attach()
903 initfunc(as, 0); in ac97_attach()
910 ctl.dev = ac97_get_portnum_by_name(&as->codec_if, AudioCoutputs, in ac97_attach()
912 ac97_mixer_set_port(&as->codec_if, &ctl); in ac97_attach()
914 ctl.dev = ac97_get_portnum_by_name(&as->codec_if, AudioCinputs, in ac97_attach()
916 ac97_mixer_set_port(&as->codec_if, &ctl); in ac97_attach()
918 ctl.dev = ac97_get_portnum_by_name(&as->codec_if, AudioCrecord, in ac97_attach()
920 ac97_mixer_set_port(&as->codec_if, &ctl); in ac97_attach()
924 ctl.dev = ac97_get_portnum_by_name(&as->codec_if, AudioCrecord, in ac97_attach()
926 ac97_mixer_set_port(&as->codec_if, &ctl); in ac97_attach()
934 struct ac97_softc *as = codec_if->as; in ac97_resume() local
944 if (as->ext_id & (AC97_EXT_AUDIO_VRA | AC97_EXT_AUDIO_DRA in ac97_resume()
949 ac97_read(as, AC97_REG_EXT_AUDIO_CTRL, &extstat); in ac97_resume()
952 if (as->ext_id & AC97_EXT_AUDIO_VRM) in ac97_resume()
955 if (as->ext_id & AC97_EXT_AUDIO_LDAC) in ac97_resume()
957 if (as->ext_id & AC97_EXT_AUDIO_SDAC) in ac97_resume()
959 if (as->ext_id & AC97_EXT_AUDIO_CDAC) in ac97_resume()
962 if (as->ext_id & AC97_EXT_AUDIO_SPDIF) { in ac97_resume()
965 ac97_read(as, AC97_REG_SPDIF_CTRL, &val); in ac97_resume()
968 ac97_write(as, AC97_REG_SPDIF_CTRL, val); in ac97_resume()
970 if (as->ext_id & AC97_EXT_AUDIO_VRA) in ac97_resume()
972 ac97_write(as, AC97_REG_EXT_AUDIO_CTRL, extstat); in ac97_resume()
976 if (as->codec_if.initfunc != NULL) in ac97_resume()
977 as->codec_if.initfunc(as, 1); in ac97_resume()
985 struct ac97_softc *as = (struct ac97_softc *)codec_if; in ac97_lock() local
986 as->lock_counter++; in ac97_lock()
992 struct ac97_softc *as = (struct ac97_softc *)codec_if; in ac97_unlock() local
993 as->lock_counter--; in ac97_unlock()
999 struct ac97_softc *as = (struct ac97_softc *)codec_if; in ac97_query_devinfo() local
1001 if (dip->index < as->num_source_info && dip->index >= 0) { in ac97_query_devinfo()
1002 struct ac97_source_info *si = &as->source_info[dip->index]; in ac97_query_devinfo()
1037 struct ac97_softc *as = (struct ac97_softc *)codec_if; in ac97_mixer_set_port() local
1043 if (cp->dev < 0 || cp->dev >= as->num_source_info) in ac97_mixer_set_port()
1046 si = &as->source_info[cp->dev]; in ac97_mixer_set_port()
1053 if (spdif && as->lock_counter >= 0) in ac97_mixer_set_port()
1056 ac97_read(as, si->reg, &val); in ac97_mixer_set_port()
1096 if (!(as->host_flags & AC97_HOST_SWAPPED_CHANNELS)) { in ac97_mixer_set_port()
1125 error = ac97_write(as, si->reg, (val & ~mask) | newval); in ac97_mixer_set_port()
1129 if (spdif && as->host_if->spdif_event != NULL) in ac97_mixer_set_port()
1130 as->host_if->spdif_event(as->host_if->arg, cp->un.ord); in ac97_mixer_set_port()
1139 struct ac97_softc *as; in ac97_set_rate() local
1146 as = (struct ac97_softc *)codec_if; in ac97_set_rate()
1149 !(as->ext_id & AC97_EXT_AUDIO_SDAC)) in ac97_set_rate()
1152 !(as->ext_id & AC97_EXT_AUDIO_LDAC)) in ac97_set_rate()
1155 if (!(as->ext_id & AC97_EXT_AUDIO_VRM)) { in ac97_set_rate()
1160 if (!(as->ext_id & AC97_EXT_AUDIO_VRA)) { in ac97_set_rate()
1165 if (as->ac97_clock == 0) in ac97_set_rate()
1166 as->ac97_clock = AC97_STANDARD_CLOCK; in ac97_set_rate()
1167 value = *rate * AC97_STANDARD_CLOCK / as->ac97_clock; in ac97_set_rate()
1182 if (as->ext_id & AC97_EXT_AUDIO_DRA) { in ac97_set_rate()
1183 ac97_read(as, AC97_REG_EXT_AUDIO_CTRL, &ext_stat); in ac97_set_rate()
1189 ac97_write(as, AC97_REG_EXT_AUDIO_CTRL, ext_stat); in ac97_set_rate()
1194 ac97_write(as, AC97_REG_EXT_AUDIO_CTRL, ext_stat); in ac97_set_rate()
1216 ac97_read(as, AC97_REG_POWER, &power); in ac97_set_rate()
1217 ac97_write(as, AC97_REG_POWER, power | power_bit); in ac97_set_rate()
1219 ac97_write(as, target, (u_int16_t)value); in ac97_set_rate()
1220 ac97_read(as, target, &actual); in ac97_set_rate()
1221 actual = (u_int32_t)actual * as->ac97_clock / AC97_STANDARD_CLOCK; in ac97_set_rate()
1223 ac97_write(as, AC97_REG_POWER, power); in ac97_set_rate()
1235 struct ac97_softc *as; in ac97_set_clock() local
1237 as = (struct ac97_softc *)codec_if; in ac97_set_clock()
1238 as->ac97_clock = clock; in ac97_set_clock()
1244 struct ac97_softc *as; in ac97_get_extcaps() local
1246 as = (struct ac97_softc *)codec_if; in ac97_get_extcaps()
1247 return as->ext_id; in ac97_get_extcaps()
1251 ac97_add_port(struct ac97_softc *as, struct ac97_source_info *src) in ac97_add_port() argument
1256 if (as->num_source_info >= MAX_SOURCES) { in ac97_add_port()
1261 if (!ac97_check_capability(as, src->req_feature)) in ac97_add_port()
1263 ouridx = as->num_source_info; in ac97_add_port()
1264 si = &as->source_info[ouridx]; in ac97_add_port()
1279 as->num_source_info++; in ac97_add_port()
1281 si->mixer_class = ac97_get_portnum_by_name(&as->codec_if, si->class, in ac97_add_port()
1284 idx = ac97_get_portnum_by_name(&as->codec_if, si->class, in ac97_add_port()
1287 while (as->source_info[idx].next != AUDIO_MIXER_LAST) in ac97_add_port()
1288 idx = as->source_info[idx].next; in ac97_add_port()
1290 as->source_info[idx].next = ouridx; in ac97_add_port()
1301 struct ac97_softc *as = (struct ac97_softc *)codec_if; in ac97_get_portnum_by_name() local
1304 for (idx = 0; idx < as->num_source_info; idx++) { in ac97_get_portnum_by_name()
1305 struct ac97_source_info *si = &as->source_info[idx]; in ac97_get_portnum_by_name()
1318 struct ac97_softc *as = (struct ac97_softc *)codec_if; in ac97_mixer_get_port() local
1323 if (cp->dev < 0 || cp->dev >= as->num_source_info) in ac97_mixer_get_port()
1326 si = &as->source_info[cp->dev]; in ac97_mixer_get_port()
1331 ac97_read(as, si->reg, &val); in ac97_mixer_get_port()
1355 if (!(as->host_flags & AC97_HOST_SWAPPED_CHANNELS)) { in ac97_mixer_get_port()
1398 ac97_ad1885_init(struct ac97_softc *as, int resuming) in ac97_ad1885_init() argument
1405 for (i = 0; i < as->num_source_info; i++) { in ac97_ad1885_init()
1406 if (as->source_info[i].reg == AC97_REG_HEADPHONE_VOLUME) in ac97_ad1885_init()
1407 as->source_info[i].reg = AC97_REG_MASTER_VOLUME; in ac97_ad1885_init()
1408 else if (as->source_info[i].reg == AC97_REG_MASTER_VOLUME) in ac97_ad1885_init()
1409 as->source_info[i].reg = AC97_REG_HEADPHONE_VOLUME; in ac97_ad1885_init()
1416 ac97_ad1886_init(struct ac97_softc *as, int resuming) in ac97_ad1886_init() argument
1418 ac97_write(as, AC97_AD1886_JACK_SENSE, 0x0010); in ac97_ad1886_init()
1422 ac97_ad198x_init(struct ac97_softc *as, int resuming) in ac97_ad198x_init() argument
1427 ac97_read(as, AC97_AD_REG_MISC, &misc); in ac97_ad198x_init()
1428 ac97_write(as, AC97_AD_REG_MISC, in ac97_ad198x_init()
1434 for (i = 0; i < as->num_source_info; i++) { in ac97_ad198x_init()
1435 if (as->source_info[i].reg == AC97_REG_SURR_MASTER) in ac97_ad198x_init()
1436 as->source_info[i].reg = AC97_REG_MASTER_VOLUME; in ac97_ad198x_init()
1437 else if (as->source_info[i].reg == AC97_REG_MASTER_VOLUME) in ac97_ad198x_init()
1438 as->source_info[i].reg = AC97_REG_SURR_MASTER; in ac97_ad198x_init()
1443 ac97_alc650_init(struct ac97_softc *as, int resuming) in ac97_alc650_init() argument
1447 ac97_read(as, AC97_ALC650_REG_MISC, &misc); in ac97_alc650_init()
1448 if (as->host_flags & AC97_HOST_ALC650_PIN47_IS_EAPD) in ac97_alc650_init()
1451 ac97_write(as, AC97_ALC650_REG_MISC, misc); in ac97_alc650_init()
1470 ac97_add_port(as, &sources[0]); in ac97_alc650_init()
1471 ac97_add_port(as, &sources[1]); in ac97_alc650_init()
1472 ac97_add_port(as, &sources[2]); in ac97_alc650_init()
1476 ac97_cx20468_init(struct ac97_softc *as, int resuming) in ac97_cx20468_init() argument
1480 ac97_read(as, AC97_CX_REG_MISC, &misc); in ac97_cx20468_init()
1481 ac97_write(as, AC97_CX_REG_MISC, misc & in ac97_cx20468_init()
1486 ac97_vt1616_init(struct ac97_softc *as, int resuming) in ac97_vt1616_init() argument
1490 if (as->host_flags & AC97_HOST_VT1616_DYNEX) { in ac97_vt1616_init()
1491 ac97_read(as, AC97_VT_REG_TEST, ®); in ac97_vt1616_init()
1502 ac97_write(as, AC97_VT_REG_TEST, reg); in ac97_vt1616_init()