1 diff -urN kernel-power-2.6.28/arch/arm/mach-omap2/omap3-opp.h kernel-power-2.6.28.SR/arch/arm/mach-omap2/omap3-opp.h
2 --- kernel-power-2.6.28/arch/arm/mach-omap2/omap3-opp.h 2011-10-11 13:51:21.441301622 +0100
3 +++ kernel-power-2.6.28.SR/arch/arm/mach-omap2/omap3-opp.h 2011-10-22 16:31:45.291911000 +0100
5 #define S900M 900000000
6 #define S850M 850000000
7 #define S805M 805000000
8 -#define S750M 750000000
9 -#define S700M 700000000
10 +#define S720M 720000000
11 #define S600M 600000000
12 #define S550M 550000000
13 #define S500M 500000000
14 diff -urN kernel-power-2.6.28/arch/arm/mach-omap2/pm.c kernel-power-2.6.28.SR/arch/arm/mach-omap2/pm.c
15 --- kernel-power-2.6.28/arch/arm/mach-omap2/pm.c 2011-10-11 13:51:21.444897248 +0100
16 +++ kernel-power-2.6.28.SR/arch/arm/mach-omap2/pm.c 2011-10-30 07:29:47.355582000 +0000
19 struct omap_opp omap3_mpu_rate_table[] = {
29 + {S125M, VDD1_OPP1, 0x1E},
30 + {S250M, VDD1_OPP2, 0x26},
31 + {S500M, VDD1_OPP3, 0x30},
32 + {S550M, VDD1_OPP4, 0x36},
33 + {S600M, VDD1_OPP5, 0x3C},
44 + {S720M, VDD1_OPP6, 0x3C},
45 + {S805M, VDD1_OPP7, 0x3C},
46 + {S850M, VDD1_OPP8, 0x3C},
47 + {S900M, VDD1_OPP9, 0x3C},
48 + {S950M, VDD1_OPP10, 0x3C},
49 + {S1000M,VDD1_OPP11, 0x3C},
50 + {S1100M,VDD1_OPP12, 0x48},
51 + {S1150M,VDD1_OPP13, 0x48},
53 +EXPORT_SYMBOL(omap3_mpu_rate_table);
55 struct omap_opp omap3_l3_rate_table[] = {
59 struct omap_opp omap3_dsp_rate_table[] = {
69 + {S90M, VDD1_OPP1, 0x1E},
70 + {S180M, VDD1_OPP2, 0x26},
71 + {S360M, VDD1_OPP3, 0x30},
72 + {S400M, VDD1_OPP4, 0x36},
73 + {S430M, VDD1_OPP5, 0x3C},
77 - {S430M, 9, 0x3C},/*800MHz*/
84 + {S520M, VDD1_OPP6, 0x3C},
85 + {S520M, VDD1_OPP7, 0x3C},
86 + {S520M, VDD1_OPP8, 0x3C},
87 + {S520M, VDD1_OPP9, 0x3C},
88 + {S520M, VDD1_OPP10, 0x3C},
89 + {S520M, VDD1_OPP11, 0x3C},
90 + {S520M, VDD1_OPP12, 0x48},
91 + {S520M, VDD1_OPP13, 0x48},
93 +EXPORT_SYMBOL(omap3_dsp_rate_table);
95 unsigned short enable_dyn_sleep;
96 unsigned short clocks_off_while_idle;
100 if (attr == &vdd1_opp_attr) {
101 - if (value < 1 || value > 5) {
102 + if (value < MIN_VDD1_OPP || value > MAX_VDD1_OPP) {
103 printk(KERN_ERR "vdd_opp_store: Invalid value\n");
106 resource_set_opp_level(PRCM_VDD1, value, flags);
107 } else if (attr == &vdd2_opp_attr) {
108 - if (value < 1 || value > 3) {
109 + if (value < MIN_VDD2_OPP || value > MAX_VDD2_OPP) {
110 printk(KERN_ERR "vdd_opp_store: Invalid value\n");
113 diff -urN kernel-power-2.6.28/arch/arm/mach-omap2/smartreflex.c kernel-power-2.6.28.SR/arch/arm/mach-omap2/smartreflex.c
114 --- kernel-power-2.6.28/arch/arm/mach-omap2/smartreflex.c 2011-10-11 13:51:21.441301622 +0100
115 +++ kernel-power-2.6.28.SR/arch/arm/mach-omap2/smartreflex.c 2011-10-22 14:15:45.469275000 +0100
119 u32 opp1_nvalue, opp2_nvalue, opp3_nvalue, opp4_nvalue;
122 + u32 opp6_nvalue, opp7_nvalue;
123 u32 senp_mod, senn_mod;
124 void __iomem *srbase_addr;
125 void __iomem *vpbase_addr;
130 +void sr_calculate_rg(u32 rfuse, u32 gain_fuse, u32 delta_nt,
\r
131 + u32 *rnsen, u32 *sengain)
\r
134 + nadj = ((1 << (gain_fuse + 8)) / rfuse) + delta_nt;
\r
135 + cal_reciprocal(nadj, sengain, rnsen);
\r
138 +static u32 calculate_opp_nvalue(u32 opp5_nvalue, u32 delta_p, u32 delta_n)
\r
140 + u32 sen_pgain_fuse, sen_ngain_fuse, sen_prn_fuse, sen_nrn_fuse;
\r
141 + u32 sen_nrn, sen_ngain, sen_prn, sen_pgain;
\r
142 + sen_pgain_fuse = (opp5_nvalue & 0x00F0000) >> 0x14;
\r
143 + sen_ngain_fuse = (opp5_nvalue & 0x000F0000) >> 0x10;
\r
144 + sen_prn_fuse = (opp5_nvalue & 0x0000FF00) >> 0x08;
\r
145 + sen_nrn_fuse = (opp5_nvalue & 0x000000FF);
\r
146 + sr_calculate_rg(sen_nrn_fuse, sen_ngain_fuse, delta_n, &sen_nrn,
\r
148 + sr_calculate_rg(sen_prn_fuse, sen_pgain_fuse, delta_p, &sen_prn,
\r
150 + return (sen_pgain << 0x14) | (sen_ngain << 0x10)
\r
151 + | (sen_prn << 0x08) | (sen_nrn);
\r
154 static u32 cal_test_nvalue(u32 sennval, u32 senpval)
157 OMAP343X_CONTROL_FUSE_OPP2_VDD1);
158 sr->opp1_nvalue = omap_ctrl_readl(
159 OMAP343X_CONTROL_FUSE_OPP1_VDD1);
160 + if (sr->opp5_nvalue) {
\r
161 + sr->opp6_nvalue = calculate_opp_nvalue(sr->opp5_nvalue, 227, 379);
\r
162 + sr->opp7_nvalue = calculate_opp_nvalue(sr->opp5_nvalue, 434, 730);
\r
164 } else if (sr->srid == SR2) {
165 sr->senn_mod = (omap_ctrl_readl(OMAP343X_CONTROL_FUSE_SR) &
166 OMAP343X_SR2_SENNENABLE_MASK) >>
168 sr->opp3_nvalue = cal_test_nvalue(0x85b + 0x200, 0x655 + 0x200);
169 sr->opp2_nvalue = cal_test_nvalue(0x506 + 0x1a0, 0x3be + 0x1a0);
170 sr->opp1_nvalue = cal_test_nvalue(0x373 + 0x100, 0x28c + 0x100);
171 + if (sr->opp5_nvalue) {
\r
172 + sr->opp6_nvalue = calculate_opp_nvalue(sr->opp5_nvalue, 227, 379);
\r
173 + sr->opp7_nvalue = calculate_opp_nvalue(sr->opp5_nvalue, 434, 730);
\r
175 } else if (sr->srid == SR2) {
179 sr->req_opp_no = target_opp_no;
181 if (sr->srid == SR1) {
182 - switch (min(target_opp_no-1,5)) {
183 + switch (min(target_opp_no-1,7)) {
185 + nvalue_reciprocal = sr->opp7_nvalue;
\r
188 + nvalue_reciprocal = sr->opp6_nvalue;
\r
191 nvalue_reciprocal = sr->opp5_nvalue;
193 diff -urN kernel-power-2.6.28/arch/arm/mach-omap2/smartreflex.h kernel-power-2.6.28.SR/arch/arm/mach-omap2/smartreflex.h
194 --- kernel-power-2.6.28/arch/arm/mach-omap2/smartreflex.h 2011-10-11 13:51:21.441301622 +0100
195 +++ kernel-power-2.6.28.SR/arch/arm/mach-omap2/smartreflex.h 2011-10-22 13:52:40.850113000 +0100
197 ID_VDD(PRCM_VDD1) | ID_OPP_NO(0x4))
198 #define PRCM_VDD1_OPP5 (OMAP(AT_3430_ES2) | OTHER_ID_TYPE(ID_OPP) | \
199 ID_VDD(PRCM_VDD1) | ID_OPP_NO(0x5))
200 -#define PRCM_NO_VDD1_OPPS 5
201 +#define PRCM_VDD1_OPP6 (OMAP(AT_3430_ES2) | OTHER_ID_TYPE(ID_OPP) | \
\r
202 + ID_VDD(PRCM_VDD1) | ID_OPP_NO(0x6))
\r
203 +#define PRCM_VDD1_OPP7 (OMAP(AT_3430_ES2) | OTHER_ID_TYPE(ID_OPP) | \
\r
204 + ID_VDD(PRCM_VDD1) | ID_OPP_NO(0x7))
\r
205 +#define PRCM_NO_VDD1_OPPS 7
209 diff -urN kernel-power-2.6.28/arch/arm/plat-omap/include/mach/omap34xx.h kernel-power-2.6.28.SR/arch/arm/plat-omap/include/mach/omap34xx.h
210 --- kernel-power-2.6.28/arch/arm/plat-omap/include/mach/omap34xx.h 2011-10-11 13:51:21.441301622 +0100
211 +++ kernel-power-2.6.28.SR/arch/arm/plat-omap/include/mach/omap34xx.h 2011-10-22 15:52:18.063235000 +0100
213 #define VDD1_OPP3 0x3
214 #define VDD1_OPP4 0x4
215 #define VDD1_OPP5 0x5
216 +#define VDD1_OPP6 0x6
\r
217 +#define VDD1_OPP7 0x7
\r
218 +#define VDD1_OPP8 0x8
\r
219 +#define VDD1_OPP9 0x9
\r
220 +#define VDD1_OPP10 0xA
\r
221 +#define VDD1_OPP11 0xB
\r
222 +#define VDD1_OPP12 0xC
\r
223 +#define VDD1_OPP13 0xD
\r
226 #define VDD2_OPP1 0x1
228 #define VDD2_OPP3 0x3
230 #define MIN_VDD1_OPP VDD1_OPP1
231 -/*#define MAX_VDD1_OPP VDD1_OPP5*/
232 -#define MAX_VDD1_OPP 15
233 +#define MAX_VDD1_OPP VDD1_OPP13
234 #define MIN_VDD2_OPP VDD2_OPP1
235 #define MAX_VDD2_OPP VDD2_OPP3