Sound Open Firmware
Loading...
Searching...
No Matches
clk.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-3-Clause
2 *
3 * Copyright(c) 2022 Intel Corporation. All rights reserved.
4 */
5
12#ifndef __ZEPHYR_RTOS_CLK_H__
13#define __ZEPHYR_RTOS_CLK_H__
14
15#ifndef CONFIG_SOF_ZEPHYR_NO_SOF_CLOCK
16
17#include <zephyr/kernel.h>
18
19#define __SOF_LIB_CLK_H__
20#include <platform/lib/clk.h>
21
22/* TODO: most of the below is tied to the CLK drivers that need wrapped */
23#include <rtos/sof.h>
24#include <rtos/spinlock.h>
25#include <stdbool.h>
26#include <stdint.h>
27
28struct timer;
29
30#define CLOCK_NOTIFY_PRE 0
31#define CLOCK_NOTIFY_POST 1
32
34 uint32_t old_freq;
36 uint32_t freq;
38 uint32_t message;
39};
40
41struct freq_table {
42 uint32_t freq;
44};
45
46struct clock_info {
47 uint32_t freqs_num;
48 const struct freq_table *freqs;
51 uint32_t lowest_freq_idx; /* lowest possible clock */
54
55 /* persistent change clock value in active state, caller must hold clk_lock */
56 int (*set_freq)(int clock, int freq_idx);
57
58 /* temporary change clock - don't modify default clock settings */
59 void (*low_power_mode)(int clock, bool enable);
60};
61
62uint32_t clock_get_freq(int clock);
63
64void clock_set_freq(int clock, uint32_t hz);
65
66void clock_low_power_mode(int clock, bool enable);
67
68uint64_t clock_ticks_per_sample(int clock, uint32_t sample_rate);
69
70extern struct k_spinlock clk_lock;
71
72static inline k_spinlock_key_t clock_lock(void)
73{
74 return k_spin_lock(&clk_lock);
75}
76
77static inline void clock_unlock(k_spinlock_key_t key)
78{
79 k_spin_unlock(&clk_lock, key);
80}
81
82static inline struct clock_info *clocks_get(void)
83{
84 return sof_get()->clocks;
85}
86
87#endif /* CONFIG_SOF_ZEPHYR_NO_SOF_CLOCK */
88
89#endif /* __ZEPHYR_RTOS_CLK_H__ */
static k_spinlock_key_t clock_lock(void)
Definition clk.h:72
static void clock_unlock(k_spinlock_key_t key)
Definition clk.h:77
void clock_low_power_mode(int clock, bool enable)
uint64_t clock_ticks_per_sample(int clock, uint32_t sample_rate)
void clock_set_freq(int clock, uint32_t hz)
struct k_spinlock clk_lock
static struct clock_info * clocks_get(void)
Definition clk.h:82
uint32_t clock_get_freq(int clock)
Sound Open Firmware global runtime context.
struct sof * sof_get(void)
Get the global Sound Open Firmware runtime instance pointer.
RTOS spinlock primitives and initialization.
Definition clk.h:46
uint32_t notification_mask
Definition clk.h:53
uint32_t current_freq_idx
Definition clk.h:50
uint32_t freqs_num
Definition clk.h:47
void(* low_power_mode)(int clock, bool enable)
Definition clk.h:59
uint32_t lowest_freq_idx
Definition clk.h:51
uint32_t default_freq_idx
Definition clk.h:49
int(* set_freq)(int clock, int freq_idx)
Definition clk.h:56
const struct freq_table * freqs
Definition clk.h:48
uint32_t notification_id
Definition clk.h:52
Definition clk.h:33
uint32_t old_ticks_per_msec
Definition clk.h:35
uint32_t ticks_per_msec
Definition clk.h:37
uint32_t old_freq
Definition clk.h:34
uint32_t freq
Definition clk.h:36
uint32_t message
Definition clk.h:38
Definition clk.h:41
uint32_t ticks_per_msec
Definition clk.h:43
uint32_t freq
Definition clk.h:42
struct clock_info * clocks
Definition sof.h:70