1
2
3
4
5
6
7
8
9
10
11#ifndef _LINUX_I2C_MUX_H
12#define _LINUX_I2C_MUX_H
13
14#ifdef __KERNEL__
15
16#include <linux/bitops.h>
17
18struct i2c_mux_core {
19 struct i2c_adapter *parent;
20 struct device *dev;
21 unsigned int mux_locked:1;
22 unsigned int arbitrator:1;
23 unsigned int gate:1;
24
25 void *priv;
26
27 int (*select)(struct i2c_mux_core *, u32 chan_id);
28 int (*deselect)(struct i2c_mux_core *, u32 chan_id);
29
30 int num_adapters;
31 int max_adapters;
32 struct i2c_adapter *adapter[];
33};
34
35struct i2c_mux_core *i2c_mux_alloc(struct i2c_adapter *parent,
36 struct device *dev, int max_adapters,
37 int sizeof_priv, u32 flags,
38 int (*select)(struct i2c_mux_core *, u32),
39 int (*deselect)(struct i2c_mux_core *, u32));
40
41
42#define I2C_MUX_LOCKED BIT(0)
43#define I2C_MUX_ARBITRATOR BIT(1)
44#define I2C_MUX_GATE BIT(2)
45
46static inline void *i2c_mux_priv(struct i2c_mux_core *muxc)
47{
48 return muxc->priv;
49}
50
51struct i2c_adapter *i2c_root_adapter(struct device *dev);
52
53
54
55
56
57
58int i2c_mux_add_adapter(struct i2c_mux_core *muxc,
59 u32 force_nr, u32 chan_id,
60 unsigned int class);
61
62void i2c_mux_del_adapters(struct i2c_mux_core *muxc);
63
64#endif
65
66#endif
67