diff --git a/cpu/cc2538/radio/cc2538_rf.c b/cpu/cc2538/radio/cc2538_rf.c index abaa31fea5..e72dd782af 100644 --- a/cpu/cc2538/radio/cc2538_rf.c +++ b/cpu/cc2538/radio/cc2538_rf.c @@ -197,6 +197,7 @@ void cc2538_setup(cc2538_rf_t *dev) (void) dev; #if IS_USED(MODULE_NETDEV_IEEE802154_SUBMAC) extern ieee802154_dev_t cc2538_rf_dev; + netdev_register((netdev_t* )dev, NETDEV_CC2538, 0); netdev_ieee802154_submac_init(&dev->netdev, &cc2538_rf_dev); #endif cc2538_init(); diff --git a/cpu/nrf52/radio/nrf802154/nrf802154.c b/cpu/nrf52/radio/nrf802154/nrf802154.c index f5c03b4f5a..cbfeb9f69a 100644 --- a/cpu/nrf52/radio/nrf802154/nrf802154.c +++ b/cpu/nrf52/radio/nrf802154/nrf802154.c @@ -233,8 +233,6 @@ static int _init(netdev_t *dev) { (void)dev; - netdev_register(&nrf802154_dev->netdev, NETDEV_NRF802154, 0); - int result = timer_init(NRF802154_TIMER, TIMER_FREQ, _timer_cb, NULL); assert(result >= 0); (void)result; diff --git a/cpu/nrf52/radio/nrf802154/nrf802154_radio.c b/cpu/nrf52/radio/nrf802154/nrf802154_radio.c index 20cd9f0ccb..183b76511e 100644 --- a/cpu/nrf52/radio/nrf802154/nrf802154_radio.c +++ b/cpu/nrf52/radio/nrf802154/nrf802154_radio.c @@ -718,6 +718,8 @@ void nrf802154_setup(nrf802154_t *dev) { (void) dev; #if IS_USED(MODULE_NETDEV_IEEE802154_SUBMAC) + netdev_t *netdev = (netdev_t*) dev; + netdev_register(netdev, NETDEV_NRF802154, 0); netdev_ieee802154_submac_init(&dev->netdev, &nrf802154_hal_dev); #endif nrf802154_init(); diff --git a/drivers/netdev_ieee802154_submac/netdev_ieee802154_submac.c b/drivers/netdev_ieee802154_submac/netdev_ieee802154_submac.c index 06a41ce03f..84168adfe9 100644 --- a/drivers/netdev_ieee802154_submac/netdev_ieee802154_submac.c +++ b/drivers/netdev_ieee802154_submac/netdev_ieee802154_submac.c @@ -274,33 +274,9 @@ static int _init(netdev_t *netdev) { netdev_ieee802154_submac_t *netdev_submac = (netdev_ieee802154_submac_t *)netdev; - /* Call the init function of the device (this will be handled by - * `auto_init`) */ - ieee802154_submac_t *submac = &netdev_submac->submac; - - ieee802154_submac_init(submac); - netdev_ieee802154_t *netdev_ieee802154 = (netdev_ieee802154_t *)netdev; - - /* This function already sets the PAN ID to the default one */ - netdev_ieee802154_reset(netdev_ieee802154); - - uint16_t chan = CONFIG_IEEE802154_DEFAULT_CHANNEL; - int16_t tx_power = CONFIG_IEEE802154_DEFAULT_TXPOWER; - netopt_enable_t enable = NETOPT_ENABLE; - - /* Initialise netdev_ieee802154_t struct */ - netdev_ieee802154_set(netdev_ieee802154, NETOPT_CHANNEL, - &chan, sizeof(chan)); - netdev_ieee802154_set(netdev_ieee802154, NETOPT_ADDRESS, - &submac->short_addr, sizeof(submac->short_addr)); - netdev_ieee802154_set(netdev_ieee802154, NETOPT_ADDRESS_LONG, - &submac->ext_addr, sizeof(submac->ext_addr)); - netdev_ieee802154_set(netdev_ieee802154, NETOPT_ACK_REQ, - &enable, sizeof(enable)); - - netdev_submac->dev.txpower = tx_power; + ieee802154_submac_init(submac, (network_uint16_t*) netdev_ieee802154->short_addr, (eui64_t*) netdev_ieee802154->long_addr); return 0; } @@ -323,6 +299,25 @@ int netdev_ieee802154_submac_init(netdev_ieee802154_submac_t *netdev_submac, netdev_submac->ack_timer.callback = _ack_timeout; netdev_submac->ack_timer.arg = netdev_submac; + netdev_ieee802154_t *netdev_ieee802154 = (netdev_ieee802154_t *)netdev; + + /* This function already sets the PAN ID to the default one */ + netdev_ieee802154_reset(netdev_ieee802154); + + uint16_t chan = CONFIG_IEEE802154_DEFAULT_CHANNEL; + int16_t tx_power = CONFIG_IEEE802154_DEFAULT_TXPOWER; + netopt_enable_t enable = NETOPT_ENABLE; + + netdev_ieee802154_setup(netdev_ieee802154); + + /* Initialise netdev_ieee802154_t struct */ + netdev_ieee802154_set(netdev_ieee802154, NETOPT_CHANNEL, + &chan, sizeof(chan)); + netdev_ieee802154_set(netdev_ieee802154, NETOPT_ACK_REQ, + &enable, sizeof(enable)); + + netdev_submac->dev.txpower = tx_power; + return 0; }