linux/drivers/mmc/host/alcor.c

// SPDX-License-Identifier: GPL-2.0+
/*
 * Copyright (C) 2018 Oleksij Rempel <[email protected]>
 *
 * Driver for Alcor Micro AU6601 and AU6621 controllers
 */

/* Note: this driver was created without any documentation. Based
 * on sniffing, testing and in some cases mimic of original driver.
 * As soon as some one with documentation or more experience in SD/MMC, or
 * reverse engineering then me, please review this driver and question every
 * thing what I did. 2018 Oleksij Rempel <[email protected]>
 */

#include <linux/delay.h>
#include <linux/pci.h>
#include <linux/module.h>
#include <linux/io.h>
#include <linux/pm.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <linux/platform_device.h>

#include <linux/mmc/host.h>
#include <linux/mmc/mmc.h>

#include <linux/alcor_pci.h>

enum alcor_cookie {};

struct alcor_pll_conf {};

struct alcor_sdmmc_host {};

static const struct alcor_pll_conf alcor_pll_cfg[] =;

static inline void alcor_rmw8(struct alcor_sdmmc_host *host, unsigned int addr,
			       u8 clear, u8 set)
{}

/* As soon as irqs are masked, some status updates may be missed.
 * Use this with care.
 */
static inline void alcor_mask_sd_irqs(struct alcor_sdmmc_host *host)
{}

static inline void alcor_unmask_sd_irqs(struct alcor_sdmmc_host *host)
{}

static void alcor_reset(struct alcor_sdmmc_host *host, u8 val)
{}

/*
 * Perform DMA I/O of a single page.
 */
static void alcor_data_set_dma(struct alcor_sdmmc_host *host)
{}

static void alcor_trigger_data_transfer(struct alcor_sdmmc_host *host)
{}

static void alcor_trf_block_pio(struct alcor_sdmmc_host *host, bool read)
{}

static void alcor_prepare_sg_miter(struct alcor_sdmmc_host *host)
{}

static void alcor_prepare_data(struct alcor_sdmmc_host *host,
			       struct mmc_command *cmd)
{}

static void alcor_send_cmd(struct alcor_sdmmc_host *host,
			   struct mmc_command *cmd, bool set_timeout)
{}

static void alcor_request_complete(struct alcor_sdmmc_host *host,
				   bool cancel_timeout)
{}

static void alcor_finish_data(struct alcor_sdmmc_host *host)
{}

static void alcor_err_irq(struct alcor_sdmmc_host *host, u32 intmask)
{}

static int alcor_cmd_irq_done(struct alcor_sdmmc_host *host, u32 intmask)
{}

static void alcor_cmd_irq_thread(struct alcor_sdmmc_host *host, u32 intmask)
{}

static int alcor_data_irq_done(struct alcor_sdmmc_host *host, u32 intmask)
{}

static void alcor_data_irq_thread(struct alcor_sdmmc_host *host, u32 intmask)
{}

static void alcor_cd_irq(struct alcor_sdmmc_host *host, u32 intmask)
{}

static irqreturn_t alcor_irq_thread(int irq, void *d)
{}


static irqreturn_t alcor_irq(int irq, void *d)
{}

static void alcor_set_clock(struct alcor_sdmmc_host *host, unsigned int clock)
{}

static void alcor_set_timing(struct mmc_host *mmc, struct mmc_ios *ios)
{}

static void alcor_set_bus_width(struct mmc_host *mmc, struct mmc_ios *ios)
{}

static int alcor_card_busy(struct mmc_host *mmc)
{}

static int alcor_get_cd(struct mmc_host *mmc)
{}

static int alcor_get_ro(struct mmc_host *mmc)
{}

static void alcor_request(struct mmc_host *mmc, struct mmc_request *mrq)
{}

static void alcor_pre_req(struct mmc_host *mmc,
			   struct mmc_request *mrq)
{}

static void alcor_post_req(struct mmc_host *mmc,
			    struct mmc_request *mrq,
			    int err)
{}

static void alcor_set_power_mode(struct mmc_host *mmc, struct mmc_ios *ios)
{}

static void alcor_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
{}

static int alcor_signal_voltage_switch(struct mmc_host *mmc,
				       struct mmc_ios *ios)
{}

static const struct mmc_host_ops alcor_sdc_ops =;

static void alcor_timeout_timer(struct work_struct *work)
{}

static void alcor_hw_init(struct alcor_sdmmc_host *host)
{}

static void alcor_hw_uninit(struct alcor_sdmmc_host *host)
{}

static void alcor_init_mmc(struct alcor_sdmmc_host *host)
{}

static int alcor_pci_sdmmc_drv_probe(struct platform_device *pdev)
{}

static void alcor_pci_sdmmc_drv_remove(struct platform_device *pdev)
{}

#ifdef CONFIG_PM_SLEEP
static int alcor_pci_sdmmc_suspend(struct device *dev)
{}

static int alcor_pci_sdmmc_resume(struct device *dev)
{}
#endif /* CONFIG_PM_SLEEP */

static SIMPLE_DEV_PM_OPS(alcor_mmc_pm_ops, alcor_pci_sdmmc_suspend,
			 alcor_pci_sdmmc_resume);

static const struct platform_device_id alcor_pci_sdmmc_ids[] =;
MODULE_DEVICE_TABLE(platform, alcor_pci_sdmmc_ids);

static struct platform_driver alcor_pci_sdmmc_driver =;
module_platform_driver();

MODULE_AUTHOR();
MODULE_DESCRIPTION();
MODULE_LICENSE();