1
0
mirror of https://git.openwrt.org/openwrt/openwrt.git synced 2024-10-19 05:58:53 +02:00

brcm63xx: fix gpio register usage

The driver expected data then dir, but both dts and legacy code passed
dir then data. Fix this by making the driver expect the registers in
ascending order, i.e. dir then data.

Signed-off-by: Jonas Gorski <jogo@openwrt.org>

SVN-Revision: 44574
This commit is contained in:
Jonas Gorski 2015-02-28 19:59:26 +00:00
parent 15fb17791a
commit c2a89871c2
4 changed files with 12 additions and 12 deletions

@ -87,8 +87,8 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+ struct bgpio_chip *bgc;
+ struct bgpio_pdata *pdata = dev_get_platdata(dev);
+
+ dat_r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ dirout_r = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+ dirout_r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ dat_r = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+ if (!dat_r || !dirout_r)
+ return -EINVAL;
+

@ -100,7 +100,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
- u32 mask;
+ res[0].flags = IORESOURCE_MEM;
+ res[0].start = bcm63xx_regset_address(RSET_GPIO);
+ res[0].start += data;
+ res[0].start += dir;
- if (gpio >= chip->ngpio)
- BUG();
@ -115,7 +115,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
- }
+ res[1].flags = IORESOURCE_MEM;
+ res[1].start = bcm63xx_regset_address(RSET_GPIO);
+ res[1].start += dir;
+ res[1].start += data;
- return !!(bcm_gpio_readl(reg) & mask);
-}
@ -175,7 +175,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+ else
+ data_low_reg = GPIO_DATA_LO_REG;
+ bcm63xx_gpio_init_one(0, data_low_reg, GPIO_CTL_LO_REG, min(ngpio, 32));
+ bcm63xx_gpio_init_one(0, GPIO_CTL_LO_REG, data_low_reg, min(ngpio, 32));
-static struct gpio_chip bcm63xx_gpio_chip = {
- .label = "bcm63xx-gpio",
@ -191,7 +191,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
-int __init bcm63xx_gpio_init(void)
-{
- bcm63xx_gpio_out_low_reg_init();
+ bcm63xx_gpio_init_one(1, GPIO_DATA_HI_REG, GPIO_CTL_HI_REG, ngpio - 32);
+ bcm63xx_gpio_init_one(1, GPIO_CTL_HI_REG, GPIO_DATA_HI_REG, ngpio - 32);
- gpio_out_low = bcm_gpio_readl(gpio_out_low_reg);
- if (!BCMCPU_IS_6345())

@ -87,8 +87,8 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+ struct bgpio_chip *bgc;
+ struct bgpio_pdata *pdata = dev_get_platdata(dev);
+
+ dat_r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ dirout_r = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+ dirout_r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ dat_r = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+ if (!dat_r || !dirout_r)
+ return -EINVAL;
+

@ -100,7 +100,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
- u32 mask;
+ res[0].flags = IORESOURCE_MEM;
+ res[0].start = bcm63xx_regset_address(RSET_GPIO);
+ res[0].start += data;
+ res[0].start += dir;
- if (gpio >= chip->ngpio)
- BUG();
@ -115,7 +115,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
- }
+ res[1].flags = IORESOURCE_MEM;
+ res[1].start = bcm63xx_regset_address(RSET_GPIO);
+ res[1].start += dir;
+ res[1].start += data;
- return !!(bcm_gpio_readl(reg) & mask);
-}
@ -175,7 +175,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+ else
+ data_low_reg = GPIO_DATA_LO_REG;
+ bcm63xx_gpio_init_one(0, data_low_reg, GPIO_CTL_LO_REG, min(ngpio, 32));
+ bcm63xx_gpio_init_one(0, GPIO_CTL_LO_REG, data_low_reg, min(ngpio, 32));
-static struct gpio_chip bcm63xx_gpio_chip = {
- .label = "bcm63xx-gpio",
@ -191,7 +191,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
-int __init bcm63xx_gpio_init(void)
-{
- bcm63xx_gpio_out_low_reg_init();
+ bcm63xx_gpio_init_one(1, GPIO_DATA_HI_REG, GPIO_CTL_HI_REG, ngpio - 32);
+ bcm63xx_gpio_init_one(1, GPIO_CTL_HI_REG, GPIO_DATA_HI_REG, ngpio - 32);
- gpio_out_low = bcm_gpio_readl(gpio_out_low_reg);
- if (!BCMCPU_IS_6345())