diff options
Diffstat (limited to 'bsps/arm/beagle/start/bspstart.c')
-rw-r--r-- | bsps/arm/beagle/start/bspstart.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/bsps/arm/beagle/start/bspstart.c b/bsps/arm/beagle/start/bspstart.c index 0a6f1b4a64..a0736294c9 100644 --- a/bsps/arm/beagle/start/bspstart.c +++ b/bsps/arm/beagle/start/bspstart.c @@ -20,6 +20,8 @@ #include <bsp/i2c.h> #include <rtems/sysinit.h> #include "bsp-soc-detect.h" +#include <arm/ti/ti_pinmux.h> +#include <ofw/ofw.h> #include "bspdebug.h" @@ -55,6 +57,29 @@ uint32_t bsp_fdt_map_intr(const uint32_t *intr, size_t icells) return intr[0]; } +static void traverse_fdt_nodes( phandle_t node ) +{ + + for (node = rtems_ofw_child(node); node != 0; node = rtems_ofw_peer(node)) { + traverse_fdt_nodes(node); + + if (!rtems_ofw_node_status(node)) + continue; + + /* + * Put all driver initialization functions here + */ + beagle_pinmux_init(node); + } +} + +static void bbb_drivers_initialize(void) +{ + phandle_t node = rtems_ofw_peer(0); + + traverse_fdt_nodes(node); +} + static void bbb_i2c_0_initialize(void) { int err; @@ -73,3 +98,9 @@ RTEMS_SYSINIT_ITEM( RTEMS_SYSINIT_LAST, RTEMS_SYSINIT_ORDER_LAST_BUT_5 ); + +RTEMS_SYSINIT_ITEM( + bbb_drivers_initialize, + RTEMS_SYSINIT_BSP_PRE_DRIVERS, + RTEMS_SYSINIT_ORDER_LAST +); |