#ifndef _LINUX_I2C_H_
#define _LINUX_I2C_H_
#include <linux/mod_devicetable.h>
#include <linux/device.h>
#include <linux/sched.h>
#include <linux/mutex.h>
#include <linux/of.h>
#include <uapi/linux/i2c.h>
#include <bus/iicbus/iic.h>
#define I2C_M_RD IIC_M_RD
#define I2C_M_NOSTART IIC_M_NOSTART
#define I2C_M_STOP I2CSTOP
struct i2c_lock_operations;
struct i2c_adapter {
const struct i2c_algorithm *algo;
void *algo_data;
int timeout;
int retries;
struct device dev;
void *private_data;
char name[48];
const struct i2c_lock_operations *lock_ops;
};
struct i2c_client {
unsigned short flags;
unsigned short addr;
char name[I2C_NAME_SIZE];
struct i2c_adapter *adapter;
};
int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num);
int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num);
struct i2c_algorithm {
int (*master_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs,
int num);
u32 (*functionality) (struct i2c_adapter *);
};
extern int i2c_add_adapter(struct i2c_adapter *);
extern void i2c_del_adapter(struct i2c_adapter *);
static inline void
i2c_set_adapdata(struct i2c_adapter *dev, void *data)
{
dev->private_data = data;
}
static inline void *
i2c_get_adapdata(const struct i2c_adapter *dev)
{
return dev->private_data;
}
struct i2c_board_info {
char type[I2C_NAME_SIZE];
unsigned short addr;
};
struct i2c_client *
i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info);
#define I2C_LOCK_SEGMENT BIT(1)
struct i2c_lock_operations {
void (*lock_bus)(struct i2c_adapter *, unsigned int flags);
int (*trylock_bus)(struct i2c_adapter *, unsigned int flags);
void (*unlock_bus)(struct i2c_adapter *, unsigned int flags);
};
#endif