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

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
Loading
Loading
Loading
Loading
+1 −9
Original line number Diff line number Diff line
@@ -380,10 +380,6 @@ static int bcm_open(struct hci_uart *hu)
	mutex_lock(&bcm_device_lock);

	if (hu->serdev) {
		err = serdev_device_open(hu->serdev);
		if (err)
			goto err_free;

		bcm->dev = serdev_device_get_drvdata(hu->serdev);
		goto out;
	}
@@ -420,13 +416,10 @@ out:
	return 0;

err_unset_hu:
	if (hu->serdev)
		serdev_device_close(hu->serdev);
#ifdef CONFIG_PM
	else
	if (!hu->serdev)
		bcm->dev->hu = NULL;
#endif
err_free:
	mutex_unlock(&bcm_device_lock);
	hu->priv = NULL;
	kfree(bcm);
@@ -445,7 +438,6 @@ static int bcm_close(struct hci_uart *hu)
	mutex_lock(&bcm_device_lock);

	if (hu->serdev) {
		serdev_device_close(hu->serdev);
		bdev = serdev_device_get_drvdata(hu->serdev);
	} else if (bcm_device_exists(bcm->dev)) {
		bdev = bcm->dev;
+0 −3
Original line number Diff line number Diff line
@@ -141,7 +141,6 @@ static int ll_open(struct hci_uart *hu)

	if (hu->serdev) {
		struct ll_device *lldev = serdev_device_get_drvdata(hu->serdev);
		serdev_device_open(hu->serdev);
		if (!IS_ERR(lldev->ext_clk))
			clk_prepare_enable(lldev->ext_clk);
	}
@@ -179,8 +178,6 @@ static int ll_close(struct hci_uart *hu)
		gpiod_set_value_cansleep(lldev->enable_gpio, 0);

		clk_disable_unprepare(lldev->ext_clk);

		serdev_device_close(hu->serdev);
	}

	hu->priv = NULL;
+0 −3
Original line number Diff line number Diff line
@@ -477,8 +477,6 @@ static int nokia_open(struct hci_uart *hu)

	dev_dbg(dev, "protocol open");

	serdev_device_open(hu->serdev);

	pm_runtime_enable(dev);

	return 0;
@@ -513,7 +511,6 @@ static int nokia_close(struct hci_uart *hu)
	gpiod_set_value(btdev->wakeup_bt, 0);

	pm_runtime_disable(&btdev->serdev->dev);
	serdev_device_close(btdev->serdev);

	return 0;
}
+8 −1
Original line number Diff line number Diff line
@@ -284,10 +284,14 @@ int hci_uart_register_device(struct hci_uart *hu,

	serdev_device_set_client_ops(hu->serdev, &hci_serdev_client_ops);

	err = p->open(hu);
	err = serdev_device_open(hu->serdev);
	if (err)
		return err;

	err = p->open(hu);
	if (err)
		goto err_open;

	hu->proto = p;
	set_bit(HCI_UART_PROTO_READY, &hu->flags);

@@ -353,6 +357,8 @@ err_register:
err_alloc:
	clear_bit(HCI_UART_PROTO_READY, &hu->flags);
	p->close(hu);
err_open:
	serdev_device_close(hu->serdev);
	return err;
}
EXPORT_SYMBOL_GPL(hci_uart_register_device);
@@ -367,5 +373,6 @@ void hci_uart_unregister_device(struct hci_uart *hu)
	cancel_work_sync(&hu->write_work);

	hu->proto->close(hu);
	serdev_device_close(hu->serdev);
}
EXPORT_SYMBOL_GPL(hci_uart_unregister_device);