Commit | Line | Data |
---|---|---|
20d49e9c SS |
1 | /* |
2 | * OMAP5 Voltage Management Routines | |
3 | * | |
4 | * Based on voltagedomains44xx_data.c | |
5 | * | |
6 | * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or modify | |
9 | * it under the terms of the GNU General Public License version 2 as | |
10 | * published by the Free Software Foundation. | |
11 | */ | |
12 | #include <linux/kernel.h> | |
13 | #include <linux/err.h> | |
14 | #include <linux/init.h> | |
15 | ||
16 | #include "common.h" | |
17 | ||
18 | #include "prm54xx.h" | |
19 | #include "voltage.h" | |
20 | #include "omap_opp_data.h" | |
21 | #include "vc.h" | |
22 | #include "vp.h" | |
23 | ||
24 | static const struct omap_vfsm_instance omap5_vdd_mpu_vfsm = { | |
25 | .voltsetup_reg = OMAP54XX_PRM_VOLTSETUP_MPU_RET_SLEEP_OFFSET, | |
26 | }; | |
27 | ||
28 | static const struct omap_vfsm_instance omap5_vdd_mm_vfsm = { | |
29 | .voltsetup_reg = OMAP54XX_PRM_VOLTSETUP_MM_RET_SLEEP_OFFSET, | |
30 | }; | |
31 | ||
32 | static const struct omap_vfsm_instance omap5_vdd_core_vfsm = { | |
33 | .voltsetup_reg = OMAP54XX_PRM_VOLTSETUP_CORE_RET_SLEEP_OFFSET, | |
34 | }; | |
35 | ||
36 | static struct voltagedomain omap5_voltdm_mpu = { | |
37 | .name = "mpu", | |
38 | .scalable = true, | |
39 | .read = omap4_prm_vcvp_read, | |
40 | .write = omap4_prm_vcvp_write, | |
41 | .rmw = omap4_prm_vcvp_rmw, | |
42 | .vc = &omap4_vc_mpu, | |
43 | .vfsm = &omap5_vdd_mpu_vfsm, | |
44 | .vp = &omap4_vp_mpu, | |
45 | }; | |
46 | ||
47 | static struct voltagedomain omap5_voltdm_mm = { | |
48 | .name = "mm", | |
49 | .scalable = true, | |
50 | .read = omap4_prm_vcvp_read, | |
51 | .write = omap4_prm_vcvp_write, | |
52 | .rmw = omap4_prm_vcvp_rmw, | |
53 | .vc = &omap4_vc_iva, | |
54 | .vfsm = &omap5_vdd_mm_vfsm, | |
55 | .vp = &omap4_vp_iva, | |
56 | }; | |
57 | ||
58 | static struct voltagedomain omap5_voltdm_core = { | |
59 | .name = "core", | |
60 | .scalable = true, | |
61 | .read = omap4_prm_vcvp_read, | |
62 | .write = omap4_prm_vcvp_write, | |
63 | .rmw = omap4_prm_vcvp_rmw, | |
64 | .vc = &omap4_vc_core, | |
65 | .vfsm = &omap5_vdd_core_vfsm, | |
66 | .vp = &omap4_vp_core, | |
67 | }; | |
68 | ||
69 | static struct voltagedomain omap5_voltdm_wkup = { | |
70 | .name = "wkup", | |
71 | }; | |
72 | ||
73 | static struct voltagedomain *voltagedomains_omap5[] __initdata = { | |
74 | &omap5_voltdm_mpu, | |
75 | &omap5_voltdm_mm, | |
76 | &omap5_voltdm_core, | |
77 | &omap5_voltdm_wkup, | |
78 | NULL, | |
79 | }; | |
80 | ||
19c233b7 | 81 | static const char *const sys_clk_name __initconst = "sys_clkin"; |
20d49e9c SS |
82 | |
83 | void __init omap54xx_voltagedomains_init(void) | |
84 | { | |
85 | struct voltagedomain *voltdm; | |
86 | int i; | |
87 | ||
20d49e9c SS |
88 | for (i = 0; voltdm = voltagedomains_omap5[i], voltdm; i++) |
89 | voltdm->sys_clk.name = sys_clk_name; | |
90 | ||
91 | voltdm_init(voltagedomains_omap5); | |
92 | }; |