Commit c800c51f authored by Heikki Krogerus's avatar Heikki Krogerus Committed by Greg Kroah-Hartman

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.
Acked-by: default avatarHans de Goede <hdegoede@redhat.com>
Tested-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 148b0aa7
...@@ -1719,7 +1719,6 @@ static int fusb302_probe(struct i2c_client *client, ...@@ -1719,7 +1719,6 @@ static int fusb302_probe(struct i2c_client *client,
return -ENOMEM; return -ENOMEM;
chip->i2c_client = client; chip->i2c_client = client;
i2c_set_clientdata(client, chip);
chip->dev = &client->dev; chip->dev = &client->dev;
chip->tcpc_config = fusb302_tcpc_config; chip->tcpc_config = fusb302_tcpc_config;
chip->tcpc_dev.config = &chip->tcpc_config; chip->tcpc_dev.config = &chip->tcpc_config;
...@@ -1748,22 +1747,17 @@ static int fusb302_probe(struct i2c_client *client, ...@@ -1748,22 +1747,17 @@ static int fusb302_probe(struct i2c_client *client,
return -EPROBE_DEFER; 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)); chip->wq = create_singlethread_workqueue(dev_name(chip->dev));
if (!chip->wq) { if (!chip->wq)
ret = -ENOMEM; return -ENOMEM;
goto clear_client_data;
}
INIT_DELAYED_WORK(&chip->bc_lvl_handler, fusb302_bc_lvl_handler_work); INIT_DELAYED_WORK(&chip->bc_lvl_handler, fusb302_bc_lvl_handler_work);
init_tcpc_dev(&chip->tcpc_dev); 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) { if (client->irq) {
chip->gpio_int_n_irq = client->irq; chip->gpio_int_n_irq = client->irq;
} else { } else {
...@@ -1789,15 +1783,15 @@ static int fusb302_probe(struct i2c_client *client, ...@@ -1789,15 +1783,15 @@ static int fusb302_probe(struct i2c_client *client,
goto tcpm_unregister_port; goto tcpm_unregister_port;
} }
enable_irq_wake(chip->gpio_int_n_irq); enable_irq_wake(chip->gpio_int_n_irq);
fusb302_debugfs_init(chip);
i2c_set_clientdata(client, chip);
return ret; return ret;
tcpm_unregister_port: tcpm_unregister_port:
tcpm_unregister_port(chip->tcpm_port); tcpm_unregister_port(chip->tcpm_port);
destroy_workqueue: destroy_workqueue:
destroy_workqueue(chip->wq); destroy_workqueue(chip->wq);
clear_client_data:
i2c_set_clientdata(client, NULL);
fusb302_debugfs_exit(chip);
return ret; return ret;
} }
...@@ -1808,7 +1802,6 @@ static int fusb302_remove(struct i2c_client *client) ...@@ -1808,7 +1802,6 @@ static int fusb302_remove(struct i2c_client *client)
tcpm_unregister_port(chip->tcpm_port); tcpm_unregister_port(chip->tcpm_port);
destroy_workqueue(chip->wq); destroy_workqueue(chip->wq);
i2c_set_clientdata(client, NULL);
fusb302_debugfs_exit(chip); fusb302_debugfs_exit(chip);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment