#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/err.h>
#include <linux/i2c.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/module.h>
#include <linux/of_address.h>
#include <linux/of_irq.h>
#include <linux/of.h>
#include <linux/pinctrl/consumer.h>
#include <linux/platform_device.h>
#define SSC_BRG …
#define SSC_TBUF …
#define SSC_RBUF …
#define SSC_CTL …
#define SSC_IEN …
#define SSC_STA …
#define SSC_I2C …
#define SSC_SLAD …
#define SSC_REP_START_HOLD …
#define SSC_START_HOLD …
#define SSC_REP_START_SETUP …
#define SSC_DATA_SETUP …
#define SSC_STOP_SETUP …
#define SSC_BUS_FREE …
#define SSC_TX_FSTAT …
#define SSC_RX_FSTAT …
#define SSC_PRE_SCALER_BRG …
#define SSC_CLR …
#define SSC_NOISE_SUPP_WIDTH …
#define SSC_PRSCALER …
#define SSC_NOISE_SUPP_WIDTH_DATAOUT …
#define SSC_PRSCALER_DATAOUT …
#define SSC_CTL_DATA_WIDTH_9 …
#define SSC_CTL_DATA_WIDTH_MSK …
#define SSC_CTL_BM …
#define SSC_CTL_HB …
#define SSC_CTL_PH …
#define SSC_CTL_PO …
#define SSC_CTL_SR …
#define SSC_CTL_MS …
#define SSC_CTL_EN …
#define SSC_CTL_LPB …
#define SSC_CTL_EN_TX_FIFO …
#define SSC_CTL_EN_RX_FIFO …
#define SSC_CTL_EN_CLST_RX …
#define SSC_IEN_RIEN …
#define SSC_IEN_TIEN …
#define SSC_IEN_TEEN …
#define SSC_IEN_REEN …
#define SSC_IEN_PEEN …
#define SSC_IEN_AASEN …
#define SSC_IEN_STOPEN …
#define SSC_IEN_ARBLEN …
#define SSC_IEN_NACKEN …
#define SSC_IEN_REPSTRTEN …
#define SSC_IEN_TX_FIFO_HALF …
#define SSC_IEN_RX_FIFO_HALF_FULL …
#define SSC_STA_RIR …
#define SSC_STA_TIR …
#define SSC_STA_TE …
#define SSC_STA_RE …
#define SSC_STA_PE …
#define SSC_STA_CLST …
#define SSC_STA_AAS …
#define SSC_STA_STOP …
#define SSC_STA_ARBL …
#define SSC_STA_BUSY …
#define SSC_STA_NACK …
#define SSC_STA_REPSTRT …
#define SSC_STA_TX_FIFO_HALF …
#define SSC_STA_TX_FIFO_FULL …
#define SSC_STA_RX_FIFO_HALF …
#define SSC_I2C_I2CM …
#define SSC_I2C_STRTG …
#define SSC_I2C_STOPG …
#define SSC_I2C_ACKG …
#define SSC_I2C_AD10 …
#define SSC_I2C_TXENB …
#define SSC_I2C_REPSTRTG …
#define SSC_I2C_SLAVE_DISABLE …
#define SSC_TX_FSTAT_STATUS …
#define SSC_RX_FSTAT_STATUS …
#define SSC_CLR_SSCAAS …
#define SSC_CLR_SSCSTOP …
#define SSC_CLR_SSCARBL …
#define SSC_CLR_NACK …
#define SSC_CLR_REPSTRT …
#define SSC_PRSC_VALUE …
#define SSC_TXFIFO_SIZE …
#define SSC_RXFIFO_SIZE …
enum st_i2c_mode { … };
struct st_i2c_timings { … };
struct st_i2c_client { … };
struct st_i2c_dev { … };
static inline void st_i2c_set_bits(void __iomem *reg, u32 mask)
{ … }
static inline void st_i2c_clr_bits(void __iomem *reg, u32 mask)
{ … }
static struct st_i2c_timings i2c_timings[] = …;
static void st_i2c_flush_rx_fifo(struct st_i2c_dev *i2c_dev)
{ … }
static void st_i2c_soft_reset(struct st_i2c_dev *i2c_dev)
{ … }
static void st_i2c_hw_config(struct st_i2c_dev *i2c_dev)
{ … }
static int st_i2c_recover_bus(struct i2c_adapter *i2c_adap)
{ … }
static int st_i2c_wait_free_bus(struct st_i2c_dev *i2c_dev)
{ … }
static inline void st_i2c_write_tx_fifo(struct st_i2c_dev *i2c_dev, u8 byte)
{ … }
static void st_i2c_wr_fill_tx_fifo(struct st_i2c_dev *i2c_dev)
{ … }
static void st_i2c_rd_fill_tx_fifo(struct st_i2c_dev *i2c_dev, int max)
{ … }
static void st_i2c_read_rx_fifo(struct st_i2c_dev *i2c_dev)
{ … }
static void st_i2c_terminate_xfer(struct st_i2c_dev *i2c_dev)
{ … }
static void st_i2c_handle_write(struct st_i2c_dev *i2c_dev)
{ … }
static void st_i2c_handle_read(struct st_i2c_dev *i2c_dev)
{ … }
static irqreturn_t st_i2c_isr_thread(int irq, void *data)
{ … }
static int st_i2c_xfer_msg(struct st_i2c_dev *i2c_dev, struct i2c_msg *msg,
bool is_first, bool is_last)
{ … }
static int st_i2c_xfer(struct i2c_adapter *i2c_adap,
struct i2c_msg msgs[], int num)
{ … }
static int st_i2c_suspend(struct device *dev)
{ … }
static int st_i2c_resume(struct device *dev)
{ … }
static DEFINE_SIMPLE_DEV_PM_OPS(st_i2c_pm, st_i2c_suspend, st_i2c_resume);
static u32 st_i2c_func(struct i2c_adapter *adap)
{ … }
static const struct i2c_algorithm st_i2c_algo = …;
static struct i2c_bus_recovery_info st_i2c_recovery_info = …;
static int st_i2c_of_get_deglitch(struct device_node *np,
struct st_i2c_dev *i2c_dev)
{ … }
static int st_i2c_probe(struct platform_device *pdev)
{ … }
static void st_i2c_remove(struct platform_device *pdev)
{ … }
static const struct of_device_id st_i2c_match[] = …;
MODULE_DEVICE_TABLE(of, st_i2c_match);
static struct platform_driver st_i2c_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;