diff options
author | Stephen Kitt <steve@sk2.org> | 2020-08-08 23:00:04 +0200 |
---|---|---|
committer | Guenter Roeck <linux@roeck-us.net> | 2020-09-23 09:42:39 -0700 |
commit | dd43193976b9a7b2affe8fb71780bb96d16a8449 (patch) | |
tree | 91a68a368fe89780c92d550f97c7e557ec949b58 /drivers/hwmon/pmbus/max20730.c | |
parent | e40358390928f9ab9d8d7dde5c60c08981dc1d81 (diff) | |
download | lwn-dd43193976b9a7b2affe8fb71780bb96d16a8449.tar.gz lwn-dd43193976b9a7b2affe8fb71780bb96d16a8449.zip |
hwmon (pmbus) use simple i2c probe function
pmbus_do_probe doesn't use the id information provided in its second
argument, so this can be removed, which then allows using the
single-parameter i2c probe function ("probe_new") for probes.
This avoids scanning the identifier tables during probes.
Drivers which didn't use the id are converted as-is; drivers which did
are modified as follows:
* if the information in i2c_client is sufficient, that's used instead
(client->name);
* configured v. probed comparisons are performed by comparing the
configured name to the detected name, instead of the ids; this
involves strcmp but is still cheaper than comparing all the device
names when scanning the tables;
* anything else is handled by calling i2c_match_id() with the same
level of error-handling (if any) as before.
Additionally, the mismatch message in the ltc2978 driver is adjusted
so that it no longer assumes that the driver_data is an index into
ltc2978_id.
Signed-off-by: Stephen Kitt <steve@sk2.org>
Acked-by: Wolfram Sang <wsa@kernel.org>
Link: https://lore.kernel.org/r/20200808210004.30880-1-steve@sk2.org
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'drivers/hwmon/pmbus/max20730.c')
-rw-r--r-- | drivers/hwmon/pmbus/max20730.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/hwmon/pmbus/max20730.c b/drivers/hwmon/pmbus/max20730.c index a151a2b588a5..9475261ddacb 100644 --- a/drivers/hwmon/pmbus/max20730.c +++ b/drivers/hwmon/pmbus/max20730.c @@ -37,6 +37,8 @@ struct max20730_data { #define MAX20730_MFR_DEVSET1 0xd2 +static const struct i2c_device_id max20730_id[]; + /* * Convert discreet value to direct data format. Strictly speaking, all passed * values are constants, so we could do that calculation manually. On the @@ -295,8 +297,7 @@ static const struct pmbus_driver_info max20730_info[] = { }, }; -static int max20730_probe(struct i2c_client *client, - const struct i2c_device_id *id) +static int max20730_probe(struct i2c_client *client) { struct device *dev = &client->dev; u8 buf[I2C_SMBUS_BLOCK_MAX + 1]; @@ -356,7 +357,7 @@ static int max20730_probe(struct i2c_client *client, if (client->dev.of_node) chip_id = (enum chips)of_device_get_match_data(dev); else - chip_id = id->driver_data; + chip_id = i2c_match_id(max20730_id, client)->driver_data; data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); if (!data) @@ -370,7 +371,7 @@ static int max20730_probe(struct i2c_client *client, return ret; data->mfr_devset1 = ret; - return pmbus_do_probe(client, id, &data->info); + return pmbus_do_probe(client, &data->info); } static const struct i2c_device_id max20730_id[] = { @@ -398,7 +399,7 @@ static struct i2c_driver max20730_driver = { .name = "max20730", .of_match_table = max20730_of_match, }, - .probe = max20730_probe, + .probe_new = max20730_probe, .remove = pmbus_do_remove, .id_table = max20730_id, }; |