Commit 24ccef35 authored by Andreas Bofjall's avatar Andreas Bofjall Committed by Linus Walleij

gpio: f7188x: add GPIO support for F71869

Add support for the GPIOs found on the Fintek SuperI/O chip F71869, such
as the one found on the Jetway NF96u-525 motherboard, to the f7188x gpio
driver.
Signed-off-by: default avatarAndreas Bofjall <andreas@gazonk.org>
Tested-by: default avatarLes Schaffer <schaffer@optonline.net>
Reviewed-by: default avatarAlexandre Courbot <acourbot@nvidia.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 3f8f4f19
...@@ -198,11 +198,11 @@ config GPIO_MM_LANTIQ ...@@ -198,11 +198,11 @@ config GPIO_MM_LANTIQ
created by attaching a 16bit latch to the bus. created by attaching a 16bit latch to the bus.
config GPIO_F7188X config GPIO_F7188X
tristate "F71882FG and F71889F GPIO support" tristate "F71869, F71882FG and F71889F GPIO support"
depends on X86 depends on X86
help help
This option enables support for GPIOs found on Fintek Super-I/O This option enables support for GPIOs found on Fintek Super-I/O
chips F71882FG and F71889F. chips F71869, F71882FG and F71889F.
To compile this driver as a module, choose M here: the module will To compile this driver as a module, choose M here: the module will
be called f7188x-gpio. be called f7188x-gpio.
......
/* /*
* GPIO driver for Fintek Super-I/O F71882 and F71889 * GPIO driver for Fintek Super-I/O F71869, F71882 and F71889
* *
* Copyright (C) 2010-2013 LaCie * Copyright (C) 2010-2013 LaCie
* *
...@@ -32,12 +32,14 @@ ...@@ -32,12 +32,14 @@
#define SIO_LOCK_KEY 0xAA /* Key to disable Super-I/O */ #define SIO_LOCK_KEY 0xAA /* Key to disable Super-I/O */
#define SIO_FINTEK_ID 0x1934 /* Manufacturer ID */ #define SIO_FINTEK_ID 0x1934 /* Manufacturer ID */
#define SIO_F71869_ID 0x0814 /* F71869 chipset ID */
#define SIO_F71882_ID 0x0541 /* F71882 chipset ID */ #define SIO_F71882_ID 0x0541 /* F71882 chipset ID */
#define SIO_F71889_ID 0x0909 /* F71889 chipset ID */ #define SIO_F71889_ID 0x0909 /* F71889 chipset ID */
enum chips { f71882fg, f71889f }; enum chips { f71869, f71882fg, f71889f };
static const char * const f7188x_names[] = { static const char * const f7188x_names[] = {
"f71869",
"f71882fg", "f71882fg",
"f71889f", "f71889f",
}; };
...@@ -146,6 +148,16 @@ static void f7188x_gpio_set(struct gpio_chip *chip, unsigned offset, int value); ...@@ -146,6 +148,16 @@ static void f7188x_gpio_set(struct gpio_chip *chip, unsigned offset, int value);
/* Output mode register (0:open drain 1:push-pull). */ /* Output mode register (0:open drain 1:push-pull). */
#define gpio_out_mode(base) (base + 3) #define gpio_out_mode(base) (base + 3)
static struct f7188x_gpio_bank f71869_gpio_bank[] = {
F7188X_GPIO_BANK(0, 6, 0xF0),
F7188X_GPIO_BANK(10, 8, 0xE0),
F7188X_GPIO_BANK(20, 8, 0xD0),
F7188X_GPIO_BANK(30, 8, 0xC0),
F7188X_GPIO_BANK(40, 8, 0xB0),
F7188X_GPIO_BANK(50, 5, 0xA0),
F7188X_GPIO_BANK(60, 6, 0x90),
};
static struct f7188x_gpio_bank f71882_gpio_bank[] = { static struct f7188x_gpio_bank f71882_gpio_bank[] = {
F7188X_GPIO_BANK(0 , 8, 0xF0), F7188X_GPIO_BANK(0 , 8, 0xF0),
F7188X_GPIO_BANK(10, 8, 0xE0), F7188X_GPIO_BANK(10, 8, 0xE0),
...@@ -281,6 +293,10 @@ static int f7188x_gpio_probe(struct platform_device *pdev) ...@@ -281,6 +293,10 @@ static int f7188x_gpio_probe(struct platform_device *pdev)
return -ENOMEM; return -ENOMEM;
switch (sio->type) { switch (sio->type) {
case f71869:
data->nr_bank = ARRAY_SIZE(f71869_gpio_bank);
data->bank = f71869_gpio_bank;
break;
case f71882fg: case f71882fg:
data->nr_bank = ARRAY_SIZE(f71882_gpio_bank); data->nr_bank = ARRAY_SIZE(f71882_gpio_bank);
data->bank = f71882_gpio_bank; data->bank = f71882_gpio_bank;
...@@ -354,6 +370,9 @@ static int __init f7188x_find(int addr, struct f7188x_sio *sio) ...@@ -354,6 +370,9 @@ static int __init f7188x_find(int addr, struct f7188x_sio *sio)
devid = superio_inw(addr, SIO_DEVID); devid = superio_inw(addr, SIO_DEVID);
switch (devid) { switch (devid) {
case SIO_F71869_ID:
sio->type = f71869;
break;
case SIO_F71882_ID: case SIO_F71882_ID:
sio->type = f71882fg; sio->type = f71882fg;
break; break;
...@@ -450,6 +469,6 @@ static void __exit f7188x_gpio_exit(void) ...@@ -450,6 +469,6 @@ static void __exit f7188x_gpio_exit(void)
} }
module_exit(f7188x_gpio_exit); module_exit(f7188x_gpio_exit);
MODULE_DESCRIPTION("GPIO driver for Super-I/O chips F71882FG and F71889F"); MODULE_DESCRIPTION("GPIO driver for Super-I/O chips F71869, F71882FG and F71889F");
MODULE_AUTHOR("Simon Guinot <simon.guinot@sequanux.org>"); MODULE_AUTHOR("Simon Guinot <simon.guinot@sequanux.org>");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment