ARM: stm32: Fix SoM and board coding strap GPIO handling on DHSOM
authorMarek Vasut <marex@denx.de>
Sat, 13 Nov 2021 02:26:39 +0000 (03:26 +0100)
committerPatrice Chotard <patrice.chotard@foss.st.com>
Tue, 30 Nov 2021 15:43:28 +0000 (16:43 +0100)
The variables retaining the strap values have to be initialized, always,
make it so. Moreover, free the requested GPIO list at the end to avoid
wasting memory.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Patrice Chotard <patrice.chotard@foss.st.com>
Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
Reviewed-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
board/dhelectronics/dh_stm32mp1/board.c

index a8402e2..f44afb0 100644 (file)
@@ -212,34 +212,40 @@ static void board_get_coding_straps(void)
        ofnode node;
        int i, ret;
 
+       brdcode = 0;
+       ddr3code = 0;
+       somcode = 0;
+
        node = ofnode_path("/config");
        if (!ofnode_valid(node)) {
                printf("%s: no /config node?\n", __func__);
                return;
        }
 
-       brdcode = 0;
-       ddr3code = 0;
-       somcode = 0;
-
        ret = gpio_request_list_by_name_nodev(node, "dh,som-coding-gpios",
                                              gpio, ARRAY_SIZE(gpio),
                                              GPIOD_IS_IN);
        for (i = 0; i < ret; i++)
                somcode |= !!dm_gpio_get_value(&(gpio[i])) << i;
 
+       gpio_free_list_nodev(gpio, ret);
+
        ret = gpio_request_list_by_name_nodev(node, "dh,ddr3-coding-gpios",
                                              gpio, ARRAY_SIZE(gpio),
                                              GPIOD_IS_IN);
        for (i = 0; i < ret; i++)
                ddr3code |= !!dm_gpio_get_value(&(gpio[i])) << i;
 
+       gpio_free_list_nodev(gpio, ret);
+
        ret = gpio_request_list_by_name_nodev(node, "dh,board-coding-gpios",
                                              gpio, ARRAY_SIZE(gpio),
                                              GPIOD_IS_IN);
        for (i = 0; i < ret; i++)
                brdcode |= !!dm_gpio_get_value(&(gpio[i])) << i;
 
+       gpio_free_list_nodev(gpio, ret);
+
        printf("Code:  SoM:rev=%d,ddr3=%d Board:rev=%d\n",
                somcode, ddr3code, brdcode);
 }