linux/drivers/mmc/host/uniphier-sd.c

// SPDX-License-Identifier: GPL-2.0
//
// Copyright (C) 2017-2018 Socionext Inc.
//   Author: Masahiro Yamada <[email protected]>

#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

/* SD control */
#define UNIPHIER_SDCTRL_CHOFFSET
#define UNIPHIER_SDCTRL_MODE
#define UNIPHIER_SDCTRL_MODE_UHS1MOD
#define UNIPHIER_SDCTRL_MODE_SDRSEL

/*
 * IP is extended to support various features: built-in DMA engine,
 * 1/1024 divisor, etc.
 */
#define UNIPHIER_SD_CAP_EXTENDED_IP
/* RX channel of the built-in DMA controller is broken (Pro5) */
#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)
{}

/* external DMA engine */
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();