Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
 1/* SPDX-License-Identifier: GPL-2.0 */
 2#ifndef __MACH_SUNXI_CLK_FACTORS_H
 3#define __MACH_SUNXI_CLK_FACTORS_H
 4
 5#include <linux/clk-provider.h>
 6#include <linux/spinlock.h>
 7
 8#define SUNXI_FACTORS_NOT_APPLICABLE	(0)
 9
10struct clk_factors_config {
11	u8 nshift;
12	u8 nwidth;
13	u8 kshift;
14	u8 kwidth;
15	u8 mshift;
16	u8 mwidth;
17	u8 pshift;
18	u8 pwidth;
19	u8 n_start;
20};
21
22struct factors_request {
23	unsigned long rate;
24	unsigned long parent_rate;
25	u8 parent_index;
26	u8 n;
27	u8 k;
28	u8 m;
29	u8 p;
30};
31
32struct factors_data {
33	int enable;
34	int mux;
35	int muxmask;
36	const struct clk_factors_config *table;
37	void (*getter)(struct factors_request *req);
38	void (*recalc)(struct factors_request *req);
39	const char *name;
40};
41
42struct clk_factors {
43	struct clk_hw hw;
44	void __iomem *reg;
45	const struct clk_factors_config *config;
46	void (*get_factors)(struct factors_request *req);
47	void (*recalc)(struct factors_request *req);
48	spinlock_t *lock;
49	/* for cleanup */
50	struct clk_mux *mux;
51	struct clk_gate *gate;
52};
53
54struct clk *sunxi_factors_register(struct device_node *node,
55				   const struct factors_data *data,
56				   spinlock_t *lock,
57				   void __iomem *reg);
58struct clk *sunxi_factors_register_critical(struct device_node *node,
59					    const struct factors_data *data,
60					    spinlock_t *lock,
61					    void __iomem *reg);
62
63void sunxi_factors_unregister(struct device_node *node, struct clk *clk);
64
65#endif