mmc_host_clk_init(host);
+ host->slot.cd_irq = -EINVAL;
+
spin_lock_init(&host->lock);
init_waitqueue_head(&host->wq);
INIT_DELAYED_WORK(&host->detect, mmc_rescan);
goto eirqreq;
ctx->cd_gpio = gpio;
- host->hotplug.irq = irq;
- host->hotplug.handler_priv = ctx;
+ host->slot.cd_irq = irq;
+ host->slot.handler_priv = ctx;
return 0;
void mmc_gpio_free_cd(struct mmc_host *host)
{
- struct mmc_gpio *ctx = host->hotplug.handler_priv;
+ struct mmc_gpio *ctx = host->slot.handler_priv;
if (!ctx)
return;
- free_irq(host->hotplug.irq, host);
+ free_irq(host->slot.cd_irq, host);
gpio_free(ctx->cd_gpio);
kfree(ctx);
}
int (*err_check) (struct mmc_card *, struct mmc_async_req *);
};
-struct mmc_hotplug {
- unsigned int irq;
+/**
+ * struct mmc_slot - MMC slot functions
+ *
+ * @cd_irq: MMC/SD-card slot hotplug detection IRQ or -EINVAL
+ * @handler_priv: MMC/SD-card slot context
+ *
+ * Some MMC/SD host controllers implement slot-functions like card and
+ * write-protect detection natively. However, a large number of controllers
+ * leave these functions to the CPU. This struct provides a hook to attach
+ * such slot-function drivers.
+ */
+struct mmc_slot {
+ int cd_irq;
void *handler_priv;
};
struct delayed_work detect;
int detect_change; /* card detect flag */
- struct mmc_hotplug hotplug;
+ struct mmc_slot slot;
const struct mmc_bus_ops *bus_ops; /* current bus driver */
unsigned int bus_refs; /* reference counter */