audio: fix pc speaker init
Get rid of the pcspk_state global, allow pc speaker be added using "-device isa-pcspk". Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-id: 20190124110810.1040-1-kraxel@redhat.com
This commit is contained in:
parent
f6b06fccee
commit
bd56d37884
@ -57,7 +57,6 @@ typedef struct {
|
||||
} PCSpkState;
|
||||
|
||||
static const char *s_spk = "pcspk";
|
||||
static PCSpkState *pcspk_state;
|
||||
|
||||
static inline void generate_samples(PCSpkState *s)
|
||||
{
|
||||
@ -111,22 +110,6 @@ static void pcspk_callback(void *opaque, int free)
|
||||
}
|
||||
}
|
||||
|
||||
static int pcspk_audio_init(ISABus *bus)
|
||||
{
|
||||
PCSpkState *s = pcspk_state;
|
||||
struct audsettings as = {PCSPK_SAMPLE_RATE, 1, AUD_FMT_U8, 0};
|
||||
|
||||
AUD_register_card(s_spk, &s->card);
|
||||
|
||||
s->voice = AUD_open_out(&s->card, s->voice, s_spk, s, pcspk_callback, &as);
|
||||
if (!s->voice) {
|
||||
AUD_log(s_spk, "Could not open voice\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static uint64_t pcspk_io_read(void *opaque, hwaddr addr,
|
||||
unsigned size)
|
||||
{
|
||||
@ -179,12 +162,20 @@ static void pcspk_initfn(Object *obj)
|
||||
|
||||
static void pcspk_realizefn(DeviceState *dev, Error **errp)
|
||||
{
|
||||
struct audsettings as = {PCSPK_SAMPLE_RATE, 1, AUD_FMT_U8, 0};
|
||||
ISADevice *isadev = ISA_DEVICE(dev);
|
||||
PCSpkState *s = PC_SPEAKER(dev);
|
||||
|
||||
isa_register_ioport(isadev, &s->ioport, s->iobase);
|
||||
|
||||
pcspk_state = s;
|
||||
AUD_register_card(s_spk, &s->card);
|
||||
|
||||
s->voice = AUD_open_out(&s->card, s->voice, s_spk, s, pcspk_callback, &as);
|
||||
if (!s->voice) {
|
||||
error_setg(errp, "Initializing audio voice failed");
|
||||
AUD_remove_card(&s->card);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static bool migrate_needed(void *opaque)
|
||||
@ -221,8 +212,6 @@ static void pcspk_class_initfn(ObjectClass *klass, void *data)
|
||||
set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
|
||||
dc->vmsd = &vmstate_spk;
|
||||
dc->props = pcspk_properties;
|
||||
/* Reason: realize sets global pcspk_state */
|
||||
dc->user_creatable = false;
|
||||
}
|
||||
|
||||
static const TypeInfo pcspk_info = {
|
||||
@ -233,6 +222,12 @@ static const TypeInfo pcspk_info = {
|
||||
.class_init = pcspk_class_initfn,
|
||||
};
|
||||
|
||||
static int pcspk_audio_init(ISABus *bus)
|
||||
{
|
||||
isa_create_simple(bus, TYPE_PC_SPEAKER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void pcspk_register(void)
|
||||
{
|
||||
type_register_static(&pcspk_info);
|
||||
|
Loading…
Reference in New Issue
Block a user