diff --git a/drivers/clock_control/nrf_clock_calibration.c b/drivers/clock_control/nrf_clock_calibration.c index 479e0969b3d..050c75ab917 100644 --- a/drivers/clock_control/nrf_clock_calibration.c +++ b/drivers/clock_control/nrf_clock_calibration.c @@ -45,7 +45,9 @@ static int total_cnt; /* Total number of calibrations. */ static int total_skips_cnt; /* Total number of skipped calibrations. */ /* Callback called on hfclk started. */ -static void cal_hf_on_callback(struct device *dev, void *user_data); +static void cal_hf_on_callback(struct device *dev, + clock_control_subsys_t subsys, + void *user_data); static struct clock_control_async_data cal_hf_on_data = { .cb = cal_hf_on_callback }; @@ -238,7 +240,9 @@ out: /* Called when HFCLK XTAL is on. Schedules temperature measurement or triggers * calibration. */ -static void cal_hf_on_callback(struct device *dev, void *user_data) +static void cal_hf_on_callback(struct device *dev, + clock_control_subsys_t subsys, + void *user_data) { int key = irq_lock(); diff --git a/drivers/clock_control/nrf_power_clock.c b/drivers/clock_control/nrf_power_clock.c index df45a9430cb..e410e7a3358 100644 --- a/drivers/clock_control/nrf_power_clock.c +++ b/drivers/clock_control/nrf_power_clock.c @@ -281,7 +281,7 @@ static int clock_async_start(struct device *dev, clock_irqs_enable(); if (already_started) { - data->cb(dev, data->user_data); + data->cb(dev, subsys, data->user_data); } } @@ -403,7 +403,8 @@ static void clkstarted_handle(struct device *dev, sub_data->started = true; while ((async_data = list_get(&sub_data->list)) != NULL) { - async_data->cb(dev, async_data->user_data); + async_data->cb(dev, (clock_control_subsys_t)type, + async_data->user_data); } } diff --git a/drivers/sensor/nrf5/temp_nrf5.c b/drivers/sensor/nrf5/temp_nrf5.c index cbde8d05f53..3483eeb7eef 100644 --- a/drivers/sensor/nrf5/temp_nrf5.c +++ b/drivers/sensor/nrf5/temp_nrf5.c @@ -26,7 +26,8 @@ struct temp_nrf5_data { struct device *clk_dev; }; -static void hfclk_on_callback(struct device *dev, void *user_data) +static void hfclk_on_callback(struct device *dev, clock_control_subsys_t subsys, + void *user_data) { nrf_temp_task_trigger(NRF_TEMP, NRF_TEMP_TASK_START); } diff --git a/include/drivers/clock_control.h b/include/drivers/clock_control.h index e927ad02764..9f6584beb70 100644 --- a/include/drivers/clock_control.h +++ b/include/drivers/clock_control.h @@ -34,7 +34,6 @@ enum clock_control_status { CLOCK_CONTROL_STATUS_UNKNOWN }; -typedef void (*clock_control_cb_t)(struct device *dev, void *user_data); /** * @cond INTERNAL_HIDDEN @@ -48,6 +47,23 @@ typedef void (*clock_control_cb_t)(struct device *dev, void *user_data); * INTERNAL_HIDDEN @endcond */ +/** + * clock_control_subsys_t is a type to identify a clock controller sub-system. + * Such data pointed is opaque and relevant only to the clock controller + * driver instance being used. + */ +typedef void *clock_control_subsys_t; + +/** @brief Callback called on clock started. + * + * @param dev Device structure whose driver controls the clock. + * @param subsys Opaque data representing the clock. + * @param user_data User data. + */ +typedef void (*clock_control_cb_t)(struct device *dev, + clock_control_subsys_t subsys, + void *user_data); + /** * Define and initialize clock_control async data. * @@ -72,13 +88,6 @@ struct clock_control_async_data { void *user_data; }; -/** - * clock_control_subsys_t is a type to identify a clock controller sub-system. - * Such data pointed is opaque and relevant only to the clock controller - * driver instance being used. - */ -typedef void *clock_control_subsys_t; - typedef int (*clock_control)(struct device *dev, clock_control_subsys_t sys); typedef int (*clock_control_get)(struct device *dev, diff --git a/tests/drivers/clock_control/clock_control_api/src/test_clock_control.c b/tests/drivers/clock_control/clock_control_api/src/test_clock_control.c index 6f22a1a7d81..61813a529b3 100644 --- a/tests/drivers/clock_control/clock_control_api/src/test_clock_control.c +++ b/tests/drivers/clock_control/clock_control_api/src/test_clock_control.c @@ -206,7 +206,9 @@ static bool async_capable(const char *dev_name, clock_control_subsys_t subsys) /* * Test checks that callbacks are called after clock is started. */ -static void clock_on_callback(struct device *dev, void *user_data) +static void clock_on_callback(struct device *dev, + clock_control_subsys_t subsys, + void *user_data) { bool *executed = (bool *)user_data; diff --git a/tests/drivers/clock_control/nrf_clock_calibration/src/test_nrf_clock_calibration.c b/tests/drivers/clock_control/nrf_clock_calibration/src/test_nrf_clock_calibration.c index 3fc62a6a884..a609ce1085b 100644 --- a/tests/drivers/clock_control/nrf_clock_calibration/src/test_nrf_clock_calibration.c +++ b/tests/drivers/clock_control/nrf_clock_calibration/src/test_nrf_clock_calibration.c @@ -27,7 +27,9 @@ static void turn_off_clock(struct device *dev, clock_control_subsys_t subsys) } while (err == 0); } -static void lfclk_started_cb(struct device *dev, void *user_data) +static void lfclk_started_cb(struct device *dev, + clock_control_subsys_t subsys, + void *user_data) { *(bool *)user_data = true; }