Patch from https://github.com/hadess/rtl8723bs/issues/80#issuecomment-252259702 diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c index 159f7f1..2076427 100644 --- a/drivers/acpi/acpi_platform.c +++ b/drivers/acpi/acpi_platform.c @@ -50,8 +50,10 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev) int count; /* If the ACPI node already has a physical device attached, skip it. */ - if (adev->physical_node_count) - return NULL; + if (adev->physical_node_count && !( + !strcmp(acpi_device_hid(adev), "80860F14") && + !strcmp(adev->pnp.unique_id, "2") + )) return NULL; if (!acpi_match_device_ids(adev, forbidden_id_list)) return ERR_PTR(-EINVAL); diff --git a/drivers/mmc/host/sdhci-acpi.c b/drivers/mmc/host/sdhci-acpi.c index 458ffb7..2807f78 100644 --- a/drivers/mmc/host/sdhci-acpi.c +++ b/drivers/mmc/host/sdhci-acpi.c @@ -47,6 +47,7 @@ #endif #include "sdhci.h" +#include enum { SDHCI_ACPI_SD_CD = BIT(0), @@ -381,6 +382,7 @@ static int sdhci_acpi_probe(struct platform_device *pdev) struct acpi_device *device, *child; struct sdhci_acpi_host *c; struct sdhci_host *host; + struct pci_dev *pcidev = NULL; struct resource *iomem; resource_size_t len; const char *hid; @@ -404,6 +406,12 @@ static int sdhci_acpi_probe(struct platform_device *pdev) hid = acpi_device_hid(device); uid = device->pnp.unique_id; + /* Workaround for CherryTrail x5-z8xxx: Make sure the SDIO controller + * doesn't get added via PCI. */ + if (!strcmp(hid, "80860F14") && !strcmp(uid, "1") && + (pcidev = pci_get_device(0x8086, 0x2280, NULL)) != NULL) + pci_stop_and_remove_bus_device(pcidev); + iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!iomem) return -ENOMEM;