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