.. | .. |
---|
62 | 62 | static irqreturn_t btmrvl_wake_irq_bt(int irq, void *priv) |
---|
63 | 63 | { |
---|
64 | 64 | struct btmrvl_sdio_card *card = priv; |
---|
| 65 | + struct device *dev = &card->func->dev; |
---|
65 | 66 | struct btmrvl_plt_wake_cfg *cfg = card->plt_wake_cfg; |
---|
66 | 67 | |
---|
67 | | - pr_info("%s: wake by bt\n", __func__); |
---|
| 68 | + dev_info(dev, "wake by bt\n"); |
---|
68 | 69 | cfg->wake_by_bt = true; |
---|
69 | 70 | disable_irq_nosync(irq); |
---|
70 | 71 | |
---|
71 | | - pm_wakeup_event(&card->func->dev, 0); |
---|
| 72 | + pm_wakeup_event(dev, 0); |
---|
72 | 73 | pm_system_wakeup(); |
---|
73 | 74 | |
---|
74 | 75 | return IRQ_HANDLED; |
---|
.. | .. |
---|
87 | 88 | |
---|
88 | 89 | if (!dev->of_node || |
---|
89 | 90 | !of_match_node(btmrvl_sdio_of_match_table, dev->of_node)) { |
---|
90 | | - pr_err("sdio platform data not available\n"); |
---|
| 91 | + dev_info(dev, "sdio device tree data not available\n"); |
---|
91 | 92 | return -1; |
---|
92 | 93 | } |
---|
93 | 94 | |
---|
.. | .. |
---|
110 | 111 | "Failed to request irq_bt %d (%d)\n", |
---|
111 | 112 | cfg->irq_bt, ret); |
---|
112 | 113 | } |
---|
| 114 | + |
---|
| 115 | + /* Configure wakeup (enabled by default) */ |
---|
| 116 | + device_init_wakeup(dev, true); |
---|
113 | 117 | disable_irq(cfg->irq_bt); |
---|
114 | 118 | } |
---|
115 | 119 | } |
---|
.. | .. |
---|
211 | 215 | .fw_dump_end = 0xea, |
---|
212 | 216 | }; |
---|
213 | 217 | |
---|
214 | | -static const struct btmrvl_sdio_card_reg btmrvl_reg_8997 = { |
---|
| 218 | +static const struct btmrvl_sdio_card_reg btmrvl_reg_89xx = { |
---|
215 | 219 | .cfg = 0x00, |
---|
216 | 220 | .host_int_mask = 0x08, |
---|
217 | 221 | .host_intstatus = 0x0c, |
---|
.. | .. |
---|
228 | 232 | .io_port_2 = 0xe6, |
---|
229 | 233 | .int_read_to_clear = true, |
---|
230 | 234 | .host_int_rsr = 0x04, |
---|
231 | | - .card_misc_cfg = 0xD8, |
---|
| 235 | + .card_misc_cfg = 0xd8, |
---|
232 | 236 | .fw_dump_ctrl = 0xf0, |
---|
233 | 237 | .fw_dump_start = 0xf1, |
---|
234 | 238 | .fw_dump_end = 0xf8, |
---|
.. | .. |
---|
279 | 283 | .supports_fw_dump = true, |
---|
280 | 284 | }; |
---|
281 | 285 | |
---|
| 286 | +static const struct btmrvl_sdio_device btmrvl_sdio_sd8977 = { |
---|
| 287 | + .helper = NULL, |
---|
| 288 | + .firmware = "mrvl/sdsd8977_combo_v2.bin", |
---|
| 289 | + .reg = &btmrvl_reg_89xx, |
---|
| 290 | + .support_pscan_win_report = true, |
---|
| 291 | + .sd_blksz_fw_dl = 256, |
---|
| 292 | + .supports_fw_dump = true, |
---|
| 293 | +}; |
---|
| 294 | + |
---|
| 295 | +static const struct btmrvl_sdio_device btmrvl_sdio_sd8987 = { |
---|
| 296 | + .helper = NULL, |
---|
| 297 | + .firmware = "mrvl/sd8987_uapsta.bin", |
---|
| 298 | + .reg = &btmrvl_reg_89xx, |
---|
| 299 | + .support_pscan_win_report = true, |
---|
| 300 | + .sd_blksz_fw_dl = 256, |
---|
| 301 | + .supports_fw_dump = true, |
---|
| 302 | +}; |
---|
| 303 | + |
---|
282 | 304 | static const struct btmrvl_sdio_device btmrvl_sdio_sd8997 = { |
---|
283 | 305 | .helper = NULL, |
---|
284 | | - .firmware = "mrvl/sd8997_uapsta.bin", |
---|
285 | | - .reg = &btmrvl_reg_8997, |
---|
| 306 | + .firmware = "mrvl/sdsd8997_combo_v4.bin", |
---|
| 307 | + .reg = &btmrvl_reg_89xx, |
---|
286 | 308 | .support_pscan_win_report = true, |
---|
287 | 309 | .sd_blksz_fw_dl = 256, |
---|
288 | 310 | .supports_fw_dump = true, |
---|
.. | .. |
---|
290 | 312 | |
---|
291 | 313 | static const struct sdio_device_id btmrvl_sdio_ids[] = { |
---|
292 | 314 | /* Marvell SD8688 Bluetooth device */ |
---|
293 | | - { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x9105), |
---|
| 315 | + { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_8688_BT), |
---|
294 | 316 | .driver_data = (unsigned long)&btmrvl_sdio_sd8688 }, |
---|
295 | 317 | /* Marvell SD8787 Bluetooth device */ |
---|
296 | | - { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x911A), |
---|
| 318 | + { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_8787_BT), |
---|
297 | 319 | .driver_data = (unsigned long)&btmrvl_sdio_sd8787 }, |
---|
298 | 320 | /* Marvell SD8787 Bluetooth AMP device */ |
---|
299 | | - { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x911B), |
---|
| 321 | + { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_8787_BT_AMP), |
---|
300 | 322 | .driver_data = (unsigned long)&btmrvl_sdio_sd8787 }, |
---|
301 | 323 | /* Marvell SD8797 Bluetooth device */ |
---|
302 | | - { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x912A), |
---|
| 324 | + { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_8797_BT), |
---|
303 | 325 | .driver_data = (unsigned long)&btmrvl_sdio_sd8797 }, |
---|
304 | 326 | /* Marvell SD8887 Bluetooth device */ |
---|
305 | | - { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x9136), |
---|
| 327 | + { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_8887_BT), |
---|
306 | 328 | .driver_data = (unsigned long)&btmrvl_sdio_sd8887 }, |
---|
307 | 329 | /* Marvell SD8897 Bluetooth device */ |
---|
308 | | - { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x912E), |
---|
| 330 | + { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_8897_BT), |
---|
309 | 331 | .driver_data = (unsigned long)&btmrvl_sdio_sd8897 }, |
---|
| 332 | + /* Marvell SD8977 Bluetooth device */ |
---|
| 333 | + { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_8977_BT), |
---|
| 334 | + .driver_data = (unsigned long)&btmrvl_sdio_sd8977 }, |
---|
| 335 | + /* Marvell SD8987 Bluetooth device */ |
---|
| 336 | + { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_8987_BT), |
---|
| 337 | + .driver_data = (unsigned long)&btmrvl_sdio_sd8987 }, |
---|
310 | 338 | /* Marvell SD8997 Bluetooth device */ |
---|
311 | | - { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 0x9142), |
---|
| 339 | + { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_8997_BT), |
---|
312 | 340 | .driver_data = (unsigned long)&btmrvl_sdio_sd8997 }, |
---|
313 | 341 | |
---|
314 | 342 | { } /* Terminating entry */ |
---|
.. | .. |
---|
1583 | 1611 | MODULE_SHUTDOWN_REQ); |
---|
1584 | 1612 | btmrvl_sdio_disable_host_int(card); |
---|
1585 | 1613 | } |
---|
| 1614 | + |
---|
1586 | 1615 | BT_DBG("unregister dev"); |
---|
1587 | 1616 | card->priv->surprise_removed = true; |
---|
1588 | 1617 | btmrvl_sdio_unregister_dev(card); |
---|
.. | .. |
---|
1619 | 1648 | } |
---|
1620 | 1649 | |
---|
1621 | 1650 | /* Enable platform specific wakeup interrupt */ |
---|
1622 | | - if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0) { |
---|
| 1651 | + if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0 && |
---|
| 1652 | + device_may_wakeup(dev)) { |
---|
1623 | 1653 | card->plt_wake_cfg->wake_by_bt = false; |
---|
1624 | 1654 | enable_irq(card->plt_wake_cfg->irq_bt); |
---|
1625 | 1655 | enable_irq_wake(card->plt_wake_cfg->irq_bt); |
---|
.. | .. |
---|
1636 | 1666 | BT_ERR("HS not activated, suspend failed!"); |
---|
1637 | 1667 | /* Disable platform specific wakeup interrupt */ |
---|
1638 | 1668 | if (card->plt_wake_cfg && |
---|
1639 | | - card->plt_wake_cfg->irq_bt >= 0) { |
---|
| 1669 | + card->plt_wake_cfg->irq_bt >= 0 && |
---|
| 1670 | + device_may_wakeup(dev)) { |
---|
1640 | 1671 | disable_irq_wake(card->plt_wake_cfg->irq_bt); |
---|
1641 | 1672 | disable_irq(card->plt_wake_cfg->irq_bt); |
---|
1642 | 1673 | } |
---|
.. | .. |
---|
1696 | 1727 | hci_resume_dev(hcidev); |
---|
1697 | 1728 | |
---|
1698 | 1729 | /* Disable platform specific wakeup interrupt */ |
---|
1699 | | - if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0) { |
---|
| 1730 | + if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0 && |
---|
| 1731 | + device_may_wakeup(dev)) { |
---|
1700 | 1732 | disable_irq_wake(card->plt_wake_cfg->irq_bt); |
---|
1701 | 1733 | disable_irq(card->plt_wake_cfg->irq_bt); |
---|
1702 | 1734 | if (card->plt_wake_cfg->wake_by_bt) |
---|
.. | .. |
---|
1760 | 1792 | MODULE_FIRMWARE("mrvl/sd8797_uapsta.bin"); |
---|
1761 | 1793 | MODULE_FIRMWARE("mrvl/sd8887_uapsta.bin"); |
---|
1762 | 1794 | MODULE_FIRMWARE("mrvl/sd8897_uapsta.bin"); |
---|
1763 | | -MODULE_FIRMWARE("mrvl/sd8997_uapsta.bin"); |
---|
| 1795 | +MODULE_FIRMWARE("mrvl/sdsd8977_combo_v2.bin"); |
---|
| 1796 | +MODULE_FIRMWARE("mrvl/sd8987_uapsta.bin"); |
---|
| 1797 | +MODULE_FIRMWARE("mrvl/sdsd8997_combo_v4.bin"); |
---|