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
6#ifndef __ZEPHYR_RTOS_CLK_H__
7#define __ZEPHYR_RTOS_CLK_H__
8
9#ifndef CONFIG_SOF_ZEPHYR_NO_SOF_CLOCK
10
11#include <zephyr/kernel.h>
12
13#define __SOF_LIB_CLK_H__
14#include <platform/lib/clk.h>
15
16/* TODO: most of the below is tied to the CLK drivers that need wrapped */
17#include <rtos/sof.h>
18#include <rtos/spinlock.h>
19#include <stdbool.h>
20#include <stdint.h>
21
22struct timer;
23
24#define CLOCK_NOTIFY_PRE 0
25#define CLOCK_NOTIFY_POST 1
26
28 uint32_t old_freq;
30 uint32_t freq;
32 uint32_t message;
33};
34
35struct freq_table {
36 uint32_t freq;
38};
39
40struct clock_info {
41 uint32_t freqs_num;
42 const struct freq_table *freqs;
45 uint32_t lowest_freq_idx; /* lowest possible clock */
48
49 /* persistent change clock value in active state, caller must hold clk_lock */
50 int (*set_freq)(int clock, int freq_idx);
51
52 /* temporary change clock - don't modify default clock settings */
53 void (*low_power_mode)(int clock, bool enable);
54};
55
56uint32_t clock_get_freq(int clock);
57
58void clock_set_freq(int clock, uint32_t hz);
59
60void clock_low_power_mode(int clock, bool enable);
61
62uint64_t clock_ticks_per_sample(int clock, uint32_t sample_rate);
63
64extern struct k_spinlock clk_lock;
65
66static inline k_spinlock_key_t clock_lock(void)
67{
68 return k_spin_lock(&clk_lock);
69}
70
71static inline void clock_unlock(k_spinlock_key_t key)
72{
73 k_spin_unlock(&clk_lock, key);
74}
75
76static inline struct clock_info *clocks_get(void)
77{
78 return sof_get()->clocks;
79}
80
81#endif /* CONFIG_SOF_ZEPHYR_NO_SOF_CLOCK */
82
83#endif /* __ZEPHYR_RTOS_CLK_H__ */
static k_spinlock_key_t clock_lock(void)
Definition clk.h:66
static void clock_unlock(k_spinlock_key_t key)
Definition clk.h:71
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:76
uint32_t clock_get_freq(int clock)
struct sof * sof_get(void)
Definition clk.h:40
uint32_t notification_mask
Definition clk.h:47
uint32_t current_freq_idx
Definition clk.h:44
uint32_t freqs_num
Definition clk.h:41
void(* low_power_mode)(int clock, bool enable)
Definition clk.h:53
uint32_t lowest_freq_idx
Definition clk.h:45
uint32_t default_freq_idx
Definition clk.h:43
int(* set_freq)(int clock, int freq_idx)
Definition clk.h:50
const struct freq_table * freqs
Definition clk.h:42
uint32_t notification_id
Definition clk.h:46
Definition clk.h:27
uint32_t old_ticks_per_msec
Definition clk.h:29
uint32_t ticks_per_msec
Definition clk.h:31
uint32_t old_freq
Definition clk.h:28
uint32_t freq
Definition clk.h:30
uint32_t message
Definition clk.h:32
Definition clk.h:35
uint32_t ticks_per_msec
Definition clk.h:37
uint32_t freq
Definition clk.h:36
struct clock_info * clocks
Definition sof.h:64