summaryrefslogtreecommitdiffstats
path: root/drivers/clk/ultrarisc/clk-ultrarisc.h
blob: 8202b7ed0e3111141181347ad3fd2410900c72e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef __ULTRARISC_CLK_ULTRARISC_H
#define __ULTRARISC_CLK_ULTRARISC_H

#include <linux/clk-provider.h>
#include <linux/platform_device.h>
#include <linux/types.h>

struct ultrarisc_pll_layout {
	u32 cfg1_offset;
	u32 cfg2_offset;
	u32 frac_mask;
	u32 m_mask;
	u32 n_mask;
	u32 oddiv1_mask;
	u32 oddiv2_mask;
};

struct ultrarisc_pll_desc {
	u32 id;
	const char *name;
};

struct ultrarisc_fixed_factor_desc {
	u32 id;
	const char *name;
	u32 parent_id;
	u32 mult;
	u32 div;
};

struct ultrarisc_divider_desc {
	u32 id;
	const char *name;
	u32 offset;
	u32 parent_id;
	unsigned long max_rate;
	u32 load_mask;
	u8 div_shift;
	u8 div_width;
	u8 gate_bit;
	u16 divider_flags;
	u8 gate_flags;
};

struct ultrarisc_gate_desc {
	u32 id;
	const char *name;
	u32 offset;
	u32 parent_id;
	u8 gate_bit;
	u8 gate_flags;
};

struct ultrarisc_clk_soc_data {
	const struct ultrarisc_pll_layout *pll_layout;
	const struct ultrarisc_pll_desc *plls;
	u32 num_plls;
	const struct ultrarisc_fixed_factor_desc *fixed_factors;
	u32 num_fixed_factors;
	const struct ultrarisc_divider_desc *dividers;
	u32 num_dividers;
	const struct ultrarisc_gate_desc *gates;
	u32 num_gates;
	u32 num_clks;
};

int ultrarisc_clk_probe(struct platform_device *pdev,
			const struct ultrarisc_clk_soc_data *soc_data);

#endif /* __ULTRARISC_CLK_ULTRARISC_H */