#include <linux/clk.h>
#include <linux/i2c.h>
#include <linux/io.h>
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/reset.h>
#define P2WI_CTRL …
#define P2WI_CCR …
#define P2WI_INTE …
#define P2WI_INTS …
#define P2WI_DADDR0 …
#define P2WI_DADDR1 …
#define P2WI_DLEN …
#define P2WI_DATA0 …
#define P2WI_DATA1 …
#define P2WI_LCR …
#define P2WI_PMCR …
#define P2WI_CTRL_START_TRANS …
#define P2WI_CTRL_ABORT_TRANS …
#define P2WI_CTRL_GLOBAL_INT_ENB …
#define P2WI_CTRL_SOFT_RST …
#define P2WI_CCR_SDA_OUT_DELAY(v) …
#define P2WI_CCR_MAX_CLK_DIV …
#define P2WI_CCR_CLK_DIV(v) …
#define P2WI_INTS_TRANS_ERR_ID(v) …
#define P2WI_INTS_LOAD_BSY …
#define P2WI_INTS_TRANS_ERR …
#define P2WI_INTS_TRANS_OVER …
#define P2WI_DLEN_READ …
#define P2WI_DLEN_DATA_LENGTH(v) …
#define P2WI_LCR_SCL_STATE …
#define P2WI_LCR_SDA_STATE …
#define P2WI_LCR_SCL_CTL …
#define P2WI_LCR_SCL_CTL_EN …
#define P2WI_LCR_SDA_CTL …
#define P2WI_LCR_SDA_CTL_EN …
#define P2WI_PMCR_PMU_INIT_SEND …
#define P2WI_PMCR_PMU_INIT_DATA(v) …
#define P2WI_PMCR_PMU_MODE_REG(v) …
#define P2WI_PMCR_PMU_DEV_ADDR(v) …
#define P2WI_MAX_FREQ …
struct p2wi { … };
static irqreturn_t p2wi_interrupt(int irq, void *dev_id)
{ … }
static u32 p2wi_functionality(struct i2c_adapter *adap)
{ … }
static int p2wi_smbus_xfer(struct i2c_adapter *adap, u16 addr,
unsigned short flags, char read_write,
u8 command, int size, union i2c_smbus_data *data)
{ … }
static const struct i2c_algorithm p2wi_algo = …;
static const struct of_device_id p2wi_of_match_table[] = …;
MODULE_DEVICE_TABLE(of, p2wi_of_match_table);
static int p2wi_probe(struct platform_device *pdev)
{ … }
static void p2wi_remove(struct platform_device *dev)
{ … }
static struct platform_driver p2wi_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;