mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
Bluetooth: btmtk: add MT7902 SDIO support
Add MT7902 Bluetooth SDIO support by introducing chip data and registering the device ID. Runtime PM is not yet supported by the driver, but normal operation is unaffected. Signed-off-by: Sean Wang <sean.wang@mediatek.com> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This commit is contained in:
committed by
Luiz Augusto von Dentz
parent
22fd19bf24
commit
7f2c3c49ba
@@ -42,24 +42,35 @@ struct btmtksdio_data {
|
||||
const char *fwname;
|
||||
u16 chipid;
|
||||
bool lp_mbox_supported;
|
||||
bool pm_runtime_supported;
|
||||
};
|
||||
|
||||
static const struct btmtksdio_data mt7663_data = {
|
||||
.fwname = FIRMWARE_MT7663,
|
||||
.chipid = 0x7663,
|
||||
.lp_mbox_supported = false,
|
||||
.pm_runtime_supported = true,
|
||||
};
|
||||
|
||||
static const struct btmtksdio_data mt7668_data = {
|
||||
.fwname = FIRMWARE_MT7668,
|
||||
.chipid = 0x7668,
|
||||
.lp_mbox_supported = false,
|
||||
.pm_runtime_supported = true,
|
||||
};
|
||||
|
||||
static const struct btmtksdio_data mt7921_data = {
|
||||
.fwname = FIRMWARE_MT7961,
|
||||
.chipid = 0x7921,
|
||||
.lp_mbox_supported = true,
|
||||
.pm_runtime_supported = true,
|
||||
};
|
||||
|
||||
static const struct btmtksdio_data mt7902_data = {
|
||||
.fwname = FIRMWARE_MT7902,
|
||||
.chipid = 0x7902,
|
||||
.lp_mbox_supported = false,
|
||||
.pm_runtime_supported = false,
|
||||
};
|
||||
|
||||
static const struct sdio_device_id btmtksdio_table[] = {
|
||||
@@ -69,6 +80,8 @@ static const struct sdio_device_id btmtksdio_table[] = {
|
||||
.driver_data = (kernel_ulong_t)&mt7668_data },
|
||||
{SDIO_DEVICE(SDIO_VENDOR_ID_MEDIATEK, SDIO_DEVICE_ID_MEDIATEK_MT7961),
|
||||
.driver_data = (kernel_ulong_t)&mt7921_data },
|
||||
{SDIO_DEVICE(SDIO_VENDOR_ID_MEDIATEK, SDIO_DEVICE_ID_MEDIATEK_MT7902),
|
||||
.driver_data = (kernel_ulong_t)&mt7902_data },
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
MODULE_DEVICE_TABLE(sdio, btmtksdio_table);
|
||||
@@ -1090,6 +1103,7 @@ static int btmtksdio_setup(struct hci_dev *hdev)
|
||||
set_bit(BTMTKSDIO_HW_TX_READY, &bdev->tx_state);
|
||||
|
||||
switch (bdev->data->chipid) {
|
||||
case 0x7902:
|
||||
case 0x7921:
|
||||
if (test_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state)) {
|
||||
err = btmtksdio_mtk_reg_read(hdev, MT7921_DLSTATUS,
|
||||
@@ -1167,22 +1181,24 @@ static int btmtksdio_setup(struct hci_dev *hdev)
|
||||
delta = ktime_sub(rettime, calltime);
|
||||
duration = (unsigned long long)ktime_to_ns(delta) >> 10;
|
||||
|
||||
pm_runtime_set_autosuspend_delay(bdev->dev,
|
||||
MTKBTSDIO_AUTOSUSPEND_DELAY);
|
||||
pm_runtime_use_autosuspend(bdev->dev);
|
||||
if (bdev->data->pm_runtime_supported) {
|
||||
pm_runtime_set_autosuspend_delay(bdev->dev,
|
||||
MTKBTSDIO_AUTOSUSPEND_DELAY);
|
||||
pm_runtime_use_autosuspend(bdev->dev);
|
||||
|
||||
err = pm_runtime_set_active(bdev->dev);
|
||||
if (err < 0)
|
||||
return err;
|
||||
err = pm_runtime_set_active(bdev->dev);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
/* Default forbid runtime auto suspend, that can be allowed by
|
||||
* enable_autosuspend flag or the PM runtime entry under sysfs.
|
||||
*/
|
||||
pm_runtime_forbid(bdev->dev);
|
||||
pm_runtime_enable(bdev->dev);
|
||||
/* Default forbid runtime auto suspend, that can be allowed by
|
||||
* enable_autosuspend flag or the PM runtime entry under sysfs.
|
||||
*/
|
||||
pm_runtime_forbid(bdev->dev);
|
||||
pm_runtime_enable(bdev->dev);
|
||||
|
||||
if (enable_autosuspend)
|
||||
pm_runtime_allow(bdev->dev);
|
||||
if (enable_autosuspend)
|
||||
pm_runtime_allow(bdev->dev);
|
||||
}
|
||||
|
||||
bt_dev_info(hdev, "Device setup in %llu usecs", duration);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user