14630b130b30be6420394ba31121e111c8771ca08Aaron Sierra/* 24630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * lpc_ich.c - LPC interface for Intel ICH 34630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * 44630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * LPC bridge function of the Intel ICH contains many other 54630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * functional units, such as Interrupt controllers, Timers, 64630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * Power Management, System Management, GPIO, RTC, and LPC 74630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * Configuration Registers. 84630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * 94630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * This driver is derived from lpc_sch. 104630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 114630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * Copyright (c) 2011 Extreme Engineering Solution, Inc. 124630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * Author: Aaron Sierra <asierra@xes-inc.com> 134630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * 144630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * This program is free software; you can redistribute it and/or modify 154630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * it under the terms of the GNU General Public License 2 as published 164630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * by the Free Software Foundation. 174630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * 184630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * This program is distributed in the hope that it will be useful, 194630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * but WITHOUT ANY WARRANTY; without even the implied warranty of 204630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 214630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * GNU General Public License for more details. 224630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * 234630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * You should have received a copy of the GNU General Public License 244630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * along with this program; see the file COPYING. If not, write to 254630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 264630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * 274630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * This driver supports the following I/O Controller hubs: 284630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * (See the intel documentation on http://developer.intel.com.) 294630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 290655-003, 290677-014: 82801AA (ICH), 82801AB (ICHO) 304630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 290687-002, 298242-027: 82801BA (ICH2) 314630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 290733-003, 290739-013: 82801CA (ICH3-S) 324630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 290716-001, 290718-007: 82801CAM (ICH3-M) 334630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 290744-001, 290745-025: 82801DB (ICH4) 344630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 252337-001, 252663-008: 82801DBM (ICH4-M) 354630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 273599-001, 273645-002: 82801E (C-ICH) 364630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 252516-001, 252517-028: 82801EB (ICH5), 82801ER (ICH5R) 374630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 300641-004, 300884-013: 6300ESB 384630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 301473-002, 301474-026: 82801F (ICH6) 394630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 313082-001, 313075-006: 631xESB, 632xESB 404630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 307013-003, 307014-024: 82801G (ICH7) 414630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 322896-001, 322897-001: NM10 424630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 313056-003, 313057-017: 82801H (ICH8) 434630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 316972-004, 316973-012: 82801I (ICH9) 444630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 319973-002, 319974-002: 82801J (ICH10) 454630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 322169-001, 322170-003: 5 Series, 3400 Series (PCH) 464630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 320066-003, 320257-008: EP80597 (IICH) 474630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number 324645-001, 324646-001: Cougar Point (CPT) 484630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number TBD : Patsburg (PBG) 494630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number TBD : DH89xxCC 504630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number TBD : Panther Point 514630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * document number TBD : Lynx Point 527fb9c1a4851562e9f9b522ff929c0742797f301aJames Ralston * document number TBD : Lynx Point-LP 536e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston * document number TBD : Wellsburg 548477128fe0c3c455e9dfb1ba7ad7e6d09489d33cJames Ralston * document number TBD : Avoton SoC 55283aae8ab88e695a660c610d6535ca44bc5b8835Seth Heasley * document number TBD : Coleto Creek 565e90169c5a02da69a1ef721bea7a823e9e48fcb6James Ralston * document number TBD : Wildcat Point-LP 57fea31042ff613145c7784e2ce454bf3c151b97baJames Ralston * document number TBD : 9 Series 584630b130b30be6420394ba31121e111c8771ca08Aaron Sierra */ 594630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 604630b130b30be6420394ba31121e111c8771ca08Aaron Sierra#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 614630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 624630b130b30be6420394ba31121e111c8771ca08Aaron Sierra#include <linux/kernel.h> 634630b130b30be6420394ba31121e111c8771ca08Aaron Sierra#include <linux/module.h> 644630b130b30be6420394ba31121e111c8771ca08Aaron Sierra#include <linux/errno.h> 654630b130b30be6420394ba31121e111c8771ca08Aaron Sierra#include <linux/acpi.h> 664630b130b30be6420394ba31121e111c8771ca08Aaron Sierra#include <linux/pci.h> 674630b130b30be6420394ba31121e111c8771ca08Aaron Sierra#include <linux/mfd/core.h> 684630b130b30be6420394ba31121e111c8771ca08Aaron Sierra#include <linux/mfd/lpc_ich.h> 694630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 704630b130b30be6420394ba31121e111c8771ca08Aaron Sierra#define ACPIBASE 0x40 714630b130b30be6420394ba31121e111c8771ca08Aaron Sierra#define ACPIBASE_GPE_OFF 0x28 724630b130b30be6420394ba31121e111c8771ca08Aaron Sierra#define ACPIBASE_GPE_END 0x2f 73887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra#define ACPIBASE_SMI_OFF 0x30 74887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra#define ACPIBASE_SMI_END 0x33 75eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser#define ACPIBASE_PMC_OFF 0x08 76eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser#define ACPIBASE_PMC_END 0x0c 77887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra#define ACPIBASE_TCO_OFF 0x60 78887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra#define ACPIBASE_TCO_END 0x7f 79eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser#define ACPICTRL_PMCBASE 0x44 804630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 81887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra#define ACPIBASE_GCS_OFF 0x3410 82887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra#define ACPIBASE_GCS_END 0x3414 83887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra 8401560f6bb958b821ceec98590a7147d610a62625Aaron Sierra#define GPIOBASE_ICH0 0x58 8501560f6bb958b821ceec98590a7147d610a62625Aaron Sierra#define GPIOCTRL_ICH0 0x5C 8601560f6bb958b821ceec98590a7147d610a62625Aaron Sierra#define GPIOBASE_ICH6 0x48 8701560f6bb958b821ceec98590a7147d610a62625Aaron Sierra#define GPIOCTRL_ICH6 0x4C 884630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 89887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra#define RCBABASE 0xf0 90887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra 91887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra#define wdt_io_res(i) wdt_res(0, i) 92887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra#define wdt_mem_res(i) wdt_res(ICH_RES_MEM_OFF, i) 93887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra#define wdt_res(b, i) (&wdt_ich_res[(b) + (i)]) 94887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra 9501560f6bb958b821ceec98590a7147d610a62625Aaron Sierrastruct lpc_ich_priv { 9601560f6bb958b821ceec98590a7147d610a62625Aaron Sierra int chipset; 97429b941abd503c8936e116c819362323aafdbd50Peter Tyser 98429b941abd503c8936e116c819362323aafdbd50Peter Tyser int abase; /* ACPI base */ 99eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser int actrl_pbase; /* ACPI control or PMC base */ 100429b941abd503c8936e116c819362323aafdbd50Peter Tyser int gbase; /* GPIO base */ 101429b941abd503c8936e116c819362323aafdbd50Peter Tyser int gctrl; /* GPIO control */ 102429b941abd503c8936e116c819362323aafdbd50Peter Tyser 103eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser int abase_save; /* Cached ACPI base value */ 104eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser int actrl_pbase_save; /* Cached ACPI control or PMC base value */ 105429b941abd503c8936e116c819362323aafdbd50Peter Tyser int gctrl_save; /* Cached GPIO control value */ 10601560f6bb958b821ceec98590a7147d610a62625Aaron Sierra}; 1074630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 108887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierrastatic struct resource wdt_ich_res[] = { 109887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra /* ACPI - TCO */ 110887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra { 111887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .flags = IORESOURCE_IO, 112887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra }, 113887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra /* ACPI - SMI */ 114887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra { 115887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .flags = IORESOURCE_IO, 116887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra }, 117eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser /* GCS or PMC */ 118887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra { 119887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .flags = IORESOURCE_MEM, 120887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra }, 121887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra}; 122887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra 1234630b130b30be6420394ba31121e111c8771ca08Aaron Sierrastatic struct resource gpio_ich_res[] = { 1244630b130b30be6420394ba31121e111c8771ca08Aaron Sierra /* GPIO */ 1254630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { 1264630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .flags = IORESOURCE_IO, 1274630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 1284630b130b30be6420394ba31121e111c8771ca08Aaron Sierra /* ACPI - GPE0 */ 1294630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { 1304630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .flags = IORESOURCE_IO, 1314630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 1324630b130b30be6420394ba31121e111c8771ca08Aaron Sierra}; 1334630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 1344630b130b30be6420394ba31121e111c8771ca08Aaron Sierraenum lpc_cells { 135887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra LPC_WDT = 0, 136887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra LPC_GPIO, 1374630b130b30be6420394ba31121e111c8771ca08Aaron Sierra}; 1384630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 1394630b130b30be6420394ba31121e111c8771ca08Aaron Sierrastatic struct mfd_cell lpc_ich_cells[] = { 140887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra [LPC_WDT] = { 141887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .name = "iTCO_wdt", 142887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .num_resources = ARRAY_SIZE(wdt_ich_res), 143887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .resources = wdt_ich_res, 144887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .ignore_resource_conflicts = true, 145887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra }, 1464630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_GPIO] = { 1474630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "gpio_ich", 1484630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .num_resources = ARRAY_SIZE(gpio_ich_res), 1494630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .resources = gpio_ich_res, 1504630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .ignore_resource_conflicts = true, 1514630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 1524630b130b30be6420394ba31121e111c8771ca08Aaron Sierra}; 1534630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 1544630b130b30be6420394ba31121e111c8771ca08Aaron Sierra/* chipset related info */ 1554630b130b30be6420394ba31121e111c8771ca08Aaron Sierraenum lpc_chipsets { 1564630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH = 0, /* ICH */ 1574630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH0, /* ICH0 */ 1584630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH2, /* ICH2 */ 1594630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH2M, /* ICH2-M */ 1604630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH3, /* ICH3-S */ 1614630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH3M, /* ICH3-M */ 1624630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH4, /* ICH4 */ 1634630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH4M, /* ICH4-M */ 1644630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_CICH, /* C-ICH */ 1654630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH5, /* ICH5 & ICH5R */ 1664630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_6300ESB, /* 6300ESB */ 1674630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH6, /* ICH6 & ICH6R */ 1684630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH6M, /* ICH6-M */ 1694630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH6W, /* ICH6W & ICH6RW */ 1704630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_631XESB, /* 631xESB/632xESB */ 1714630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH7, /* ICH7 & ICH7R */ 1724630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH7DH, /* ICH7DH */ 1734630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH7M, /* ICH7-M & ICH7-U */ 1744630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH7MDH, /* ICH7-M DH */ 1754630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_NM10, /* NM10 */ 1764630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH8, /* ICH8 & ICH8R */ 1774630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH8DH, /* ICH8DH */ 1784630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH8DO, /* ICH8DO */ 1794630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH8M, /* ICH8M */ 1804630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH8ME, /* ICH8M-E */ 1814630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH9, /* ICH9 */ 1824630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH9R, /* ICH9R */ 1834630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH9DH, /* ICH9DH */ 1844630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH9DO, /* ICH9DO */ 1854630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH9M, /* ICH9M */ 1864630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH9ME, /* ICH9M-E */ 1874630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH10, /* ICH10 */ 1884630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH10R, /* ICH10R */ 1894630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH10D, /* ICH10D */ 1904630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_ICH10DO, /* ICH10DO */ 1914630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_PCH, /* PCH Desktop Full Featured */ 1924630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_PCHM, /* PCH Mobile Full Featured */ 1934630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_P55, /* P55 */ 1944630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_PM55, /* PM55 */ 1954630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_H55, /* H55 */ 1964630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_QM57, /* QM57 */ 1974630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_H57, /* H57 */ 1984630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_HM55, /* HM55 */ 1994630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_Q57, /* Q57 */ 2004630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_HM57, /* HM57 */ 2014630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_PCHMSFF, /* PCH Mobile SFF Full Featured */ 2024630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_QS57, /* QS57 */ 2034630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_3400, /* 3400 */ 2044630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_3420, /* 3420 */ 2054630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_3450, /* 3450 */ 2064630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_EP80579, /* EP80579 */ 2074630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_CPT, /* Cougar Point */ 2084630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_CPTD, /* Cougar Point Desktop */ 2094630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_CPTM, /* Cougar Point Mobile */ 2104630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_PBG, /* Patsburg */ 2114630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_DH89XXCC, /* DH89xxCC */ 2124630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_PPT, /* Panther Point */ 2134630b130b30be6420394ba31121e111c8771ca08Aaron Sierra LPC_LPT, /* Lynx Point */ 2147fb9c1a4851562e9f9b522ff929c0742797f301aJames Ralston LPC_LPT_LP, /* Lynx Point-LP */ 2156e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston LPC_WBG, /* Wellsburg */ 2168477128fe0c3c455e9dfb1ba7ad7e6d09489d33cJames Ralston LPC_AVN, /* Avoton SoC */ 2176111ec70357022ccd037399c13f69900431850b4Peter Tyser LPC_BAYTRAIL, /* Bay Trail SoC */ 218283aae8ab88e695a660c610d6535ca44bc5b8835Seth Heasley LPC_COLETO, /* Coleto Creek */ 2195e90169c5a02da69a1ef721bea7a823e9e48fcb6James Ralston LPC_WPT_LP, /* Wildcat Point-LP */ 220ff0c9da013d2c9f1ec232926a54e536ab48c6678Alan Cox LPC_BRASWELL, /* Braswell SoC */ 221fea31042ff613145c7784e2ce454bf3c151b97baJames Ralston LPC_9S, /* 9 Series */ 2224630b130b30be6420394ba31121e111c8771ca08Aaron Sierra}; 2234630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 224a1ca138ff05f1f7b5f752fae0df6e34f0f58f16cJingoo Hanstatic struct lpc_ich_info lpc_chipset_info[] = { 2254630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH] = { 2264630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH", 227887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 1, 2284630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2294630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH0] = { 2304630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH0", 231887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 1, 2324630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2334630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH2] = { 2344630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH2", 235887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 1, 2364630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2374630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH2M] = { 2384630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH2-M", 239887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 1, 2404630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2414630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH3] = { 2424630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH3-S", 243887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 1, 2444630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2454630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH3M] = { 2464630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH3-M", 247887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 1, 2484630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2494630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH4] = { 2504630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH4", 251887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 1, 2524630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2534630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH4M] = { 2544630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH4-M", 255887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 1, 2564630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2574630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_CICH] = { 2584630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "C-ICH", 259887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 1, 2604630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2614630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH5] = { 2624630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH5 or ICH5R", 263887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 1, 2644630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2654630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_6300ESB] = { 2664630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "6300ESB", 267887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 1, 2684630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2694630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH6] = { 2704630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH6 or ICH6R", 271887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 2724630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V6_GPIO, 2734630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2744630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH6M] = { 2754630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH6-M", 276887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 2774630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V6_GPIO, 2784630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2794630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH6W] = { 2804630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH6W or ICH6RW", 281887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 2824630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V6_GPIO, 2834630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2844630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_631XESB] = { 2854630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "631xESB/632xESB", 286887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 2874630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V6_GPIO, 2884630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2894630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH7] = { 2904630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH7 or ICH7R", 291887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 2924630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V7_GPIO, 2934630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2944630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH7DH] = { 2954630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH7DH", 296887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 2974630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V7_GPIO, 2984630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 2994630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH7M] = { 3004630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH7-M or ICH7-U", 301887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3024630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V7_GPIO, 3034630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3044630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH7MDH] = { 3054630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH7-M DH", 306887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3074630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V7_GPIO, 3084630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3094630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_NM10] = { 3104630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "NM10", 311887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 312117bbfe25cfc2e968be1f7976ac460a5cd3d734ePeter Tyser .gpio_version = ICH_V7_GPIO, 3134630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3144630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH8] = { 3154630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH8 or ICH8R", 316887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3174630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V7_GPIO, 3184630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3194630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH8DH] = { 3204630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH8DH", 321887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3224630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V7_GPIO, 3234630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3244630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH8DO] = { 3254630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH8DO", 326887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3274630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V7_GPIO, 3284630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3294630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH8M] = { 3304630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH8M", 331887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3324630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V7_GPIO, 3334630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3344630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH8ME] = { 3354630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH8M-E", 336887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3374630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V7_GPIO, 3384630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3394630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH9] = { 3404630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH9", 341887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3424630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V9_GPIO, 3434630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3444630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH9R] = { 3454630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH9R", 346887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3474630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V9_GPIO, 3484630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3494630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH9DH] = { 3504630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH9DH", 351887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3524630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V9_GPIO, 3534630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3544630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH9DO] = { 3554630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH9DO", 356887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3574630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V9_GPIO, 3584630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3594630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH9M] = { 3604630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH9M", 361887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3624630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V9_GPIO, 3634630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3644630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH9ME] = { 3654630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH9M-E", 366887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3674630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V9_GPIO, 3684630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3694630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH10] = { 3704630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH10", 371887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3724630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V10CONS_GPIO, 3734630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3744630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH10R] = { 3754630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH10R", 376887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3774630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V10CONS_GPIO, 3784630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3794630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH10D] = { 3804630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH10D", 381887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3824630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V10CORP_GPIO, 3834630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3844630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_ICH10DO] = { 3854630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "ICH10DO", 386887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3874630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V10CORP_GPIO, 3884630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3894630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_PCH] = { 3904630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "PCH Desktop Full Featured", 391887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3924630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 3934630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3944630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_PCHM] = { 3954630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "PCH Mobile Full Featured", 396887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 3974630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 3984630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 3994630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_P55] = { 4004630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "P55", 401887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4024630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 4034630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4044630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_PM55] = { 4054630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "PM55", 406887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4074630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 4084630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4094630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_H55] = { 4104630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "H55", 411887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4124630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 4134630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4144630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_QM57] = { 4154630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "QM57", 416887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4174630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 4184630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4194630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_H57] = { 4204630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "H57", 421887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4224630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 4234630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4244630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_HM55] = { 4254630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "HM55", 426887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4274630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 4284630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4294630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_Q57] = { 4304630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "Q57", 431887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4324630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 4334630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4344630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_HM57] = { 4354630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "HM57", 436887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4374630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 4384630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4394630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_PCHMSFF] = { 4404630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "PCH Mobile SFF Full Featured", 441887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4424630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 4434630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4444630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_QS57] = { 4454630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "QS57", 446887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4474630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 4484630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4494630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_3400] = { 4504630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "3400", 451887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4524630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 4534630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4544630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_3420] = { 4554630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "3420", 456887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4574630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 4584630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4594630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_3450] = { 4604630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "3450", 461887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4624630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 4634630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4644630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_EP80579] = { 4654630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "EP80579", 466887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4674630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4684630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_CPT] = { 4694630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "Cougar Point", 470887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4714630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 4724630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4734630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_CPTD] = { 4744630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "Cougar Point Desktop", 475887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4764630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 4774630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4784630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_CPTM] = { 4794630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "Cougar Point Mobile", 480887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4814630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .gpio_version = ICH_V5_GPIO, 4824630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4834630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_PBG] = { 4844630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "Patsburg", 485887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4864630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4874630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_DH89XXCC] = { 4884630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "DH89xxCC", 489887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4904630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4914630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_PPT] = { 4924630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "Panther Point", 493887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 49462cf2cdb99c7e870ab857bdd617e728790f8c43cGuenter Roeck .gpio_version = ICH_V5_GPIO, 4954630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 4964630b130b30be6420394ba31121e111c8771ca08Aaron Sierra [LPC_LPT] = { 4974630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "Lynx Point", 498887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra .iTCO_version = 2, 4994630b130b30be6420394ba31121e111c8771ca08Aaron Sierra }, 5007fb9c1a4851562e9f9b522ff929c0742797f301aJames Ralston [LPC_LPT_LP] = { 5017fb9c1a4851562e9f9b522ff929c0742797f301aJames Ralston .name = "Lynx Point_LP", 5027fb9c1a4851562e9f9b522ff929c0742797f301aJames Ralston .iTCO_version = 2, 5037fb9c1a4851562e9f9b522ff929c0742797f301aJames Ralston }, 5046e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston [LPC_WBG] = { 5056e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston .name = "Wellsburg", 5066e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston .iTCO_version = 2, 5076e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston }, 5088477128fe0c3c455e9dfb1ba7ad7e6d09489d33cJames Ralston [LPC_AVN] = { 5098477128fe0c3c455e9dfb1ba7ad7e6d09489d33cJames Ralston .name = "Avoton SoC", 510c48cf59878685cc06b71bb2a3ca17b61103c8de7Peter Tyser .iTCO_version = 3, 511facd9939403cb5769190054a600474399e776e3aVincent Donnefort .gpio_version = AVOTON_GPIO, 5128477128fe0c3c455e9dfb1ba7ad7e6d09489d33cJames Ralston }, 5136111ec70357022ccd037399c13f69900431850b4Peter Tyser [LPC_BAYTRAIL] = { 5146111ec70357022ccd037399c13f69900431850b4Peter Tyser .name = "Bay Trail SoC", 5156111ec70357022ccd037399c13f69900431850b4Peter Tyser .iTCO_version = 3, 5166111ec70357022ccd037399c13f69900431850b4Peter Tyser }, 517283aae8ab88e695a660c610d6535ca44bc5b8835Seth Heasley [LPC_COLETO] = { 518283aae8ab88e695a660c610d6535ca44bc5b8835Seth Heasley .name = "Coleto Creek", 519283aae8ab88e695a660c610d6535ca44bc5b8835Seth Heasley .iTCO_version = 2, 520283aae8ab88e695a660c610d6535ca44bc5b8835Seth Heasley }, 5215e90169c5a02da69a1ef721bea7a823e9e48fcb6James Ralston [LPC_WPT_LP] = { 522a8822df9043b6ff9751bca8acd8f0f64dd727706James Ralston .name = "Wildcat Point_LP", 5235e90169c5a02da69a1ef721bea7a823e9e48fcb6James Ralston .iTCO_version = 2, 5245e90169c5a02da69a1ef721bea7a823e9e48fcb6James Ralston }, 525ff0c9da013d2c9f1ec232926a54e536ab48c6678Alan Cox [LPC_BRASWELL] = { 526ff0c9da013d2c9f1ec232926a54e536ab48c6678Alan Cox .name = "Braswell SoC", 527ff0c9da013d2c9f1ec232926a54e536ab48c6678Alan Cox .iTCO_version = 3, 528ff0c9da013d2c9f1ec232926a54e536ab48c6678Alan Cox }, 529fea31042ff613145c7784e2ce454bf3c151b97baJames Ralston [LPC_9S] = { 530fea31042ff613145c7784e2ce454bf3c151b97baJames Ralston .name = "9 Series", 531fea31042ff613145c7784e2ce454bf3c151b97baJames Ralston .iTCO_version = 2, 532fea31042ff613145c7784e2ce454bf3c151b97baJames Ralston }, 5334630b130b30be6420394ba31121e111c8771ca08Aaron Sierra}; 5344630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 5354630b130b30be6420394ba31121e111c8771ca08Aaron Sierra/* 5364630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * This data only exists for exporting the supported PCI ids 5374630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * via MODULE_DEVICE_TABLE. We do not actually register a 5384630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * pci_driver, because the I/O Controller Hub has also other 5394630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * functions that probably will be registered by other drivers. 5404630b130b30be6420394ba31121e111c8771ca08Aaron Sierra */ 54136fcd06c4638acacee7135906cab60f11ea1ffacJingoo Hanstatic const struct pci_device_id lpc_ich_ids[] = { 5424630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2410), LPC_ICH}, 5434630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2420), LPC_ICH0}, 5444630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2440), LPC_ICH2}, 5454630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x244c), LPC_ICH2M}, 5464630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2480), LPC_ICH3}, 5474630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x248c), LPC_ICH3M}, 5484630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x24c0), LPC_ICH4}, 5494630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x24cc), LPC_ICH4M}, 5504630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2450), LPC_CICH}, 5514630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x24d0), LPC_ICH5}, 5524630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x25a1), LPC_6300ESB}, 5534630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2640), LPC_ICH6}, 5544630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2641), LPC_ICH6M}, 5554630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2642), LPC_ICH6W}, 5564630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2670), LPC_631XESB}, 5574630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2671), LPC_631XESB}, 5584630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2672), LPC_631XESB}, 5594630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2673), LPC_631XESB}, 5604630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2674), LPC_631XESB}, 5614630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2675), LPC_631XESB}, 5624630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2676), LPC_631XESB}, 5634630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2677), LPC_631XESB}, 5644630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2678), LPC_631XESB}, 5654630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2679), LPC_631XESB}, 5664630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x267a), LPC_631XESB}, 5674630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x267b), LPC_631XESB}, 5684630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x267c), LPC_631XESB}, 5694630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x267d), LPC_631XESB}, 5704630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x267e), LPC_631XESB}, 5714630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x267f), LPC_631XESB}, 5724630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x27b8), LPC_ICH7}, 5734630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x27b0), LPC_ICH7DH}, 5744630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x27b9), LPC_ICH7M}, 5754630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x27bd), LPC_ICH7MDH}, 5764630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x27bc), LPC_NM10}, 5774630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2810), LPC_ICH8}, 5784630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2812), LPC_ICH8DH}, 5794630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2814), LPC_ICH8DO}, 5804630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2815), LPC_ICH8M}, 5814630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2811), LPC_ICH8ME}, 5824630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2918), LPC_ICH9}, 5834630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2916), LPC_ICH9R}, 5844630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2912), LPC_ICH9DH}, 5854630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2914), LPC_ICH9DO}, 5864630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2919), LPC_ICH9M}, 5874630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2917), LPC_ICH9ME}, 5884630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3a18), LPC_ICH10}, 5894630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3a16), LPC_ICH10R}, 5904630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3a1a), LPC_ICH10D}, 5914630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3a14), LPC_ICH10DO}, 5924630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3b00), LPC_PCH}, 5934630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3b01), LPC_PCHM}, 5944630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3b02), LPC_P55}, 5954630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3b03), LPC_PM55}, 5964630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3b06), LPC_H55}, 5974630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3b07), LPC_QM57}, 5984630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3b08), LPC_H57}, 5994630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3b09), LPC_HM55}, 6004630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3b0a), LPC_Q57}, 6014630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3b0b), LPC_HM57}, 6024630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3b0d), LPC_PCHMSFF}, 6034630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3b0f), LPC_QS57}, 6044630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3b12), LPC_3400}, 6054630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3b14), LPC_3420}, 6064630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x3b16), LPC_3450}, 6074630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x5031), LPC_EP80579}, 6084630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c41), LPC_CPT}, 6094630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c42), LPC_CPTD}, 6104630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c43), LPC_CPTM}, 6114630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c44), LPC_CPT}, 6124630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c45), LPC_CPT}, 6134630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c46), LPC_CPT}, 6144630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c47), LPC_CPT}, 6154630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c48), LPC_CPT}, 6164630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c49), LPC_CPT}, 6174630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c4a), LPC_CPT}, 6184630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c4b), LPC_CPT}, 6194630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c4c), LPC_CPT}, 6204630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c4d), LPC_CPT}, 6214630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c4e), LPC_CPT}, 6224630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c4f), LPC_CPT}, 6234630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c50), LPC_CPT}, 6244630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c51), LPC_CPT}, 6254630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c52), LPC_CPT}, 6264630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c53), LPC_CPT}, 6274630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c54), LPC_CPT}, 6284630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c55), LPC_CPT}, 6294630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c56), LPC_CPT}, 6304630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c57), LPC_CPT}, 6314630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c58), LPC_CPT}, 6324630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c59), LPC_CPT}, 6334630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c5a), LPC_CPT}, 6344630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c5b), LPC_CPT}, 6354630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c5c), LPC_CPT}, 6364630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c5d), LPC_CPT}, 6374630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c5e), LPC_CPT}, 6384630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1c5f), LPC_CPT}, 6394630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1d40), LPC_PBG}, 6404630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1d41), LPC_PBG}, 6414630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x2310), LPC_DH89XXCC}, 6424630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e40), LPC_PPT}, 6434630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e41), LPC_PPT}, 6444630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e42), LPC_PPT}, 6454630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e43), LPC_PPT}, 6464630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e44), LPC_PPT}, 6474630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e45), LPC_PPT}, 6484630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e46), LPC_PPT}, 6494630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e47), LPC_PPT}, 6504630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e48), LPC_PPT}, 6514630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e49), LPC_PPT}, 6524630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e4a), LPC_PPT}, 6534630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e4b), LPC_PPT}, 6544630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e4c), LPC_PPT}, 6554630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e4d), LPC_PPT}, 6564630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e4e), LPC_PPT}, 6574630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e4f), LPC_PPT}, 6584630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e50), LPC_PPT}, 6594630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e51), LPC_PPT}, 6604630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e52), LPC_PPT}, 6614630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e53), LPC_PPT}, 6624630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e54), LPC_PPT}, 6634630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e55), LPC_PPT}, 6644630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e56), LPC_PPT}, 6654630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e57), LPC_PPT}, 6664630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e58), LPC_PPT}, 6674630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e59), LPC_PPT}, 6684630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e5a), LPC_PPT}, 6694630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e5b), LPC_PPT}, 6704630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e5c), LPC_PPT}, 6714630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e5d), LPC_PPT}, 6724630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e5e), LPC_PPT}, 6734630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x1e5f), LPC_PPT}, 6744630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c40), LPC_LPT}, 6754630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c41), LPC_LPT}, 6764630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c42), LPC_LPT}, 6774630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c43), LPC_LPT}, 6784630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c44), LPC_LPT}, 6794630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c45), LPC_LPT}, 6804630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c46), LPC_LPT}, 6814630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c47), LPC_LPT}, 6824630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c48), LPC_LPT}, 6834630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c49), LPC_LPT}, 6844630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c4a), LPC_LPT}, 6854630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c4b), LPC_LPT}, 6864630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c4c), LPC_LPT}, 6874630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c4d), LPC_LPT}, 6884630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c4e), LPC_LPT}, 6894630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c4f), LPC_LPT}, 6904630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c50), LPC_LPT}, 6914630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c51), LPC_LPT}, 6924630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c52), LPC_LPT}, 6934630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c53), LPC_LPT}, 6944630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c54), LPC_LPT}, 6954630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c55), LPC_LPT}, 6964630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c56), LPC_LPT}, 6974630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c57), LPC_LPT}, 6984630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c58), LPC_LPT}, 6994630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c59), LPC_LPT}, 7004630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c5a), LPC_LPT}, 7014630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c5b), LPC_LPT}, 7024630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c5c), LPC_LPT}, 7034630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c5d), LPC_LPT}, 7044630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c5e), LPC_LPT}, 7054630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { PCI_VDEVICE(INTEL, 0x8c5f), LPC_LPT}, 7067fb9c1a4851562e9f9b522ff929c0742797f301aJames Ralston { PCI_VDEVICE(INTEL, 0x9c40), LPC_LPT_LP}, 7077fb9c1a4851562e9f9b522ff929c0742797f301aJames Ralston { PCI_VDEVICE(INTEL, 0x9c41), LPC_LPT_LP}, 7087fb9c1a4851562e9f9b522ff929c0742797f301aJames Ralston { PCI_VDEVICE(INTEL, 0x9c42), LPC_LPT_LP}, 7097fb9c1a4851562e9f9b522ff929c0742797f301aJames Ralston { PCI_VDEVICE(INTEL, 0x9c43), LPC_LPT_LP}, 7107fb9c1a4851562e9f9b522ff929c0742797f301aJames Ralston { PCI_VDEVICE(INTEL, 0x9c44), LPC_LPT_LP}, 7117fb9c1a4851562e9f9b522ff929c0742797f301aJames Ralston { PCI_VDEVICE(INTEL, 0x9c45), LPC_LPT_LP}, 7127fb9c1a4851562e9f9b522ff929c0742797f301aJames Ralston { PCI_VDEVICE(INTEL, 0x9c46), LPC_LPT_LP}, 7137fb9c1a4851562e9f9b522ff929c0742797f301aJames Ralston { PCI_VDEVICE(INTEL, 0x9c47), LPC_LPT_LP}, 7146e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d40), LPC_WBG}, 7156e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d41), LPC_WBG}, 7166e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d42), LPC_WBG}, 7176e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d43), LPC_WBG}, 7186e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d44), LPC_WBG}, 7196e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d45), LPC_WBG}, 7206e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d46), LPC_WBG}, 7216e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d47), LPC_WBG}, 7226e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d48), LPC_WBG}, 7236e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d49), LPC_WBG}, 7246e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d4a), LPC_WBG}, 7256e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d4b), LPC_WBG}, 7266e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d4c), LPC_WBG}, 7276e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d4d), LPC_WBG}, 7286e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d4e), LPC_WBG}, 7296e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d4f), LPC_WBG}, 7306e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d50), LPC_WBG}, 7316e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d51), LPC_WBG}, 7326e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d52), LPC_WBG}, 7336e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d53), LPC_WBG}, 7346e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d54), LPC_WBG}, 7356e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d55), LPC_WBG}, 7366e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d56), LPC_WBG}, 7376e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d57), LPC_WBG}, 7386e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d58), LPC_WBG}, 7396e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d59), LPC_WBG}, 7406e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d5a), LPC_WBG}, 7416e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d5b), LPC_WBG}, 7426e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d5c), LPC_WBG}, 7436e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d5d), LPC_WBG}, 7446e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d5e), LPC_WBG}, 7456e6680e3effbf7cff444405a990dbc355dc3a96fJames Ralston { PCI_VDEVICE(INTEL, 0x8d5f), LPC_WBG}, 7468477128fe0c3c455e9dfb1ba7ad7e6d09489d33cJames Ralston { PCI_VDEVICE(INTEL, 0x1f38), LPC_AVN}, 7478477128fe0c3c455e9dfb1ba7ad7e6d09489d33cJames Ralston { PCI_VDEVICE(INTEL, 0x1f39), LPC_AVN}, 7488477128fe0c3c455e9dfb1ba7ad7e6d09489d33cJames Ralston { PCI_VDEVICE(INTEL, 0x1f3a), LPC_AVN}, 7498477128fe0c3c455e9dfb1ba7ad7e6d09489d33cJames Ralston { PCI_VDEVICE(INTEL, 0x1f3b), LPC_AVN}, 7506111ec70357022ccd037399c13f69900431850b4Peter Tyser { PCI_VDEVICE(INTEL, 0x0f1c), LPC_BAYTRAIL}, 751283aae8ab88e695a660c610d6535ca44bc5b8835Seth Heasley { PCI_VDEVICE(INTEL, 0x2390), LPC_COLETO}, 7525e90169c5a02da69a1ef721bea7a823e9e48fcb6James Ralston { PCI_VDEVICE(INTEL, 0x9cc1), LPC_WPT_LP}, 7535e90169c5a02da69a1ef721bea7a823e9e48fcb6James Ralston { PCI_VDEVICE(INTEL, 0x9cc2), LPC_WPT_LP}, 7545e90169c5a02da69a1ef721bea7a823e9e48fcb6James Ralston { PCI_VDEVICE(INTEL, 0x9cc3), LPC_WPT_LP}, 7555e90169c5a02da69a1ef721bea7a823e9e48fcb6James Ralston { PCI_VDEVICE(INTEL, 0x9cc5), LPC_WPT_LP}, 7565e90169c5a02da69a1ef721bea7a823e9e48fcb6James Ralston { PCI_VDEVICE(INTEL, 0x9cc6), LPC_WPT_LP}, 7575e90169c5a02da69a1ef721bea7a823e9e48fcb6James Ralston { PCI_VDEVICE(INTEL, 0x9cc7), LPC_WPT_LP}, 7585e90169c5a02da69a1ef721bea7a823e9e48fcb6James Ralston { PCI_VDEVICE(INTEL, 0x9cc9), LPC_WPT_LP}, 759ff0c9da013d2c9f1ec232926a54e536ab48c6678Alan Cox { PCI_VDEVICE(INTEL, 0x229c), LPC_BRASWELL}, 760fea31042ff613145c7784e2ce454bf3c151b97baJames Ralston { PCI_VDEVICE(INTEL, 0x8cc1), LPC_9S}, 761fea31042ff613145c7784e2ce454bf3c151b97baJames Ralston { PCI_VDEVICE(INTEL, 0x8cc2), LPC_9S}, 762fea31042ff613145c7784e2ce454bf3c151b97baJames Ralston { PCI_VDEVICE(INTEL, 0x8cc3), LPC_9S}, 763fea31042ff613145c7784e2ce454bf3c151b97baJames Ralston { PCI_VDEVICE(INTEL, 0x8cc4), LPC_9S}, 764fea31042ff613145c7784e2ce454bf3c151b97baJames Ralston { PCI_VDEVICE(INTEL, 0x8cc6), LPC_9S}, 7654630b130b30be6420394ba31121e111c8771ca08Aaron Sierra { 0, }, /* End of list */ 7664630b130b30be6420394ba31121e111c8771ca08Aaron Sierra}; 7674630b130b30be6420394ba31121e111c8771ca08Aaron SierraMODULE_DEVICE_TABLE(pci, lpc_ich_ids); 7684630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 7694630b130b30be6420394ba31121e111c8771ca08Aaron Sierrastatic void lpc_ich_restore_config_space(struct pci_dev *dev) 7704630b130b30be6420394ba31121e111c8771ca08Aaron Sierra{ 77101560f6bb958b821ceec98590a7147d610a62625Aaron Sierra struct lpc_ich_priv *priv = pci_get_drvdata(dev); 77201560f6bb958b821ceec98590a7147d610a62625Aaron Sierra 773eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser if (priv->abase_save >= 0) { 774eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser pci_write_config_byte(dev, priv->abase, priv->abase_save); 775eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser priv->abase_save = -1; 776eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser } 777eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser 778eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser if (priv->actrl_pbase_save >= 0) { 779eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser pci_write_config_byte(dev, priv->actrl_pbase, 780eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser priv->actrl_pbase_save); 781eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser priv->actrl_pbase_save = -1; 7824630b130b30be6420394ba31121e111c8771ca08Aaron Sierra } 7834630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 784429b941abd503c8936e116c819362323aafdbd50Peter Tyser if (priv->gctrl_save >= 0) { 785429b941abd503c8936e116c819362323aafdbd50Peter Tyser pci_write_config_byte(dev, priv->gctrl, priv->gctrl_save); 786429b941abd503c8936e116c819362323aafdbd50Peter Tyser priv->gctrl_save = -1; 7874630b130b30be6420394ba31121e111c8771ca08Aaron Sierra } 7884630b130b30be6420394ba31121e111c8771ca08Aaron Sierra} 7894630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 790f791be492f76dea7b0641ed227a60eeb2fa7e255Bill Pembertonstatic void lpc_ich_enable_acpi_space(struct pci_dev *dev) 7914630b130b30be6420394ba31121e111c8771ca08Aaron Sierra{ 79201560f6bb958b821ceec98590a7147d610a62625Aaron Sierra struct lpc_ich_priv *priv = pci_get_drvdata(dev); 7934630b130b30be6420394ba31121e111c8771ca08Aaron Sierra u8 reg_save; 7944630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 795eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser switch (lpc_chipset_info[priv->chipset].iTCO_version) { 796eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser case 3: 797eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser /* 798eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser * Some chipsets (eg Avoton) enable the ACPI space in the 799eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser * ACPI BASE register. 800eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser */ 801eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser pci_read_config_byte(dev, priv->abase, ®_save); 802eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser pci_write_config_byte(dev, priv->abase, reg_save | 0x2); 803eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser priv->abase_save = reg_save; 804eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser break; 805eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser default: 806eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser /* 807eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser * Most chipsets enable the ACPI space in the ACPI control 808eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser * register. 809eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser */ 810eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser pci_read_config_byte(dev, priv->actrl_pbase, ®_save); 811eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser pci_write_config_byte(dev, priv->actrl_pbase, reg_save | 0x80); 812eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser priv->actrl_pbase_save = reg_save; 813eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser break; 814eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser } 8154630b130b30be6420394ba31121e111c8771ca08Aaron Sierra} 8164630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 817f791be492f76dea7b0641ed227a60eeb2fa7e255Bill Pembertonstatic void lpc_ich_enable_gpio_space(struct pci_dev *dev) 8184630b130b30be6420394ba31121e111c8771ca08Aaron Sierra{ 81901560f6bb958b821ceec98590a7147d610a62625Aaron Sierra struct lpc_ich_priv *priv = pci_get_drvdata(dev); 8204630b130b30be6420394ba31121e111c8771ca08Aaron Sierra u8 reg_save; 8214630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 822429b941abd503c8936e116c819362323aafdbd50Peter Tyser pci_read_config_byte(dev, priv->gctrl, ®_save); 823429b941abd503c8936e116c819362323aafdbd50Peter Tyser pci_write_config_byte(dev, priv->gctrl, reg_save | 0x10); 824429b941abd503c8936e116c819362323aafdbd50Peter Tyser priv->gctrl_save = reg_save; 8254630b130b30be6420394ba31121e111c8771ca08Aaron Sierra} 8264630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 827eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyserstatic void lpc_ich_enable_pmc_space(struct pci_dev *dev) 828eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser{ 829eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser struct lpc_ich_priv *priv = pci_get_drvdata(dev); 830eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser u8 reg_save; 831eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser 832eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser pci_read_config_byte(dev, priv->actrl_pbase, ®_save); 833eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser pci_write_config_byte(dev, priv->actrl_pbase, reg_save | 0x2); 834eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser 835eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser priv->actrl_pbase_save = reg_save; 836eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser} 837eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser 83801560f6bb958b821ceec98590a7147d610a62625Aaron Sierrastatic void lpc_ich_finalize_cell(struct pci_dev *dev, struct mfd_cell *cell) 8394630b130b30be6420394ba31121e111c8771ca08Aaron Sierra{ 84001560f6bb958b821ceec98590a7147d610a62625Aaron Sierra struct lpc_ich_priv *priv = pci_get_drvdata(dev); 84101560f6bb958b821ceec98590a7147d610a62625Aaron Sierra 84201560f6bb958b821ceec98590a7147d610a62625Aaron Sierra cell->platform_data = &lpc_chipset_info[priv->chipset]; 8434630b130b30be6420394ba31121e111c8771ca08Aaron Sierra cell->pdata_size = sizeof(struct lpc_ich_info); 8444630b130b30be6420394ba31121e111c8771ca08Aaron Sierra} 8454630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 8464f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare/* 8474f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare * We don't check for resource conflict globally. There are 2 or 3 independent 8484f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare * GPIO groups and it's enough to have access to one of these to instantiate 8494f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare * the device. 8504f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare */ 851f791be492f76dea7b0641ed227a60eeb2fa7e255Bill Pembertonstatic int lpc_ich_check_conflict_gpio(struct resource *res) 8524f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare{ 8534f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare int ret; 8544f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare u8 use_gpio = 0; 8554f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare 8564f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare if (resource_size(res) >= 0x50 && 8574f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare !acpi_check_region(res->start + 0x40, 0x10, "LPC ICH GPIO3")) 8584f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare use_gpio |= 1 << 2; 8594f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare 8604f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare if (!acpi_check_region(res->start + 0x30, 0x10, "LPC ICH GPIO2")) 8614f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare use_gpio |= 1 << 1; 8624f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare 8634f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare ret = acpi_check_region(res->start + 0x00, 0x30, "LPC ICH GPIO1"); 8644f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare if (!ret) 8654f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare use_gpio |= 1 << 0; 8664f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare 8674f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare return use_gpio ? use_gpio : ret; 8684f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare} 8694f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare 87001560f6bb958b821ceec98590a7147d610a62625Aaron Sierrastatic int lpc_ich_init_gpio(struct pci_dev *dev) 8714630b130b30be6420394ba31121e111c8771ca08Aaron Sierra{ 87201560f6bb958b821ceec98590a7147d610a62625Aaron Sierra struct lpc_ich_priv *priv = pci_get_drvdata(dev); 8734630b130b30be6420394ba31121e111c8771ca08Aaron Sierra u32 base_addr_cfg; 8744630b130b30be6420394ba31121e111c8771ca08Aaron Sierra u32 base_addr; 8754630b130b30be6420394ba31121e111c8771ca08Aaron Sierra int ret; 8764630b130b30be6420394ba31121e111c8771ca08Aaron Sierra bool acpi_conflict = false; 8774630b130b30be6420394ba31121e111c8771ca08Aaron Sierra struct resource *res; 8784630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 8794630b130b30be6420394ba31121e111c8771ca08Aaron Sierra /* Setup power management base register */ 880429b941abd503c8936e116c819362323aafdbd50Peter Tyser pci_read_config_dword(dev, priv->abase, &base_addr_cfg); 8814630b130b30be6420394ba31121e111c8771ca08Aaron Sierra base_addr = base_addr_cfg & 0x0000ff80; 8824630b130b30be6420394ba31121e111c8771ca08Aaron Sierra if (!base_addr) { 8830c418844dce21fa7000b51190f393c7d6a7ee12dPaul Bolle dev_notice(&dev->dev, "I/O space for ACPI uninitialized\n"); 8844630b130b30be6420394ba31121e111c8771ca08Aaron Sierra lpc_ich_cells[LPC_GPIO].num_resources--; 8854630b130b30be6420394ba31121e111c8771ca08Aaron Sierra goto gpe0_done; 8864630b130b30be6420394ba31121e111c8771ca08Aaron Sierra } 8874630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 8884630b130b30be6420394ba31121e111c8771ca08Aaron Sierra res = &gpio_ich_res[ICH_RES_GPE0]; 8894630b130b30be6420394ba31121e111c8771ca08Aaron Sierra res->start = base_addr + ACPIBASE_GPE_OFF; 8904630b130b30be6420394ba31121e111c8771ca08Aaron Sierra res->end = base_addr + ACPIBASE_GPE_END; 8914630b130b30be6420394ba31121e111c8771ca08Aaron Sierra ret = acpi_check_resource_conflict(res); 8924630b130b30be6420394ba31121e111c8771ca08Aaron Sierra if (ret) { 8934630b130b30be6420394ba31121e111c8771ca08Aaron Sierra /* 8944630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * This isn't fatal for the GPIO, but we have to make sure that 8954630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * the platform_device subsystem doesn't see this resource 8964630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * or it will register an invalid region. 8974630b130b30be6420394ba31121e111c8771ca08Aaron Sierra */ 8984630b130b30be6420394ba31121e111c8771ca08Aaron Sierra lpc_ich_cells[LPC_GPIO].num_resources--; 8994630b130b30be6420394ba31121e111c8771ca08Aaron Sierra acpi_conflict = true; 9004630b130b30be6420394ba31121e111c8771ca08Aaron Sierra } else { 9014630b130b30be6420394ba31121e111c8771ca08Aaron Sierra lpc_ich_enable_acpi_space(dev); 9024630b130b30be6420394ba31121e111c8771ca08Aaron Sierra } 9034630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 9044630b130b30be6420394ba31121e111c8771ca08Aaron Sierragpe0_done: 9054630b130b30be6420394ba31121e111c8771ca08Aaron Sierra /* Setup GPIO base register */ 906429b941abd503c8936e116c819362323aafdbd50Peter Tyser pci_read_config_dword(dev, priv->gbase, &base_addr_cfg); 9074630b130b30be6420394ba31121e111c8771ca08Aaron Sierra base_addr = base_addr_cfg & 0x0000ff80; 9084630b130b30be6420394ba31121e111c8771ca08Aaron Sierra if (!base_addr) { 9090c418844dce21fa7000b51190f393c7d6a7ee12dPaul Bolle dev_notice(&dev->dev, "I/O space for GPIO uninitialized\n"); 9104630b130b30be6420394ba31121e111c8771ca08Aaron Sierra ret = -ENODEV; 9114630b130b30be6420394ba31121e111c8771ca08Aaron Sierra goto gpio_done; 9124630b130b30be6420394ba31121e111c8771ca08Aaron Sierra } 9134630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 9144630b130b30be6420394ba31121e111c8771ca08Aaron Sierra /* Older devices provide fewer GPIO and have a smaller resource size. */ 9154630b130b30be6420394ba31121e111c8771ca08Aaron Sierra res = &gpio_ich_res[ICH_RES_GPIO]; 9164630b130b30be6420394ba31121e111c8771ca08Aaron Sierra res->start = base_addr; 91701560f6bb958b821ceec98590a7147d610a62625Aaron Sierra switch (lpc_chipset_info[priv->chipset].gpio_version) { 9184630b130b30be6420394ba31121e111c8771ca08Aaron Sierra case ICH_V5_GPIO: 9194630b130b30be6420394ba31121e111c8771ca08Aaron Sierra case ICH_V10CORP_GPIO: 9204630b130b30be6420394ba31121e111c8771ca08Aaron Sierra res->end = res->start + 128 - 1; 9214630b130b30be6420394ba31121e111c8771ca08Aaron Sierra break; 9224630b130b30be6420394ba31121e111c8771ca08Aaron Sierra default: 9234630b130b30be6420394ba31121e111c8771ca08Aaron Sierra res->end = res->start + 64 - 1; 9244630b130b30be6420394ba31121e111c8771ca08Aaron Sierra break; 9254630b130b30be6420394ba31121e111c8771ca08Aaron Sierra } 9264630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 9274f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare ret = lpc_ich_check_conflict_gpio(res); 9284f600ada70beeb1dfe08e11e871bf31015aa0a3dJean Delvare if (ret < 0) { 9294630b130b30be6420394ba31121e111c8771ca08Aaron Sierra /* this isn't necessarily fatal for the GPIO */ 9304630b130b30be6420394ba31121e111c8771ca08Aaron Sierra acpi_conflict = true; 9314630b130b30be6420394ba31121e111c8771ca08Aaron Sierra goto gpio_done; 9324630b130b30be6420394ba31121e111c8771ca08Aaron Sierra } 93301560f6bb958b821ceec98590a7147d610a62625Aaron Sierra lpc_chipset_info[priv->chipset].use_gpio = ret; 9344630b130b30be6420394ba31121e111c8771ca08Aaron Sierra lpc_ich_enable_gpio_space(dev); 9354630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 93601560f6bb958b821ceec98590a7147d610a62625Aaron Sierra lpc_ich_finalize_cell(dev, &lpc_ich_cells[LPC_GPIO]); 9374630b130b30be6420394ba31121e111c8771ca08Aaron Sierra ret = mfd_add_devices(&dev->dev, -1, &lpc_ich_cells[LPC_GPIO], 93855692af5eb587f7592d6c2713e1e0eeaab0f6c31Mark Brown 1, NULL, 0, NULL); 9394630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 9404630b130b30be6420394ba31121e111c8771ca08Aaron Sierragpio_done: 9414630b130b30be6420394ba31121e111c8771ca08Aaron Sierra if (acpi_conflict) 9424630b130b30be6420394ba31121e111c8771ca08Aaron Sierra pr_warn("Resource conflict(s) found affecting %s\n", 9434630b130b30be6420394ba31121e111c8771ca08Aaron Sierra lpc_ich_cells[LPC_GPIO].name); 9444630b130b30be6420394ba31121e111c8771ca08Aaron Sierra return ret; 9454630b130b30be6420394ba31121e111c8771ca08Aaron Sierra} 9464630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 94701560f6bb958b821ceec98590a7147d610a62625Aaron Sierrastatic int lpc_ich_init_wdt(struct pci_dev *dev) 948887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra{ 94901560f6bb958b821ceec98590a7147d610a62625Aaron Sierra struct lpc_ich_priv *priv = pci_get_drvdata(dev); 950887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra u32 base_addr_cfg; 951887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra u32 base_addr; 952887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra int ret; 953887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra struct resource *res; 954887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra 955887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra /* Setup power management base register */ 956429b941abd503c8936e116c819362323aafdbd50Peter Tyser pci_read_config_dword(dev, priv->abase, &base_addr_cfg); 957887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra base_addr = base_addr_cfg & 0x0000ff80; 958887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra if (!base_addr) { 9590c418844dce21fa7000b51190f393c7d6a7ee12dPaul Bolle dev_notice(&dev->dev, "I/O space for ACPI uninitialized\n"); 960887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra ret = -ENODEV; 961887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra goto wdt_done; 962887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra } 963887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra 964887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra res = wdt_io_res(ICH_RES_IO_TCO); 965887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra res->start = base_addr + ACPIBASE_TCO_OFF; 966887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra res->end = base_addr + ACPIBASE_TCO_END; 967887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra 968887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra res = wdt_io_res(ICH_RES_IO_SMI); 969887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra res->start = base_addr + ACPIBASE_SMI_OFF; 970887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra res->end = base_addr + ACPIBASE_SMI_END; 971092369efbd6ef6b4a215741ce9f65446bf45beffFeng Tang 972887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra lpc_ich_enable_acpi_space(dev); 973887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra 974887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra /* 975eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser * iTCO v2: 976887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra * Get the Memory-Mapped GCS register. To get access to it 977887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra * we have to read RCBA from PCI Config space 0xf0 and use 978887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra * it as base. GCS = RCBA + ICH6_GCS(0x3410). 979eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser * 980eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser * iTCO v3: 981eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser * Get the Power Management Configuration register. To get access 982eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser * to it we have to read the PMC BASE from config space and address 983eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser * the register at offset 0x8. 984887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra */ 98501560f6bb958b821ceec98590a7147d610a62625Aaron Sierra if (lpc_chipset_info[priv->chipset].iTCO_version == 1) { 986e294bc91760e11d2f1ebbac1d0a979069edf7adbPeter Hurley /* Don't register iomem for TCO ver 1 */ 987e294bc91760e11d2f1ebbac1d0a979069edf7adbPeter Hurley lpc_ich_cells[LPC_WDT].num_resources--; 988eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser } else if (lpc_chipset_info[priv->chipset].iTCO_version == 2) { 989887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra pci_read_config_dword(dev, RCBABASE, &base_addr_cfg); 990887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra base_addr = base_addr_cfg & 0xffffc000; 991887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra if (!(base_addr_cfg & 1)) { 9920c418844dce21fa7000b51190f393c7d6a7ee12dPaul Bolle dev_notice(&dev->dev, "RCBA is disabled by " 9930c418844dce21fa7000b51190f393c7d6a7ee12dPaul Bolle "hardware/BIOS, device disabled\n"); 994887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra ret = -ENODEV; 995887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra goto wdt_done; 996887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra } 997eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser res = wdt_mem_res(ICH_RES_MEM_GCS_PMC); 998887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra res->start = base_addr + ACPIBASE_GCS_OFF; 999887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra res->end = base_addr + ACPIBASE_GCS_END; 1000eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser } else if (lpc_chipset_info[priv->chipset].iTCO_version == 3) { 1001eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser lpc_ich_enable_pmc_space(dev); 1002eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser pci_read_config_dword(dev, ACPICTRL_PMCBASE, &base_addr_cfg); 1003eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser base_addr = base_addr_cfg & 0xfffffe00; 1004eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser 1005eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser res = wdt_mem_res(ICH_RES_MEM_GCS_PMC); 1006eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser res->start = base_addr + ACPIBASE_PMC_OFF; 1007eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser res->end = base_addr + ACPIBASE_PMC_END; 1008887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra } 1009887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra 101001560f6bb958b821ceec98590a7147d610a62625Aaron Sierra lpc_ich_finalize_cell(dev, &lpc_ich_cells[LPC_WDT]); 1011887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra ret = mfd_add_devices(&dev->dev, -1, &lpc_ich_cells[LPC_WDT], 101255692af5eb587f7592d6c2713e1e0eeaab0f6c31Mark Brown 1, NULL, 0, NULL); 1013887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra 1014887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierrawdt_done: 1015887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra return ret; 1016887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra} 1017887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra 1018f791be492f76dea7b0641ed227a60eeb2fa7e255Bill Pembertonstatic int lpc_ich_probe(struct pci_dev *dev, 10194630b130b30be6420394ba31121e111c8771ca08Aaron Sierra const struct pci_device_id *id) 10204630b130b30be6420394ba31121e111c8771ca08Aaron Sierra{ 102101560f6bb958b821ceec98590a7147d610a62625Aaron Sierra struct lpc_ich_priv *priv; 10224630b130b30be6420394ba31121e111c8771ca08Aaron Sierra int ret; 10234630b130b30be6420394ba31121e111c8771ca08Aaron Sierra bool cell_added = false; 10244630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 1025ff7109fa632654eaef657186f2942f5b679023d6Aaron Sierra priv = devm_kzalloc(&dev->dev, 1026ff7109fa632654eaef657186f2942f5b679023d6Aaron Sierra sizeof(struct lpc_ich_priv), GFP_KERNEL); 102701560f6bb958b821ceec98590a7147d610a62625Aaron Sierra if (!priv) 102801560f6bb958b821ceec98590a7147d610a62625Aaron Sierra return -ENOMEM; 102901560f6bb958b821ceec98590a7147d610a62625Aaron Sierra 103001560f6bb958b821ceec98590a7147d610a62625Aaron Sierra priv->chipset = id->driver_data; 103101560f6bb958b821ceec98590a7147d610a62625Aaron Sierra 1032eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser priv->actrl_pbase_save = -1; 1033eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser priv->abase_save = -1; 1034eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser 1035429b941abd503c8936e116c819362323aafdbd50Peter Tyser priv->abase = ACPIBASE; 1036eb71d4dec4a5e010e34b9d7afdb5af41884c388ePeter Tyser priv->actrl_pbase = ACPICTRL_PMCBASE; 1037429b941abd503c8936e116c819362323aafdbd50Peter Tyser 1038429b941abd503c8936e116c819362323aafdbd50Peter Tyser priv->gctrl_save = -1; 103901560f6bb958b821ceec98590a7147d610a62625Aaron Sierra if (priv->chipset <= LPC_ICH5) { 1040429b941abd503c8936e116c819362323aafdbd50Peter Tyser priv->gbase = GPIOBASE_ICH0; 1041429b941abd503c8936e116c819362323aafdbd50Peter Tyser priv->gctrl = GPIOCTRL_ICH0; 104201560f6bb958b821ceec98590a7147d610a62625Aaron Sierra } else { 1043429b941abd503c8936e116c819362323aafdbd50Peter Tyser priv->gbase = GPIOBASE_ICH6; 1044429b941abd503c8936e116c819362323aafdbd50Peter Tyser priv->gctrl = GPIOCTRL_ICH6; 104501560f6bb958b821ceec98590a7147d610a62625Aaron Sierra } 104601560f6bb958b821ceec98590a7147d610a62625Aaron Sierra 104701560f6bb958b821ceec98590a7147d610a62625Aaron Sierra pci_set_drvdata(dev, priv); 104801560f6bb958b821ceec98590a7147d610a62625Aaron Sierra 1049f0776b8ce03ceb638c51b62f324844c71c446600Peter Tyser if (lpc_chipset_info[priv->chipset].iTCO_version) { 1050f0776b8ce03ceb638c51b62f324844c71c446600Peter Tyser ret = lpc_ich_init_wdt(dev); 1051f0776b8ce03ceb638c51b62f324844c71c446600Peter Tyser if (!ret) 1052f0776b8ce03ceb638c51b62f324844c71c446600Peter Tyser cell_added = true; 1053f0776b8ce03ceb638c51b62f324844c71c446600Peter Tyser } 1054887c8ec7219fc8eba78bb8f44a74c660934e9b98Aaron Sierra 1055f0776b8ce03ceb638c51b62f324844c71c446600Peter Tyser if (lpc_chipset_info[priv->chipset].gpio_version) { 1056f0776b8ce03ceb638c51b62f324844c71c446600Peter Tyser ret = lpc_ich_init_gpio(dev); 1057f0776b8ce03ceb638c51b62f324844c71c446600Peter Tyser if (!ret) 1058f0776b8ce03ceb638c51b62f324844c71c446600Peter Tyser cell_added = true; 1059f0776b8ce03ceb638c51b62f324844c71c446600Peter Tyser } 10604630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 10614630b130b30be6420394ba31121e111c8771ca08Aaron Sierra /* 10624630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * We only care if at least one or none of the cells registered 10634630b130b30be6420394ba31121e111c8771ca08Aaron Sierra * successfully. 10644630b130b30be6420394ba31121e111c8771ca08Aaron Sierra */ 10654630b130b30be6420394ba31121e111c8771ca08Aaron Sierra if (!cell_added) { 10660c418844dce21fa7000b51190f393c7d6a7ee12dPaul Bolle dev_warn(&dev->dev, "No MFD cells added\n"); 10674630b130b30be6420394ba31121e111c8771ca08Aaron Sierra lpc_ich_restore_config_space(dev); 10684630b130b30be6420394ba31121e111c8771ca08Aaron Sierra return -ENODEV; 10694630b130b30be6420394ba31121e111c8771ca08Aaron Sierra } 10704630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 10714630b130b30be6420394ba31121e111c8771ca08Aaron Sierra return 0; 10724630b130b30be6420394ba31121e111c8771ca08Aaron Sierra} 10734630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 10744740f73fe5388ab5d22d552d2a0dacc62418a70cBill Pembertonstatic void lpc_ich_remove(struct pci_dev *dev) 10754630b130b30be6420394ba31121e111c8771ca08Aaron Sierra{ 10764630b130b30be6420394ba31121e111c8771ca08Aaron Sierra mfd_remove_devices(&dev->dev); 10774630b130b30be6420394ba31121e111c8771ca08Aaron Sierra lpc_ich_restore_config_space(dev); 10784630b130b30be6420394ba31121e111c8771ca08Aaron Sierra} 10794630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 10804630b130b30be6420394ba31121e111c8771ca08Aaron Sierrastatic struct pci_driver lpc_ich_driver = { 10814630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .name = "lpc_ich", 10824630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .id_table = lpc_ich_ids, 10834630b130b30be6420394ba31121e111c8771ca08Aaron Sierra .probe = lpc_ich_probe, 108484449216b01f9c2b4c9b1882f9d6abba07b7b7caBill Pemberton .remove = lpc_ich_remove, 10854630b130b30be6420394ba31121e111c8771ca08Aaron Sierra}; 10864630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 1087b4d0fe9c906deb00ad0b1690817f96aff21aee29Libo Chenmodule_pci_driver(lpc_ich_driver); 10884630b130b30be6420394ba31121e111c8771ca08Aaron Sierra 10894630b130b30be6420394ba31121e111c8771ca08Aaron SierraMODULE_AUTHOR("Aaron Sierra <asierra@xes-inc.com>"); 10904630b130b30be6420394ba31121e111c8771ca08Aaron SierraMODULE_DESCRIPTION("LPC interface for Intel ICH"); 10914630b130b30be6420394ba31121e111c8771ca08Aaron SierraMODULE_LICENSE("GPL"); 1092