Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions modules/hal_nordic/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ menuconfig NRF_802154_RADIO_DRIVER
depends on HAS_HW_NRF_RADIO_IEEE802154
select DYNAMIC_INTERRUPTS
select ENTROPY_GENERATOR
select CLOCK_CONTROL
depends on !$(dt_nodelabel_enabled,timer1)
help
This option enables nRF IEEE 802.15.4 radio driver in Zephyr. Note,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,7 @@

#include <compiler_abstraction.h>
#include <zephyr/kernel.h>
#if defined(CONFIG_CLOCK_CONTROL_NRF)
#include <zephyr/drivers/clock_control/nrf_clock_control.h>
#include <zephyr/drivers/clock_control.h>
#elif !defined(NRF54H_SERIES)
#error No implementation to start or stop HFCLK due to missing clock_control.
#endif

static bool hfclk_is_running;

Expand All @@ -35,7 +30,6 @@
return hfclk_is_running;
}

#if defined(CONFIG_CLOCK_CONTROL_NRF)

static struct onoff_client hfclk_cli;

Expand All @@ -48,6 +42,7 @@
nrf_802154_clock_hfclk_ready();
}

#if defined(CONFIG_CLOCK_CONTROL_NRF)
void nrf_802154_clock_hfclk_start(void)
{
int ret;
Expand Down Expand Up @@ -75,40 +70,22 @@
hfclk_is_running = false;
}

#elif defined(NRF54H_SERIES)

#define NRF_LRCCONF_RADIO_PD NRF_LRCCONF010
/* HF clock time to ramp-up. */
#define MAX_HFXO_RAMP_UP_TIME_US 550

static void hfclk_started_timer_handler(struct k_timer *dummy)
{
hfclk_is_running = true;
nrf_802154_clock_hfclk_ready();
}

K_TIMER_DEFINE(hfclk_started_timer, hfclk_started_timer_handler, NULL);
#elif defined(CONFIG_CLOCK_CONTROL_NRF2)

void nrf_802154_clock_hfclk_start(void)
{
/* Use register directly, there is no support for that task in nrf_lrcconf_task_trigger.
* This code might cause troubles if there are other HFXO users in this CPU.
*/
NRF_LRCCONF_RADIO_PD->EVENTS_HFXOSTARTED = 0x0;
NRF_LRCCONF_RADIO_PD->TASKS_REQHFXO = 0x1;
sys_notify_init_callback(&hfclk_cli.notify, hfclk_on_callback);
int ret = nrf_clock_control_request(DEVICE_DT_GET(DT_NODELABEL(hfxo)), NULL, &hfclk_cli);

k_timer_start(&hfclk_started_timer, K_USEC(MAX_HFXO_RAMP_UP_TIME_US), K_NO_WAIT);
__ASSERT_NO_MSG(ret >= 0);
}

void nrf_802154_clock_hfclk_stop(void)
{
/* Use register directly, there is no support for that task in nrf_lrcconf_task_trigger.
* This code might cause troubles if there are other HFXO users in this CPU.
*/
NRF_LRCCONF_RADIO_PD->TASKS_STOPREQHFXO = 0x1;
NRF_LRCCONF_RADIO_PD->EVENTS_HFXOSTARTED = 0x0;
int ret = nrf_clock_control_cancel_or_release(DEVICE_DT_GET(DT_NODELABEL(hfxo)),
NULL, &hfclk_cli);

Check notice on line 87 in modules/hal_nordic/nrf_802154/sl_opensource/platform/nrf_802154_clock_zephyr.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

modules/hal_nordic/nrf_802154/sl_opensource/platform/nrf_802154_clock_zephyr.c:87 - int ret = nrf_clock_control_cancel_or_release(DEVICE_DT_GET(DT_NODELABEL(hfxo)), - NULL, &hfclk_cli); + int ret = nrf_clock_control_cancel_or_release(DEVICE_DT_GET(DT_NODELABEL(hfxo)), NULL, + &hfclk_cli);
hfclk_is_running = false;
__ASSERT_NO_MSG(ret >= 0);
}

#endif
Loading