#include <linux/clk.h>
#include <linux/clkdev.h>
#include <linux/clk-provider.h>
#include <linux/completion.h>
#include <linux/err.h>
#include <linux/i2c.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
#define BCM2835_I2C_C …
#define BCM2835_I2C_S …
#define BCM2835_I2C_DLEN …
#define BCM2835_I2C_A …
#define BCM2835_I2C_FIFO …
#define BCM2835_I2C_DIV …
#define BCM2835_I2C_DEL …
#define BCM2835_I2C_CLKT …
#define BCM2835_I2C_C_READ …
#define BCM2835_I2C_C_CLEAR …
#define BCM2835_I2C_C_ST …
#define BCM2835_I2C_C_INTD …
#define BCM2835_I2C_C_INTT …
#define BCM2835_I2C_C_INTR …
#define BCM2835_I2C_C_I2CEN …
#define BCM2835_I2C_S_TA …
#define BCM2835_I2C_S_DONE …
#define BCM2835_I2C_S_TXW …
#define BCM2835_I2C_S_RXR …
#define BCM2835_I2C_S_TXD …
#define BCM2835_I2C_S_RXD …
#define BCM2835_I2C_S_TXE …
#define BCM2835_I2C_S_RXF …
#define BCM2835_I2C_S_ERR …
#define BCM2835_I2C_S_CLKT …
#define BCM2835_I2C_S_LEN …
#define BCM2835_I2C_FEDL_SHIFT …
#define BCM2835_I2C_REDL_SHIFT …
#define BCM2835_I2C_CDIV_MIN …
#define BCM2835_I2C_CDIV_MAX …
struct bcm2835_i2c_dev { … };
static inline void bcm2835_i2c_writel(struct bcm2835_i2c_dev *i2c_dev,
u32 reg, u32 val)
{ … }
static inline u32 bcm2835_i2c_readl(struct bcm2835_i2c_dev *i2c_dev, u32 reg)
{ … }
#define to_clk_bcm2835_i2c(_hw) …
struct clk_bcm2835_i2c { … };
static int clk_bcm2835_i2c_calc_divider(unsigned long rate,
unsigned long parent_rate)
{ … }
static int clk_bcm2835_i2c_set_rate(struct clk_hw *hw, unsigned long rate,
unsigned long parent_rate)
{ … }
static long clk_bcm2835_i2c_round_rate(struct clk_hw *hw, unsigned long rate,
unsigned long *parent_rate)
{ … }
static unsigned long clk_bcm2835_i2c_recalc_rate(struct clk_hw *hw,
unsigned long parent_rate)
{ … }
static const struct clk_ops clk_bcm2835_i2c_ops = …;
static struct clk *bcm2835_i2c_register_div(struct device *dev,
struct clk *mclk,
struct bcm2835_i2c_dev *i2c_dev)
{ … }
static void bcm2835_fill_txfifo(struct bcm2835_i2c_dev *i2c_dev)
{ … }
static void bcm2835_drain_rxfifo(struct bcm2835_i2c_dev *i2c_dev)
{ … }
static void bcm2835_i2c_start_transfer(struct bcm2835_i2c_dev *i2c_dev)
{ … }
static void bcm2835_i2c_finish_transfer(struct bcm2835_i2c_dev *i2c_dev)
{ … }
static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data)
{ … }
static int bcm2835_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],
int num)
{ … }
static u32 bcm2835_i2c_func(struct i2c_adapter *adap)
{ … }
static const struct i2c_algorithm bcm2835_i2c_algo = …;
static const struct i2c_adapter_quirks bcm2835_i2c_quirks = …;
static int bcm2835_i2c_probe(struct platform_device *pdev)
{ … }
static void bcm2835_i2c_remove(struct platform_device *pdev)
{ … }
static const struct of_device_id bcm2835_i2c_of_match[] = …;
MODULE_DEVICE_TABLE(of, bcm2835_i2c_of_match);
static struct platform_driver bcm2835_i2c_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_ALIAS(…) …;