#include <linux/bitops.h>
#include <linux/bitfield.h>
#include <linux/clk.h>
#include <linux/mfd/syscon.h>
#include <linux/mmc/host.h>
#include <linux/module.h>
#include <linux/of_address.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <linux/regulator/consumer.h>
#include "dw_mmc.h"
#include "dw_mmc-pltfm.h"
#define AO_SCTRL_SEL18 …
#define AO_SCTRL_CTRL3 …
#define DWMMC_SDIO_ID …
#define SOC_SCTRL_SCPERCTRL5 …
#define SDCARD_IO_SEL18 …
#define SDCARD_RD_THRESHOLD …
#define GENCLK_DIV …
#define GPIO_CLK_ENABLE …
#define GPIO_CLK_DIV_MASK …
#define GPIO_USE_SAMPLE_DLY_MASK …
#define UHS_REG_EXT_SAMPLE_PHASE_MASK …
#define UHS_REG_EXT_SAMPLE_DRVPHASE_MASK …
#define UHS_REG_EXT_SAMPLE_DLY_MASK …
#define TIMING_MODE …
#define TIMING_CFG_NUM …
#define NUM_PHASES …
#define ENABLE_SHIFT_MIN_SMPL …
#define ENABLE_SHIFT_MAX_SMPL …
#define USE_DLY_MIN_SMPL …
#define USE_DLY_MAX_SMPL …
struct k3_priv { … };
static unsigned long dw_mci_hi6220_caps[] = …;
struct hs_timing { … };
static struct hs_timing hs_timing_cfg[TIMING_MODE][TIMING_CFG_NUM] = …;
static void dw_mci_k3_set_ios(struct dw_mci *host, struct mmc_ios *ios)
{ … }
static const struct dw_mci_drv_data k3_drv_data = …;
static int dw_mci_hi6220_parse_dt(struct dw_mci *host)
{ … }
static int dw_mci_hi6220_switch_voltage(struct mmc_host *mmc, struct mmc_ios *ios)
{ … }
static void dw_mci_hi6220_set_ios(struct dw_mci *host, struct mmc_ios *ios)
{ … }
static int dw_mci_hi6220_execute_tuning(struct dw_mci_slot *slot, u32 opcode)
{ … }
static const struct dw_mci_drv_data hi6220_data = …;
static void dw_mci_hs_set_timing(struct dw_mci *host, int timing,
int smpl_phase)
{ … }
static int dw_mci_hi3660_init(struct dw_mci *host)
{ … }
static int dw_mci_set_sel18(struct dw_mci *host, bool set)
{ … }
static void dw_mci_hi3660_set_ios(struct dw_mci *host, struct mmc_ios *ios)
{ … }
static int dw_mci_get_best_clksmpl(unsigned int sample_flag)
{ … }
static int dw_mci_hi3660_execute_tuning(struct dw_mci_slot *slot, u32 opcode)
{ … }
static int dw_mci_hi3660_switch_voltage(struct mmc_host *mmc,
struct mmc_ios *ios)
{ … }
static const struct dw_mci_drv_data hi3660_data = …;
static const struct of_device_id dw_mci_k3_match[] = …;
MODULE_DEVICE_TABLE(of, dw_mci_k3_match);
static int dw_mci_k3_probe(struct platform_device *pdev)
{ … }
static const struct dev_pm_ops dw_mci_k3_dev_pm_ops = …;
static struct platform_driver dw_mci_k3_pltfm_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_ALIAS(…) …;