diff options
Diffstat (limited to 'drivers/firmware/arm_scmi/clock.c')
-rw-r--r-- | drivers/firmware/arm_scmi/clock.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/firmware/arm_scmi/clock.c b/drivers/firmware/arm_scmi/clock.c index 4c2227662b26..da04833aaca5 100644 --- a/drivers/firmware/arm_scmi/clock.c +++ b/drivers/firmware/arm_scmi/clock.c @@ -194,6 +194,22 @@ err: return ret; } +static int scmi_clock_available_rates(const struct scmi_handle *handle, + u32 clk_id, u64 *rates) +{ + struct clock_info *cinfo = handle->clk_priv; + struct scmi_clock_info *clk = cinfo->clk + clk_id; + + if (!rates) + return -EINVAL; + + /* Copy all the rates into user specified buffer */ + memcpy(rates, &clk->list.rates[0], + clk->list.num_rates * sizeof(rates)); + + return clk->list.num_rates; +} + static int scmi_clock_rate_get(const struct scmi_handle *handle, u32 clk_id, u64 *value) { @@ -309,6 +325,7 @@ static struct scmi_clk_ops clk_ops = { .rate_set = scmi_clock_rate_set, .enable = scmi_clock_enable, .disable = scmi_clock_disable, + .available_rates = scmi_clock_available_rates, }; static int scmi_clock_protocol_init(struct scmi_handle *handle) |