#include <linux/bits.h>
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/dma-mapping.h>
#include <linux/interrupt.h>
#include <linux/iopoll.h>
#include <linux/litex.h>
#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/mmc/host.h>
#include <linux/mmc/mmc.h>
#include <linux/mmc/sd.h>
#define LITEX_PHY_CARDDETECT …
#define LITEX_PHY_CLOCKERDIV …
#define LITEX_PHY_INITIALIZE …
#define LITEX_PHY_WRITESTATUS …
#define LITEX_CORE_CMDARG …
#define LITEX_CORE_CMDCMD …
#define LITEX_CORE_CMDSND …
#define LITEX_CORE_CMDRSP …
#define LITEX_CORE_CMDEVT …
#define LITEX_CORE_DATEVT …
#define LITEX_CORE_BLKLEN …
#define LITEX_CORE_BLKCNT …
#define LITEX_BLK2MEM_BASE …
#define LITEX_BLK2MEM_LEN …
#define LITEX_BLK2MEM_ENA …
#define LITEX_BLK2MEM_DONE …
#define LITEX_BLK2MEM_LOOP …
#define LITEX_MEM2BLK_BASE …
#define LITEX_MEM2BLK_LEN …
#define LITEX_MEM2BLK_ENA …
#define LITEX_MEM2BLK_DONE …
#define LITEX_MEM2BLK_LOOP …
#define LITEX_MEM2BLK …
#define LITEX_IRQ_STATUS …
#define LITEX_IRQ_PENDING …
#define LITEX_IRQ_ENABLE …
#define SD_CTL_DATA_XFER_NONE …
#define SD_CTL_DATA_XFER_READ …
#define SD_CTL_DATA_XFER_WRITE …
#define SD_CTL_RESP_NONE …
#define SD_CTL_RESP_SHORT …
#define SD_CTL_RESP_LONG …
#define SD_CTL_RESP_SHORT_BUSY …
#define SD_BIT_DONE …
#define SD_BIT_WR_ERR …
#define SD_BIT_TIMEOUT …
#define SD_BIT_CRC_ERR …
#define SD_SLEEP_US …
#define SD_TIMEOUT_US …
#define SDIRQ_CARD_DETECT …
#define SDIRQ_SD_TO_MEM_DONE …
#define SDIRQ_MEM_TO_SD_DONE …
#define SDIRQ_CMD_DONE …
struct litex_mmc_host { … };
static int litex_mmc_sdcard_wait_done(void __iomem *reg, struct device *dev)
{ … }
static int litex_mmc_send_cmd(struct litex_mmc_host *host,
u8 cmd, u32 arg, u8 response_len, u8 transfer)
{ … }
static int litex_mmc_send_app_cmd(struct litex_mmc_host *host)
{ … }
static int litex_mmc_send_set_bus_w_cmd(struct litex_mmc_host *host, u32 width)
{ … }
static int litex_mmc_set_bus_width(struct litex_mmc_host *host)
{ … }
static int litex_mmc_get_cd(struct mmc_host *mmc)
{ … }
static irqreturn_t litex_mmc_interrupt(int irq, void *arg)
{ … }
static u32 litex_mmc_response_len(struct mmc_command *cmd)
{ … }
static void litex_mmc_do_dma(struct litex_mmc_host *host, struct mmc_data *data,
unsigned int *len, bool *direct, u8 *transfer)
{ … }
static void litex_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
{ … }
static void litex_mmc_setclk(struct litex_mmc_host *host, unsigned int freq)
{ … }
static void litex_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
{ … }
static const struct mmc_host_ops litex_mmc_ops = …;
static int litex_mmc_irq_init(struct platform_device *pdev,
struct litex_mmc_host *host)
{ … }
static void litex_mmc_free_host_wrapper(void *mmc)
{ … }
static int litex_mmc_probe(struct platform_device *pdev)
{ … }
static void litex_mmc_remove(struct platform_device *pdev)
{ … }
static const struct of_device_id litex_match[] = …;
MODULE_DEVICE_TABLE(of, litex_match);
static struct platform_driver litex_mmc_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;