#include <linux/io.h>
#include <linux/iopoll.h>
#include <linux/mmc/host.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/bitops.h>
#include <linux/delay.h>
#include "sdhci-cqhci.h"
#include "sdhci-pltfm.h"
#include "cqhci.h"
#define SDHCI_VENDOR …
#define SDHCI_VENDOR_ENHANCED_STRB …
#define SDHCI_VENDOR_GATE_SDCLK_EN …
#define BRCMSTB_MATCH_FLAGS_NO_64BIT …
#define BRCMSTB_MATCH_FLAGS_BROKEN_TIMEOUT …
#define BRCMSTB_MATCH_FLAGS_HAS_CLOCK_GATE …
#define BRCMSTB_MATCH_FLAGS_USE_CARD_BUSY …
#define BRCMSTB_PRIV_FLAGS_HAS_CQE …
#define BRCMSTB_PRIV_FLAGS_GATE_CLOCK …
#define SDHCI_ARASAN_CQE_BASE_ADDR …
#define SDIO_CFG_CQ_CAPABILITY …
#define SDIO_CFG_CQ_CAPABILITY_FMUL …
#define SDIO_CFG_CTRL …
#define SDIO_CFG_CTRL_SDCD_N_TEST_EN …
#define SDIO_CFG_CTRL_SDCD_N_TEST_LEV …
#define SDIO_CFG_MAX_50MHZ_MODE …
#define SDIO_CFG_MAX_50MHZ_MODE_STRAP_OVERRIDE …
#define SDIO_CFG_MAX_50MHZ_MODE_ENABLE …
#define MMC_CAP_HSE_MASK …
#define MMC_CAP_UHS_I_SDR_MASK …
struct sdhci_brcmstb_priv { … };
struct brcmstb_match_priv { … };
static inline void enable_clock_gating(struct sdhci_host *host)
{ … }
static void brcmstb_reset(struct sdhci_host *host, u8 mask)
{ … }
static void brcmstb_sdhci_reset_cmd_data(struct sdhci_host *host, u8 mask)
{ … }
static void brcmstb_reset_74165b0(struct sdhci_host *host, u8 mask)
{ … }
static void sdhci_brcmstb_hs400es(struct mmc_host *mmc, struct mmc_ios *ios)
{ … }
static void sdhci_brcmstb_set_clock(struct sdhci_host *host, unsigned int clock)
{ … }
static void sdhci_brcmstb_set_uhs_signaling(struct sdhci_host *host,
unsigned int timing)
{ … }
static void sdhci_brcmstb_cfginit_2712(struct sdhci_host *host)
{ … }
static void sdhci_brcmstb_dumpregs(struct mmc_host *mmc)
{ … }
static void sdhci_brcmstb_cqe_enable(struct mmc_host *mmc)
{ … }
static const struct cqhci_host_ops sdhci_brcmstb_cqhci_ops = …;
static struct sdhci_ops sdhci_brcmstb_ops = …;
static struct sdhci_ops sdhci_brcmstb_ops_2712 = …;
static struct sdhci_ops sdhci_brcmstb_ops_7216 = …;
static struct sdhci_ops sdhci_brcmstb_ops_74165b0 = …;
static const struct brcmstb_match_priv match_priv_2712 = …;
static struct brcmstb_match_priv match_priv_7425 = …;
static struct brcmstb_match_priv match_priv_7445 = …;
static const struct brcmstb_match_priv match_priv_7216 = …;
static struct brcmstb_match_priv match_priv_74165b0 = …;
static const struct of_device_id __maybe_unused sdhci_brcm_of_match[] = …;
static u32 sdhci_brcmstb_cqhci_irq(struct sdhci_host *host, u32 intmask)
{ … }
static int sdhci_brcmstb_add_host(struct sdhci_host *host,
struct sdhci_brcmstb_priv *priv)
{ … }
static int sdhci_brcmstb_probe(struct platform_device *pdev)
{ … }
static void sdhci_brcmstb_shutdown(struct platform_device *pdev)
{ … }
MODULE_DEVICE_TABLE(of, sdhci_brcm_of_match);
#ifdef CONFIG_PM_SLEEP
static int sdhci_brcmstb_suspend(struct device *dev)
{ … }
static int sdhci_brcmstb_resume(struct device *dev)
{ … }
#endif
static const struct dev_pm_ops sdhci_brcmstb_pmops = …;
static struct platform_driver sdhci_brcmstb_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;