socsvn commit: r306347 - soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve
iateaca at FreeBSD.org
iateaca at FreeBSD.org
Sat Jul 16 15:00:16 UTC 2016
Author: iateaca
Date: Sat Jul 16 15:00:14 2016
New Revision: 306347
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=306347
Log:
implement the HDA_CMD_VERB_GET_CONV_STREAM_CHAN and HDA_CMD_VERB_GET_CONV_FMT verbs
stop the stream audio context when the stream tag is set to 0
M bhyve/hda_codec.c
Modified:
soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c
Modified: soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c
==============================================================================
--- soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c Sat Jul 16 13:26:18 2016 (r306346)
+++ soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c Sat Jul 16 15:00:14 2016 (r306347)
@@ -388,13 +388,18 @@
sc = (struct hda_codec_softc *)hci->priv;
assert(sc);
- DPRINTF("run: %d, stream: 0x%x, dir: %d\n", run, stream, dir);
-
/* TODO search the right stream
* For now, there is only one stream
*/
st = &sc->streams[HDA_CODEC_STREAM_OUTPUT];
+ DPRINTF("run: %d, stream: 0x%x, st->stream: 0x%x dir: %d\n", run, stream, st->stream, dir);
+
+ if (!st->stream) {
+ DPRINTF("Stream not set\n");
+ return 0;
+ }
+
if (stream != st->stream)
return -1;
@@ -467,6 +472,9 @@
st = &sc->streams[HDA_CODEC_STREAM_OUTPUT];
switch (verb) {
+ case HDA_CMD_VERB_GET_CONV_FMT:
+ res = st->fmt;
+ break;
case HDA_CMD_VERB_SET_CONV_FMT:
st->fmt = payload;
break;
@@ -498,9 +506,15 @@
DPRINTF("SET_AMP_GAIN_MUTE_RIGHT: mute: 0x%x gain: 0x%x\n", mute, gain);
}
break;
+ case HDA_CMD_VERB_GET_CONV_STREAM_CHAN:
+ res = (st->stream << 4) | st->channel;
+ break;
case HDA_CMD_VERB_SET_CONV_STREAM_CHAN:
st->channel = payload & 0x0f;
st->stream = (payload >> 4) & 0x0f;
+ DPRINTF("st->channel: 0x%x st->stream: 0x%x\n", st->channel, st->stream);
+ if (!st->stream)
+ hda_audio_ctxt_stop(&st->actx);
break;
default:
DPRINTF("Unknown VERB: 0x%x\n", verb);
More information about the svn-soc-all
mailing list