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

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
...@@ -1718,6 +1718,7 @@ static int qca_regulator_init(struct hci_uart *hu) ...@@ -1718,6 +1718,7 @@ static int qca_regulator_init(struct hci_uart *hu)
* off the voltage regulator. * off the voltage regulator.
*/ */
qcadev = serdev_device_get_drvdata(hu->serdev); qcadev = serdev_device_get_drvdata(hu->serdev);
if (!qcadev->bt_power->vregs_on) { if (!qcadev->bt_power->vregs_on) {
serdev_device_close(hu->serdev); serdev_device_close(hu->serdev);
ret = qca_regulator_enable(qcadev); ret = qca_regulator_enable(qcadev);
...@@ -1800,18 +1801,8 @@ static int qca_power_on(struct hci_dev *hdev) ...@@ -1800,18 +1801,8 @@ static int qca_power_on(struct hci_dev *hdev)
case QCA_WCN6750: case QCA_WCN6750:
case QCA_WCN6855: case QCA_WCN6855:
case QCA_WCN7850: case QCA_WCN7850:
ret = qca_regulator_init(hu);
break;
case QCA_QCA6390: case QCA_QCA6390:
qcadev = serdev_device_get_drvdata(hu->serdev); ret = qca_regulator_init(hu);
ret = pwrseq_power_on(qcadev->bt_power->pwrseq);
if (ret)
return ret;
ret = qca_port_reopen(hu);
if (ret)
return ret;
break; break;
default: default:
...@@ -2149,6 +2140,7 @@ static void qca_power_shutdown(struct hci_uart *hu) ...@@ -2149,6 +2140,7 @@ static void qca_power_shutdown(struct hci_uart *hu)
unsigned long flags; unsigned long flags;
enum qca_btsoc_type soc_type = qca_soc_type(hu); enum qca_btsoc_type soc_type = qca_soc_type(hu);
bool sw_ctrl_state; bool sw_ctrl_state;
struct qca_power *power;
/* From this point we go into power off state. But serial port is /* 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 * 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) ...@@ -2166,6 +2158,13 @@ static void qca_power_shutdown(struct hci_uart *hu)
return; return;
qcadev = serdev_device_get_drvdata(hu->serdev); 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) { switch (soc_type) {
case QCA_WCN3988: case QCA_WCN3988:
...@@ -2227,6 +2226,9 @@ static int qca_regulator_enable(struct qca_serdev *qcadev) ...@@ -2227,6 +2226,9 @@ static int qca_regulator_enable(struct qca_serdev *qcadev)
struct qca_power *power = qcadev->bt_power; struct qca_power *power = qcadev->bt_power;
int ret; int ret;
if (power->pwrseq)
return pwrseq_power_on(power->pwrseq);
/* Already enabled */ /* Already enabled */
if (power->vregs_on) if (power->vregs_on)
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