audio/intel-hda: Fix Inheritance hierachy

The ich6 and ich9 variants either need to inherit one from the other,
or both from a common base class, otherwise its not possible to create
a QOM cast macro for use by the shared implementation functions.
Went for option B, with a common base class.

Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Reviewed-by: Andreas Färber <afaerber@suse.de>
Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
Message-id: 54453b6aa8afa1a76b2ec1932f1d7fd25205d0bc.1370496582.git.peter.crosthwaite@xilinx.com
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Peter Crosthwaite 2013-06-06 15:34:08 +10:00 committed by Anthony Liguori
parent 6e5c4540d1
commit 062db74023

View File

@ -189,6 +189,8 @@ struct IntelHDAState {
uint32_t msi; uint32_t msi;
}; };
#define TYPE_INTEL_HDA_GENERIC "intel-hda-generic"
struct IntelHDAReg { struct IntelHDAReg {
const char *name; /* register name */ const char *name; /* register name */
uint32_t size; /* size in bytes */ uint32_t size; /* size in bytes */
@ -1232,7 +1234,7 @@ static Property intel_hda_properties[] = {
DEFINE_PROP_END_OF_LIST(), DEFINE_PROP_END_OF_LIST(),
}; };
static void intel_hda_class_init_common(ObjectClass *klass) static void intel_hda_class_init(ObjectClass *klass, void *data)
{ {
DeviceClass *dc = DEVICE_CLASS(klass); DeviceClass *dc = DEVICE_CLASS(klass);
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
@ -1251,7 +1253,6 @@ static void intel_hda_class_init_ich6(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass); DeviceClass *dc = DEVICE_CLASS(klass);
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
intel_hda_class_init_common(klass);
k->device_id = 0x2668; k->device_id = 0x2668;
k->revision = 1; k->revision = 1;
dc->desc = "Intel HD Audio Controller (ich6)"; dc->desc = "Intel HD Audio Controller (ich6)";
@ -1262,23 +1263,28 @@ static void intel_hda_class_init_ich9(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass); DeviceClass *dc = DEVICE_CLASS(klass);
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
intel_hda_class_init_common(klass);
k->device_id = 0x293e; k->device_id = 0x293e;
k->revision = 3; k->revision = 3;
dc->desc = "Intel HD Audio Controller (ich9)"; dc->desc = "Intel HD Audio Controller (ich9)";
} }
static const TypeInfo intel_hda_info_ich6 = { static const TypeInfo intel_hda_info = {
.name = "intel-hda", .name = TYPE_INTEL_HDA_GENERIC,
.parent = TYPE_PCI_DEVICE, .parent = TYPE_PCI_DEVICE,
.instance_size = sizeof(IntelHDAState), .instance_size = sizeof(IntelHDAState),
.class_init = intel_hda_class_init,
.abstract = true,
};
static const TypeInfo intel_hda_info_ich6 = {
.name = "intel-hda",
.parent = TYPE_INTEL_HDA_GENERIC,
.class_init = intel_hda_class_init_ich6, .class_init = intel_hda_class_init_ich6,
}; };
static const TypeInfo intel_hda_info_ich9 = { static const TypeInfo intel_hda_info_ich9 = {
.name = "ich9-intel-hda", .name = "ich9-intel-hda",
.parent = TYPE_PCI_DEVICE, .parent = TYPE_INTEL_HDA_GENERIC,
.instance_size = sizeof(IntelHDAState),
.class_init = intel_hda_class_init_ich9, .class_init = intel_hda_class_init_ich9,
}; };
@ -1320,6 +1326,7 @@ static int intel_hda_and_codec_init(PCIBus *bus)
static void intel_hda_register_types(void) static void intel_hda_register_types(void)
{ {
type_register_static(&hda_codec_bus_info); type_register_static(&hda_codec_bus_info);
type_register_static(&intel_hda_info);
type_register_static(&intel_hda_info_ich6); type_register_static(&intel_hda_info_ich6);
type_register_static(&intel_hda_info_ich9); type_register_static(&intel_hda_info_ich9);
type_register_static(&hda_codec_device_type_info); type_register_static(&hda_codec_device_type_info);