#define pr_fmt(fmt) …
#include <linux/module.h>
#include <linux/i2c.h>
#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/gpio.h>
#include <linux/nfc.h>
#include <net/nfc/hci.h>
#include <net/nfc/llc.h>
#include "microread.h"
#define MICROREAD_I2C_DRIVER_NAME …
#define MICROREAD_I2C_FRAME_HEADROOM …
#define MICROREAD_I2C_FRAME_TAILROOM …
#define MICROREAD_I2C_LLC_LEN …
#define MICROREAD_I2C_LLC_CRC …
#define MICROREAD_I2C_LLC_LEN_CRC …
#define MICROREAD_I2C_LLC_MIN_SIZE …
#define MICROREAD_I2C_LLC_MAX_PAYLOAD …
#define MICROREAD_I2C_LLC_MAX_SIZE …
struct microread_i2c_phy { … };
#define I2C_DUMP_SKB(info, skb) …
static void microread_i2c_add_len_crc(struct sk_buff *skb)
{ … }
static void microread_i2c_remove_len_crc(struct sk_buff *skb)
{ … }
static int check_crc(const struct sk_buff *skb)
{ … }
static int microread_i2c_enable(void *phy_id)
{ … }
static void microread_i2c_disable(void *phy_id)
{ … }
static int microread_i2c_write(void *phy_id, struct sk_buff *skb)
{ … }
static int microread_i2c_read(struct microread_i2c_phy *phy,
struct sk_buff **skb)
{ … }
static irqreturn_t microread_i2c_irq_thread_fn(int irq, void *phy_id)
{ … }
static const struct nfc_phy_ops i2c_phy_ops = …;
static int microread_i2c_probe(struct i2c_client *client)
{ … }
static void microread_i2c_remove(struct i2c_client *client)
{ … }
static const struct i2c_device_id microread_i2c_id[] = …;
MODULE_DEVICE_TABLE(i2c, microread_i2c_id);
static struct i2c_driver microread_i2c_driver = …;
module_i2c_driver(…) …;
MODULE_LICENSE(…) …;
MODULE_DESCRIPTION(…);