Hi Daniel,
On 17/12/19 20:24, Daniel Mack wrote:
+++ b/drivers/mfd/ad242x-bus.c @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: GPL-2.0-only
+#include <linux/i2c.h> +#include <linux/init.h> +#include <linux/mfd/ad242x.h> +#include <linux/module.h> +#include <linux/of.h>
+static int ad242x_bus_i2c_probe(struct i2c_client *i2c, + const struct i2c_device_id *id) +{ + dev_set_drvdata(&i2c->dev, i2c); + i2c_set_clientdata(i2c, &i2c->dev);
Please explain to me what you think is happening here.
+ return 0; +}
What does this driver do? Seems kinda pointless?
As explained in the commit log, these devices expose two addresses on the i2c bus, and each of which exists for a distinct purpose. The primary one is used to access registers on the master node itself, the second one is proxying traffic to remote nodes.
Now, the question is how to support that, and the approach chosen here is to have a dummy driver sitting on the 2nd address, and to reach out to it via a DT phandle from the master node. I don't like that much either, but I'm not aware of a cleaner way to bind two addresses with one driver. If there is any, I'd be happy to change that.
Have a look at i2c_new_dummy_device(), perhaps it is what you need here.