mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
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: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This commit is contained in:
parent
b809315771
commit
eba1718717
1 changed files with 13 additions and 11 deletions
|
@ -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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue