]>
Commit | Line | Data |
---|---|---|
b9b8e614 GF |
1 | /************************************************************************ |
2 | File : Clock H/w specific Information | |
3 | ||
4 | Author: Pankaj Dev <pankaj.dev@st.com> | |
5 | ||
6 | Copyright (C) 2014 STMicroelectronics | |
7 | ************************************************************************/ | |
8 | ||
9 | #ifndef __CLKGEN_INFO_H | |
10 | #define __CLKGEN_INFO_H | |
11 | ||
12 | struct clkgen_field { | |
13 | unsigned int offset; | |
14 | unsigned int mask; | |
15 | unsigned int shift; | |
16 | }; | |
17 | ||
18 | static inline unsigned long clkgen_read(void __iomem *base, | |
19 | struct clkgen_field *field) | |
20 | { | |
21 | return (readl(base + field->offset) >> field->shift) & field->mask; | |
22 | } | |
23 | ||
24 | ||
25 | static inline void clkgen_write(void __iomem *base, struct clkgen_field *field, | |
26 | unsigned long val) | |
27 | { | |
28 | writel((readl(base + field->offset) & | |
29 | ~(field->mask << field->shift)) | (val << field->shift), | |
30 | base + field->offset); | |
31 | ||
32 | return; | |
33 | } | |
34 | ||
35 | #define CLKGEN_FIELD(_offset, _mask, _shift) { \ | |
36 | .offset = _offset, \ | |
37 | .mask = _mask, \ | |
38 | .shift = _shift, \ | |
39 | } | |
40 | ||
41 | #define CLKGEN_READ(pll, field) clkgen_read(pll->regs_base, \ | |
42 | &pll->data->field) | |
43 | ||
44 | #define CLKGEN_WRITE(pll, field, val) clkgen_write(pll->regs_base, \ | |
45 | &pll->data->field, val) | |
46 | ||
47 | #endif /*__CLKGEN_INFO_H*/ | |
48 |