Milhouse fanoush I see, control values in registers are really differ to acheive same result.Really asymmetric prop's.Amazing! :\
if (slot == 0) { if (!power_on) return menelaus_set_vmmc(0); switch (1 << vdd) { case MMC_VDD_33_34: case MMC_VDD_32_33: case MMC_VDD_31_32: mV = 3100; break; case MMC_VDD_30_31: mV = 3000; break; case MMC_VDD_28_29: mV = 2800; break; case MMC_VDD_19_20: case MMC_VDD_18_19: mV = 1850; break; default: BUG(); } return menelaus_set_vmmc(mV); } else { if (!power_on) return menelaus_set_vdcdc(3, 0); switch (1 << vdd) { case MMC_VDD_33_34: case MMC_VDD_32_33: mV = 3300; break; case MMC_VDD_30_31: case MMC_VDD_29_30: mV = 3000; break; case MMC_VDD_28_29: case MMC_VDD_27_28: mV = 2800; break; case MMC_VDD_24_25: case MMC_VDD_23_24: mV = 2400; break; case MMC_VDD_22_23: case MMC_VDD_21_22: mV = 2200; break; case MMC_VDD_20_21: mV = 2000; break; case MMC_VDD_19_20: case MMC_VDD_18_19: case MMC_VDD_17_18: mV = 2000; break; case MMC_VDD_150_155: case MMC_VDD_145_150: mV = 1500; break; default: BUG(); } return menelaus_set_vdcdc(3, mV);
One is SDHC in Linux kernel is not ideal.Other is that cards are capable of dying just because power dropped.This is against SDHC specs so card manufacturers are IMHO responsible for releasing flawed products here as well.