Message ID | 1289223970-31221-3-git-send-email-kraxel@redhat.com |
---|---|
State | New |
Headers | show |
On Mon, 8 Nov 2010, Gerd Hoffmann wrote: > Add exit callback to the driver. Unregister the sound card properly > on exit. > > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> > --- > hw/hda-audio.c | 23 +++++++++++++++++++++++ > 1 files changed, 23 insertions(+), 0 deletions(-) > > diff --git a/hw/hda-audio.c b/hw/hda-audio.c > index 1035774..5593c84 100644 > --- a/hw/hda-audio.c > +++ b/hw/hda-audio.c > @@ -808,6 +808,27 @@ static int hda_audio_init(HDACodecDevice *hda, const struct desc_codec *desc) > return 0; > } > > +static int hda_audio_exit(HDACodecDevice *hda) > +{ > + HDAAudioState *a = DO_UPCAST(HDAAudioState, hda, hda); > + HDAAudioStream *st; > + int i; > + > + dprint(a, 1, "%s\n", __FUNCTION__); > + for (i = 0; i < ARRAY_SIZE(a->st); i++) { > + st = a->st + i; > + if (st->node == NULL) > + continue; Braces > + if (st->output) { > + AUD_close_out(&a->card, st->voice.out); > + } else { > + AUD_close_in(&a->card, st->voice.in); > + } > + } > + AUD_remove_card(&a->card); > + return 0; > +} > + > static int hda_audio_post_load(void *opaque, int version) > { > HDAAudioState *a = opaque; > @@ -879,6 +900,7 @@ static HDACodecDeviceInfo hda_audio_info_output = { > .qdev.vmsd = &vmstate_hda_audio, > .qdev.props = hda_audio_properties, > .init = hda_audio_init_output, > + .exit = hda_audio_exit, > .command = hda_audio_command, > .stream = hda_audio_stream, > }; > @@ -890,6 +912,7 @@ static HDACodecDeviceInfo hda_audio_info_duplex = { > .qdev.vmsd = &vmstate_hda_audio, > .qdev.props = hda_audio_properties, > .init = hda_audio_init_duplex, > + .exit = hda_audio_exit, > .command = hda_audio_command, > .stream = hda_audio_stream, > }; >
diff --git a/hw/hda-audio.c b/hw/hda-audio.c index 1035774..5593c84 100644 --- a/hw/hda-audio.c +++ b/hw/hda-audio.c @@ -808,6 +808,27 @@ static int hda_audio_init(HDACodecDevice *hda, const struct desc_codec *desc) return 0; } +static int hda_audio_exit(HDACodecDevice *hda) +{ + HDAAudioState *a = DO_UPCAST(HDAAudioState, hda, hda); + HDAAudioStream *st; + int i; + + dprint(a, 1, "%s\n", __FUNCTION__); + for (i = 0; i < ARRAY_SIZE(a->st); i++) { + st = a->st + i; + if (st->node == NULL) + continue; + if (st->output) { + AUD_close_out(&a->card, st->voice.out); + } else { + AUD_close_in(&a->card, st->voice.in); + } + } + AUD_remove_card(&a->card); + return 0; +} + static int hda_audio_post_load(void *opaque, int version) { HDAAudioState *a = opaque; @@ -879,6 +900,7 @@ static HDACodecDeviceInfo hda_audio_info_output = { .qdev.vmsd = &vmstate_hda_audio, .qdev.props = hda_audio_properties, .init = hda_audio_init_output, + .exit = hda_audio_exit, .command = hda_audio_command, .stream = hda_audio_stream, }; @@ -890,6 +912,7 @@ static HDACodecDeviceInfo hda_audio_info_duplex = { .qdev.vmsd = &vmstate_hda_audio, .qdev.props = hda_audio_properties, .init = hda_audio_init_duplex, + .exit = hda_audio_exit, .command = hda_audio_command, .stream = hda_audio_stream, };
Add exit callback to the driver. Unregister the sound card properly on exit. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- hw/hda-audio.c | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+), 0 deletions(-)