提交 f04ddfcd 编写于 作者: D Denis Turischev 提交者: Samuel Ortiz

gpio: Add Tunnel Creek support to sch_gpio

Almost the same driver for both Poulsbo and Tunnel Creek.
The difference is in quantity of GPIOs powered by the core power
rail and by suspend power supply, default values for some GPIOs, etc.
Detect actual hardware by platform device ID assigned in lpc_sch
and set configuration accordingly.
Signed-off-by: NDenis Turischev <denis@compulab.co.il>
Acked-by: NGrant Likely <grant.likely@secretlab.ca>
Signed-off-by: NSamuel Ortiz <sameo@linux.intel.com>
上级 e967f77d
...@@ -100,18 +100,21 @@ config GPIO_VR41XX ...@@ -100,18 +100,21 @@ config GPIO_VR41XX
Say yes here to support the NEC VR4100 series General-purpose I/O Uint Say yes here to support the NEC VR4100 series General-purpose I/O Uint
config GPIO_SCH config GPIO_SCH
tristate "Intel SCH GPIO" tristate "Intel SCH/TunnelCreek GPIO"
depends on GPIOLIB && PCI && X86 depends on GPIOLIB && PCI && X86
select MFD_CORE select MFD_CORE
select LPC_SCH select LPC_SCH
help help
Say yes here to support GPIO interface on Intel Poulsbo SCH. Say yes here to support GPIO interface on Intel Poulsbo SCH
or Intel Tunnel Creek processor.
The Intel SCH contains a total of 14 GPIO pins. Ten GPIOs are The Intel SCH contains a total of 14 GPIO pins. Ten GPIOs are
powered by the core power rail and are turned off during sleep powered by the core power rail and are turned off during sleep
modes (S3 and higher). The remaining four GPIOs are powered by modes (S3 and higher). The remaining four GPIOs are powered by
the Intel SCH suspend power supply. These GPIOs remain the Intel SCH suspend power supply. These GPIOs remain
active during S3. The suspend powered GPIOs can be used to wake the active during S3. The suspend powered GPIOs can be used to wake the
system from the Suspend-to-RAM state. system from the Suspend-to-RAM state.
The Intel Tunnel Creek processor has 5 GPIOs powered by the
core power rail and 9 from suspend power supply.
This driver can also be built as a module. If so, the module This driver can also be built as a module. If so, the module
will be called sch-gpio. will be called sch-gpio.
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/acpi.h> #include <linux/acpi.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/pci_ids.h>
#include <linux/gpio.h> #include <linux/gpio.h>
...@@ -187,7 +188,11 @@ static struct gpio_chip sch_gpio_resume = { ...@@ -187,7 +188,11 @@ static struct gpio_chip sch_gpio_resume = {
static int __devinit sch_gpio_probe(struct platform_device *pdev) static int __devinit sch_gpio_probe(struct platform_device *pdev)
{ {
struct resource *res; struct resource *res;
int err; int err, id;
id = pdev->id;
if (!id)
return -ENODEV;
res = platform_get_resource(pdev, IORESOURCE_IO, 0); res = platform_get_resource(pdev, IORESOURCE_IO, 0);
if (!res) if (!res)
...@@ -198,12 +203,40 @@ static int __devinit sch_gpio_probe(struct platform_device *pdev) ...@@ -198,12 +203,40 @@ static int __devinit sch_gpio_probe(struct platform_device *pdev)
gpio_ba = res->start; gpio_ba = res->start;
sch_gpio_core.base = 0; switch (id) {
sch_gpio_core.ngpio = 10; case PCI_DEVICE_ID_INTEL_SCH_LPC:
sch_gpio_core.dev = &pdev->dev; sch_gpio_core.base = 0;
sch_gpio_core.ngpio = 10;
sch_gpio_resume.base = 10;
sch_gpio_resume.ngpio = 4;
/*
* GPIO[6:0] enabled by default
* GPIO7 is configured by the CMC as SLPIOVR
* Enable GPIO[9:8] core powered gpios explicitly
*/
outb(0x3, gpio_ba + CGEN + 1);
/*
* SUS_GPIO[2:0] enabled by default
* Enable SUS_GPIO3 resume powered gpio explicitly
*/
outb(0x8, gpio_ba + RGEN);
break;
case PCI_DEVICE_ID_INTEL_ITC_LPC:
sch_gpio_core.base = 0;
sch_gpio_core.ngpio = 5;
sch_gpio_resume.base = 5;
sch_gpio_resume.ngpio = 9;
break;
default:
return -ENODEV;
}
sch_gpio_resume.base = 10; sch_gpio_core.dev = &pdev->dev;
sch_gpio_resume.ngpio = 4;
sch_gpio_resume.dev = &pdev->dev; sch_gpio_resume.dev = &pdev->dev;
err = gpiochip_add(&sch_gpio_core); err = gpiochip_add(&sch_gpio_core);
...@@ -214,18 +247,6 @@ static int __devinit sch_gpio_probe(struct platform_device *pdev) ...@@ -214,18 +247,6 @@ static int __devinit sch_gpio_probe(struct platform_device *pdev)
if (err < 0) if (err < 0)
goto err_sch_gpio_resume; goto err_sch_gpio_resume;
/*
* GPIO[6:0] enabled by default
* GPIO7 is configured by the CMC as SLPIOVR
* Enable GPIO[9:8] core powered gpios explicitly
*/
outb(0x3, gpio_ba + CGEN + 1);
/*
* SUS_GPIO[2:0] enabled by default
* Enable SUS_GPIO3 resume powered gpio explicitly
*/
outb(0x8, gpio_ba + RGEN);
return 0; return 0;
err_sch_gpio_resume: err_sch_gpio_resume:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册