#include <linux/bitops.h>
#include <linux/completion.h>
#include <linux/dmi.h>
#include <linux/interrupt.h>
#include <linux/iopoll.h>
#include <linux/module.h>
#include <linux/mod_devicetable.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/spi/spi.h>
#include <linux/spi/spi-mem.h>
#define HISI_SFC_V3XX_VERSION …
#define HISI_SFC_V3XX_GLB_CFG …
#define HISI_SFC_V3XX_GLB_CFG_CS0_ADDR_MODE …
#define HISI_SFC_V3XX_RAW_INT_STAT …
#define HISI_SFC_V3XX_INT_STAT …
#define HISI_SFC_V3XX_INT_MASK …
#define HISI_SFC_V3XX_INT_CLR …
#define HISI_SFC_V3XX_CMD_CFG …
#define HISI_SFC_V3XX_CMD_CFG_DATA_CNT_OFF …
#define HISI_SFC_V3XX_CMD_CFG_RW_MSK …
#define HISI_SFC_V3XX_CMD_CFG_DATA_EN_MSK …
#define HISI_SFC_V3XX_CMD_CFG_DUMMY_CNT_OFF …
#define HISI_SFC_V3XX_CMD_CFG_ADDR_EN_MSK …
#define HISI_SFC_V3XX_CMD_CFG_CS_SEL_OFF …
#define HISI_SFC_V3XX_CMD_CFG_START_MSK …
#define HISI_SFC_V3XX_CMD_INS …
#define HISI_SFC_V3XX_CMD_ADDR …
#define HISI_SFC_V3XX_CMD_DATABUF0 …
#define HISI_SFC_V3XX_INT_MASK_ALL …
#define HISI_SFC_V3XX_INT_MASK_CPLT …
#define HISI_SFC_V3XX_INT_MASK_PP_ERR …
#define HISI_SFC_V3XX_INT_MASK_IACCES …
#define HISI_SFC_V3XX_STD …
#define HISI_SFC_V3XX_DIDO …
#define HISI_SFC_V3XX_DIO …
#define HISI_SFC_V3XX_FULL_DIO …
#define HISI_SFC_V3XX_QIQO …
#define HISI_SFC_V3XX_QIO …
#define HISI_SFC_V3XX_FULL_QIO …
static const int hisi_sfc_v3xx_io_modes[2][3][3] = …;
struct hisi_sfc_v3xx_host { … };
static void hisi_sfc_v3xx_disable_int(struct hisi_sfc_v3xx_host *host)
{ … }
static void hisi_sfc_v3xx_enable_int(struct hisi_sfc_v3xx_host *host)
{ … }
static void hisi_sfc_v3xx_clear_int(struct hisi_sfc_v3xx_host *host)
{ … }
static int hisi_sfc_v3xx_handle_completion(struct hisi_sfc_v3xx_host *host)
{ … }
#define HISI_SFC_V3XX_WAIT_TIMEOUT_US …
#define HISI_SFC_V3XX_WAIT_POLL_INTERVAL_US …
static int hisi_sfc_v3xx_wait_cmd_idle(struct hisi_sfc_v3xx_host *host)
{ … }
static int hisi_sfc_v3xx_adjust_op_size(struct spi_mem *mem,
struct spi_mem_op *op)
{ … }
static bool hisi_sfc_v3xx_supports_op(struct spi_mem *mem,
const struct spi_mem_op *op)
{ … }
static void hisi_sfc_v3xx_read_databuf(struct hisi_sfc_v3xx_host *host,
u8 *to, unsigned int len)
{ … }
static void hisi_sfc_v3xx_write_databuf(struct hisi_sfc_v3xx_host *host,
const u8 *from, unsigned int len)
{ … }
static int hisi_sfc_v3xx_start_bus(struct hisi_sfc_v3xx_host *host,
const struct spi_mem_op *op,
u8 chip_select)
{ … }
static int hisi_sfc_v3xx_generic_exec_op(struct hisi_sfc_v3xx_host *host,
const struct spi_mem_op *op,
u8 chip_select)
{ … }
static int hisi_sfc_v3xx_exec_op(struct spi_mem *mem,
const struct spi_mem_op *op)
{ … }
static const struct spi_controller_mem_ops hisi_sfc_v3xx_mem_ops = …;
static irqreturn_t hisi_sfc_v3xx_isr(int irq, void *data)
{ … }
static int hisi_sfc_v3xx_buswidth_override_bits;
static int __init hisi_sfc_v3xx_dmi_quirk(const struct dmi_system_id *d)
{ … }
static const struct dmi_system_id hisi_sfc_v3xx_dmi_quirk_table[] = …;
static int hisi_sfc_v3xx_probe(struct platform_device *pdev)
{ … }
static const struct acpi_device_id hisi_sfc_v3xx_acpi_ids[] = …;
MODULE_DEVICE_TABLE(acpi, hisi_sfc_v3xx_acpi_ids);
static struct platform_driver hisi_sfc_v3xx_spi_driver = …;
static int __init hisi_sfc_v3xx_spi_init(void)
{ … }
static void __exit hisi_sfc_v3xx_spi_exit(void)
{ … }
module_init(…) …;
module_exit(hisi_sfc_v3xx_spi_exit);
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;