diff --git a/arch/arm/dts/ipq5332-mi01.4.dts b/arch/arm/dts/ipq5332-mi01.4.dts index 008ccfde6b..5b51db5858 100644 --- a/arch/arm/dts/ipq5332-mi01.4.dts +++ b/arch/arm/dts/ipq5332-mi01.4.dts @@ -172,6 +172,7 @@ qca808x_gpio = <51>; qca808x_gpio_cnt = <1>; napa_gpio = <22>; + napa_gpio_cnt = <1>; qca8084_switch_enable = <1>; mdio_gpio { diff --git a/arch/arm/dts/ipq5332-mi04.1.dts b/arch/arm/dts/ipq5332-mi04.1.dts index 8708340d7d..69e99e34d1 100644 --- a/arch/arm/dts/ipq5332-mi04.1.dts +++ b/arch/arm/dts/ipq5332-mi04.1.dts @@ -173,6 +173,7 @@ qca808x_gpio = <51>; qca808x_gpio_cnt = <1>; napa_gpio = <22>; + napa_gpio_cnt = <1>; qca8084_switch_enable = <1>; mdio_gpio { diff --git a/board/qca/arm/ipq5332/ipq5332.c b/board/qca/arm/ipq5332/ipq5332.c index eb60dc93fc..22174b2523 100644 --- a/board/qca/arm/ipq5332/ipq5332.c +++ b/board/qca/arm/ipq5332/ipq5332.c @@ -1279,22 +1279,43 @@ void sfp_reset_init(void) } } -void qca8081_napa_reset(void) +int get_napa_gpio(int napa_gpio[2]) { - unsigned int *napa_gpio_base; - int node, gpio; - uint32_t cfg; + int napa_gpio_cnt = -1, node; + int res = -1; node = fdt_path_offset(gd->fdt_blob, "/ess-switch"); if (node >= 0) { - gpio = fdtdec_get_uint(gd->fdt_blob, node , "napa_gpio", -1); - if (gpio != -1) { - napa_gpio_base = - (unsigned int *)GPIO_CONFIG_ADDR(gpio); - cfg = GPIO_OE | GPIO_DRV_8_MA | GPIO_PULL_UP; - writel(cfg, napa_gpio_base); - mdelay(100); - gpio_set_value(gpio, 0x1); + napa_gpio_cnt = fdtdec_get_uint(gd->fdt_blob, node, "napa_gpio_cnt", -1); + if (napa_gpio_cnt >= 1) { + res = fdtdec_get_int_array(gd->fdt_blob, node, "napa_gpio", + (u32 *)napa_gpio, napa_gpio_cnt); + if (res >= 0) + return napa_gpio_cnt; + } + } + + return res; +} + +void qca8081_napa_reset(void) +{ + int napa_gpio[2] = {-1, -1}, napa_gpio_cnt, i; + unsigned int *napa_gpio_base; + uint32_t cfg; + + napa_gpio_cnt = get_napa_gpio(napa_gpio); + if (napa_gpio_cnt >= 1) { + for (i = 0; i < napa_gpio_cnt; i++) { + if (napa_gpio[i] >= 0) { + napa_gpio_base = + (unsigned int *)GPIO_CONFIG_ADDR( + napa_gpio[i]); + cfg = GPIO_OE | GPIO_DRV_8_MA | GPIO_PULL_UP; + writel(cfg, napa_gpio_base); + mdelay(100); + gpio_set_value(napa_gpio[i], 0x1); + } } } }