#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/delay.h>
#include <linux/i2c.h>
#include <linux/gpio/driver.h>
#include <linux/spi/spi.h>
#include <asm/unaligned.h>
#define SPI_XCOMM_SETTINGS_LEN_OFFSET …
#define SPI_XCOMM_SETTINGS_3WIRE …
#define SPI_XCOMM_SETTINGS_CS_HIGH …
#define SPI_XCOMM_SETTINGS_SAMPLE_END …
#define SPI_XCOMM_SETTINGS_CPHA …
#define SPI_XCOMM_SETTINGS_CPOL …
#define SPI_XCOMM_SETTINGS_CLOCK_DIV_MASK …
#define SPI_XCOMM_SETTINGS_CLOCK_DIV_64 …
#define SPI_XCOMM_SETTINGS_CLOCK_DIV_16 …
#define SPI_XCOMM_SETTINGS_CLOCK_DIV_4 …
#define SPI_XCOMM_CMD_UPDATE_CONFIG …
#define SPI_XCOMM_CMD_WRITE …
#define SPI_XCOMM_CMD_GPIO_SET …
#define SPI_XCOMM_CLOCK …
struct spi_xcomm { … };
static void spi_xcomm_gpio_set_value(struct gpio_chip *chip,
unsigned int offset, int val)
{ … }
static int spi_xcomm_gpio_get_direction(struct gpio_chip *chip,
unsigned int offset)
{ … }
static int spi_xcomm_gpio_add(struct spi_xcomm *spi_xcomm)
{ … }
static int spi_xcomm_sync_config(struct spi_xcomm *spi_xcomm, unsigned int len)
{ … }
static void spi_xcomm_chipselect(struct spi_xcomm *spi_xcomm,
struct spi_device *spi, int is_active)
{ … }
static int spi_xcomm_setup_transfer(struct spi_xcomm *spi_xcomm,
struct spi_device *spi, struct spi_transfer *t,
unsigned int *settings)
{ … }
static int spi_xcomm_txrx_bufs(struct spi_xcomm *spi_xcomm,
struct spi_device *spi, struct spi_transfer *t)
{ … }
static int spi_xcomm_transfer_one(struct spi_controller *host,
struct spi_message *msg)
{ … }
static int spi_xcomm_probe(struct i2c_client *i2c)
{ … }
static const struct i2c_device_id spi_xcomm_ids[] = …;
MODULE_DEVICE_TABLE(i2c, spi_xcomm_ids);
static struct i2c_driver spi_xcomm_driver = …;
module_i2c_driver(…) …;
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;