It doesn't though, it actually runs at the nominal voltage which is the minimum voltage required to run the worst sample of silicon they manufactured. There's also this in voltage.c: /* VDD1 */ static struct omap_volt_data omap34xx_vdd1_volt_data[] = { {.u_volt_nominal = 975000, .sr_errminlimit = 0xF4, .vp_errorgain = 0x0C}, {.u_volt_nominal = 1075000, .sr_errminlimit = 0xF4, .vp_errorgain = 0x0C}, {.u_volt_nominal = 1200000, .sr_errminlimit = 0xF9, .vp_errorgain = 0x18}, {.u_volt_nominal = 1270000, .sr_errminlimit = 0xF9, .vp_errorgain = 0x18}, {.u_volt_nominal = 1350000, .sr_errminlimit = 0xF9, .vp_errorgain = 0x18}, }; I think I was wrong about the dyn_margin though. What it does it start at the nominal voltage and reduce it until it hits errminlimit, then raises it up 50k. Anyways, on my phone, if i don't even touch anything and just read the data I get 1375000 <<max 1225000 <<nominal 50000 << margin 1175000 << optimized I thought it's taking nominal - 50k to get optimized, but its actually taking optimized + 50k to get nominal. I'll try changing the errlimit to like 1 and see what happens.