mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
gpio-f7188x: fix chip name and pin count on Nuvoton chip
[ Upstream commit3002b8642f] In fact the device with chip id 0xD283 is called NCT6126D, and that is the chip id the Nuvoton code was written for. Correct that name to avoid confusion, because a NCT6116D in fact exists as well but has another chip id, and is currently not supported. The look at the spec also revealed that GPIO group7 in fact has 8 pins, so correct the pin count in that group as well. Fixes:d0918a84af("gpio-f7188x: Add GPIO support for Nuvoton NCT6116") Reported-by: Xing Tong Wu <xingtong.wu@siemens.com> Signed-off-by: Henning Schild <henning.schild@siemens.com> Acked-by: Simon Guinot <simon.guinot@sequanux.org> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
085f27f48c
commit
49b5b5bfee
@@ -882,7 +882,7 @@ config GPIO_F7188X
|
|||||||
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 F71869, F71869A, F71882FG, F71889F and F81866.
|
chips F71869, F71869A, F71882FG, F71889F and F81866.
|
||||||
As well as Nuvoton Super-I/O chip NCT6116D.
|
As well as Nuvoton Super-I/O chip NCT6126D.
|
||||||
|
|
||||||
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.
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
/*
|
/*
|
||||||
* Nuvoton devices.
|
* Nuvoton devices.
|
||||||
*/
|
*/
|
||||||
#define SIO_NCT6116D_ID 0xD283 /* NCT6116D chipset ID */
|
#define SIO_NCT6126D_ID 0xD283 /* NCT6126D chipset ID */
|
||||||
|
|
||||||
#define SIO_LD_GPIO_NUVOTON 0x07 /* GPIO logical device */
|
#define SIO_LD_GPIO_NUVOTON 0x07 /* GPIO logical device */
|
||||||
|
|
||||||
@@ -62,7 +62,7 @@ enum chips {
|
|||||||
f81866,
|
f81866,
|
||||||
f81804,
|
f81804,
|
||||||
f81865,
|
f81865,
|
||||||
nct6116d,
|
nct6126d,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char * const f7188x_names[] = {
|
static const char * const f7188x_names[] = {
|
||||||
@@ -74,7 +74,7 @@ static const char * const f7188x_names[] = {
|
|||||||
"f81866",
|
"f81866",
|
||||||
"f81804",
|
"f81804",
|
||||||
"f81865",
|
"f81865",
|
||||||
"nct6116d",
|
"nct6126d",
|
||||||
};
|
};
|
||||||
|
|
||||||
struct f7188x_sio {
|
struct f7188x_sio {
|
||||||
@@ -187,8 +187,8 @@ static int f7188x_gpio_set_config(struct gpio_chip *chip, unsigned offset,
|
|||||||
/* Output mode register (0:open drain 1:push-pull). */
|
/* Output mode register (0:open drain 1:push-pull). */
|
||||||
#define f7188x_gpio_out_mode(base) ((base) + 3)
|
#define f7188x_gpio_out_mode(base) ((base) + 3)
|
||||||
|
|
||||||
#define f7188x_gpio_dir_invert(type) ((type) == nct6116d)
|
#define f7188x_gpio_dir_invert(type) ((type) == nct6126d)
|
||||||
#define f7188x_gpio_data_single(type) ((type) == nct6116d)
|
#define f7188x_gpio_data_single(type) ((type) == nct6126d)
|
||||||
|
|
||||||
static struct f7188x_gpio_bank f71869_gpio_bank[] = {
|
static struct f7188x_gpio_bank f71869_gpio_bank[] = {
|
||||||
F7188X_GPIO_BANK(0, 6, 0xF0, DRVNAME "-0"),
|
F7188X_GPIO_BANK(0, 6, 0xF0, DRVNAME "-0"),
|
||||||
@@ -274,7 +274,7 @@ static struct f7188x_gpio_bank f81865_gpio_bank[] = {
|
|||||||
F7188X_GPIO_BANK(60, 5, 0x90, DRVNAME "-6"),
|
F7188X_GPIO_BANK(60, 5, 0x90, DRVNAME "-6"),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct f7188x_gpio_bank nct6116d_gpio_bank[] = {
|
static struct f7188x_gpio_bank nct6126d_gpio_bank[] = {
|
||||||
F7188X_GPIO_BANK(0, 8, 0xE0, DRVNAME "-0"),
|
F7188X_GPIO_BANK(0, 8, 0xE0, DRVNAME "-0"),
|
||||||
F7188X_GPIO_BANK(10, 8, 0xE4, DRVNAME "-1"),
|
F7188X_GPIO_BANK(10, 8, 0xE4, DRVNAME "-1"),
|
||||||
F7188X_GPIO_BANK(20, 8, 0xE8, DRVNAME "-2"),
|
F7188X_GPIO_BANK(20, 8, 0xE8, DRVNAME "-2"),
|
||||||
@@ -282,7 +282,7 @@ static struct f7188x_gpio_bank nct6116d_gpio_bank[] = {
|
|||||||
F7188X_GPIO_BANK(40, 8, 0xF0, DRVNAME "-4"),
|
F7188X_GPIO_BANK(40, 8, 0xF0, DRVNAME "-4"),
|
||||||
F7188X_GPIO_BANK(50, 8, 0xF4, DRVNAME "-5"),
|
F7188X_GPIO_BANK(50, 8, 0xF4, DRVNAME "-5"),
|
||||||
F7188X_GPIO_BANK(60, 8, 0xF8, DRVNAME "-6"),
|
F7188X_GPIO_BANK(60, 8, 0xF8, DRVNAME "-6"),
|
||||||
F7188X_GPIO_BANK(70, 1, 0xFC, DRVNAME "-7"),
|
F7188X_GPIO_BANK(70, 8, 0xFC, DRVNAME "-7"),
|
||||||
};
|
};
|
||||||
|
|
||||||
static int f7188x_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
|
static int f7188x_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
|
||||||
@@ -490,9 +490,9 @@ static int f7188x_gpio_probe(struct platform_device *pdev)
|
|||||||
data->nr_bank = ARRAY_SIZE(f81865_gpio_bank);
|
data->nr_bank = ARRAY_SIZE(f81865_gpio_bank);
|
||||||
data->bank = f81865_gpio_bank;
|
data->bank = f81865_gpio_bank;
|
||||||
break;
|
break;
|
||||||
case nct6116d:
|
case nct6126d:
|
||||||
data->nr_bank = ARRAY_SIZE(nct6116d_gpio_bank);
|
data->nr_bank = ARRAY_SIZE(nct6126d_gpio_bank);
|
||||||
data->bank = nct6116d_gpio_bank;
|
data->bank = nct6126d_gpio_bank;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
@@ -559,9 +559,9 @@ static int __init f7188x_find(int addr, struct f7188x_sio *sio)
|
|||||||
case SIO_F81865_ID:
|
case SIO_F81865_ID:
|
||||||
sio->type = f81865;
|
sio->type = f81865;
|
||||||
break;
|
break;
|
||||||
case SIO_NCT6116D_ID:
|
case SIO_NCT6126D_ID:
|
||||||
sio->device = SIO_LD_GPIO_NUVOTON;
|
sio->device = SIO_LD_GPIO_NUVOTON;
|
||||||
sio->type = nct6116d;
|
sio->type = nct6126d;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
pr_info("Unsupported Fintek device 0x%04x\n", devid);
|
pr_info("Unsupported Fintek device 0x%04x\n", devid);
|
||||||
@@ -569,7 +569,7 @@ static int __init f7188x_find(int addr, struct f7188x_sio *sio)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* double check manufacturer where possible */
|
/* double check manufacturer where possible */
|
||||||
if (sio->type != nct6116d) {
|
if (sio->type != nct6126d) {
|
||||||
manid = superio_inw(addr, SIO_FINTEK_MANID);
|
manid = superio_inw(addr, SIO_FINTEK_MANID);
|
||||||
if (manid != SIO_FINTEK_ID) {
|
if (manid != SIO_FINTEK_ID) {
|
||||||
pr_debug("Not a Fintek device at 0x%08x\n", addr);
|
pr_debug("Not a Fintek device at 0x%08x\n", addr);
|
||||||
@@ -581,7 +581,7 @@ static int __init f7188x_find(int addr, struct f7188x_sio *sio)
|
|||||||
err = 0;
|
err = 0;
|
||||||
|
|
||||||
pr_info("Found %s at %#x\n", f7188x_names[sio->type], (unsigned int)addr);
|
pr_info("Found %s at %#x\n", f7188x_names[sio->type], (unsigned int)addr);
|
||||||
if (sio->type != nct6116d)
|
if (sio->type != nct6126d)
|
||||||
pr_info(" revision %d\n", superio_inb(addr, SIO_FINTEK_DEVREV));
|
pr_info(" revision %d\n", superio_inb(addr, SIO_FINTEK_DEVREV));
|
||||||
|
|
||||||
err:
|
err:
|
||||||
|
|||||||
Reference in New Issue
Block a user