]> Git Repo - linux.git/blame - drivers/clk/meson/clk-regmap.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf
[linux.git] / drivers / clk / meson / clk-regmap.h
CommitLineData
22f65a38
JB
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (c) 2018 BayLibre, SAS.
4 * Author: Jerome Brunet <[email protected]>
5 */
ea11dda9
JB
6
7#ifndef __CLK_REGMAP_H
8#define __CLK_REGMAP_H
9
10#include <linux/clk-provider.h>
11#include <linux/regmap.h>
12
13/**
14 * struct clk_regmap - regmap backed clock
15 *
16 * @hw: handle between common and hardware-specific interfaces
17 * @map: pointer to the regmap structure controlling the clock
18 * @data: data specific to the clock type
19 *
20 * Clock which is controlled by regmap backed registers. The actual type of
21 * of the clock is controlled by the clock_ops and data.
22 */
23struct clk_regmap {
24 struct clk_hw hw;
25 struct regmap *map;
26 void *data;
27};
28
29#define to_clk_regmap(_hw) container_of(_hw, struct clk_regmap, hw)
30
31/**
32 * struct clk_regmap_gate_data - regmap backed gate specific data
33 *
34 * @offset: offset of the register controlling gate
35 * @bit_idx: single bit controlling gate
36 * @flags: hardware-specific flags
37 *
38 * Flags:
39 * Same as clk_gate except CLK_GATE_HIWORD_MASK which is ignored
40 */
41struct clk_regmap_gate_data {
42 unsigned int offset;
43 u8 bit_idx;
44 u8 flags;
45};
46
47static inline struct clk_regmap_gate_data *
48clk_get_regmap_gate_data(struct clk_regmap *clk)
49{
50 return (struct clk_regmap_gate_data *)clk->data;
51}
52
53extern const struct clk_ops clk_regmap_gate_ops;
54
55/**
56 * struct clk_regmap_div_data - regmap backed adjustable divider specific data
57 *
58 * @offset: offset of the register controlling the divider
59 * @shift: shift to the divider bit field
60 * @width: width of the divider bit field
61 * @table: array of value/divider pairs, last entry should have div = 0
62 *
63 * Flags:
64 * Same as clk_divider except CLK_DIVIDER_HIWORD_MASK which is ignored
65 */
66struct clk_regmap_div_data {
67 unsigned int offset;
68 u8 shift;
69 u8 width;
70 u8 flags;
71 const struct clk_div_table *table;
72};
73
74static inline struct clk_regmap_div_data *
75clk_get_regmap_div_data(struct clk_regmap *clk)
76{
77 return (struct clk_regmap_div_data *)clk->data;
78}
79
80extern const struct clk_ops clk_regmap_divider_ops;
81extern const struct clk_ops clk_regmap_divider_ro_ops;
82
83/**
84 * struct clk_regmap_mux_data - regmap backed multiplexer clock specific data
85 *
86 * @hw: handle between common and hardware-specific interfaces
87 * @offset: offset of theregister controlling multiplexer
88 * @table: array of parent indexed register values
89 * @shift: shift to multiplexer bit field
90 * @mask: mask of mutliplexer bit field
91 * @flags: hardware-specific flags
92 *
93 * Flags:
94 * Same as clk_divider except CLK_MUX_HIWORD_MASK which is ignored
95 */
96struct clk_regmap_mux_data {
97 unsigned int offset;
98 u32 *table;
99 u32 mask;
100 u8 shift;
101 u8 flags;
102};
103
104static inline struct clk_regmap_mux_data *
105clk_get_regmap_mux_data(struct clk_regmap *clk)
106{
107 return (struct clk_regmap_mux_data *)clk->data;
108}
109
110extern const struct clk_ops clk_regmap_mux_ops;
111extern const struct clk_ops clk_regmap_mux_ro_ops;
112
113#endif /* __CLK_REGMAP_H */
This page took 0.112129 seconds and 4 git commands to generate.