The ltc4306_id[].driver_data could store a pointer to the chips, like for DT-based matching, making I2C and DT-based matching more similar. After that, we can simplify the probe() by replacing of_device_get_ match_data() and i2c_match_id() by i2c_get_match_data() as we have similar I2C and DT-based matching table. Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx> --- drivers/i2c/muxes/i2c-mux-ltc4306.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/i2c/muxes/i2c-mux-ltc4306.c b/drivers/i2c/muxes/i2c-mux-ltc4306.c index 5a03031519be..c7dfd5eba413 100644 --- a/drivers/i2c/muxes/i2c-mux-ltc4306.c +++ b/drivers/i2c/muxes/i2c-mux-ltc4306.c @@ -192,8 +192,8 @@ static int ltc4306_deselect_mux(struct i2c_mux_core *muxc, u32 chan) } static const struct i2c_device_id ltc4306_id[] = { - { "ltc4305", ltc_4305 }, - { "ltc4306", ltc_4306 }, + { "ltc4305", .driver_data = (kernel_ulong_t)&chips[ltc_4305] }, + { "ltc4306", .driver_data = (kernel_ulong_t)&chips[ltc_4306] }, { } }; MODULE_DEVICE_TABLE(i2c, ltc4306_id); @@ -216,10 +216,9 @@ static int ltc4306_probe(struct i2c_client *client) unsigned int val = 0; int num, ret; - chip = of_device_get_match_data(&client->dev); - + chip = i2c_get_match_data(client); if (!chip) - chip = &chips[i2c_match_id(ltc4306_id, client)->driver_data]; + return -ENODEV; idle_disc = device_property_read_bool(&client->dev, "i2c-mux-idle-disconnect"); -- 2.25.1