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:
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_chip *bgc;
|
||||||
+ struct bgpio_pdata *pdata = dev_get_platdata(dev);
|
+ 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, 0);
|
||||||
+ dirout_r = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
+ dat_r = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||||
+ if (!dat_r || !dirout_r)
|
+ if (!dat_r || !dirout_r)
|
||||||
+ return -EINVAL;
|
+ return -EINVAL;
|
||||||
+
|
+
|
||||||
|
|
|
@ -100,7 +100,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
- u32 mask;
|
- u32 mask;
|
||||||
+ res[0].flags = IORESOURCE_MEM;
|
+ res[0].flags = IORESOURCE_MEM;
|
||||||
+ res[0].start = bcm63xx_regset_address(RSET_GPIO);
|
+ res[0].start = bcm63xx_regset_address(RSET_GPIO);
|
||||||
+ res[0].start += data;
|
+ res[0].start += dir;
|
||||||
|
|
||||||
- if (gpio >= chip->ngpio)
|
- if (gpio >= chip->ngpio)
|
||||||
- BUG();
|
- BUG();
|
||||||
|
@ -115,7 +115,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
- }
|
- }
|
||||||
+ res[1].flags = IORESOURCE_MEM;
|
+ res[1].flags = IORESOURCE_MEM;
|
||||||
+ res[1].start = bcm63xx_regset_address(RSET_GPIO);
|
+ res[1].start = bcm63xx_regset_address(RSET_GPIO);
|
||||||
+ res[1].start += dir;
|
+ res[1].start += data;
|
||||||
|
|
||||||
- return !!(bcm_gpio_readl(reg) & mask);
|
- return !!(bcm_gpio_readl(reg) & mask);
|
||||||
-}
|
-}
|
||||||
|
@ -175,7 +175,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
+ else
|
+ else
|
||||||
+ data_low_reg = GPIO_DATA_LO_REG;
|
+ 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 = {
|
-static struct gpio_chip bcm63xx_gpio_chip = {
|
||||||
- .label = "bcm63xx-gpio",
|
- .label = "bcm63xx-gpio",
|
||||||
|
@ -191,7 +191,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
-int __init bcm63xx_gpio_init(void)
|
-int __init bcm63xx_gpio_init(void)
|
||||||
-{
|
-{
|
||||||
- bcm63xx_gpio_out_low_reg_init();
|
- 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);
|
- gpio_out_low = bcm_gpio_readl(gpio_out_low_reg);
|
||||||
- if (!BCMCPU_IS_6345())
|
- if (!BCMCPU_IS_6345())
|
||||||
|
|
|
@ -87,8 +87,8 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
+ struct bgpio_chip *bgc;
|
+ struct bgpio_chip *bgc;
|
||||||
+ struct bgpio_pdata *pdata = dev_get_platdata(dev);
|
+ 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, 0);
|
||||||
+ dirout_r = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
+ dat_r = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||||
+ if (!dat_r || !dirout_r)
|
+ if (!dat_r || !dirout_r)
|
||||||
+ return -EINVAL;
|
+ return -EINVAL;
|
||||||
+
|
+
|
||||||
|
|
|
@ -100,7 +100,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
- u32 mask;
|
- u32 mask;
|
||||||
+ res[0].flags = IORESOURCE_MEM;
|
+ res[0].flags = IORESOURCE_MEM;
|
||||||
+ res[0].start = bcm63xx_regset_address(RSET_GPIO);
|
+ res[0].start = bcm63xx_regset_address(RSET_GPIO);
|
||||||
+ res[0].start += data;
|
+ res[0].start += dir;
|
||||||
|
|
||||||
- if (gpio >= chip->ngpio)
|
- if (gpio >= chip->ngpio)
|
||||||
- BUG();
|
- BUG();
|
||||||
|
@ -115,7 +115,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
- }
|
- }
|
||||||
+ res[1].flags = IORESOURCE_MEM;
|
+ res[1].flags = IORESOURCE_MEM;
|
||||||
+ res[1].start = bcm63xx_regset_address(RSET_GPIO);
|
+ res[1].start = bcm63xx_regset_address(RSET_GPIO);
|
||||||
+ res[1].start += dir;
|
+ res[1].start += data;
|
||||||
|
|
||||||
- return !!(bcm_gpio_readl(reg) & mask);
|
- return !!(bcm_gpio_readl(reg) & mask);
|
||||||
-}
|
-}
|
||||||
|
@ -175,7 +175,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
+ else
|
+ else
|
||||||
+ data_low_reg = GPIO_DATA_LO_REG;
|
+ 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 = {
|
-static struct gpio_chip bcm63xx_gpio_chip = {
|
||||||
- .label = "bcm63xx-gpio",
|
- .label = "bcm63xx-gpio",
|
||||||
|
@ -191,7 +191,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
-int __init bcm63xx_gpio_init(void)
|
-int __init bcm63xx_gpio_init(void)
|
||||||
-{
|
-{
|
||||||
- bcm63xx_gpio_out_low_reg_init();
|
- 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);
|
- gpio_out_low = bcm_gpio_readl(gpio_out_low_reg);
|
||||||
- if (!BCMCPU_IS_6345())
|
- if (!BCMCPU_IS_6345())
|
||||||
|
|
Loading…
Reference in a new issue