Commit e9ca0807 authored by Hans de Goede's avatar Hans de Goede Committed by Marcel Holtmann

Bluetooth: hci_serdev: Move serdev_device_close/open into common hci_serdev code

Make hci_uart_register_device() and hci_uart_unregister_device() call
serdev_device_close()/open() themselves instead of relying on the various
hci_uart drivers to do this for them.

Besides reducing code complexity, this also ensures correct error checking
of serdev_device_open(), which was missing in a few drivers.
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent 412fe29f
...@@ -380,10 +380,6 @@ static int bcm_open(struct hci_uart *hu) ...@@ -380,10 +380,6 @@ static int bcm_open(struct hci_uart *hu)
mutex_lock(&bcm_device_lock); mutex_lock(&bcm_device_lock);
if (hu->serdev) { if (hu->serdev) {
err = serdev_device_open(hu->serdev);
if (err)
goto err_free;
bcm->dev = serdev_device_get_drvdata(hu->serdev); bcm->dev = serdev_device_get_drvdata(hu->serdev);
goto out; goto out;
} }
...@@ -420,13 +416,10 @@ static int bcm_open(struct hci_uart *hu) ...@@ -420,13 +416,10 @@ static int bcm_open(struct hci_uart *hu)
return 0; return 0;
err_unset_hu: err_unset_hu:
if (hu->serdev)
serdev_device_close(hu->serdev);
#ifdef CONFIG_PM #ifdef CONFIG_PM
else if (!hu->serdev)
bcm->dev->hu = NULL; bcm->dev->hu = NULL;
#endif #endif
err_free:
mutex_unlock(&bcm_device_lock); mutex_unlock(&bcm_device_lock);
hu->priv = NULL; hu->priv = NULL;
kfree(bcm); kfree(bcm);
...@@ -445,7 +438,6 @@ static int bcm_close(struct hci_uart *hu) ...@@ -445,7 +438,6 @@ static int bcm_close(struct hci_uart *hu)
mutex_lock(&bcm_device_lock); mutex_lock(&bcm_device_lock);
if (hu->serdev) { if (hu->serdev) {
serdev_device_close(hu->serdev);
bdev = serdev_device_get_drvdata(hu->serdev); bdev = serdev_device_get_drvdata(hu->serdev);
} else if (bcm_device_exists(bcm->dev)) { } else if (bcm_device_exists(bcm->dev)) {
bdev = bcm->dev; bdev = bcm->dev;
......
...@@ -141,7 +141,6 @@ static int ll_open(struct hci_uart *hu) ...@@ -141,7 +141,6 @@ static int ll_open(struct hci_uart *hu)
if (hu->serdev) { if (hu->serdev) {
struct ll_device *lldev = serdev_device_get_drvdata(hu->serdev); struct ll_device *lldev = serdev_device_get_drvdata(hu->serdev);
serdev_device_open(hu->serdev);
if (!IS_ERR(lldev->ext_clk)) if (!IS_ERR(lldev->ext_clk))
clk_prepare_enable(lldev->ext_clk); clk_prepare_enable(lldev->ext_clk);
} }
...@@ -179,8 +178,6 @@ static int ll_close(struct hci_uart *hu) ...@@ -179,8 +178,6 @@ static int ll_close(struct hci_uart *hu)
gpiod_set_value_cansleep(lldev->enable_gpio, 0); gpiod_set_value_cansleep(lldev->enable_gpio, 0);
clk_disable_unprepare(lldev->ext_clk); clk_disable_unprepare(lldev->ext_clk);
serdev_device_close(hu->serdev);
} }
hu->priv = NULL; hu->priv = NULL;
......
...@@ -477,8 +477,6 @@ static int nokia_open(struct hci_uart *hu) ...@@ -477,8 +477,6 @@ static int nokia_open(struct hci_uart *hu)
dev_dbg(dev, "protocol open"); dev_dbg(dev, "protocol open");
serdev_device_open(hu->serdev);
pm_runtime_enable(dev); pm_runtime_enable(dev);
return 0; return 0;
...@@ -513,7 +511,6 @@ static int nokia_close(struct hci_uart *hu) ...@@ -513,7 +511,6 @@ static int nokia_close(struct hci_uart *hu)
gpiod_set_value(btdev->wakeup_bt, 0); gpiod_set_value(btdev->wakeup_bt, 0);
pm_runtime_disable(&btdev->serdev->dev); pm_runtime_disable(&btdev->serdev->dev);
serdev_device_close(btdev->serdev);
return 0; return 0;
} }
......
...@@ -284,10 +284,14 @@ int hci_uart_register_device(struct hci_uart *hu, ...@@ -284,10 +284,14 @@ int hci_uart_register_device(struct hci_uart *hu,
serdev_device_set_client_ops(hu->serdev, &hci_serdev_client_ops); serdev_device_set_client_ops(hu->serdev, &hci_serdev_client_ops);
err = p->open(hu); err = serdev_device_open(hu->serdev);
if (err) if (err)
return err; return err;
err = p->open(hu);
if (err)
goto err_open;
hu->proto = p; hu->proto = p;
set_bit(HCI_UART_PROTO_READY, &hu->flags); set_bit(HCI_UART_PROTO_READY, &hu->flags);
...@@ -353,6 +357,8 @@ int hci_uart_register_device(struct hci_uart *hu, ...@@ -353,6 +357,8 @@ int hci_uart_register_device(struct hci_uart *hu,
err_alloc: err_alloc:
clear_bit(HCI_UART_PROTO_READY, &hu->flags); clear_bit(HCI_UART_PROTO_READY, &hu->flags);
p->close(hu); p->close(hu);
err_open:
serdev_device_close(hu->serdev);
return err; return err;
} }
EXPORT_SYMBOL_GPL(hci_uart_register_device); EXPORT_SYMBOL_GPL(hci_uart_register_device);
...@@ -367,5 +373,6 @@ void hci_uart_unregister_device(struct hci_uart *hu) ...@@ -367,5 +373,6 @@ void hci_uart_unregister_device(struct hci_uart *hu)
cancel_work_sync(&hu->write_work); cancel_work_sync(&hu->write_work);
hu->proto->close(hu); hu->proto->close(hu);
serdev_device_close(hu->serdev);
} }
EXPORT_SYMBOL_GPL(hci_uart_unregister_device); EXPORT_SYMBOL_GPL(hci_uart_unregister_device);
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