UPSTREAM: usb: typec: fusb302: reorganizing the probe function a little
The debugfs needs to be initialized as the last step in
probe in this case. The struct dentry *rootdir can't be
pointing to anything unless driver probe really finishes
successfully.
It is also not necessary to clear the i2c clientdata if the
probe fails, so removing the extra label used for that.
Change-Id: I07bbb25430921572231faf9dfac7328981055ff4
Acked-by: Hans de Goede <hdegoede@redhat.com>
Tested-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Frank Wang <frank.wang@rock-chips.com>
(cherry picked from commit c800c51f58)
This commit is contained in:
parent
44d0361b09
commit
21af73b6cc
1 changed files with 9 additions and 16 deletions
|
|
@ -1725,7 +1725,6 @@ static int fusb302_probe(struct i2c_client *client,
|
|||
return -ENOMEM;
|
||||
|
||||
chip->i2c_client = client;
|
||||
i2c_set_clientdata(client, chip);
|
||||
chip->dev = &client->dev;
|
||||
chip->tcpc_config = fusb302_tcpc_config;
|
||||
chip->tcpc_dev.config = &chip->tcpc_config;
|
||||
|
|
@ -1754,22 +1753,17 @@ static int fusb302_probe(struct i2c_client *client,
|
|||
return -EPROBE_DEFER;
|
||||
}
|
||||
|
||||
fusb302_debugfs_init(chip);
|
||||
chip->vbus = devm_regulator_get(chip->dev, "vbus");
|
||||
if (IS_ERR(chip->vbus))
|
||||
return PTR_ERR(chip->vbus);
|
||||
|
||||
chip->wq = create_singlethread_workqueue(dev_name(chip->dev));
|
||||
if (!chip->wq) {
|
||||
ret = -ENOMEM;
|
||||
goto clear_client_data;
|
||||
}
|
||||
if (!chip->wq)
|
||||
return -ENOMEM;
|
||||
|
||||
INIT_DELAYED_WORK(&chip->bc_lvl_handler, fusb302_bc_lvl_handler_work);
|
||||
init_tcpc_dev(&chip->tcpc_dev);
|
||||
|
||||
chip->vbus = devm_regulator_get(chip->dev, "vbus");
|
||||
if (IS_ERR(chip->vbus)) {
|
||||
ret = PTR_ERR(chip->vbus);
|
||||
goto destroy_workqueue;
|
||||
}
|
||||
|
||||
if (client->irq) {
|
||||
chip->gpio_int_n_irq = client->irq;
|
||||
} else {
|
||||
|
|
@ -1795,15 +1789,15 @@ static int fusb302_probe(struct i2c_client *client,
|
|||
goto tcpm_unregister_port;
|
||||
}
|
||||
enable_irq_wake(chip->gpio_int_n_irq);
|
||||
fusb302_debugfs_init(chip);
|
||||
i2c_set_clientdata(client, chip);
|
||||
|
||||
return ret;
|
||||
|
||||
tcpm_unregister_port:
|
||||
tcpm_unregister_port(chip->tcpm_port);
|
||||
destroy_workqueue:
|
||||
destroy_workqueue(chip->wq);
|
||||
clear_client_data:
|
||||
i2c_set_clientdata(client, NULL);
|
||||
fusb302_debugfs_exit(chip);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -1814,7 +1808,6 @@ static int fusb302_remove(struct i2c_client *client)
|
|||
|
||||
tcpm_unregister_port(chip->tcpm_port);
|
||||
destroy_workqueue(chip->wq);
|
||||
i2c_set_clientdata(client, NULL);
|
||||
fusb302_debugfs_exit(chip);
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue