Commit eba17187 authored by Bartosz Golaszewski's avatar Bartosz Golaszewski Committed by Luiz Augusto von Dentz
Browse files

Bluetooth: hci_qca: make pwrseq calls the default if available



If the device has a power sequencing handle, use it first. Otherwise
fall back to whatever code already exists.

Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
parent b8093157
Loading
Loading
Loading
Loading
+13 −11
Original line number Diff line number Diff line
@@ -1718,6 +1718,7 @@ static int qca_regulator_init(struct hci_uart *hu)
	 * off the voltage regulator.
	 */
	qcadev = serdev_device_get_drvdata(hu->serdev);

	if (!qcadev->bt_power->vregs_on) {
		serdev_device_close(hu->serdev);
		ret = qca_regulator_enable(qcadev);
@@ -1800,18 +1801,8 @@ static int qca_power_on(struct hci_dev *hdev)
	case QCA_WCN6750:
	case QCA_WCN6855:
	case QCA_WCN7850:
		ret = qca_regulator_init(hu);
		break;

	case QCA_QCA6390:
		qcadev = serdev_device_get_drvdata(hu->serdev);
		ret = pwrseq_power_on(qcadev->bt_power->pwrseq);
		if (ret)
			return ret;

		ret = qca_port_reopen(hu);
		if (ret)
			return ret;
		ret = qca_regulator_init(hu);
		break;

	default:
@@ -2149,6 +2140,7 @@ static void qca_power_shutdown(struct hci_uart *hu)
	unsigned long flags;
	enum qca_btsoc_type soc_type = qca_soc_type(hu);
	bool sw_ctrl_state;
	struct qca_power *power;

	/* From this point we go into power off state. But serial port is
	 * still open, stop queueing the IBS data and flush all the buffered
@@ -2166,6 +2158,13 @@ static void qca_power_shutdown(struct hci_uart *hu)
		return;

	qcadev = serdev_device_get_drvdata(hu->serdev);
	power = qcadev->bt_power;

	if (power->pwrseq) {
		pwrseq_power_off(power->pwrseq);
		set_bit(QCA_BT_OFF, &qca->flags);
		return;
        }

	switch (soc_type) {
	case QCA_WCN3988:
@@ -2227,6 +2226,9 @@ static int qca_regulator_enable(struct qca_serdev *qcadev)
	struct qca_power *power = qcadev->bt_power;
	int ret;

	if (power->pwrseq)
		return pwrseq_power_on(power->pwrseq);

	/* Already enabled */
	if (power->vregs_on)
		return 0;