hc
2023-11-07 2a9a9d4f6c07f2f23b663fe5fbeac1168a5d1029
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
/*
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 */
 
#include <linux/clkdev.h>
 
struct clkops {
   void            (*enable)(struct clk *);
   void            (*disable)(struct clk *);
   unsigned long        (*getrate)(struct clk *);
   int            (*setrate)(struct clk *, unsigned long);
};
 
struct clk {
   const struct clkops    *ops;
 
   void __iomem    *clk_rst;    /* clock reset control register */
   int        fnclksel;    /* functional clock select (APBC) */
   uint32_t    enable_val;    /* value for clock enable (APMU) */
   unsigned long    rate;
   int        enabled;
};
 
extern struct clkops apbc_clk_ops;
extern struct clkops apmu_clk_ops;
 
#define APBC_CLK(_name, _reg, _fnclksel, _rate)            \
struct clk clk_##_name = {                    \
       .clk_rst    = APBC_##_reg,            \
       .fnclksel    = _fnclksel,            \
       .rate        = _rate,            \
       .ops        = &apbc_clk_ops,        \
}
 
#define APBC_CLK_OPS(_name, _reg, _fnclksel, _rate, _ops)    \
struct clk clk_##_name = {                    \
       .clk_rst    = APBC_##_reg,            \
       .fnclksel    = _fnclksel,            \
       .rate        = _rate,            \
       .ops        = _ops,                \
}
 
#define APMU_CLK(_name, _reg, _eval, _rate)            \
struct clk clk_##_name = {                    \
       .clk_rst    = APMU_##_reg,            \
       .enable_val    = _eval,            \
       .rate        = _rate,            \
       .ops        = &apmu_clk_ops,        \
}
 
#define APMU_CLK_OPS(_name, _reg, _eval, _rate, _ops)        \
struct clk clk_##_name = {                    \
       .clk_rst    = APMU_##_reg,            \
       .enable_val    = _eval,            \
       .rate        = _rate,            \
       .ops        = _ops,                \
}
 
#define INIT_CLKREG(_clk, _devname, _conname)            \
   {                            \
       .clk        = _clk,                \
       .dev_id        = _devname,            \
       .con_id        = _conname,            \
   }
 
extern struct clk clk_pxa168_gpio;
extern struct clk clk_pxa168_timers;