]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/mmc/core/core.h
mmc: check error bits before command completion
[linux-2.6-omap-h63xx.git] / drivers / mmc / core / core.h
index 1c1066342fbab4350ecb1a578412ae28f676b3ad..ae006b30dd86bdbb3fdeb3367fc66c83847e711d 100644 (file)
 
 #define MMC_CMD_RETRIES        3
 
+struct mmc_bus_ops {
+       void (*remove)(struct mmc_host *);
+       void (*detect)(struct mmc_host *);
+       int (*sysfs_add)(struct mmc_host *, struct mmc_card *card);
+       void (*sysfs_remove)(struct mmc_host *, struct mmc_card *card);
+       void (*suspend)(struct mmc_host *);
+       void (*resume)(struct mmc_host *);
+};
+
+void mmc_attach_bus(struct mmc_host *host, const struct mmc_bus_ops *ops);
+void mmc_detach_bus(struct mmc_host *host);
+
+void __mmc_release_bus(struct mmc_host *host);
+
+static inline void mmc_bus_get(struct mmc_host *host)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&host->lock, flags);
+       host->bus_refs++;
+       spin_unlock_irqrestore(&host->lock, flags);
+}
+
+static inline void mmc_bus_put(struct mmc_host *host)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&host->lock, flags);
+       host->bus_refs--;
+       if ((host->bus_refs == 0) && host->bus_ops)
+               __mmc_release_bus(host);
+       spin_unlock_irqrestore(&host->lock, flags);
+}
+
 void mmc_set_chip_select(struct mmc_host *host, int mode);
+void mmc_set_clock(struct mmc_host *host, unsigned int hz);
+void mmc_set_bus_mode(struct mmc_host *host, unsigned int mode);
+void mmc_set_bus_width(struct mmc_host *host, unsigned int width);
+u32 mmc_select_voltage(struct mmc_host *host, u32 ocr);
+void mmc_set_timing(struct mmc_host *host, unsigned int timing);
 
 static inline void mmc_delay(unsigned int ms)
 {
@@ -27,5 +66,9 @@ static inline void mmc_delay(unsigned int ms)
        }
 }
 
+void mmc_rescan(struct work_struct *work);
+void mmc_start_host(struct mmc_host *host);
+void mmc_stop_host(struct mmc_host *host);
+
 #endif