mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-05-02 05:13:57 +00:00
Bluetooth: hci_qca: Enable power off/on support during hci down/up for QCA Rome
This patch registers hdev->shutdown() callback and also sets HCI_QUIRK_NON_PERSISTENT_SETUP for QCA Rome. It will power-off the BT chip during hci down and power-on/initialize the chip again during hci up. As wcn399x already enabled this, this patch also removed the callback register and QUIRK setting in qca_setup() for wcn399x and uniformly do this in the probe() routine. Signed-off-by: Rocky Liao <rjliao@codeaurora.org> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
bb2500ab02
commit
ae563183b6
1 changed files with 11 additions and 9 deletions
|
@ -1569,12 +1569,7 @@ retry:
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (qca_is_wcn399x(soc_type)) {
|
if (qca_is_wcn399x(soc_type)) {
|
||||||
/* Enable NON_PERSISTENT_SETUP QUIRK to ensure to execute
|
|
||||||
* setup for every hci up.
|
|
||||||
*/
|
|
||||||
set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks);
|
|
||||||
set_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks);
|
set_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks);
|
||||||
hu->hdev->shutdown = qca_power_off;
|
|
||||||
|
|
||||||
ret = qca_read_soc_version(hdev, &soc_ver, soc_type);
|
ret = qca_read_soc_version(hdev, &soc_ver, soc_type);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -1813,6 +1808,7 @@ static int qca_init_regulators(struct qca_power *qca,
|
||||||
static int qca_serdev_probe(struct serdev_device *serdev)
|
static int qca_serdev_probe(struct serdev_device *serdev)
|
||||||
{
|
{
|
||||||
struct qca_serdev *qcadev;
|
struct qca_serdev *qcadev;
|
||||||
|
struct hci_dev *hdev;
|
||||||
const struct qca_vreg_data *data;
|
const struct qca_vreg_data *data;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -1838,7 +1834,7 @@ static int qca_serdev_probe(struct serdev_device *serdev)
|
||||||
data->num_vregs);
|
data->num_vregs);
|
||||||
if (err) {
|
if (err) {
|
||||||
BT_ERR("Failed to init regulators:%d", err);
|
BT_ERR("Failed to init regulators:%d", err);
|
||||||
goto out;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
qcadev->bt_power->vregs_on = false;
|
qcadev->bt_power->vregs_on = false;
|
||||||
|
@ -1851,7 +1847,7 @@ static int qca_serdev_probe(struct serdev_device *serdev)
|
||||||
err = hci_uart_register_device(&qcadev->serdev_hu, &qca_proto);
|
err = hci_uart_register_device(&qcadev->serdev_hu, &qca_proto);
|
||||||
if (err) {
|
if (err) {
|
||||||
BT_ERR("wcn3990 serdev registration failed");
|
BT_ERR("wcn3990 serdev registration failed");
|
||||||
goto out;
|
return err;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qcadev->btsoc_type = QCA_ROME;
|
qcadev->btsoc_type = QCA_ROME;
|
||||||
|
@ -1877,12 +1873,18 @@ static int qca_serdev_probe(struct serdev_device *serdev)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
err = hci_uart_register_device(&qcadev->serdev_hu, &qca_proto);
|
err = hci_uart_register_device(&qcadev->serdev_hu, &qca_proto);
|
||||||
if (err)
|
if (err) {
|
||||||
|
BT_ERR("Rome serdev registration failed");
|
||||||
clk_disable_unprepare(qcadev->susclk);
|
clk_disable_unprepare(qcadev->susclk);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
out: return err;
|
hdev = qcadev->serdev_hu.hdev;
|
||||||
|
set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks);
|
||||||
|
hdev->shutdown = qca_power_off;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qca_serdev_remove(struct serdev_device *serdev)
|
static void qca_serdev_remove(struct serdev_device *serdev)
|
||||||
|
|
Loading…
Add table
Reference in a new issue