1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright (c) 2018 BayLibre, SAS.
4 * Author: Jerome Brunet <jbrunet@baylibre.com>
10 #include <linux/clk-provider.h>
11 #include <linux/regmap.h>
14 * struct clk_regmap - regmap backed clock
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
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.
29 #define to_clk_regmap(_hw) container_of(_hw, struct clk_regmap, hw)
32 * struct clk_regmap_gate_data - regmap backed gate specific data
34 * @offset: offset of the register controlling gate
35 * @bit_idx: single bit controlling gate
36 * @flags: hardware-specific flags
39 * Same as clk_gate except CLK_GATE_HIWORD_MASK which is ignored
41 struct clk_regmap_gate_data
{
47 static inline struct clk_regmap_gate_data
*
48 clk_get_regmap_gate_data(struct clk_regmap
*clk
)
50 return (struct clk_regmap_gate_data
*)clk
->data
;
53 extern const struct clk_ops clk_regmap_gate_ops
;
56 * struct clk_regmap_div_data - regmap backed adjustable divider specific data
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
64 * Same as clk_divider except CLK_DIVIDER_HIWORD_MASK which is ignored
66 struct clk_regmap_div_data
{
71 const struct clk_div_table
*table
;
74 static inline struct clk_regmap_div_data
*
75 clk_get_regmap_div_data(struct clk_regmap
*clk
)
77 return (struct clk_regmap_div_data
*)clk
->data
;
80 extern const struct clk_ops clk_regmap_divider_ops
;
81 extern const struct clk_ops clk_regmap_divider_ro_ops
;
84 * struct clk_regmap_mux_data - regmap backed multiplexer clock specific data
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
94 * Same as clk_divider except CLK_MUX_HIWORD_MASK which is ignored
96 struct clk_regmap_mux_data
{
104 static inline struct clk_regmap_mux_data
*
105 clk_get_regmap_mux_data(struct clk_regmap
*clk
)
107 return (struct clk_regmap_mux_data
*)clk
->data
;
110 extern const struct clk_ops clk_regmap_mux_ops
;
111 extern const struct clk_ops clk_regmap_mux_ro_ops
;
113 #endif /* __CLK_REGMAP_H */