#include <linux/clk.h>
#include <linux/i2c.h>
#include <linux/iopoll.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#define UNIPHIER_FI2C_CR …
#define UNIPHIER_FI2C_CR_MST …
#define UNIPHIER_FI2C_CR_STA …
#define UNIPHIER_FI2C_CR_STO …
#define UNIPHIER_FI2C_CR_NACK …
#define UNIPHIER_FI2C_DTTX …
#define UNIPHIER_FI2C_DTTX_CMD …
#define UNIPHIER_FI2C_DTTX_RD …
#define UNIPHIER_FI2C_DTRX …
#define UNIPHIER_FI2C_SLAD …
#define UNIPHIER_FI2C_CYC …
#define UNIPHIER_FI2C_LCTL …
#define UNIPHIER_FI2C_SSUT …
#define UNIPHIER_FI2C_DSUT …
#define UNIPHIER_FI2C_INT …
#define UNIPHIER_FI2C_IE …
#define UNIPHIER_FI2C_IC …
#define UNIPHIER_FI2C_INT_TE …
#define UNIPHIER_FI2C_INT_RF …
#define UNIPHIER_FI2C_INT_TC …
#define UNIPHIER_FI2C_INT_RC …
#define UNIPHIER_FI2C_INT_TB …
#define UNIPHIER_FI2C_INT_RB …
#define UNIPHIER_FI2C_INT_NA …
#define UNIPHIER_FI2C_INT_AL …
#define UNIPHIER_FI2C_SR …
#define UNIPHIER_FI2C_SR_DB …
#define UNIPHIER_FI2C_SR_STS …
#define UNIPHIER_FI2C_SR_BB …
#define UNIPHIER_FI2C_SR_RFF …
#define UNIPHIER_FI2C_SR_RNE …
#define UNIPHIER_FI2C_SR_TNF …
#define UNIPHIER_FI2C_SR_TFE …
#define UNIPHIER_FI2C_RST …
#define UNIPHIER_FI2C_RST_TBRST …
#define UNIPHIER_FI2C_RST_RBRST …
#define UNIPHIER_FI2C_RST_RST …
#define UNIPHIER_FI2C_BM …
#define UNIPHIER_FI2C_BM_SDAO …
#define UNIPHIER_FI2C_BM_SDAS …
#define UNIPHIER_FI2C_BM_SCLO …
#define UNIPHIER_FI2C_BM_SCLS …
#define UNIPHIER_FI2C_NOISE …
#define UNIPHIER_FI2C_TBC …
#define UNIPHIER_FI2C_RBC …
#define UNIPHIER_FI2C_TBCM …
#define UNIPHIER_FI2C_RBCM …
#define UNIPHIER_FI2C_BRST …
#define UNIPHIER_FI2C_BRST_FOEN …
#define UNIPHIER_FI2C_BRST_RSCL …
#define UNIPHIER_FI2C_INT_FAULTS …
#define UNIPHIER_FI2C_INT_STOP …
#define UNIPHIER_FI2C_RD …
#define UNIPHIER_FI2C_STOP …
#define UNIPHIER_FI2C_MANUAL_NACK …
#define UNIPHIER_FI2C_BYTE_WISE …
#define UNIPHIER_FI2C_DEFER_STOP_COMP …
#define UNIPHIER_FI2C_FIFO_SIZE …
struct uniphier_fi2c_priv { … };
static void uniphier_fi2c_fill_txfifo(struct uniphier_fi2c_priv *priv,
bool first)
{ … }
static void uniphier_fi2c_drain_rxfifo(struct uniphier_fi2c_priv *priv)
{ … }
static void uniphier_fi2c_set_irqs(struct uniphier_fi2c_priv *priv)
{ … }
static void uniphier_fi2c_clear_irqs(struct uniphier_fi2c_priv *priv,
u32 mask)
{ … }
static void uniphier_fi2c_stop(struct uniphier_fi2c_priv *priv)
{ … }
static irqreturn_t uniphier_fi2c_interrupt(int irq, void *dev_id)
{ … }
static void uniphier_fi2c_tx_init(struct uniphier_fi2c_priv *priv, u16 addr,
bool repeat)
{ … }
static void uniphier_fi2c_rx_init(struct uniphier_fi2c_priv *priv, u16 addr)
{ … }
static void uniphier_fi2c_reset(struct uniphier_fi2c_priv *priv)
{ … }
static void uniphier_fi2c_prepare_operation(struct uniphier_fi2c_priv *priv)
{ … }
static void uniphier_fi2c_recover(struct uniphier_fi2c_priv *priv)
{ … }
static int uniphier_fi2c_xfer_one(struct i2c_adapter *adap, struct i2c_msg *msg,
bool repeat, bool stop)
{ … }
static int uniphier_fi2c_check_bus_busy(struct i2c_adapter *adap)
{ … }
static int uniphier_fi2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
{ … }
static u32 uniphier_fi2c_functionality(struct i2c_adapter *adap)
{ … }
static const struct i2c_algorithm uniphier_fi2c_algo = …;
static int uniphier_fi2c_get_scl(struct i2c_adapter *adap)
{ … }
static void uniphier_fi2c_set_scl(struct i2c_adapter *adap, int val)
{ … }
static int uniphier_fi2c_get_sda(struct i2c_adapter *adap)
{ … }
static void uniphier_fi2c_unprepare_recovery(struct i2c_adapter *adap)
{ … }
static struct i2c_bus_recovery_info uniphier_fi2c_bus_recovery_info = …;
static void uniphier_fi2c_hw_init(struct uniphier_fi2c_priv *priv)
{ … }
static int uniphier_fi2c_probe(struct platform_device *pdev)
{ … }
static void uniphier_fi2c_remove(struct platform_device *pdev)
{ … }
static int __maybe_unused uniphier_fi2c_suspend(struct device *dev)
{ … }
static int __maybe_unused uniphier_fi2c_resume(struct device *dev)
{ … }
static const struct dev_pm_ops uniphier_fi2c_pm_ops = …;
static const struct of_device_id uniphier_fi2c_match[] = …;
MODULE_DEVICE_TABLE(of, uniphier_fi2c_match);
static struct platform_driver uniphier_fi2c_drv = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;