Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aeb30016 authored by Dexuan Cui's avatar Dexuan Cui Committed by Jesse Barnes
Browse files

PCI: add Intel USB specific reset method



Handle device specific reset requirements (i.e. vendor reg for reset
along with appropriate timeout).

Signed-off-by: default avatarYu Zhao <yu.zhao@intel.com>
Signed-off-by: default avatarDexuan Cui <dexuan.cui@intel.com>
Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
parent b9c3b266
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -2642,7 +2642,31 @@ fs_initcall_sync(pci_apply_final_quirks);
 * reset a single function if other methods (e.g. FLR, PM D0->D3) are
 * not available.
 */
static int reset_intel_generic_dev(struct pci_dev *dev, int probe)
{
	int pos;

	/* only implement PCI_CLASS_SERIAL_USB at present */
	if (dev->class == PCI_CLASS_SERIAL_USB) {
		pos = pci_find_capability(dev, PCI_CAP_ID_VNDR);
		if (!pos)
			return -ENOTTY;

		if (probe)
			return 0;

		pci_write_config_byte(dev, pos + 0x4, 1);
		msleep(100);

		return 0;
	} else {
		return -ENOTTY;
	}
}

struct pci_dev_reset_methods pci_dev_reset_methods[] = {
	{ PCI_VENDOR_ID_INTEL, PCI_ANY_ID,
		reset_intel_generic_dev },
	{ 0 }
};
#else