Lines Matching defs:ac

65 #define	SHADOW(ac, reg)	((ac)->shadow[((reg) / sizeof (uint16_t))])
270 ac_get_dev(ac97_t *ac)
272 return (ac->d);
276 ac_get_prop(ac97_t *ac, char *prop, int defval)
280 rv = ddi_prop_get_int(DDI_DEV_T_ANY, ac->dip, DDI_PROP_DONTPASS,
289 #define WR(r, v) (ac)->wr((ac)->private, (r), (v))
290 #define RD(r) (ac)->rd((ac)->private, (r))
312 ac_probe_reg(ac97_t *ac, uint8_t reg)
332 ac_probe_tone(ac97_t *ac)
335 if (ac->caps & RR_BASS_TREBLE)
345 ac_probe_loud(ac97_t *ac)
348 if (ac->caps & RR_LOUDNESS_SUPPORT)
358 ac_probe_mmic(ac97_t *ac)
361 if (ac->caps & RR_DEDICATED_MIC)
371 ac_probe_stsim(ac97_t *ac)
374 if (ac->caps & RR_PSEUDO_STEREO)
384 ac_probe_pcbeep(ac97_t *ac)
386 return (ac_probe_reg(ac, AC97_PC_BEEP_REGISTER));
393 ac_probe_rear(ac97_t *ac)
395 if (ac->flags & AC97_FLAG_AUX_4CH)
406 ac_probe_mic(ac97_t *ac)
408 if ((!(ac->flags & AC97_FLAG_NO_MIC)) &&
409 (ac_probe_reg(ac, AC97_MIC_VOLUME_REGISTER))) {
410 ac->inputs |= (1U << INPUT_MIC);
420 ac_probe_headphone(ac97_t *ac)
423 if ((ac->flags & AC97_FLAG_AUX_HP) &&
424 !(ac->flags & AC97_FLAG_NO_HEADPHONE)) {
434 ac_probe_auxout(ac97_t *ac)
437 if ((ac->flags & AC97_FLAG_AUX_LVL) &&
438 !(ac->flags & AC97_FLAG_NO_AUXOUT)) {
448 ac_probe_auxin(ac97_t *ac)
450 if ((!(ac->flags & AC97_FLAG_NO_AUXIN)) &&
451 (ac_probe_reg(ac, AC97_AUX_VOLUME_REGISTER))) {
452 ac->inputs |= (1U << INPUT_AUXIN);
462 ac_probe_phone(ac97_t *ac)
464 if ((!(ac->flags & AC97_FLAG_NO_PHONE)) &&
465 (ac_probe_reg(ac, AC97_PHONE_VOLUME_REGISTER))) {
466 ac->inputs |= (1U << INPUT_PHONE);
476 ac_probe_mono(ac97_t *ac)
478 if (!(ac->flags & AC97_FLAG_SPEAKER_OK)) {
481 if (ac_probe_reg(ac, AC97_MONO_MASTER_VOLUME_REGISTER)) {
491 ac_probe_linein(ac97_t *ac)
493 if ((!(ac->flags & AC97_FLAG_NO_LINEIN)) &&
494 (ac_probe_reg(ac, AC97_LINE_IN_VOLUME_REGISTER))) {
495 ac->inputs |= (1U << INPUT_LINEIN);
505 ac_probe_cdrom(ac97_t *ac)
507 if ((!(ac->flags & AC97_FLAG_NO_CDROM)) &&
508 (ac_probe_reg(ac, AC97_CD_VOLUME_REGISTER))) {
509 ac->inputs |= (1U << INPUT_CD);
519 ac_probe_video(ac97_t *ac)
521 if ((!(ac->flags & AC97_FLAG_NO_VIDEO)) &&
522 (ac_probe_reg(ac, AC97_VIDEO_VOLUME_REGISTER))) {
523 ac->inputs |= (1U << INPUT_VIDEO);
533 ac_probe_3d(ac97_t *ac)
536 if (ac->caps & RR_3D_STEREO_ENHANCE_MASK)
543 ac_probe_3d_impl(ac97_t *ac, uint16_t mask)
548 if ((ac->caps & RR_3D_STEREO_ENHANCE_MASK) == 0)
563 ac_probe_3d_depth(ac97_t *ac)
565 return (ac_probe_3d_impl(ac, TDCR_DEPTH_MASK));
569 ac_probe_3d_center(ac97_t *ac)
571 return (ac_probe_3d_impl(ac, TDCR_CENTER_MASK));
578 ac_probe_center(ac97_t *ac)
596 ac_probe_lfe(ac97_t *ac)
614 ac_probe_front(ac97_t *ac)
628 ac_probe_lineout(ac97_t *ac)
631 return (!ac_probe_front(ac));
651 ac_wr(ac97_t *ac, uint8_t reg, uint16_t val)
654 SHADOW(ac, reg) = val;
657 ac->wr(ac->private, reg, val);
667 ac_rd(ac97_t *ac, uint8_t reg)
670 return (SHADOW(ac, reg));
672 return (ac->rd(ac->private, reg));
680 ac_set(ac97_t *ac, uint8_t reg, uint16_t val)
682 ac_wr(ac, reg, ac->rd(ac->private, reg) | val);
690 ac_clr(ac97_t *ac, uint8_t reg, uint16_t val)
692 ac_wr(ac, reg, ac->rd(ac->private, reg) & ~val);
703 ac97_control_find(ac97_t *ac, const char *name)
706 list_t *l = &ac->ctrls;
721 ac_restore(ac97_t *ac)
728 ac->wr(ac->private, i, SHADOW(ac, i));
737 ac_init_values(ac97_t *ac)
741 for (ctrl = list_head(&ac->ctrls); ctrl;
742 ctrl = list_next(&ac->ctrls, ctrl)) {
755 ac97_t *ac = ctrl->actrl_ac97;
761 ac_wr(ac, AC97_RECORD_SELECT_CTRL_REGISTER,
769 ac97_t *ac = ctrl->actrl_ac97;
772 v = SHADOW(ac, AC97_GENERAL_PURPOSE_REGISTER);
778 ac_wr(ac, AC97_GENERAL_PURPOSE_REGISTER, v);
829 ac97_t *ac = ctrl->actrl_ac97;
837 ac_wr(ac, reg, ac_val_scale(left, right, ctrl->actrl_bits) | mute);
843 ac97_t *ac = ctrl->actrl_ac97;
854 v = SHADOW(ac, reg);
861 ac_wr(ac, reg, v);
1009 ac97_t *ac = ctrl->actrl_ac97;
1012 v = SHADOW(ac, AC97_MIC_VOLUME_REGISTER);
1018 ac_wr(ac, AC97_MIC_VOLUME_REGISTER, v);
1099 ac_analog_reset(ac97_t *ac)
1121 SHADOW(ac, AC97_POWERDOWN_CTRL_STAT_REGISTER) = tmp;
1127 audio_dev_warn(ac->d, "AC'97 analog power up timed out");
1143 ac_hw_reset(ac97_t *ac)
1148 if (ac->flags & AC97_FLAG_AMPLIFIER) {
1150 ac_wr(ac, AC97_POWERDOWN_CTRL_STAT_REGISTER, 0);
1153 ac_wr(ac, AC97_POWERDOWN_CTRL_STAT_REGISTER, PCSR_EAPD);
1156 ac_wr(ac, AC97_GENERAL_PURPOSE_REGISTER, 0);
1158 switch (ac->vid) {
1162 /* ac_rd(ac, AC97_VENDOR_REGISTER_11) & ~0x8); */
1178 ac_wr(ac, AC97_HEADPHONE_VOLUME_REGISTER, 0x0808);
1204 ac_clr(ac, AC97_EXTENDED_AUDIO_STAT_CTRL_REGISTER,
1219 if (ac->codec_reset != NULL) {
1220 ac->codec_reset(ac);
1224 ac_clr(ac, AC97_EXTENDED_AUDIO_STAT_CTRL_REGISTER, EASCR_VRA);
1232 ac97_reset(ac97_t *ac)
1234 ac_analog_reset(ac);
1235 ac_hw_reset(ac);
1236 ac_restore(ac);
1243 ac97_num_channels(ac97_t *ac)
1245 return (ac->nchan);
1256 ac97_t *ac = ctrl->actrl_ac97;
1257 ASSERT(ac->d != NULL);
1262 ctrl->actrl_ctrl = audio_dev_add_control(ac->d, &ctrl->actrl_desc,
1265 audio_dev_warn(ac->d, "AC97 %s alloc failed",
1294 ac97_register_controls(ac97_t *ac)
1298 for (ctrl = list_head(&ac->ctrls); ctrl;
1299 ctrl = list_next(&ac->ctrls, ctrl)) {
1307 ac97_walk_controls(ac97_t *ac, ac97_ctrl_walk_t walker, void *arg)
1311 for (ctrl = list_head(&ac->ctrls); ctrl;
1312 ctrl = list_next(&ac->ctrls, ctrl)) {
1320 ac_add_control(ac97_t *ac, ac97_ctrl_probe_t *cpt)
1325 ASSERT(ac);
1326 ASSERT(ac->d);
1328 ctrl = ac97_control_find(ac, cpt->cp_name);
1335 ctrl->actrl_ac97 = ac;
1364 list_insert_tail(&ac->ctrls, ctrl);
1373 ac97_t *ac = ctrl->actrl_ac97;
1375 list_remove(&ac->ctrls, ctrl);
1540 ac_probeinit_ctrls(ac97_t *ac, int vol_bits, int enh_bits)
1545 ASSERT(ac);
1550 ac->inputs = (1U << INPUT_STEREOMIX) | (1U << INPUT_MONOMIX);
1555 my_cpt.cp_minval |= ac->inputs;
1556 my_cpt.cp_maxval |= ac->inputs;
1560 if (ac->flags & AC97_FLAG_MICBOOST)
1576 if (!my_cpt.cp_probe || my_cpt.cp_probe(ac)) {
1577 ac_add_control(ac, &my_cpt);
1581 if (ac->codec_init != NULL) {
1582 ac->codec_init(ac);
1594 ac97_t *ac;
1596 ac = kmem_zalloc(sizeof (ac97_t), KM_SLEEP);
1597 ac->dip = dip;
1598 ac->rd = rd;
1599 ac->wr = wr;
1600 ac->private = priv;
1602 list_create(&ac->ctrls, sizeof (struct ac97_ctrl),
1608 ac->flags |= (flag); \
1610 ac->flags &= ~(flag); \
1663 ac->flags |= AC97_FLAG_SPEAKER_OK;
1668 ac->flags |= AC97_FLAG_SPEAKER_OK;
1678 return (ac);
1689 ac97_t *ac;
1691 ac = ac97_alloc(dip, rd, wr, priv);
1692 if (ac != NULL) {
1693 ac->d = adev;
1695 return (ac);
1702 ac97_free(ac97_t *ac)
1707 while ((ctrl = list_head(&ac->ctrls)) != NULL) {
1711 list_destroy(&ac->ctrls);
1712 kmem_free(ac, sizeof (ac97_t));
1748 void (*init)(ac97_t *ac);
1749 void (*reset)(ac97_t *ac);
1825 ac97_probe_controls(ac97_t *ac)
1838 ASSERT(ac->d);
1840 ac_analog_reset(ac);
1846 audio_dev_warn(ac->d, "AC'97 codec unresponsive");
1850 ac->vid = (vid1 << 16) | vid2;
1857 if (ac->vid == codecs[i].id) {
1860 ac->codec_init = codecs[i].init;
1865 if ((ac->vid & 0xffffff00) == vendors[i].id) {
1883 SHADOW(ac, i) = RD(i);
1886 ac->caps = RD(AC97_RESET_REGISTER);
1903 if (ac->caps & RR_HEADPHONE_SUPPORT) {
1905 if (ac_probe_reg(ac, AC97_HEADPHONE_VOLUME_REGISTER)) {
1907 ac->flags |= AC97_FLAG_AUX_HP;
1917 if ((!(ac->flags & AC97_FLAG_AUX_HP)) && (ear & EAR_SDAC)) {
1918 if (ac_probe_reg(ac, AC97_EXTENDED_LRS_VOLUME_REGISTER)) {
1919 ac->flags |= AC97_FLAG_AUX_4CH;
1926 if (!(ac->flags & (AC97_FLAG_AUX_HP | AC97_FLAG_AUX_4CH))) {
1927 if (ac_probe_reg(ac, AC97_HEADPHONE_VOLUME_REGISTER)) {
1928 ac->flags |= AC97_FLAG_AUX_LVL;
1935 ac->nchan = 2;
1937 ac->nchan += 2;
1940 ac->nchan++;
1943 ac->nchan++;
1946 ac->flags |= flags;
1947 (void) snprintf(ac->name, sizeof (ac->name), "%s %s", vendor, name);
1949 (void) snprintf(buf, sizeof (buf), "AC'97 codec: %s", ac->name);
1950 audio_dev_add_info(ac->d, buf);
1954 ddi_driver_name(ac->dip), ddi_get_instance(ac->dip),
1955 ac->name, ac->vid, ac->nchan, ac->caps);
1960 ac_probeinit_ctrls(ac, vol_bits, enh_bits);
1962 ac_hw_reset(ac);
1963 ac_init_values(ac);
1974 ac97_init(ac97_t *ac, struct audio_dev *d)
1977 ASSERT(ac->d == NULL);
1980 ac->d = d;
1982 ac97_probe_controls(ac);
1983 ac97_register_controls(ac);