mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
Input: cypress-sf - register a callback to disable the regulators
When the driver fails to probe, we will get the following splat: [ 19.311970] ------------[ cut here ]------------ [ 19.312566] WARNING: CPU: 3 PID: 375 at drivers/regulator/core.c:2257 _regulator_put+0x3ec/0x4e0 [ 19.317591] RIP: 0010:_regulator_put+0x3ec/0x4e0 [ 19.328831] Call Trace: [ 19.329112] <TASK> [ 19.329369] regulator_bulk_free+0x82/0xe0 [ 19.329860] devres_release_group+0x319/0x3d0 [ 19.330357] i2c_device_probe+0x766/0x940 Fix this by adding a callback that will deal with the disabling when the driver fails to probe. Signed-off-by: Zheyu Ma <zheyuma97@gmail.com> Link: https://lore.kernel.org/r/20220409022629.3493557-1-zheyuma97@gmail.com Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
parent
8b188fba75
commit
fd0a4b3987
@ -61,6 +61,14 @@ static irqreturn_t cypress_sf_irq_handler(int irq, void *devid)
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static void cypress_sf_disable_regulators(void *arg)
|
||||
{
|
||||
struct cypress_sf_data *touchkey = arg;
|
||||
|
||||
regulator_bulk_disable(ARRAY_SIZE(touchkey->regulators),
|
||||
touchkey->regulators);
|
||||
}
|
||||
|
||||
static int cypress_sf_probe(struct i2c_client *client)
|
||||
{
|
||||
struct cypress_sf_data *touchkey;
|
||||
@ -121,6 +129,12 @@ static int cypress_sf_probe(struct i2c_client *client)
|
||||
return error;
|
||||
}
|
||||
|
||||
error = devm_add_action_or_reset(&client->dev,
|
||||
cypress_sf_disable_regulators,
|
||||
touchkey);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
touchkey->input_dev = devm_input_allocate_device(&client->dev);
|
||||
if (!touchkey->input_dev) {
|
||||
dev_err(&client->dev, "Failed to allocate input device\n");
|
||||
|
Loading…
Reference in New Issue
Block a user