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>
master
Peter Crosthwaite 2013-06-06 15:34:08 +10:00 committed by Anthony Liguori
parent 6e5c4540d1
commit 062db74023
1 changed files with 14 additions and 7 deletions

View File

@ -189,6 +189,8 @@ struct IntelHDAState {
uint32_t msi;
};
#define TYPE_INTEL_HDA_GENERIC "intel-hda-generic"
struct IntelHDAReg {
const char *name; /* register name */
uint32_t size; /* size in bytes */
@ -1232,7 +1234,7 @@ static Property intel_hda_properties[] = {
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);
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);
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
intel_hda_class_init_common(klass);
k->device_id = 0x2668;
k->revision = 1;
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);
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
intel_hda_class_init_common(klass);
k->device_id = 0x293e;
k->revision = 3;
dc->desc = "Intel HD Audio Controller (ich9)";
}
static const TypeInfo intel_hda_info_ich6 = {
.name = "intel-hda",
static const TypeInfo intel_hda_info = {
.name = TYPE_INTEL_HDA_GENERIC,
.parent = TYPE_PCI_DEVICE,
.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,
};
static const TypeInfo intel_hda_info_ich9 = {
.name = "ich9-intel-hda",
.parent = TYPE_PCI_DEVICE,
.instance_size = sizeof(IntelHDAState),
.parent = TYPE_INTEL_HDA_GENERIC,
.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)
{
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_ich9);
type_register_static(&hda_codec_device_type_info);