|
@@ -1692,13 +1692,7 @@ static struct i2c_driver unittest_i2c_dev_driver = {
|
|
|
|
|
|
#if IS_BUILTIN(CONFIG_I2C_MUX)
|
|
|
|
|
|
-struct unittest_i2c_mux_data {
|
|
|
- int nchans;
|
|
|
- struct i2c_adapter *adap[];
|
|
|
-};
|
|
|
-
|
|
|
-static int unittest_i2c_mux_select_chan(struct i2c_adapter *adap,
|
|
|
- void *client, u32 chan)
|
|
|
+static int unittest_i2c_mux_select_chan(struct i2c_mux_core *muxc, u32 chan)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
@@ -1706,11 +1700,11 @@ static int unittest_i2c_mux_select_chan(struct i2c_adapter *adap,
|
|
|
static int unittest_i2c_mux_probe(struct i2c_client *client,
|
|
|
const struct i2c_device_id *id)
|
|
|
{
|
|
|
- int ret, i, nchans, size;
|
|
|
+ int ret, i, nchans;
|
|
|
struct device *dev = &client->dev;
|
|
|
struct i2c_adapter *adap = to_i2c_adapter(dev->parent);
|
|
|
struct device_node *np = client->dev.of_node, *child;
|
|
|
- struct unittest_i2c_mux_data *stm;
|
|
|
+ struct i2c_mux_core *muxc;
|
|
|
u32 reg, max_reg;
|
|
|
|
|
|
dev_dbg(dev, "%s for node @%s\n", __func__, np->full_name);
|
|
@@ -1734,25 +1728,20 @@ static int unittest_i2c_mux_probe(struct i2c_client *client,
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
- size = offsetof(struct unittest_i2c_mux_data, adap[nchans]);
|
|
|
- stm = devm_kzalloc(dev, size, GFP_KERNEL);
|
|
|
- if (!stm) {
|
|
|
- dev_err(dev, "Out of memory\n");
|
|
|
+ muxc = i2c_mux_alloc(adap, dev, nchans, 0, 0,
|
|
|
+ unittest_i2c_mux_select_chan, NULL);
|
|
|
+ if (!muxc)
|
|
|
return -ENOMEM;
|
|
|
- }
|
|
|
- stm->nchans = nchans;
|
|
|
for (i = 0; i < nchans; i++) {
|
|
|
- stm->adap[i] = i2c_add_mux_adapter(adap, dev, client,
|
|
|
- 0, i, 0, unittest_i2c_mux_select_chan, NULL);
|
|
|
- if (!stm->adap[i]) {
|
|
|
+ ret = i2c_mux_add_adapter(muxc, 0, i, 0);
|
|
|
+ if (ret) {
|
|
|
dev_err(dev, "Failed to register mux #%d\n", i);
|
|
|
- for (i--; i >= 0; i--)
|
|
|
- i2c_del_mux_adapter(stm->adap[i]);
|
|
|
+ i2c_mux_del_adapters(muxc);
|
|
|
return -ENODEV;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- i2c_set_clientdata(client, stm);
|
|
|
+ i2c_set_clientdata(client, muxc);
|
|
|
|
|
|
return 0;
|
|
|
};
|
|
@@ -1761,12 +1750,10 @@ static int unittest_i2c_mux_remove(struct i2c_client *client)
|
|
|
{
|
|
|
struct device *dev = &client->dev;
|
|
|
struct device_node *np = client->dev.of_node;
|
|
|
- struct unittest_i2c_mux_data *stm = i2c_get_clientdata(client);
|
|
|
- int i;
|
|
|
+ struct i2c_mux_core *muxc = i2c_get_clientdata(client);
|
|
|
|
|
|
dev_dbg(dev, "%s for node @%s\n", __func__, np->full_name);
|
|
|
- for (i = stm->nchans - 1; i >= 0; i--)
|
|
|
- i2c_del_mux_adapter(stm->adap[i]);
|
|
|
+ i2c_mux_del_adapters(muxc);
|
|
|
return 0;
|
|
|
}
|
|
|
|