mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 08:44:21 +08:00
mmc: sdhci-acpi: Remove special handling for GPD win/pocket devices
Remove the special sdhci_acpi_no_fixup_child_power() helper which was added to avoid triggering an ACPI tables bug on the GPD win/pocket devices. The ACPI child-device triggering this bug has now been added to the acpi_device_override_status() quirk table, so that its status field is set to all 0 (instead of the wrong return value from the _STA ACPI method). This removes the need for the special handling in the sdhci-acpi code. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Acked-by: Adrian Hunter <adrian.hunter@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
b72cd8e0fa
commit
8339abffd3
@ -34,7 +34,6 @@
|
||||
#include <asm/cpu_device_id.h>
|
||||
#include <asm/intel-family.h>
|
||||
#include <asm/iosf_mbi.h>
|
||||
#include <linux/pci.h>
|
||||
#endif
|
||||
|
||||
#include "sdhci.h"
|
||||
@ -250,16 +249,6 @@ static bool sdhci_acpi_byt(void)
|
||||
return x86_match_cpu(byt);
|
||||
}
|
||||
|
||||
static bool sdhci_acpi_cht(void)
|
||||
{
|
||||
static const struct x86_cpu_id cht[] = {
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_AIRMONT, NULL),
|
||||
{}
|
||||
};
|
||||
|
||||
return x86_match_cpu(cht);
|
||||
}
|
||||
|
||||
#define BYT_IOSF_SCCEP 0x63
|
||||
#define BYT_IOSF_OCP_NETCTRL0 0x1078
|
||||
#define BYT_IOSF_OCP_TIMEOUT_BASE GENMASK(10, 8)
|
||||
@ -304,43 +293,6 @@ static bool sdhci_acpi_byt_defer(struct device *dev)
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool sdhci_acpi_cht_pci_wifi(unsigned int vendor, unsigned int device,
|
||||
unsigned int slot, unsigned int parent_slot)
|
||||
{
|
||||
struct pci_dev *dev, *parent, *from = NULL;
|
||||
|
||||
while (1) {
|
||||
dev = pci_get_device(vendor, device, from);
|
||||
pci_dev_put(from);
|
||||
if (!dev)
|
||||
break;
|
||||
parent = pci_upstream_bridge(dev);
|
||||
if (ACPI_COMPANION(&dev->dev) && PCI_SLOT(dev->devfn) == slot &&
|
||||
parent && PCI_SLOT(parent->devfn) == parent_slot &&
|
||||
!pci_upstream_bridge(parent)) {
|
||||
pci_dev_put(dev);
|
||||
return true;
|
||||
}
|
||||
from = dev;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* GPDwin uses PCI wifi which conflicts with SDIO's use of
|
||||
* acpi_device_fix_up_power() on child device nodes. Identifying GPDwin is
|
||||
* problematic, but since SDIO is only used for wifi, the presence of the PCI
|
||||
* wifi card in the expected slot with an ACPI companion node, is used to
|
||||
* indicate that acpi_device_fix_up_power() should be avoided.
|
||||
*/
|
||||
static inline bool sdhci_acpi_no_fixup_child_power(struct acpi_device *adev)
|
||||
{
|
||||
return sdhci_acpi_cht() &&
|
||||
acpi_dev_hid_uid_match(adev, "80860F14", "2") &&
|
||||
sdhci_acpi_cht_pci_wifi(0x14e4, 0x43ec, 0, 28);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static inline void sdhci_acpi_byt_setting(struct device *dev)
|
||||
@ -352,11 +304,6 @@ static inline bool sdhci_acpi_byt_defer(struct device *dev)
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool sdhci_acpi_no_fixup_child_power(struct acpi_device *adev)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static int bxt_get_cd(struct mmc_host *mmc)
|
||||
@ -861,11 +808,9 @@ static int sdhci_acpi_probe(struct platform_device *pdev)
|
||||
|
||||
/* Power on the SDHCI controller and its children */
|
||||
acpi_device_fix_up_power(device);
|
||||
if (!sdhci_acpi_no_fixup_child_power(device)) {
|
||||
list_for_each_entry(child, &device->children, node)
|
||||
if (child->status.present && child->status.enabled)
|
||||
acpi_device_fix_up_power(child);
|
||||
}
|
||||
list_for_each_entry(child, &device->children, node)
|
||||
if (child->status.present && child->status.enabled)
|
||||
acpi_device_fix_up_power(child);
|
||||
|
||||
if (sdhci_acpi_byt_defer(dev))
|
||||
return -EPROBE_DEFER;
|
||||
|
Loading…
Reference in New Issue
Block a user