Anath, Is it sufficient to check the CAPS for voltage etc ? Now that we have a regulator framework do we need to also look at that ? Philip On Mar 3, 2011, at 1:08 PM, <subhashj@xxxxxxxxxxxxxx> <subhashj@xxxxxxxxxxxxxx> wrote: > >> -----Original Message----- >> From: Nath, Arindam [mailto:Arindam.Nath@xxxxxxx] >> Sent: Thursday, March 03, 2011 7:05 PM >> To: subhashj@xxxxxxxxxxxxxx; cjb@xxxxxxxxxx >> Cc: linux-mmc@xxxxxxxxxxxxxxx; Su, Henry; Lu, Aaron; >> anath.amd@xxxxxxxxx >> Subject: RE: [PATCH 02/12] mmc: sd: add support for signal voltage >> switch procedure >> >> Hi Subhash, >> >>> -----Original Message----- >>> From: subhashj@xxxxxxxxxxxxxx [mailto:subhashj@xxxxxxxxxxxxxx] >>> Sent: Thursday, March 03, 2011 6:46 PM >>> To: Nath, Arindam; cjb@xxxxxxxxxx >>> Cc: linux-mmc@xxxxxxxxxxxxxxx; Su, Henry; Lu, Aaron; >>> anath.amd@xxxxxxxxx >>> Subject: RE: [PATCH 02/12] mmc: sd: add support for signal voltage >>> switch procedure >>> >>> >>> >>>> -----Original Message----- >>>> From: linux-mmc-owner@xxxxxxxxxxxxxxx [mailto:linux-mmc- >>>> owner@xxxxxxxxxxxxxxx] On Behalf Of Nath, Arindam >>>> Sent: Wednesday, March 02, 2011 1:36 PM >>>> To: subhashj@xxxxxxxxxxxxxx; cjb@xxxxxxxxxx >>>> Cc: linux-mmc@xxxxxxxxxxxxxxx; Su, Henry; Lu, Aaron; >>>> anath.amd@xxxxxxxxx >>>> Subject: RE: [PATCH 02/12] mmc: sd: add support for signal voltage >>>> switch procedure >>>> >>>> Hi Subhash, >>>> >>>> >>>>> -----Original Message----- >>>>> From: subhashj@xxxxxxxxxxxxxx [mailto:subhashj@xxxxxxxxxxxxxx] >>>>> Sent: Tuesday, March 01, 2011 9:33 PM >>>>> To: Nath, Arindam; cjb@xxxxxxxxxx >>>>> Cc: linux-mmc@xxxxxxxxxxxxxxx; Su, Henry; Lu, Aaron; >>>>> anath.amd@xxxxxxxxx >>>>> Subject: RE: [PATCH 02/12] mmc: sd: add support for signal >> voltage >>>>> switch procedure >>>>> >>>>> >>>>> >>>>>> -----Original Message----- >>>>>> From: linux-mmc-owner@xxxxxxxxxxxxxxx [mailto:linux-mmc- >>>>>> owner@xxxxxxxxxxxxxxx] On Behalf Of Arindam Nath >>>>>> Sent: Tuesday, February 15, 2011 3:05 PM >>>>>> To: cjb@xxxxxxxxxx >>>>>> Cc: linux-mmc@xxxxxxxxxxxxxxx; henry.su@xxxxxxx; >>> aaron.lu@xxxxxxx; >>>>>> anath.amd@xxxxxxxxx; Arindam Nath >>>>>> Subject: [PATCH 02/12] mmc: sd: add support for signal voltage >>>> switch >>>>>> procedure >>>>>> >>>>>> Host Controller v3.00 adds another Capabilities register. We >> can >>>>>> directly read this register without any version checking since >>> the >>>>>> new register bits will be considred as reserved in older >>>> controllers, >>>>>> and will be read as 0. Apart from other things, this new >> register >>>>>> indicates whether the Host Controller supports SDR50, SDR104, >> and >>>>>> DDR50 UHS-I modes. So depending on the host support, we set >>>>>> the corresponding MMC_CAP_* flags. One more new register. Host >>>>> Control2 >>>>>> is added in v3.00, which is used during Signal Voltage Switch >>>>> prcedure >>>>>> described below. >>>>>> >>>>>> Since as per v3.00 spec, UHS-I supported hosts should set S18R >> to >>>> 1, >>>>>> we set S18R (bit 24) of OCR before sending ACMD41. We also need >>> to >>>>> set >>>>>> XPC (bit 28) of OCR in case the host can supply >150mA. This >>>> support >>>>> is >>>>>> indicated by the Maximum Current Capabilities register of the >>> Host >>>>>> Controller. >>>>>> >>>>>> If the response of ACMD41 has both CCS and S18A set, we start >> the >>>>>> signal voltage switch procedure, which if successfull, will >>> switch >>>>>> the card from 3.3V signalling to 1.8V signalling. Signal >> voltage >>>>>> switch procedure adds support for a new command CMD11 in the >>>> Physical >>>>>> Layer Spec v3.01. As part of this procedure, we need to set >> 1.8V >>>>>> Signalling >>>>>> Enable (bit 3) of Host Control2 register, which if remains set >>>> after >>>>>> 5ms, >>>>>> means the switch to 1.8V signalling is successfull. Otherwise, >> we >>>>> clear >>>>>> bit 24 of OCR and retry the initialization sequence. >>>>>> >>>>>> Signed-off-by: Arindam Nath <arindam.nath@xxxxxxx> >>>>>> --- >>>>>> drivers/mmc/core/sd.c | 37 ++++++++++- >>>>>> drivers/mmc/core/sd_ops.c | 25 ++++++++ >>>>>> drivers/mmc/core/sd_ops.h | 1 + >>>>>> drivers/mmc/host/sdhci.c | 147 >>>>>> +++++++++++++++++++++++++++++++++++++++++---- >>>>>> drivers/mmc/host/sdhci.h | 18 +++++- >>>>>> include/linux/mmc/host.h | 8 +++ >>>>>> include/linux/mmc/sd.h | 1 + >>>>>> 7 files changed, 219 insertions(+), 18 deletions(-) >>>>>> >>>>>> diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c >>>>>> index b3f8a3c..e968d5c 100644 >>>>>> --- a/drivers/mmc/core/sd.c >>>>>> +++ b/drivers/mmc/core/sd.c >>>>>> @@ -408,6 +408,7 @@ struct device_type sd_type = { >>>>>> int mmc_sd_get_cid(struct mmc_host *host, u32 ocr, u32 *cid) >>>>>> { >>>>>> int err; >>>>>> + u32 rocr; >>>>>> >>>>>> /* >>>>>> * Since we're changing the OCR value, we seem to >>>>>> @@ -427,10 +428,25 @@ int mmc_sd_get_cid(struct mmc_host *host, >>> u32 >>>>>> ocr, u32 *cid) >>>>>> if (!err) >>>>>> ocr |= 1 << 30; >>>>>> >>>>>> - err = mmc_send_app_op_cond(host, ocr, NULL); >>>>>> + /* If the host can supply more than 150mA, XPC should be >> set >>> to >>>>>> 1. */ >>>>>> + if (host->caps & (MMC_CAP_SET_XPC_330 | MMC_CAP_SET_XPC_300 >> | >>>>>> + MMC_CAP_SET_XPC_180)) >>>>>> + ocr |= 1 << 28; >>>>>> + >>>>> >>>>> Why do you need MMC_CAP_SET_XPC_300 here? MMC_CAP_SET_XPC_330 & >>>>> MMC_CAP_SET_XPC_180 is not enough? >>>> >>>> According to the Host Controller Spec v3.00, section 2.2.26: >>>> >>>> "If a Host System can afford more than 150mA, Host Driver set XPC >> to >>>> 1." >>>> >>>> Now since >150mA can be set for 1.8V, 3.0V and 3.3V, the above >>>> condition checks for all these cases. >>>> >>> >>> 3.0v and 3.3v is part of High voltage range supported by card (2.7v- >>> 3.3v). >>> Now if host supports any voltage from this range with 150ma driver >>> strength >>> then I think only config say MMC_CAP_SET_XPC_HV (high voltage) should >>> be set >>> by >>> host and then only one check required here. Does it make sense? >> >> You have a valid point here. But I kept the configs *XPC_300 and >> *XPC_330 separate so that in future if someone wants to base his/her >> code on either of the flags being set, but not both, they can easily do >> so. If you still think it is a good idea to have a common *CAP for both >> of them, please let me know. I will modify the code accordingly. >> > > Ok. it's fine. you keep them as 2 separate caps. > > Thanks, > Subhash > >> Thanks, >> Arindam > > > -- > 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 -- 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