Skip to content

Commit 348359e

Browse files
tititiou36gregkh
authored andcommitted
usb: typec: nb7vpq904m: Add an error handling path in nb7vpq904m_probe()
In case of error in the nb7vpq904m_probe() probe function, some resources need to be freed, as already done in the remove function. Add the missing error handling path and adjust code accordingly. Fixes: 88d8f3a ("usb: typec: add support for the nb7vpq904m Type-C Linear Redriver") Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Link: https://lore.kernel.org/r/9118954765821ea9f1179883602b4eca63e91749.1689716381.git.christophe.jaillet@wanadoo.fr Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 5a5ccd6 commit 348359e

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

drivers/usb/typec/mux/nb7vpq904m.c

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -463,29 +463,40 @@ static int nb7vpq904m_probe(struct i2c_client *client)
463463

464464
ret = nb7vpq904m_register_bridge(nb7);
465465
if (ret)
466-
return ret;
466+
goto err_disable_gpio;
467467

468468
sw_desc.drvdata = nb7;
469469
sw_desc.fwnode = dev->fwnode;
470470
sw_desc.set = nb7vpq904m_sw_set;
471471

472472
nb7->sw = typec_switch_register(dev, &sw_desc);
473-
if (IS_ERR(nb7->sw))
474-
return dev_err_probe(dev, PTR_ERR(nb7->sw),
475-
"Error registering typec switch\n");
473+
if (IS_ERR(nb7->sw)) {
474+
ret = dev_err_probe(dev, PTR_ERR(nb7->sw),
475+
"Error registering typec switch\n");
476+
goto err_disable_gpio;
477+
}
476478

477479
retimer_desc.drvdata = nb7;
478480
retimer_desc.fwnode = dev->fwnode;
479481
retimer_desc.set = nb7vpq904m_retimer_set;
480482

481483
nb7->retimer = typec_retimer_register(dev, &retimer_desc);
482484
if (IS_ERR(nb7->retimer)) {
483-
typec_switch_unregister(nb7->sw);
484-
return dev_err_probe(dev, PTR_ERR(nb7->retimer),
485-
"Error registering typec retimer\n");
485+
ret = dev_err_probe(dev, PTR_ERR(nb7->retimer),
486+
"Error registering typec retimer\n");
487+
goto err_switch_unregister;
486488
}
487489

488490
return 0;
491+
492+
err_switch_unregister:
493+
typec_switch_unregister(nb7->sw);
494+
495+
err_disable_gpio:
496+
gpiod_set_value(nb7->enable_gpio, 0);
497+
regulator_disable(nb7->vcc_supply);
498+
499+
return ret;
489500
}
490501

491502
static void nb7vpq904m_remove(struct i2c_client *client)

0 commit comments

Comments
 (0)