Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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 Original line Diff line number Diff line
@@ -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)
	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)
	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;
+0 −3
Original line number Original line Diff line number Diff line
@@ -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)
		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;
+0 −3
Original line number Original line Diff line number Diff line
@@ -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)
	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;
}
}
+8 −1
Original line number Original line 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);
	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,
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)
	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);