Allow to enforce implementations quirks by the class. All TYPE_IMX_USDHC instances use the quirk: move it to the class layer.
Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org> --- include/hw/sd/sdhci.h | 2 ++ hw/sd/sdhci.c | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/hw/sd/sdhci.h b/include/hw/sd/sdhci.h index c42aeab6848..ee1e7ef4b10 100644 --- a/include/hw/sd/sdhci.h +++ b/include/hw/sd/sdhci.h @@ -116,6 +116,8 @@ struct SDHCIClass { PCIDeviceClass pci_parent_class; SysBusDeviceClass sbd_parent_class; }; + + uint32_t quirks; }; /* diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c index 176bee6b8f5..570d825d130 100644 --- a/hw/sd/sdhci.c +++ b/hw/sd/sdhci.c @@ -1427,6 +1427,7 @@ void sdhci_initfn(SDHCIState *s) sdhci_raise_insertion_irq, s); s->transfer_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, sdhci_data_transfer, s); + s->quirks = s->sc->quirks; s->io_ops = &sdhci_mmio_le_ops; } @@ -1888,7 +1889,15 @@ static void imx_usdhc_init(Object *obj) SDHCIState *s = SYSBUS_SDHCI(obj); s->io_ops = &usdhc_mmio_ops; - s->quirks = BIT(SDHCI_QUIRK_NO_BUSY_IRQ); +} + +static void imx_usdhc_class_init(ObjectClass *oc, void *data) +{ + SDHCIClass *sc = SYSBUS_SDHCI_CLASS(oc); + + sc->quirks = BIT(SDHCI_QUIRK_NO_BUSY_IRQ); + + sdhci_common_class_init(oc, data); } /* --- qdev Samsung s3c --- */ @@ -1969,6 +1978,7 @@ static const TypeInfo sdhci_types[] = { .name = TYPE_IMX_USDHC, .parent = TYPE_SYSBUS_SDHCI, .instance_init = imx_usdhc_init, + .class_init = imx_usdhc_class_init, }, { .name = TYPE_S3C_SDHCI, -- 2.47.1