Changeset adf7e753 in rtems


Ignore:
Timestamp:
Feb 10, 2020, 9:35:17 AM (5 months ago)
Author:
Christian Mauderer <christian.mauderer@…>
Branches:
5, master
Children:
b900f507
Parents:
b58f994
git-author:
Christian Mauderer <christian.mauderer@…> (02/10/20 09:35:17)
git-committer:
Christian Mauderer <christian.mauderer@…> (02/11/20 08:17:02)
Message:

bsp/imx: Parse fdt pinctrl values and setup iomux

Update #3869.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • bsps/arm/imx/start/imx_iomux.c

    rb58f994 radf7e753  
    110110#define iomux_sc (&iomux_sc_instance);
    111111
     112/* Return true if there is no status or status is "okay" or "ok". */
     113static bool
     114imx_fdt_node_status_okay(const void *fdt, int node)
     115{
     116        const void *status;
     117        int len;
     118
     119        status = fdt_getprop(fdt, node, "status", &len);
     120        if ((status == NULL) ||
     121            (strncmp(status, "okay", MIN(5, len)) == 0) ||
     122            (strncmp(status, "ok", MIN(3, len)) == 0)) {
     123                return true;
     124        }
     125
     126        return false;
     127}
     128
     129/*
     130 * Walk through all subnodes and handle "pinctrl-0" if the node is enabled. This
     131 * does roughly the same as FreeBSDs fdt_pinctrl_configure_tree but without the
     132 * whole open firmware (OF*) functions.
     133 */
     134static void
     135imx_pinctrl_configure_children(const void *fdt, int parent)
     136{
     137        int node;
     138        const uint32_t *phandle;
     139        int len;
     140
     141        fdt_for_each_subnode(node, fdt, parent) {
     142                if (imx_fdt_node_status_okay(fdt, node)) {
     143                        imx_pinctrl_configure_children(fdt, node);
     144                        phandle = fdt_getprop(fdt, node, "pinctrl-0", &len);
     145                        if (phandle != NULL && len == sizeof(*phandle)) {
     146                                imx_iomux_configure_pins(fdt,
     147                                    fdt32_to_cpu(*phandle));
     148                        }
     149                }
     150        }
     151}
     152
    112153static void
    113154imx_iomux_init(void)
     
    125166        sc = iomux_sc;
    126167        sc->regs = imx_get_reg_of_node(fdt, node);
     168
     169        node = fdt_path_offset(fdt, "/");
     170        imx_pinctrl_configure_children(fdt, node);
    127171}
    128172
Note: See TracChangeset for help on using the changeset viewer.