HID: intel-ish-hid: Fix driver reinit failure

When built as a module, modprobe followed by rmmod can fail because
DMA was still active. So to fix this, DMA needs to be disabled during
module exit.

This change disables DMA during modules exit and change the ISH PCI
device status to D3.

Signed-off-by: Even Xu <even.xu@intel.com>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
Even Xu 2016-10-21 15:48:40 -07:00 committed by Jiri Kosina
parent 8b2979febc
commit 2a1e3b932c
1 changed files with 15 additions and 0 deletions

View File

@ -905,6 +905,21 @@ struct ishtp_device *ish_dev_init(struct pci_dev *pdev)
*/
void ish_device_disable(struct ishtp_device *dev)
{
struct pci_dev *pdev = dev->pdev;
if (!pdev)
return;
/* Disable dma communication between FW and host */
if (ish_disable_dma(dev)) {
dev_err(&pdev->dev,
"Can't reset - stuck with DMA in-progress\n");
return;
}
/* Put ISH to D3hot state for power saving */
pci_set_power_state(pdev, PCI_D3hot);
dev->dev_state = ISHTP_DEV_DISABLED;
ish_clr_host_rdy(dev);
}