}
for (i = 0; i < FSL_IMX25_NUM_ESDHCS; i++) {
- object_initialize_child(obj, "sdhc[*]", &s->esdhc[i], TYPE_IMX_USDHC);
+ object_initialize_child(obj, "sdhc[*]", &s->esdhc[i],
+ TYPE_FSL_ESDHC_LE);
}
for (i = 0; i < FSL_IMX25_NUM_USBS; i++) {
{ FSL_IMX25_ESDHC2_ADDR, FSL_IMX25_ESDHC2_IRQ },
};
- object_property_set_uint(OBJECT(&s->esdhc[i]), "sd-spec-version", 2,
- &error_abort);
object_property_set_uint(OBJECT(&s->esdhc[i]), "capareg",
IMX25_ESDHC_CAPABILITIES, &error_abort);
- object_property_set_uint(OBJECT(&s->esdhc[i]), "vendor",
- SDHCI_VENDOR_FSL, &error_abort);
if (!sysbus_realize(SYS_BUS_DEVICE(&s->esdhc[i]), errp)) {
return;
}
qdev_prop_set_uint8(dev, "vendor", SDHCI_VENDOR_FSL);
}
+static const MemoryRegionOps esdhc_mmio_le_ops = {
+ .read = esdhc_read,
+ .write = esdhc_write,
+ .impl = {
+ .min_access_size = 4,
+ .max_access_size = 4,
+ },
+ .valid = {
+ .min_access_size = 1,
+ .max_access_size = 4,
+ .unaligned = false
+ },
+ .endianness = DEVICE_LITTLE_ENDIAN,
+};
+
+static void fsl_esdhc_le_init(Object *obj)
+{
+ SDHCIState *s = SYSBUS_SDHCI(obj);
+ DeviceState *dev = DEVICE(obj);
+
+ s->io_ops = &esdhc_mmio_le_ops;
+ s->quirks = SDHCI_QUIRK_NO_BUSY_IRQ;
+ qdev_prop_set_uint8(dev, "sd-spec-version", 2);
+ qdev_prop_set_uint8(dev, "vendor", SDHCI_VENDOR_FSL);
+}
+
static const MemoryRegionOps usdhc_mmio_ops = {
.read = esdhc_read,
.write = esdhc_write,
.parent = TYPE_SYSBUS_SDHCI,
.instance_init = fsl_esdhc_be_init,
},
+ {
+ .name = TYPE_FSL_ESDHC_LE,
+ .parent = TYPE_SYSBUS_SDHCI,
+ .instance_init = fsl_esdhc_le_init,
+ },
{
.name = TYPE_IMX_USDHC,
.parent = TYPE_SYSBUS_SDHCI,