From 0a99e7e3d9eb43debbbaaf4a4b8a668f3ab84d71 Mon Sep 17 00:00:00 2001 From: "R.Marek@sh.cvut.cz" Date: Tue, 27 Sep 2005 21:54:51 +0000 Subject: [PATCH] --- yaml --- r: 10664 b: refs/heads/master c: 2cea752f683af1be58ee8f25717c0a8118e0ac5b h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/mmc/wbsd.c | 119 +++++++++---------------------------- trunk/drivers/pci/quirks.c | 12 ++++ 3 files changed, 41 insertions(+), 92 deletions(-) diff --git a/[refs] b/[refs] index a7133907f8cb..13f0ee63286f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: dbe0580d0d2fccf63b0349840a7ae3dbb16f3074 +refs/heads/master: 2cea752f683af1be58ee8f25717c0a8118e0ac5b diff --git a/trunk/drivers/mmc/wbsd.c b/trunk/drivers/mmc/wbsd.c index 3ace875decc4..25f7ce7b3bc0 100644 --- a/trunk/drivers/mmc/wbsd.c +++ b/trunk/drivers/mmc/wbsd.c @@ -1033,16 +1033,13 @@ static void wbsd_set_ios(struct mmc_host* mmc, struct mmc_ios* ios) } else { - if (setup & WBSD_DAT3_H) - { - setup &= ~WBSD_DAT3_H; + setup &= ~WBSD_DAT3_H; - /* - * We cannot resume card detection immediatly - * because of capacitance and delays in the chip. - */ - mod_timer(&host->ignore_timer, jiffies + HZ/100); - } + /* + * We cannot resume card detection immediatly + * because of capacitance and delays in the chip. + */ + mod_timer(&host->ignore_timer, jiffies + HZ/100); } wbsd_write_index(host, WBSD_IDX_SETUP, setup); @@ -1464,10 +1461,8 @@ static int __devinit wbsd_scan(struct wbsd_host* host) { id = 0xFFFF; - host->config = config_ports[i]; - host->unlock_code = unlock_codes[j]; - - wbsd_unlock_config(host); + outb(unlock_codes[j], config_ports[i]); + outb(unlock_codes[j], config_ports[i]); outb(WBSD_CONF_ID_HI, config_ports[i]); id = inb(config_ports[i] + 1) << 8; @@ -1475,13 +1470,13 @@ static int __devinit wbsd_scan(struct wbsd_host* host) outb(WBSD_CONF_ID_LO, config_ports[i]); id |= inb(config_ports[i] + 1); - wbsd_lock_config(host); - for (k = 0;k < sizeof(valid_ids)/sizeof(int);k++) { if (id == valid_ids[k]) { host->chip_id = id; + host->config = config_ports[i]; + host->unlock_code = unlock_codes[i]; return 0; } @@ -1492,14 +1487,13 @@ static int __devinit wbsd_scan(struct wbsd_host* host) DBG("Unknown hardware (id %x) found at %x\n", id, config_ports[i]); } + + outb(LOCK_CODE, config_ports[i]); } release_region(config_ports[i], 2); } - host->config = 0; - host->unlock_code = 0; - return -ENODEV; } @@ -1705,10 +1699,8 @@ static void __devexit wbsd_release_resources(struct wbsd_host* host) * Configure the resources the chip should use. */ -static void wbsd_chip_config(struct wbsd_host* host) +static void __devinit wbsd_chip_config(struct wbsd_host* host) { - wbsd_unlock_config(host); - /* * Reset the chip. */ @@ -1741,20 +1733,16 @@ static void wbsd_chip_config(struct wbsd_host* host) */ wbsd_write_config(host, WBSD_CONF_ENABLE, 1); wbsd_write_config(host, WBSD_CONF_POWER, 0x20); - - wbsd_lock_config(host); } /* * Check that configured resources are correct. */ -static int wbsd_chip_validate(struct wbsd_host* host) +static int __devinit wbsd_chip_validate(struct wbsd_host* host) { int base, irq, dma; - wbsd_unlock_config(host); - /* * Select SD/MMC function. */ @@ -1770,8 +1758,6 @@ static int wbsd_chip_validate(struct wbsd_host* host) dma = wbsd_read_config(host, WBSD_CONF_DRQ); - wbsd_lock_config(host); - /* * Validate against given configuration. */ @@ -1785,20 +1771,6 @@ static int wbsd_chip_validate(struct wbsd_host* host) return 1; } -/* - * Powers down the SD function - */ - -static void wbsd_chip_poweroff(struct wbsd_host* host) -{ - wbsd_unlock_config(host); - - wbsd_write_config(host, WBSD_CONF_DEVICE, DEVICE_SD); - wbsd_write_config(host, WBSD_CONF_ENABLE, 0); - - wbsd_lock_config(host); -} - /*****************************************************************************\ * * * Devices setup and shutdown * @@ -1872,11 +1844,7 @@ static int __devinit wbsd_init(struct device* dev, int base, int irq, int dma, */ #ifdef CONFIG_PM if (host->config) - { - wbsd_unlock_config(host); wbsd_write_config(host, WBSD_CONF_PME, 0xA0); - wbsd_lock_config(host); - } #endif /* * Allow device to initialise itself properly. @@ -1917,11 +1885,16 @@ static void __devexit wbsd_shutdown(struct device* dev, int pnp) mmc_remove_host(mmc); - /* - * Power down the SD/MMC function. - */ if (!pnp) - wbsd_chip_poweroff(host); + { + /* + * Power down the SD/MMC function. + */ + wbsd_unlock_config(host); + wbsd_write_config(host, WBSD_CONF_DEVICE, DEVICE_SD); + wbsd_write_config(host, WBSD_CONF_ENABLE, 0); + wbsd_lock_config(host); + } wbsd_release_resources(host); @@ -1982,59 +1955,23 @@ static void __devexit wbsd_pnp_remove(struct pnp_dev * dev) */ #ifdef CONFIG_PM - static int wbsd_suspend(struct device *dev, pm_message_t state) { - struct mmc_host *mmc = dev_get_drvdata(dev); - struct wbsd_host *host; - int ret; - - if (!mmc) - return 0; - - DBG("Suspending...\n"); - - ret = mmc_suspend_host(mmc, state); - if (!ret) - return ret; - - host = mmc_priv(mmc); - - wbsd_chip_poweroff(host); + DBGF("Not yet supported\n"); return 0; } static int wbsd_resume(struct device *dev) { - struct mmc_host *mmc = dev_get_drvdata(dev); - struct wbsd_host *host; - - if (!mmc) - return 0; - - DBG("Resuming...\n"); + DBGF("Not yet supported\n"); - host = mmc_priv(mmc); - - wbsd_chip_config(host); - - /* - * Allow device to initialise itself properly. - */ - mdelay(5); - - wbsd_init_device(host); - - return mmc_resume_host(mmc); + return 0; } - -#else /* CONFIG_PM */ - +#else #define wbsd_suspend NULL #define wbsd_resume NULL - -#endif /* CONFIG_PM */ +#endif static struct platform_device *wbsd_device; diff --git a/trunk/drivers/pci/quirks.c b/trunk/drivers/pci/quirks.c index 7992bc8cc6a4..0663428a0e64 100644 --- a/trunk/drivers/pci/quirks.c +++ b/trunk/drivers/pci/quirks.c @@ -414,6 +414,18 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, quirk_ich4_lpc_acpi ); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_1, quirk_ich4_lpc_acpi ); +static void __devinit quirk_ich6_lpc_acpi(struct pci_dev *dev) +{ + u32 region; + + pci_read_config_dword(dev, 0x40, ®ion); + quirk_io_region(dev, region, 128, PCI_BRIDGE_RESOURCES, "ICH6 ACPI/GPIO/TCO"); + + pci_read_config_dword(dev, 0x48, ®ion); + quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES+1, "ICH6 GPIO"); +} +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, quirk_ich6_lpc_acpi ); + /* * VIA ACPI: One IO region pointed to by longword at * 0x48 or 0x20 (256 bytes of ACPI registers)