#include <linux/bitfield.h>
#include <linux/bitops.h>
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/dma-mapping.h>
#include <linux/mfd/syscon.h>
#include <linux/mmc/host.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/pinctrl/consumer.h>
#include <linux/platform_data/tmio.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <linux/reset.h>
#include "tmio_mmc.h"
#define UNIPHIER_SD_CLK_CTL_DIV1024 …
#define UNIPHIER_SD_CLK_CTL_DIV1 …
#define UNIPHIER_SD_CLKCTL_OFFEN …
#define UNIPHIER_SD_CC_EXT_MODE …
#define UNIPHIER_SD_CC_EXT_MODE_DMA …
#define UNIPHIER_SD_HOST_MODE …
#define UNIPHIER_SD_VOLT …
#define UNIPHIER_SD_VOLT_MASK …
#define UNIPHIER_SD_VOLT_OFF …
#define UNIPHIER_SD_VOLT_330 …
#define UNIPHIER_SD_VOLT_180 …
#define UNIPHIER_SD_DMA_MODE …
#define UNIPHIER_SD_DMA_MODE_DIR_MASK …
#define UNIPHIER_SD_DMA_MODE_DIR_TO_DEV …
#define UNIPHIER_SD_DMA_MODE_DIR_FROM_DEV …
#define UNIPHIER_SD_DMA_MODE_WIDTH_MASK …
#define UNIPHIER_SD_DMA_MODE_WIDTH_8 …
#define UNIPHIER_SD_DMA_MODE_WIDTH_16 …
#define UNIPHIER_SD_DMA_MODE_WIDTH_32 …
#define UNIPHIER_SD_DMA_MODE_WIDTH_64 …
#define UNIPHIER_SD_DMA_MODE_ADDR_INC …
#define UNIPHIER_SD_DMA_CTL …
#define UNIPHIER_SD_DMA_CTL_START …
#define UNIPHIER_SD_DMA_RST …
#define UNIPHIER_SD_DMA_RST_CH1 …
#define UNIPHIER_SD_DMA_RST_CH0 …
#define UNIPHIER_SD_DMA_ADDR_L …
#define UNIPHIER_SD_DMA_ADDR_H …
#define UNIPHIER_SDCTRL_CHOFFSET …
#define UNIPHIER_SDCTRL_MODE …
#define UNIPHIER_SDCTRL_MODE_UHS1MOD …
#define UNIPHIER_SDCTRL_MODE_SDRSEL …
#define UNIPHIER_SD_CAP_EXTENDED_IP …
#define UNIPHIER_SD_CAP_BROKEN_DMA_RX …
struct uniphier_sd_priv { … };
static void *uniphier_sd_priv(struct tmio_mmc_host *host)
{ … }
static void uniphier_sd_dma_endisable(struct tmio_mmc_host *host, int enable)
{ … }
static void uniphier_sd_external_dma_issue(struct work_struct *t)
{ … }
static void uniphier_sd_external_dma_callback(void *param,
const struct dmaengine_result *result)
{ … }
static void uniphier_sd_external_dma_start(struct tmio_mmc_host *host,
struct mmc_data *data)
{ … }
static void uniphier_sd_external_dma_enable(struct tmio_mmc_host *host,
bool enable)
{ … }
static void uniphier_sd_external_dma_request(struct tmio_mmc_host *host,
struct tmio_mmc_data *pdata)
{ … }
static void uniphier_sd_external_dma_release(struct tmio_mmc_host *host)
{ … }
static void uniphier_sd_external_dma_abort(struct tmio_mmc_host *host)
{ … }
static void uniphier_sd_external_dma_dataend(struct tmio_mmc_host *host)
{ … }
static const struct tmio_mmc_dma_ops uniphier_sd_external_dma_ops = …;
static void uniphier_sd_internal_dma_issue(struct work_struct *t)
{ … }
static void uniphier_sd_internal_dma_start(struct tmio_mmc_host *host,
struct mmc_data *data)
{ … }
static void uniphier_sd_internal_dma_enable(struct tmio_mmc_host *host,
bool enable)
{ … }
static void uniphier_sd_internal_dma_request(struct tmio_mmc_host *host,
struct tmio_mmc_data *pdata)
{ … }
static void uniphier_sd_internal_dma_release(struct tmio_mmc_host *host)
{ … }
static void uniphier_sd_internal_dma_abort(struct tmio_mmc_host *host)
{ … }
static void uniphier_sd_internal_dma_dataend(struct tmio_mmc_host *host)
{ … }
static const struct tmio_mmc_dma_ops uniphier_sd_internal_dma_ops = …;
static int uniphier_sd_clk_enable(struct tmio_mmc_host *host)
{ … }
static void uniphier_sd_clk_disable(struct tmio_mmc_host *host)
{ … }
static void uniphier_sd_hw_reset(struct mmc_host *mmc)
{ … }
static void uniphier_sd_speed_switch(struct tmio_mmc_host *host)
{ … }
static void uniphier_sd_uhs_enable(struct tmio_mmc_host *host, bool uhs_en)
{ … }
static void uniphier_sd_set_clock(struct tmio_mmc_host *host,
unsigned int clock)
{ … }
static void uniphier_sd_host_init(struct tmio_mmc_host *host)
{ … }
static int uniphier_sd_start_signal_voltage_switch(struct mmc_host *mmc,
struct mmc_ios *ios)
{ … }
static int uniphier_sd_uhs_init(struct tmio_mmc_host *host)
{ … }
static int uniphier_sd_probe(struct platform_device *pdev)
{ … }
static void uniphier_sd_remove(struct platform_device *pdev)
{ … }
static const struct of_device_id uniphier_sd_match[] = …;
MODULE_DEVICE_TABLE(of, uniphier_sd_match);
static struct platform_driver uniphier_sd_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;