Commit 1f1b1ba8 authored by Manuel Lauss's avatar Manuel Lauss Committed by Greg Kroah-Hartman

pcmcia: db1xxx_ss: fix last irq_to_gpio user

commit e34b6fcf upstream.

remove the usage of removed irq_to_gpio() function.  On pre-DB1200
boards, pass the actual carddetect GPIO number instead of the IRQ,
because we need the gpio to actually test card status (inserted or
not) and can get the irq number with gpio_to_irq() instead.

Tested on DB1300 and DB1500, this patch fixes PCMCIA on the DB1500,
which used irq_to_gpio().

Fixes: 832f5dac ("MIPS: Remove all the uses of custom gpio.h")
Signed-off-by: default avatarManuel Lauss <manuel.lauss@gmail.com>
Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Cc: linux-pcmcia@lists.infradead.org
Cc: Linux-MIPS <linux-mips@linux-mips.org>
Patchwork: https://patchwork.linux-mips.org/patch/12747/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 9d8f2244
...@@ -503,15 +503,15 @@ int __init db1000_dev_setup(void) ...@@ -503,15 +503,15 @@ int __init db1000_dev_setup(void)
if (board == BCSR_WHOAMI_DB1500) { if (board == BCSR_WHOAMI_DB1500) {
c0 = AU1500_GPIO2_INT; c0 = AU1500_GPIO2_INT;
c1 = AU1500_GPIO5_INT; c1 = AU1500_GPIO5_INT;
d0 = AU1500_GPIO0_INT; d0 = 0; /* GPIO number, NOT irq! */
d1 = AU1500_GPIO3_INT; d1 = 3; /* GPIO number, NOT irq! */
s0 = AU1500_GPIO1_INT; s0 = AU1500_GPIO1_INT;
s1 = AU1500_GPIO4_INT; s1 = AU1500_GPIO4_INT;
} else if (board == BCSR_WHOAMI_DB1100) { } else if (board == BCSR_WHOAMI_DB1100) {
c0 = AU1100_GPIO2_INT; c0 = AU1100_GPIO2_INT;
c1 = AU1100_GPIO5_INT; c1 = AU1100_GPIO5_INT;
d0 = AU1100_GPIO0_INT; d0 = 0; /* GPIO number, NOT irq! */
d1 = AU1100_GPIO3_INT; d1 = 3; /* GPIO number, NOT irq! */
s0 = AU1100_GPIO1_INT; s0 = AU1100_GPIO1_INT;
s1 = AU1100_GPIO4_INT; s1 = AU1100_GPIO4_INT;
...@@ -545,15 +545,15 @@ int __init db1000_dev_setup(void) ...@@ -545,15 +545,15 @@ int __init db1000_dev_setup(void)
} else if (board == BCSR_WHOAMI_DB1000) { } else if (board == BCSR_WHOAMI_DB1000) {
c0 = AU1000_GPIO2_INT; c0 = AU1000_GPIO2_INT;
c1 = AU1000_GPIO5_INT; c1 = AU1000_GPIO5_INT;
d0 = AU1000_GPIO0_INT; d0 = 0; /* GPIO number, NOT irq! */
d1 = AU1000_GPIO3_INT; d1 = 3; /* GPIO number, NOT irq! */
s0 = AU1000_GPIO1_INT; s0 = AU1000_GPIO1_INT;
s1 = AU1000_GPIO4_INT; s1 = AU1000_GPIO4_INT;
platform_add_devices(db1000_devs, ARRAY_SIZE(db1000_devs)); platform_add_devices(db1000_devs, ARRAY_SIZE(db1000_devs));
} else if ((board == BCSR_WHOAMI_PB1500) || } else if ((board == BCSR_WHOAMI_PB1500) ||
(board == BCSR_WHOAMI_PB1500R2)) { (board == BCSR_WHOAMI_PB1500R2)) {
c0 = AU1500_GPIO203_INT; c0 = AU1500_GPIO203_INT;
d0 = AU1500_GPIO201_INT; d0 = 1; /* GPIO number, NOT irq! */
s0 = AU1500_GPIO202_INT; s0 = AU1500_GPIO202_INT;
twosocks = 0; twosocks = 0;
flashsize = 64; flashsize = 64;
...@@ -566,7 +566,7 @@ int __init db1000_dev_setup(void) ...@@ -566,7 +566,7 @@ int __init db1000_dev_setup(void)
*/ */
} else if (board == BCSR_WHOAMI_PB1100) { } else if (board == BCSR_WHOAMI_PB1100) {
c0 = AU1100_GPIO11_INT; c0 = AU1100_GPIO11_INT;
d0 = AU1100_GPIO9_INT; d0 = 9; /* GPIO number, NOT irq! */
s0 = AU1100_GPIO10_INT; s0 = AU1100_GPIO10_INT;
twosocks = 0; twosocks = 0;
flashsize = 64; flashsize = 64;
...@@ -583,7 +583,6 @@ int __init db1000_dev_setup(void) ...@@ -583,7 +583,6 @@ int __init db1000_dev_setup(void)
} else } else
return 0; /* unknown board, no further dev setup to do */ return 0; /* unknown board, no further dev setup to do */
irq_set_irq_type(d0, IRQ_TYPE_EDGE_BOTH);
irq_set_irq_type(c0, IRQ_TYPE_LEVEL_LOW); irq_set_irq_type(c0, IRQ_TYPE_LEVEL_LOW);
irq_set_irq_type(s0, IRQ_TYPE_LEVEL_LOW); irq_set_irq_type(s0, IRQ_TYPE_LEVEL_LOW);
...@@ -597,7 +596,6 @@ int __init db1000_dev_setup(void) ...@@ -597,7 +596,6 @@ int __init db1000_dev_setup(void)
c0, d0, /*s0*/0, 0, 0); c0, d0, /*s0*/0, 0, 0);
if (twosocks) { if (twosocks) {
irq_set_irq_type(d1, IRQ_TYPE_EDGE_BOTH);
irq_set_irq_type(c1, IRQ_TYPE_LEVEL_LOW); irq_set_irq_type(c1, IRQ_TYPE_LEVEL_LOW);
irq_set_irq_type(s1, IRQ_TYPE_LEVEL_LOW); irq_set_irq_type(s1, IRQ_TYPE_LEVEL_LOW);
......
...@@ -514,7 +514,7 @@ static void __init db1550_devices(void) ...@@ -514,7 +514,7 @@ static void __init db1550_devices(void)
AU1000_PCMCIA_MEM_PHYS_ADDR + 0x000400000 - 1, AU1000_PCMCIA_MEM_PHYS_ADDR + 0x000400000 - 1,
AU1000_PCMCIA_IO_PHYS_ADDR, AU1000_PCMCIA_IO_PHYS_ADDR,
AU1000_PCMCIA_IO_PHYS_ADDR + 0x000010000 - 1, AU1000_PCMCIA_IO_PHYS_ADDR + 0x000010000 - 1,
AU1550_GPIO3_INT, AU1550_GPIO0_INT, AU1550_GPIO3_INT, 0,
/*AU1550_GPIO21_INT*/0, 0, 0); /*AU1550_GPIO21_INT*/0, 0, 0);
db1x_register_pcmcia_socket( db1x_register_pcmcia_socket(
...@@ -524,7 +524,7 @@ static void __init db1550_devices(void) ...@@ -524,7 +524,7 @@ static void __init db1550_devices(void)
AU1000_PCMCIA_MEM_PHYS_ADDR + 0x004400000 - 1, AU1000_PCMCIA_MEM_PHYS_ADDR + 0x004400000 - 1,
AU1000_PCMCIA_IO_PHYS_ADDR + 0x004000000, AU1000_PCMCIA_IO_PHYS_ADDR + 0x004000000,
AU1000_PCMCIA_IO_PHYS_ADDR + 0x004010000 - 1, AU1000_PCMCIA_IO_PHYS_ADDR + 0x004010000 - 1,
AU1550_GPIO5_INT, AU1550_GPIO1_INT, AU1550_GPIO5_INT, 1,
/*AU1550_GPIO22_INT*/0, 0, 1); /*AU1550_GPIO22_INT*/0, 0, 1);
platform_device_register(&db1550_nand_dev); platform_device_register(&db1550_nand_dev);
......
...@@ -56,6 +56,7 @@ struct db1x_pcmcia_sock { ...@@ -56,6 +56,7 @@ struct db1x_pcmcia_sock {
int stschg_irq; /* card-status-change irq */ int stschg_irq; /* card-status-change irq */
int card_irq; /* card irq */ int card_irq; /* card irq */
int eject_irq; /* db1200/pb1200 have these */ int eject_irq; /* db1200/pb1200 have these */
int insert_gpio; /* db1000 carddetect gpio */
#define BOARD_TYPE_DEFAULT 0 /* most boards */ #define BOARD_TYPE_DEFAULT 0 /* most boards */
#define BOARD_TYPE_DB1200 1 /* IRQs aren't gpios */ #define BOARD_TYPE_DB1200 1 /* IRQs aren't gpios */
...@@ -83,7 +84,7 @@ static int db1200_card_inserted(struct db1x_pcmcia_sock *sock) ...@@ -83,7 +84,7 @@ static int db1200_card_inserted(struct db1x_pcmcia_sock *sock)
/* carddetect gpio: low-active */ /* carddetect gpio: low-active */
static int db1000_card_inserted(struct db1x_pcmcia_sock *sock) static int db1000_card_inserted(struct db1x_pcmcia_sock *sock)
{ {
return !gpio_get_value(irq_to_gpio(sock->insert_irq)); return !gpio_get_value(sock->insert_gpio);
} }
static int db1x_card_inserted(struct db1x_pcmcia_sock *sock) static int db1x_card_inserted(struct db1x_pcmcia_sock *sock)
...@@ -457,9 +458,15 @@ static int db1x_pcmcia_socket_probe(struct platform_device *pdev) ...@@ -457,9 +458,15 @@ static int db1x_pcmcia_socket_probe(struct platform_device *pdev)
r = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "card"); r = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "card");
sock->card_irq = r ? r->start : 0; sock->card_irq = r ? r->start : 0;
/* insert: irq which triggers on card insertion/ejection */ /* insert: irq which triggers on card insertion/ejection
* BIG FAT NOTE: on DB1000/1100/1500/1550 we pass a GPIO here!
*/
r = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "insert"); r = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "insert");
sock->insert_irq = r ? r->start : -1; sock->insert_irq = r ? r->start : -1;
if (sock->board_type == BOARD_TYPE_DEFAULT) {
sock->insert_gpio = r ? r->start : -1;
sock->insert_irq = r ? gpio_to_irq(r->start) : -1;
}
/* stschg: irq which trigger on card status change (optional) */ /* stschg: irq which trigger on card status change (optional) */
r = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "stschg"); r = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "stschg");
......
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