Hi Mark, > > > + if (ldo->get_power_source) > > + power_source = ldo->get_power_source(reg); > > + > > + switch (power_source) { > > + case HW_POWER_LINREG_DCDC_OFF: > > + case HW_POWER_LINREG_DCDC_READY: > > + case HW_POWER_EXTERNAL_SOURCE_5V: > > + usleep_range(1000, 2000); > > + return 0; > > + } > > I'd expect the switch to be in the if here? yes, that's possible too. > > > + > > + usleep_range(15, 20); > > + start = jiffies; > > + while (1) { > > + if (readl(ldo->status_addr) & BM_POWER_STS_DC_OK) > > + return 0; > > + > > + if (time_after(jiffies, start + msecs_to_jiffies(20))) > > + break; > > + > > + schedule(); > > + } > > So, this isn't actually quite a busy wait because we do a schedule() > rather than a cpu_relax() but still it could devolve into that - 20ms > seems a long time to burn doing that. If we're expecting this to finish > very quickly can we do an initial busy wait then fall back to something > with an actual sleep or soemthing? We will need to keep the initial usleep_range(). So do you think of the following: 1. usleep_range 2. busy_wait for BM_POWER_STS_DC_OK 3. msleep (for the timeout case) Stefan -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html