blob: 4395c3c244d0ee96ef4776ccd6ef101bb44bfc21 [file] [log] [blame]
Gabriel Fernandez847c6bc2020-10-13 09:36:25 +02001/*
2 * Copyright (c) 2021, STMicroelectronics - All Rights Reserved
3 * Author(s): Ludovic Barre, <ludovic.barre@st.com> for STMicroelectronics.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8#include <assert.h>
9#include <errno.h>
10#include <stdbool.h>
11
12#include <drivers/clk.h>
13
14static const struct clk_ops *ops;
15
16int clk_enable(unsigned long id)
17{
18 assert((ops != NULL) && (ops->enable != NULL));
19
20 return ops->enable(id);
21}
22
23void clk_disable(unsigned long id)
24{
25 assert((ops != NULL) && (ops->disable != NULL));
26
27 ops->disable(id);
28}
29
30unsigned long clk_get_rate(unsigned long id)
31{
32 assert((ops != NULL) && (ops->get_rate != NULL));
33
34 return ops->get_rate(id);
35}
36
37int clk_get_parent(unsigned long id)
38{
39 assert((ops != NULL) && (ops->get_parent != NULL));
40
41 return ops->get_parent(id);
42}
43
Ghennadi Procopciuca2c60162024-06-03 09:16:41 +030044int clk_set_parent(unsigned long id, unsigned long parent_id)
45{
46 assert((ops != NULL) && (ops->set_parent != NULL));
47
48 return ops->set_parent(id, parent_id);
49}
50
Gabriel Fernandez847c6bc2020-10-13 09:36:25 +020051bool clk_is_enabled(unsigned long id)
52{
53 assert((ops != NULL) && (ops->is_enabled != NULL));
54
55 return ops->is_enabled(id);
56}
57
58/*
59 * Initialize the clk. The fields in the provided clk
60 * ops pointer must be valid.
61 */
62void clk_register(const struct clk_ops *ops_ptr)
63{
64 assert((ops_ptr != NULL) &&
65 (ops_ptr->enable != NULL) &&
66 (ops_ptr->disable != NULL) &&
67 (ops_ptr->get_rate != NULL) &&
68 (ops_ptr->get_parent != NULL) &&
69 (ops_ptr->is_enabled != NULL));
70
71 ops = ops_ptr;
72}