2012/11/22 Philip Rakity <prakity@xxxxxxxxxx>: > > On Nov 22, 2012, at 11:44 AM, Kevin Liu <keyuan.liu@xxxxxxxxx> wrote: > >> 2012/11/22 Philip Rakity <prakity@xxxxxxxxxx>: >>> >>> On Nov 22, 2012, at 11:26 AM, Kevin Liu <keyuan.liu@xxxxxxxxx> wrote: >>> >>>>> From: linux-mmc-owner@xxxxxxxxxxxxxxx [mailto:linux-mmc-owner@xxxxxxxxxxxxxxx] On Behalf Of Philip Rakity >>>>> Sent: Wednesday, November 21, 2012 8:42 PM >>>>> To: linux-mmc@xxxxxxxxxxxxxxx >>>>> Subject: RFC: eMMC >>>>> >>>>> Recently there have been a number of patches to sdhci.c and discussions on regulators for folks using eMMC. >>>>> >>>>> I would appreciate any feedback. The opinions below are my own. >>>>> >>>>> eMMC is a hardware device. It is NOT voltage configurable in any real sense other then turning on/off the voltage, >>>>> The board designer is supposed to read the data sheet and hook things up. It is somewhat unclear to me how having a dummy regulator really helps. >>>>> >>>> But if the system enabled dummy regulator, regulator_get will return a >>>> dummy regulator if vmmc/vmmcq not found. >>>> So we had better take dummy regulator into consideration. >>>> >>>>> Given that -- voltage checking for vmmc or vmmcq is not meaningful. eMMC either works or does not. >>>>> The testing for vccq/vcc has no meaning since it cannot be changed. In fact the samsung eMMC we used for DDR worked at 2.8v. >>>> >>>> You set the vmmcq regulator to 2.8v while enable the 1.8v signaling >>>> enable bit in host control 2 register. >>>> It's mismatch in logic. But it's good to make DDR50 work under 2.8v(3v). >>>> The reason for this working is the 1.8v signaling enable bit does NOT >>>> control actual signal voltage at all. >>>> In your case, although the 1.8v bit is set, the signal voltage for >>>> both mmc host and emmc chip vmmcq is still 2.8v. Because the actual >>>> signal voltage is controlled by external regulator whose voltage is >>>> not changed. >>>> So DDR50 can keep working since DDR50 support both 1.8v and 3v. >>> >>> There is no mismatch in logic. The samsung datas sheet says it will work. >>> No external regulators are used. vmmc and vmmvq are not NULL. >> >> The mismatch here I mean you set 1.8v as signal voltage but actually >> you use 2.8v. For the host controller, it's mismatch. >> > > This is why I added the callback in shdci.c to handle broken controllers. > I think it's unnecessary to add a callback function. The 1.8v bit setting can be added in sdhci.c directly since it's a must for DDR50 according to the SD host spec. And for sd/sdio card we need not set the 1.8v bit here since signal_voltage_switch will set this bit. >> I don't understand "No external regulators are used. vmmc and vmmvq >> are not NULL". >> vmmc and vmmcq regulator exist or not? >> >>>> >>>>> Given this -- we have a chicken and egg situation in sdhci.c >>>>> if we are in this code and the kernel was on eMMC obviously the system is working. >>>>> If we booted the kernel from say SPI then hopefully the boot code has set up the voltage rails correctly. >>>>> I would argue that for eMMC the regulator structure should not be exposed to sdhci.c and everything would just work. >>>>> >>>> The easy way is just not register vmmc/vmmcq regulator for emmc, right? >>>> >>>>> SD/UHS cards are a completely different matter and regulators make complete sense. >>> > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html