1 | // SPDX-License-Identifier: GPL-2.0-only |
---|---|
2 | /* |
3 | * OMAP2-specific DPLL control functions |
4 | * |
5 | * Copyright (C) 2011 Nokia Corporation |
6 | * Paul Walmsley |
7 | */ |
8 | |
9 | #include <linux/kernel.h> |
10 | #include <linux/errno.h> |
11 | #include <linux/clk.h> |
12 | #include <linux/io.h> |
13 | |
14 | #include "clock.h" |
15 | #include "cm2xxx.h" |
16 | #include "cm-regbits-24xx.h" |
17 | |
18 | /* Private functions */ |
19 | |
20 | /** |
21 | * _allow_idle - enable DPLL autoidle bits |
22 | * @clk: struct clk * of the DPLL to operate on |
23 | * |
24 | * Enable DPLL automatic idle control. The DPLL will enter low-power |
25 | * stop when its downstream clocks are gated. No return value. |
26 | * REVISIT: DPLL can optionally enter low-power bypass by writing 0x1 |
27 | * instead. Add some mechanism to optionally enter this mode. |
28 | */ |
29 | static void _allow_idle(struct clk_hw_omap *clk) |
30 | { |
31 | if (!clk || !clk->dpll_data) |
32 | return; |
33 | |
34 | omap2xxx_cm_set_dpll_auto_low_power_stop(); |
35 | } |
36 | |
37 | /** |
38 | * _deny_idle - prevent DPLL from automatically idling |
39 | * @clk: struct clk * of the DPLL to operate on |
40 | * |
41 | * Disable DPLL automatic idle control. No return value. |
42 | */ |
43 | static void _deny_idle(struct clk_hw_omap *clk) |
44 | { |
45 | if (!clk || !clk->dpll_data) |
46 | return; |
47 | |
48 | omap2xxx_cm_set_dpll_disable_autoidle(); |
49 | } |
50 | |
51 | |
52 | /* Public data */ |
53 | const struct clk_hw_omap_ops clkhwops_omap2xxx_dpll = { |
54 | .allow_idle = _allow_idle, |
55 | .deny_idle = _deny_idle, |
56 | }; |
57 |