Skip to content

Commit b8a1a4c

Browse files
Lee JonesWolfram Sang
authored andcommitted
i2c: Provide a temporary .probe_new() call-back type
This will aid the seamless removal of the current probe()'s, more commonly unused than used second parameter. Most I2C drivers can simply switch over to the new interface, others which have DT support can use its own matching instead and others can call i2c_match_id() themselves. This brings I2C's device probe method into line with other similar interfaces in the kernel and prevents the requirement to pass an i2c_device_id table. Suggested-by: Grant Likely <[email protected]> Signed-off-by: Lee Jones <[email protected]> [Kieran: fix rebase conflicts and adapt for dev_pm_domain_{attach,detach}] Tested-by: Kieran Bingham <[email protected]> Reviewed-by: Javier Martinez Canillas <[email protected]> Tested-by: Javier Martinez Canillas <[email protected]> Signed-off-by: Kieran Bingham <[email protected]> Signed-off-by: Wolfram Sang <[email protected]>
1 parent 5f441fc commit b8a1a4c

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

drivers/i2c/i2c-core.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -924,8 +924,6 @@ static int i2c_device_probe(struct device *dev)
924924
}
925925

926926
driver = to_i2c_driver(dev->driver);
927-
if (!driver->probe)
928-
return -EINVAL;
929927

930928
/*
931929
* An I2C ID table is not mandatory, if and only if, a suitable Device
@@ -967,7 +965,18 @@ static int i2c_device_probe(struct device *dev)
967965
if (status == -EPROBE_DEFER)
968966
goto err_clear_wakeup_irq;
969967

970-
status = driver->probe(client, i2c_match_id(driver->id_table, client));
968+
/*
969+
* When there are no more users of probe(),
970+
* rename probe_new to probe.
971+
*/
972+
if (driver->probe_new)
973+
status = driver->probe_new(client);
974+
else if (driver->probe)
975+
status = driver->probe(client,
976+
i2c_match_id(driver->id_table, client));
977+
else
978+
status = -EINVAL;
979+
971980
if (status)
972981
goto err_detach_pm_domain;
973982

include/linux/i2c.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ enum i2c_alert_protocol {
135135
* struct i2c_driver - represent an I2C device driver
136136
* @class: What kind of i2c device we instantiate (for detect)
137137
* @attach_adapter: Callback for bus addition (deprecated)
138-
* @probe: Callback for device binding
138+
* @probe: Callback for device binding - soon to be deprecated
139+
* @probe_new: New callback for device binding
139140
* @remove: Callback for device unbinding
140141
* @shutdown: Callback for device shutdown
141142
* @alert: Alert callback, for example for the SMBus alert protocol
@@ -178,6 +179,11 @@ struct i2c_driver {
178179
int (*probe)(struct i2c_client *, const struct i2c_device_id *);
179180
int (*remove)(struct i2c_client *);
180181

182+
/* New driver model interface to aid the seamless removal of the
183+
* current probe()'s, more commonly unused than used second parameter.
184+
*/
185+
int (*probe_new)(struct i2c_client *);
186+
181187
/* driver model interfaces that don't relate to enumeration */
182188
void (*shutdown)(struct i2c_client *);
183189

0 commit comments

Comments
 (0)