Lines Matching refs:ctl
266 #define HDAUDIO_CONTROL_GIVE(ctl) ((ctl)->ctl_step ? 1 : 0)
446 struct hdaudio_control *ctl;
452 ctl = &sc->sc_ctls[i];
453 if (ctl->ctl_enable == false)
455 if (ctl->ctl_widget->w_nid != nid)
457 if (dir && ctl->ctl_ndir != dir)
459 if (index >= 0 && ctl->ctl_ndir == HDAUDIO_PINDIR_IN &&
460 ctl->ctl_dir == ctl->ctl_ndir && ctl->ctl_index != index)
464 return ctl;
1235 struct hdaudio_control *ctl;
1270 ctl = kmem_zalloc(sc->sc_nctls * sizeof(*ctl), KM_SLEEP);
1286 ctl[cnt].ctl_enable = true;
1287 ctl[cnt].ctl_widget = w;
1288 ctl[cnt].ctl_mute = mute;
1289 ctl[cnt].ctl_step = step;
1290 ctl[cnt].ctl_size = size;
1291 ctl[cnt].ctl_offset = offset;
1292 ctl[cnt].ctl_left = offset;
1293 ctl[cnt].ctl_right = offset;
1296 ctl[cnt].ctl_ndir = HDAUDIO_PINDIR_IN;
1298 ctl[cnt].ctl_ndir = HDAUDIO_PINDIR_OUT;
1299 ctl[cnt++].ctl_dir = HDAUDIO_PINDIR_OUT;
1319 ctl[cnt].ctl_enable = true;
1320 ctl[cnt].ctl_widget = w;
1321 ctl[cnt].ctl_childwidget = cw;
1322 ctl[cnt].ctl_index = j;
1323 ctl[cnt].ctl_mute = mute;
1324 ctl[cnt].ctl_step = step;
1325 ctl[cnt].ctl_size = size;
1326 ctl[cnt].ctl_offset = offset;
1327 ctl[cnt].ctl_left = offset;
1328 ctl[cnt].ctl_right = offset;
1329 ctl[cnt].ctl_ndir = HDAUDIO_PINDIR_IN;
1330 ctl[cnt++].ctl_dir = HDAUDIO_PINDIR_IN;
1338 ctl[cnt].ctl_enable = true;
1339 ctl[cnt].ctl_widget = w;
1340 ctl[cnt].ctl_mute = mute;
1341 ctl[cnt].ctl_step = step;
1342 ctl[cnt].ctl_size = size;
1343 ctl[cnt].ctl_offset = offset;
1344 ctl[cnt].ctl_left = offset;
1345 ctl[cnt].ctl_right = offset;
1347 ctl[cnt].ctl_ndir = HDAUDIO_PINDIR_OUT;
1349 ctl[cnt].ctl_ndir = HDAUDIO_PINDIR_IN;
1350 ctl[cnt++].ctl_dir = HDAUDIO_PINDIR_IN;
1356 sc->sc_ctls = ctl;
1447 struct hdaudio_control *ctl;
1476 ctl = &sc->sc_ctls[i];
1477 if (ctl->ctl_enable == false)
1479 if (ctl->ctl_widget->w_enable == false ||
1480 (ctl->ctl_childwidget != NULL &&
1481 ctl->ctl_childwidget->w_enable == false)) {
1482 ctl->ctl_forcemute = 1;
1483 ctl->ctl_muted = HDAUDIO_AMP_MUTE_ALL;
1484 ctl->ctl_left = ctl->ctl_right = 0;
1485 ctl->ctl_enable = false;
1486 if (ctl->ctl_ndir == HDAUDIO_PINDIR_IN)
1487 ctl->ctl_widget->w_connsenable[
1488 ctl->ctl_index] = false;
1490 hda_trace(ctl->ctl_widget->w_afg,
1491 "disable ctl %d:%02X:%02X [widget disabled]\n",
1492 i, ctl->ctl_widget->w_nid,
1493 ctl->ctl_childwidget ?
1494 ctl->ctl_childwidget->w_nid : 0xff);
2058 hdafg_dump_ctl(const struct hdafg_softc *sc, const struct hdaudio_control *ctl)
2060 int type = ctl->ctl_widget ? ctl->ctl_widget->w_type : -1;
2061 int i = (int)(ctl - sc->sc_ctls);
2064 i, (ctl->ctl_widget ? ctl->ctl_widget->w_nid : -1), type,
2065 ctl->ctl_ndir == HDAUDIO_PINDIR_IN ? "in " : "out",
2066 ctl->ctl_dir == HDAUDIO_PINDIR_IN ? "in " : "out",
2067 ctl->ctl_index);
2069 if (ctl->ctl_childwidget)
2070 hda_print1(sc, " cnid %02X", ctl->ctl_childwidget->w_nid);
2075 ctl->ctl_mute, ctl->ctl_step, ctl->ctl_size,
2076 ctl->ctl_offset, ctl->ctl_enable == false ? " [DISABLED]" : "");
2108 struct hdaudio_control *ctl;
2137 ctl = hdafg_control_lookup(sc, w->w_nid,
2139 if (ctl && ctl->ctl_enable == true) {
2140 ctl->ctl_forcemute = 1;
2141 ctl->ctl_muted = HDAUDIO_AMP_MUTE_ALL;
2142 ctl->ctl_left = ctl->ctl_right = 0;
2143 ctl->ctl_enable = false;
2146 ctl = hdafg_control_lookup(sc, w->w_nid,
2148 if (ctl && ctl->ctl_enable == true) {
2149 ctl->ctl_forcemute = 1;
2150 ctl->ctl_muted = HDAUDIO_AMP_MUTE_ALL;
2151 ctl->ctl_left = ctl->ctl_right = 0;
2152 ctl->ctl_enable = false;
2171 ctl = hdafg_control_lookup(sc,
2173 if (ctl && ctl->ctl_enable == true) {
2174 ctl->ctl_forcemute = 1;
2175 ctl->ctl_muted =
2177 ctl->ctl_left =
2178 ctl->ctl_right = 0;
2179 ctl->ctl_enable = false;
2222 struct hdaudio_control *ctl;
2256 ctl = &sc->sc_ctls[i];
2257 if (ctl->ctl_enable == false || ctl->ctl_childwidget == NULL)
2259 if (ctl->ctl_widget->w_bindas == -2 ||
2260 ctl->ctl_childwidget->w_bindas == -2)
2262 if (ctl->ctl_widget->w_bindas !=
2263 ctl->ctl_childwidget->w_bindas ||
2264 (ctl->ctl_widget->w_bindseqmask &
2265 ctl->ctl_childwidget->w_bindseqmask) == 0) {
2266 ctl->ctl_forcemute = 1;
2267 ctl->ctl_muted = HDAUDIO_AMP_MUTE_ALL;
2268 ctl->ctl_left = ctl->ctl_right = 0;
2269 ctl->ctl_enable = false;
2270 if (ctl->ctl_ndir == HDAUDIO_PINDIR_IN) {
2271 hda_trace(sc, "disable ctl %d:%02X:%02X "
2273 i, ctl->ctl_widget->w_nid,
2274 ctl->ctl_widget->w_conns[ctl->ctl_index]);
2275 ctl->ctl_widget->w_connsenable[
2276 ctl->ctl_index] = false;
2286 struct hdaudio_control *ctl;
2290 ctl = &sc->sc_ctls[i];
2291 if (ctl->ctl_enable == false)
2293 if (ctl->ctl_widget->w_nid != nid)
2295 if (dir && ctl->ctl_ndir != dir)
2297 if (index >= 0 && ctl->ctl_ndir == HDAUDIO_PINDIR_IN &&
2298 ctl->ctl_dir == ctl->ctl_ndir &&
2299 ctl->ctl_index != index)
2303 return ctl;
2310 hdafg_control_amp_set1(struct hdaudio_control *ctl, int lmute, int rmute,
2313 struct hdafg_softc *sc = ctl->ctl_widget->w_afg;
2314 int index = ctl->ctl_index;
2320 hdaudio_command(sc->sc_codec, ctl->ctl_widget->w_nid,
2327 hdaudio_command(sc->sc_codec, ctl->ctl_widget->w_nid,
2332 hdafg_control_amp_set(struct hdaudio_control *ctl, uint32_t mute,
2339 ctl->ctl_muted = mute;
2341 ctl->ctl_left = left;
2343 ctl->ctl_right = right;
2346 if (ctl->ctl_forcemute) {
2350 lmute = HDAUDIO_AMP_LEFT_MUTED(ctl->ctl_muted);
2351 rmute = HDAUDIO_AMP_RIGHT_MUTED(ctl->ctl_muted);
2352 left = ctl->ctl_left;
2353 right = ctl->ctl_right;
2357 if (ctl->ctl_dir & HDAUDIO_PINDIR_OUT)
2358 hdafg_control_amp_set1(ctl, lmute, rmute, left, right, 0);
2359 if (ctl->ctl_dir & HDAUDIO_PINDIR_IN)
2360 hdafg_control_amp_set1(ctl, lmute, rmute, left, right, 1);
2369 const struct hdaudio_control *ctl)
2374 switch (ctl->ctl_widget->w_type) {
2379 w = ctl->ctl_childwidget;
2407 struct hdaudio_control *ctl;
2411 ctl = &sc->sc_ctls[i];
2412 //if (ctl->ctl_enable == false || ctl->ctl_audiomask != 0)
2413 if (ctl->ctl_enable == false)
2416 z = ctl->ctl_offset;
2417 if (z > ctl->ctl_step)
2418 z = ctl->ctl_step;
2420 if (hdafg_mixer_child_is_input(sc, ctl))
2421 ctl, HDAUDIO_AMP_MUTE_ALL, z, z);
2423 hdafg_control_amp_set(ctl, HDAUDIO_AMP_MUTE_NONE, z, z);
2592 struct hdaudio_control *ctl;
2612 * input ctl so care must be taken
2616 ctl = hdafg_control_amp_get(sc, w->w_nid,
2618 if (ctl) {
2619 if (HDAUDIO_CONTROL_GIVE(ctl) & need)
2620 ctl->ctl_audiomask |= (1 << audiodev);
2622 ctl->ctl_paudiomask |= (1 << audiodev);
2623 need &= ~HDAUDIO_CONTROL_GIVE(ctl);
2648 ctl = hdafg_control_amp_get(sc, w->w_nid,
2650 if (ctl) {
2651 if (HDAUDIO_CONTROL_GIVE(ctl) & need)
2652 ctl->ctl_audiomask |= (1 << audiodev);
2654 ctl->ctl_paudiomask |= (1 << audiodev);
2655 need &= ~HDAUDIO_CONTROL_GIVE(ctl);
2683 struct hdaudio_control *ctl;
2722 ctl = hdafg_control_amp_get(sc, w->w_nid,
2724 if (ctl) {
2725 if (HDAUDIO_CONTROL_GIVE(ctl) & need)
2726 ctl->ctl_audiomask |= (1 << audiodev);
2728 ctl->ctl_paudiomask |= (1 << audiodev);
2729 need &= ~HDAUDIO_CONTROL_GIVE(ctl);
2741 ctl = hdafg_control_amp_get(sc, w->w_nid,
2743 if (ctl) {
2744 if (HDAUDIO_CONTROL_GIVE(ctl) & tneed)
2745 ctl->ctl_audiomask |= (1 << audiodev);
2747 ctl->ctl_paudiomask |= (1 << audiodev);
2748 tneed &= ~HDAUDIO_CONTROL_GIVE(ctl);
2759 struct hdaudio_control *ctl;
2797 ctl = &sc->sc_ctls[i];
2798 if (ctl->ctl_audiomask == 0)
2799 ctl->ctl_audiomask = ctl->ctl_paudiomask;
2807 struct hdaudio_control *ctl, *masterctl = NULL;
2818 ctl = &sc->sc_ctls[i];
2819 if (ctl->ctl_enable == false ||
2820 ctl->ctl_audiomask == 0)
2822 audiomask |= ctl->ctl_audiomask;
2824 if (ctl->ctl_mute)
2926 ctl = &sc->sc_ctls[i];
2927 if (ctl->ctl_enable == false ||
2928 ctl->ctl_audiomask == 0)
2930 audiodev = ffs(ctl->ctl_audiomask) - 1;
2931 mx[index].mx_ctl = ctl;
2937 (ctl->ctl_step ? ctl->ctl_step : 1);
2977 if (ctl->ctl_mute) {
3862 struct hdaudio_control *ctl = sc->sc_ctls;
3898 if (ctl)
3899 kmem_free(ctl, sc->sc_nctls * sizeof(*ctl));
4131 struct hdaudio_control *ctl;
4137 ctl = mx->mx_ctl;
4138 if (ctl == NULL) {
4164 if (ctl->ctl_step == 0)
4167 divisor = 255 / ctl->ctl_step;
4169 hdafg_control_amp_set(ctl, HDAUDIO_AMP_MUTE_NONE,
4174 hdafg_control_amp_set(ctl,
4176 ctl->ctl_left, ctl->ctl_right);
4191 struct hdaudio_control *ctl;
4198 ctl = mx->mx_ctl;
4199 if (ctl == NULL) {
4225 if (ctl->ctl_step == 0)
4228 factor = 255 / ctl->ctl_step;
4230 mc->un.value.level[AUDIO_MIXER_LEVEL_LEFT] = ctl->ctl_left * factor;
4231 mc->un.value.level[AUDIO_MIXER_LEVEL_RIGHT] = ctl->ctl_right * factor;
4234 mc->un.ord = (ctl->ctl_muted || ctl->ctl_forcemute) ? 1 : 0;