Re: FW: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-12-04 Thread Marek Szyprowski

Hello,

On 11/30/2012 5:48 PM, Chris Ball wrote:

On Tue, Nov 20 2012, Marek Szyprowski wrote:
 The problem with dummy regulator is the fact that it can be enabled only
 globally for all devices in the system. I think that the best solution
 would be to introduce regulator_can_change_voltage() as Mark suggested.
 I will post patches soon.

Does this mean that I shouldn't merge either yours or Kevin's patch for
3.8, while we wait for this?  Any ETA on it?


I've just posted an updated patches to solve those issues. I'm sorry for the
delay as I was terribly busy with other stuff. Kevin's patch is still
required and it should stay in the tree because it indeed fixes other, in
some cases related issues.

However my earlier patch mmc: sdhci: apply voltage range check only for
non-fixed regulators can be replaced with the new patches from the
[PATCH v2 0/3] Fix fixed regulators support thread posted a few minutes
ago (those patches are based on mmc-next branch).

Best regards
--
Marek Szyprowski
Samsung Poland RD Center


--
To unsubscribe from this list: send the line unsubscribe linux-mmc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: FW: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-30 Thread Chris Ball
Hi Marek,

On Tue, Nov 20 2012, Marek Szyprowski wrote:
 The problem with dummy regulator is the fact that it can be enabled only
 globally for all devices in the system. I think that the best solution
 would be to introduce regulator_can_change_voltage() as Mark suggested.
 I will post patches soon.

Does this mean that I shouldn't merge either yours or Kevin's patch for
3.8, while we wait for this?  Any ETA on it?

Thanks very much,

- Chris.
-- 
Chris Ball   c...@laptop.org   http://printf.net/
One Laptop Per Child
--
To unsubscribe from this list: send the line unsubscribe linux-mmc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-20 Thread Marek Szyprowski


On 11/13/2012 10:23 PM, Philip Rakity wrote:

Hi Marek,

Is the regulator dedicated ?  or is it shared ?   Is it used for eMMC ?

If it cannot be turned off -- then just don't list it in the regulators list 
for vmmc.

If it CAN be turned off then need to get back to you.


It is dedicated to eMMC device and can be turned off. Patch mmc: sdhci: 
apply
voltage range check only for non-fixed regulators restored sdhci to 
working state
after merging the regulator fix. However there are lots of error 
messages from sdhci

driver:
s3c-sdhci s3c-sdhci.0: could not set regulator OCR (-1)

The only remaining problem is sdhci driver operation with dummy 
regulator. Right now
it simply fails to initialize if dummy regulator is enabled. Do you have 
any idea how

to fix it properly?

Best regards
--
Marek Szyprowski
Samsung Poland RD Center


--
To unsubscribe from this list: send the line unsubscribe linux-mmc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: FW: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-20 Thread Kevin Liu
2012/11/20 Marek Szyprowski m.szyprow...@samsung.com:
 Hello,


 On 11/14/2012 8:11 AM, Kevin Liu wrote:

  From: linux-mmc-ow...@vger.kernel.org
  [mailto:linux-mmc-ow...@vger.kernel.org] On Behalf Of Chris Ball
  Sent: Tuesday, November 13, 2012 10:14 PM
  To: Marek Szyprowski
  Cc: linux-ker...@vger.kernel.org; linux-mmc@vger.kernel.org; Kyungmin
  Park; Mark Brown; Liam Girdwood; Philip Rakity
  Subject: Re: [PATCH v2] mmc: sdhci: apply voltage range check only for
  non-fixed regulators
 
  Hi,
 
  On Tue, Nov 13 2012, Marek Szyprowski wrote:
  On Tue, Nov 13 2012, Marek Szyprowski wrote:
   Fixed regulators cannot change their voltage, so disable all voltage
   range checking for them, otherwise the driver fails to operate with
   fixed regulators. Up to now it worked only by luck, because
   regulator_is_supported_voltage() function returned incorrect values.
   Commit regulator: fix voltage check in
   regulator_is_supported_voltage()
   fixed that function and now additional check is needed for fixed
   regulators.
  
   Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
   ---
drivers/mmc/host/sdhci.c |2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
  
   diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
   index c7851c0..6f6534e 100644
   --- a/drivers/mmc/host/sdhci.c
   +++ b/drivers/mmc/host/sdhci.c
   @@ -2923,7 +2923,7 @@ int sdhci_add_host(struct sdhci_host *host)
  regulator_enable(host-vmmc);
  
#ifdef CONFIG_REGULATOR
   -  if (host-vmmc) {
   +  if (host-vmmc  regulator_count_voltages(host-vmmc)  1) {
  ret = regulator_is_supported_voltage(host-vmmc, 330,
  330);
  if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))
 
  Thanks for the longer explanation.  I'm still missing something,
  though;
  what's wrong with running the check as it was with the new regulator
  code?
  (I haven't tried it yet.)
 
  #ifdef CONFIG_REGULATOR
   if (host-vmmc) {
   ret = regulator_is_supported_voltage(host-vmmc,
  330,
   330);
   if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))
   caps[0] = ~SDHCI_CAN_VDD_330;
   ret = regulator_is_supported_voltage(host-vmmc,
  300,
   300);
   if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_300)))
   caps[0] = ~SDHCI_CAN_VDD_300;
   ret = regulator_is_supported_voltage(host-vmmc,
  180,
   180);
   if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_180)))
   caps[0] = ~SDHCI_CAN_VDD_180;
   }
  #endif /* CONFIG_REGULATOR */
 
  The point is to remove unsupported voltages, so if someone sets up a
  fixed regulator at 330, all of the other caps are disabled.  Why
  wouldn't that work without this change, and how are we supposed to
  remove those caps on a fixed regulator after your patchset?
 
  Thanks, sorry if I'm missing something obvious,
 
  On our boards eMMC is connected to fixed 2.8V regulator, what results
  in
  clearing all available voltages and fail. The same situation is when
  one
  enable dummy regulator and try to use sdhci with it. My patch fixes
  this
  and restores sdhci to working state as it was before (before fixing
  regulator regulator_is_supported_voltage() function and earlier when
  MMC_BROKEN_VOLATGE capability was used).
 
  I see.  Sounds like a separate bug -- Philip (or anyone else), any
  idea how we should be treating eMMCs with a fixed voltage here?
 

 I think we should check the voltage range rather than the voltage
 point accoring to the spec.
 Otherwise some valid voltage like 2.8v will be discarded by mistake.
 My below old patch aim to fix this issue.
 How do you think?

 -Original Message-
 From: Kevin Liu [mailto:keyuan@gmail.com]
 Sent: Friday, September 28, 2012 3:56 PM
 To: linux-mmc@vger.kernel.org; c...@laptop.org; pie...@ossman.eu;
 ulf.hans...@linaro.org; Zhangfei Gao
 Cc: Haojian Zhuang; Chao Xie; Philip Rakity; Kevin Liu; Jialing Fu
 Subject: [PATCH v5 03/13] mmc: sdhci: use regulator min/max voltage
 range according to spec

 From: Kevin Liu kl...@marvell.com

 For regulator vmmc/vmmcq, use voltage range as below
 3.3v/3.0v: (2.7v, 3.6v)
 1.8v: (1.7v, 1.95v)
 Original code use the specific value which may fail in regulator
 driver if it does NOT support the specific voltage.

 Signed-off-by: Jialing Fu j...@marvell.com
 Signed-off-by: Kevin Liu kl...@marvell.com


 Tested-by: Marek Szyprowski m.szyprow...@samsung.com

 This patch restores sdhci devices to working state on Samsung boards
 (tested on GONI and UniversalC210) after merging regulator: fix voltage
 check in regulator_is_supported_voltage() patch to v3.7-rc6 (commit
 f0f98b19e23d4426ca185e3d4ca80e6aff5ef51b). Would be great to have it
 merged before the final v3.7 is out

Re: FW: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-20 Thread Marek Szyprowski

Hello,

On 11/20/2012 9:59 AM, Kevin Liu wrote:

2012/11/20 Marek Szyprowski m.szyprow...@samsung.com:
 Hello,


 On 11/14/2012 8:11 AM, Kevin Liu wrote:

  From: linux-mmc-ow...@vger.kernel.org
  [mailto:linux-mmc-ow...@vger.kernel.org] On Behalf Of Chris Ball
  Sent: Tuesday, November 13, 2012 10:14 PM
  To: Marek Szyprowski
  Cc: linux-ker...@vger.kernel.org; linux-mmc@vger.kernel.org; Kyungmin
  Park; Mark Brown; Liam Girdwood; Philip Rakity
  Subject: Re: [PATCH v2] mmc: sdhci: apply voltage range check only for
  non-fixed regulators
 
  Hi,
 
  On Tue, Nov 13 2012, Marek Szyprowski wrote:
  On Tue, Nov 13 2012, Marek Szyprowski wrote:
   Fixed regulators cannot change their voltage, so disable all voltage
   range checking for them, otherwise the driver fails to operate with
   fixed regulators. Up to now it worked only by luck, because
   regulator_is_supported_voltage() function returned incorrect values.
   Commit regulator: fix voltage check in
   regulator_is_supported_voltage()
   fixed that function and now additional check is needed for fixed
   regulators.
  
   Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
   ---
drivers/mmc/host/sdhci.c |2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
  
   diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
   index c7851c0..6f6534e 100644
   --- a/drivers/mmc/host/sdhci.c
   +++ b/drivers/mmc/host/sdhci.c
   @@ -2923,7 +2923,7 @@ int sdhci_add_host(struct sdhci_host *host)
  regulator_enable(host-vmmc);
  
#ifdef CONFIG_REGULATOR
   -  if (host-vmmc) {
   +  if (host-vmmc  regulator_count_voltages(host-vmmc)  1) {
  ret = regulator_is_supported_voltage(host-vmmc, 330,
  330);
  if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))
 
  Thanks for the longer explanation.  I'm still missing something,
  though;
  what's wrong with running the check as it was with the new regulator
  code?
  (I haven't tried it yet.)
 
  #ifdef CONFIG_REGULATOR
   if (host-vmmc) {
   ret = regulator_is_supported_voltage(host-vmmc,
  330,
   330);
   if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))
   caps[0] = ~SDHCI_CAN_VDD_330;
   ret = regulator_is_supported_voltage(host-vmmc,
  300,
   300);
   if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_300)))
   caps[0] = ~SDHCI_CAN_VDD_300;
   ret = regulator_is_supported_voltage(host-vmmc,
  180,
   180);
   if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_180)))
   caps[0] = ~SDHCI_CAN_VDD_180;
   }
  #endif /* CONFIG_REGULATOR */
 
  The point is to remove unsupported voltages, so if someone sets up a
  fixed regulator at 330, all of the other caps are disabled.  Why
  wouldn't that work without this change, and how are we supposed to
  remove those caps on a fixed regulator after your patchset?
 
  Thanks, sorry if I'm missing something obvious,
 
  On our boards eMMC is connected to fixed 2.8V regulator, what results
  in
  clearing all available voltages and fail. The same situation is when
  one
  enable dummy regulator and try to use sdhci with it. My patch fixes
  this
  and restores sdhci to working state as it was before (before fixing
  regulator regulator_is_supported_voltage() function and earlier when
  MMC_BROKEN_VOLATGE capability was used).
 
  I see.  Sounds like a separate bug -- Philip (or anyone else), any
  idea how we should be treating eMMCs with a fixed voltage here?
 

 I think we should check the voltage range rather than the voltage
 point accoring to the spec.
 Otherwise some valid voltage like 2.8v will be discarded by mistake.
 My below old patch aim to fix this issue.
 How do you think?

 -Original Message-
 From: Kevin Liu [mailto:keyuan@gmail.com]
 Sent: Friday, September 28, 2012 3:56 PM
 To: linux-mmc@vger.kernel.org; c...@laptop.org; pie...@ossman.eu;
 ulf.hans...@linaro.org; Zhangfei Gao
 Cc: Haojian Zhuang; Chao Xie; Philip Rakity; Kevin Liu; Jialing Fu
 Subject: [PATCH v5 03/13] mmc: sdhci: use regulator min/max voltage
 range according to spec

 From: Kevin Liu kl...@marvell.com

 For regulator vmmc/vmmcq, use voltage range as below
 3.3v/3.0v: (2.7v, 3.6v)
 1.8v: (1.7v, 1.95v)
 Original code use the specific value which may fail in regulator
 driver if it does NOT support the specific voltage.

 Signed-off-by: Jialing Fu j...@marvell.com
 Signed-off-by: Kevin Liu kl...@marvell.com


 Tested-by: Marek Szyprowski m.szyprow...@samsung.com

 This patch restores sdhci devices to working state on Samsung boards
 (tested on GONI and UniversalC210) after merging regulator: fix voltage
 check in regulator_is_supported_voltage() patch to v3.7-rc6 (commit
 f0f98b19e23d4426ca185e3d4ca80e6aff5ef51b). Would be great

Re: FW: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-20 Thread Kevin Liu
2012/11/20 Marek Szyprowski m.szyprow...@samsung.com:
 Hello,


 On 11/20/2012 9:59 AM, Kevin Liu wrote:

 2012/11/20 Marek Szyprowski m.szyprow...@samsung.com:
  Hello,
 
 
  On 11/14/2012 8:11 AM, Kevin Liu wrote:
 
   From: linux-mmc-ow...@vger.kernel.org
   [mailto:linux-mmc-ow...@vger.kernel.org] On Behalf Of Chris Ball
   Sent: Tuesday, November 13, 2012 10:14 PM
   To: Marek Szyprowski
   Cc: linux-ker...@vger.kernel.org; linux-mmc@vger.kernel.org; Kyungmin
   Park; Mark Brown; Liam Girdwood; Philip Rakity
   Subject: Re: [PATCH v2] mmc: sdhci: apply voltage range check only
   for
   non-fixed regulators
  
   Hi,
  
   On Tue, Nov 13 2012, Marek Szyprowski wrote:
   On Tue, Nov 13 2012, Marek Szyprowski wrote:
Fixed regulators cannot change their voltage, so disable all
voltage
range checking for them, otherwise the driver fails to operate
with
fixed regulators. Up to now it worked only by luck, because
regulator_is_supported_voltage() function returned incorrect
values.
Commit regulator: fix voltage check in
regulator_is_supported_voltage()
fixed that function and now additional check is needed for fixed
regulators.
   
Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
---
 drivers/mmc/host/sdhci.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
   
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index c7851c0..6f6534e 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2923,7 +2923,7 @@ int sdhci_add_host(struct sdhci_host *host)
   regulator_enable(host-vmmc);
   
 #ifdef CONFIG_REGULATOR
-  if (host-vmmc) {
+  if (host-vmmc  regulator_count_voltages(host-vmmc)  1) {
   ret = regulator_is_supported_voltage(host-vmmc,
330,
   330);
   if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))
  
   Thanks for the longer explanation.  I'm still missing something,
   though;
   what's wrong with running the check as it was with the new
   regulator
   code?
   (I haven't tried it yet.)
  
   #ifdef CONFIG_REGULATOR
if (host-vmmc) {
ret = regulator_is_supported_voltage(host-vmmc,
   330,
330);
if ((ret = 0) || (!(caps[0] 
   SDHCI_CAN_VDD_330)))
caps[0] = ~SDHCI_CAN_VDD_330;
ret = regulator_is_supported_voltage(host-vmmc,
   300,
300);
if ((ret = 0) || (!(caps[0] 
   SDHCI_CAN_VDD_300)))
caps[0] = ~SDHCI_CAN_VDD_300;
ret = regulator_is_supported_voltage(host-vmmc,
   180,
180);
if ((ret = 0) || (!(caps[0] 
   SDHCI_CAN_VDD_180)))
caps[0] = ~SDHCI_CAN_VDD_180;
}
   #endif /* CONFIG_REGULATOR */
  
   The point is to remove unsupported voltages, so if someone sets up
   a
   fixed regulator at 330, all of the other caps are disabled.
   Why
   wouldn't that work without this change, and how are we supposed to
   remove those caps on a fixed regulator after your patchset?
  
   Thanks, sorry if I'm missing something obvious,
  
   On our boards eMMC is connected to fixed 2.8V regulator, what
   results
   in
   clearing all available voltages and fail. The same situation is when
   one
   enable dummy regulator and try to use sdhci with it. My patch fixes
   this
   and restores sdhci to working state as it was before (before fixing
   regulator regulator_is_supported_voltage() function and earlier when
   MMC_BROKEN_VOLATGE capability was used).
  
   I see.  Sounds like a separate bug -- Philip (or anyone else), any
   idea how we should be treating eMMCs with a fixed voltage here?
  
 
  I think we should check the voltage range rather than the voltage
  point accoring to the spec.
  Otherwise some valid voltage like 2.8v will be discarded by mistake.
  My below old patch aim to fix this issue.
  How do you think?
 
  -Original Message-
  From: Kevin Liu [mailto:keyuan@gmail.com]
  Sent: Friday, September 28, 2012 3:56 PM
  To: linux-mmc@vger.kernel.org; c...@laptop.org; pie...@ossman.eu;
  ulf.hans...@linaro.org; Zhangfei Gao
  Cc: Haojian Zhuang; Chao Xie; Philip Rakity; Kevin Liu; Jialing Fu
  Subject: [PATCH v5 03/13] mmc: sdhci: use regulator min/max voltage
  range according to spec
 
  From: Kevin Liu kl...@marvell.com
 
  For regulator vmmc/vmmcq, use voltage range as below
  3.3v/3.0v: (2.7v, 3.6v)
  1.8v: (1.7v, 1.95v)
  Original code use the specific value which may fail in regulator
  driver if it does NOT support the specific voltage.
 
  Signed-off-by: Jialing Fu j...@marvell.com
  Signed-off-by: Kevin Liu kl...@marvell.com
 
 
  Tested-by: Marek Szyprowski m.szyprow...@samsung.com
 
  This patch restores sdhci devices to working state

Re: FW: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-20 Thread Marek Szyprowski

Hello,

On 11/20/2012 12:36 PM, Kevin Liu wrote:

2012/11/20 Marek Szyprowski m.szyprow...@samsung.com:
 On 11/20/2012 9:59 AM, Kevin Liu wrote:
 2012/11/20 Marek Szyprowski m.szyprow...@samsung.com:
  On 11/14/2012 8:11 AM, Kevin Liu wrote:
 
   From: linux-mmc-ow...@vger.kernel.org
   [mailto:linux-mmc-ow...@vger.kernel.org] On Behalf Of Chris Ball
   Sent: Tuesday, November 13, 2012 10:14 PM
   To: Marek Szyprowski
   Cc: linux-ker...@vger.kernel.org; linux-mmc@vger.kernel.org; Kyungmin
   Park; Mark Brown; Liam Girdwood; Philip Rakity
   Subject: Re: [PATCH v2] mmc: sdhci: apply voltage range check only
   for non-fixed regulators
   On Tue, Nov 13 2012, Marek Szyprowski wrote:
   On Tue, Nov 13 2012, Marek Szyprowski wrote:
Fixed regulators cannot change their voltage, so disable all
voltage
range checking for them, otherwise the driver fails to operate
with
fixed regulators. Up to now it worked only by luck, because
regulator_is_supported_voltage() function returned incorrect
values.
Commit regulator: fix voltage check in
regulator_is_supported_voltage()
fixed that function and now additional check is needed for fixed
regulators.
   
Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
---
 drivers/mmc/host/sdhci.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
   
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index c7851c0..6f6534e 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2923,7 +2923,7 @@ int sdhci_add_host(struct sdhci_host *host)
   regulator_enable(host-vmmc);
   
 #ifdef CONFIG_REGULATOR
-  if (host-vmmc) {
+  if (host-vmmc  regulator_count_voltages(host-vmmc)  1) {
   ret = regulator_is_supported_voltage(host-vmmc,
330,
   330);
   if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))
  
   Thanks for the longer explanation.  I'm still missing something,
   though;
   what's wrong with running the check as it was with the new
   regulator
   code?
   (I haven't tried it yet.)
  
   #ifdef CONFIG_REGULATOR
if (host-vmmc) {
ret = regulator_is_supported_voltage(host-vmmc,
   330,
330);
if ((ret = 0) || (!(caps[0] 
   SDHCI_CAN_VDD_330)))
caps[0] = ~SDHCI_CAN_VDD_330;
ret = regulator_is_supported_voltage(host-vmmc,
   300,
300);
if ((ret = 0) || (!(caps[0] 
   SDHCI_CAN_VDD_300)))
caps[0] = ~SDHCI_CAN_VDD_300;
ret = regulator_is_supported_voltage(host-vmmc,
   180,
180);
if ((ret = 0) || (!(caps[0] 
   SDHCI_CAN_VDD_180)))
caps[0] = ~SDHCI_CAN_VDD_180;
}
   #endif /* CONFIG_REGULATOR */
  
   The point is to remove unsupported voltages, so if someone sets up
   a
   fixed regulator at 330, all of the other caps are disabled.
   Why
   wouldn't that work without this change, and how are we supposed to
   remove those caps on a fixed regulator after your patchset?
  
   Thanks, sorry if I'm missing something obvious,
  
   On our boards eMMC is connected to fixed 2.8V regulator, what
   results
   in
   clearing all available voltages and fail. The same situation is when
   one
   enable dummy regulator and try to use sdhci with it. My patch fixes
   this
   and restores sdhci to working state as it was before (before fixing
   regulator regulator_is_supported_voltage() function and earlier when
   MMC_BROKEN_VOLATGE capability was used).
  
   I see.  Sounds like a separate bug -- Philip (or anyone else), any
   idea how we should be treating eMMCs with a fixed voltage here?
  
 
  I think we should check the voltage range rather than the voltage
  point accoring to the spec.
  Otherwise some valid voltage like 2.8v will be discarded by mistake.
  My below old patch aim to fix this issue.
  How do you think?
 
  -Original Message-
  From: Kevin Liu [mailto:keyuan@gmail.com]
  Sent: Friday, September 28, 2012 3:56 PM
  To: linux-mmc@vger.kernel.org; c...@laptop.org; pie...@ossman.eu;
  ulf.hans...@linaro.org; Zhangfei Gao
  Cc: Haojian Zhuang; Chao Xie; Philip Rakity; Kevin Liu; Jialing Fu
  Subject: [PATCH v5 03/13] mmc: sdhci: use regulator min/max voltage
  range according to spec
 
  From: Kevin Liu kl...@marvell.com
 
  For regulator vmmc/vmmcq, use voltage range as below
  3.3v/3.0v: (2.7v, 3.6v)
  1.8v: (1.7v, 1.95v)
  Original code use the specific value which may fail in regulator
  driver if it does NOT support the specific voltage.
 
  Signed-off-by: Jialing Fu j...@marvell.com
  Signed-off-by: Kevin Liu kl...@marvell.com
 
 
  Tested-by: Marek Szyprowski m.szyprow...@samsung.com
 
  This patch restores sdhci devices

Re: FW: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-20 Thread Chris Ball
Hi,

On Tue, Nov 20 2012, Marek Szyprowski wrote:
   Subject: [PATCH v5 03/13] mmc: sdhci: use regulator min/max voltage
   range according to spec
  
   From: Kevin Liu kl...@marvell.com
  
   For regulator vmmc/vmmcq, use voltage range as below
   3.3v/3.0v: (2.7v, 3.6v)
   1.8v: (1.7v, 1.95v)
   Original code use the specific value which may fail in regulator
   driver if it does NOT support the specific voltage.
  
   Signed-off-by: Jialing Fu j...@marvell.com
   Signed-off-by: Kevin Liu kl...@marvell.com
  
  
   Tested-by: Marek Szyprowski m.szyprow...@samsung.com
  
   This patch restores sdhci devices to working state on Samsung boards
   (tested on GONI and UniversalC210) after merging regulator: fix voltage
   check in regulator_is_supported_voltage() patch to v3.7-rc6 (commit
   f0f98b19e23d4426ca185e3d4ca80e6aff5ef51b). Would be great to have it
   merged before the final v3.7 is out.
  
  Marek,
 
  thanks a lot for the verification!
  And your patch mmc: sdhci: apply voltage range check only for
  non-fixed regulators (commit
  d5b5205f2d480a47863dda0772d2d9dc47c2b51b, which has been merged in
  mmc-next) can be reverted if this patch merged?
 
 
  Yes, it can be replaced with it, although there is still an issue that need
  to be resolved somehow. Right now SDHCI driver fails to initialize if
  support
  for dummy regulator is enabled.
 
 Then I think the dummy issue can be resolved with your patch merged
 and if you can just update your patch from
   regulator_count_voltages(host-vmmc)  1
 to
   regulator_count_voltages(host-vmmc)  0
 to let fix regulator work.

 regulator_count_voltages() returns 1 for both fixed regulators and for
 virtual dummy regulator, so the above change makes no sense.

 However I was so focused on fixing the 2.8V supply case that I missed the
 fact that my mmc: sdhci: apply voltage range check only for non-fixed
 regulators patch also fixed the dummy regulator case.

 The conclusion is that applying both patches should finally fix the
 regulator issues with for the Samsung boards (2.8V supply for eMMC) and
 'dummy-regulators' cases.

Thanks, I've pushed v5 of mmc: sdhci: use regulator min/max voltage
range according to spec to mmc-next for 3.7 with Marek's Tested-by now.

- Chris.
-- 
Chris Ball   c...@laptop.org   http://printf.net/
One Laptop Per Child
--
To unsubscribe from this list: send the line unsubscribe linux-mmc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: FW: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-20 Thread Kevin Liu
2012/11/20 Marek Szyprowski m.szyprow...@samsung.com:
 Hello,


 On 11/20/2012 12:36 PM, Kevin Liu wrote:

 2012/11/20 Marek Szyprowski m.szyprow...@samsung.com:
  On 11/20/2012 9:59 AM, Kevin Liu wrote:
  2012/11/20 Marek Szyprowski m.szyprow...@samsung.com:
   On 11/14/2012 8:11 AM, Kevin Liu wrote:
  
From: linux-mmc-ow...@vger.kernel.org
[mailto:linux-mmc-ow...@vger.kernel.org] On Behalf Of Chris Ball
Sent: Tuesday, November 13, 2012 10:14 PM
To: Marek Szyprowski
Cc: linux-ker...@vger.kernel.org; linux-mmc@vger.kernel.org;
Kyungmin
Park; Mark Brown; Liam Girdwood; Philip Rakity
Subject: Re: [PATCH v2] mmc: sdhci: apply voltage range check only
for non-fixed regulators
On Tue, Nov 13 2012, Marek Szyprowski wrote:
On Tue, Nov 13 2012, Marek Szyprowski wrote:
 Fixed regulators cannot change their voltage, so disable all
 voltage
 range checking for them, otherwise the driver fails to operate
 with
 fixed regulators. Up to now it worked only by luck, because
 regulator_is_supported_voltage() function returned incorrect
 values.
 Commit regulator: fix voltage check in
 regulator_is_supported_voltage()
 fixed that function and now additional check is needed for
 fixed
 regulators.

 Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
 ---
  drivers/mmc/host/sdhci.c |2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/drivers/mmc/host/sdhci.c
 b/drivers/mmc/host/sdhci.c
 index c7851c0..6f6534e 100644
 --- a/drivers/mmc/host/sdhci.c
 +++ b/drivers/mmc/host/sdhci.c
 @@ -2923,7 +2923,7 @@ int sdhci_add_host(struct sdhci_host
 *host)
regulator_enable(host-vmmc);

  #ifdef CONFIG_REGULATOR
 -  if (host-vmmc) {
 +  if (host-vmmc  regulator_count_voltages(host-vmmc)  1)
 {
ret = regulator_is_supported_voltage(host-vmmc,
 330,
330);
if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))
   
Thanks for the longer explanation.  I'm still missing something,
though;
what's wrong with running the check as it was with the new
regulator
code?
(I haven't tried it yet.)
   
#ifdef CONFIG_REGULATOR
 if (host-vmmc) {
 ret =
regulator_is_supported_voltage(host-vmmc,
330,
 330);
 if ((ret = 0) || (!(caps[0] 
SDHCI_CAN_VDD_330)))
 caps[0] = ~SDHCI_CAN_VDD_330;
 ret =
regulator_is_supported_voltage(host-vmmc,
300,
 300);
 if ((ret = 0) || (!(caps[0] 
SDHCI_CAN_VDD_300)))
 caps[0] = ~SDHCI_CAN_VDD_300;
 ret =
regulator_is_supported_voltage(host-vmmc,
180,
 180);
 if ((ret = 0) || (!(caps[0] 
SDHCI_CAN_VDD_180)))
 caps[0] = ~SDHCI_CAN_VDD_180;
 }
#endif /* CONFIG_REGULATOR */
   
The point is to remove unsupported voltages, so if someone sets
up
a
fixed regulator at 330, all of the other caps are disabled.
Why
wouldn't that work without this change, and how are we supposed
to
remove those caps on a fixed regulator after your patchset?
   
Thanks, sorry if I'm missing something obvious,
   
On our boards eMMC is connected to fixed 2.8V regulator, what
results
in
clearing all available voltages and fail. The same situation is
when
one
enable dummy regulator and try to use sdhci with it. My patch
fixes
this
and restores sdhci to working state as it was before (before
fixing
regulator regulator_is_supported_voltage() function and earlier
when
MMC_BROKEN_VOLATGE capability was used).
   
I see.  Sounds like a separate bug -- Philip (or anyone else), any
idea how we should be treating eMMCs with a fixed voltage here?
   
  
   I think we should check the voltage range rather than the voltage
   point accoring to the spec.
   Otherwise some valid voltage like 2.8v will be discarded by mistake.
   My below old patch aim to fix this issue.
   How do you think?
  
   -Original Message-
   From: Kevin Liu [mailto:keyuan@gmail.com]
   Sent: Friday, September 28, 2012 3:56 PM
   To: linux-mmc@vger.kernel.org; c...@laptop.org; pie...@ossman.eu;
   ulf.hans...@linaro.org; Zhangfei Gao
   Cc: Haojian Zhuang; Chao Xie; Philip Rakity; Kevin Liu; Jialing Fu
   Subject: [PATCH v5 03/13] mmc: sdhci: use regulator min/max voltage
   range according to spec
  
   From: Kevin Liu kl...@marvell.com
  
   For regulator vmmc/vmmcq, use voltage range as below
   3.3v/3.0v: (2.7v, 3.6v)
   1.8v: (1.7v, 1.95v)
   Original code use the specific value which may fail in regulator
   driver

Re: FW: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-20 Thread Marek Szyprowski

Hello,

On 11/20/2012 3:14 PM, Kevin Liu wrote:

2012/11/20 Marek Szyprowski m.szyprow...@samsung.com:
 Hello,


 On 11/20/2012 12:36 PM, Kevin Liu wrote:

 2012/11/20 Marek Szyprowski m.szyprow...@samsung.com:
  On 11/20/2012 9:59 AM, Kevin Liu wrote:
  2012/11/20 Marek Szyprowski m.szyprow...@samsung.com:
   On 11/14/2012 8:11 AM, Kevin Liu wrote:
  
From: linux-mmc-ow...@vger.kernel.org
[mailto:linux-mmc-ow...@vger.kernel.org] On Behalf Of Chris Ball
Sent: Tuesday, November 13, 2012 10:14 PM
To: Marek Szyprowski
Cc: linux-ker...@vger.kernel.org; linux-mmc@vger.kernel.org;
Kyungmin
Park; Mark Brown; Liam Girdwood; Philip Rakity
Subject: Re: [PATCH v2] mmc: sdhci: apply voltage range check only
for non-fixed regulators
On Tue, Nov 13 2012, Marek Szyprowski wrote:
On Tue, Nov 13 2012, Marek Szyprowski wrote:
 Fixed regulators cannot change their voltage, so disable all
 voltage
 range checking for them, otherwise the driver fails to operate
 with
 fixed regulators. Up to now it worked only by luck, because
 regulator_is_supported_voltage() function returned incorrect
 values.
 Commit regulator: fix voltage check in
 regulator_is_supported_voltage()
 fixed that function and now additional check is needed for
 fixed
 regulators.

 Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
 ---
  drivers/mmc/host/sdhci.c |2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/drivers/mmc/host/sdhci.c
 b/drivers/mmc/host/sdhci.c
 index c7851c0..6f6534e 100644
 --- a/drivers/mmc/host/sdhci.c
 +++ b/drivers/mmc/host/sdhci.c
 @@ -2923,7 +2923,7 @@ int sdhci_add_host(struct sdhci_host
 *host)
regulator_enable(host-vmmc);

  #ifdef CONFIG_REGULATOR
 -  if (host-vmmc) {
 +  if (host-vmmc  regulator_count_voltages(host-vmmc)  1)
 {
ret = regulator_is_supported_voltage(host-vmmc,
 330,
330);
if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))
   
Thanks for the longer explanation.  I'm still missing something,
though;
what's wrong with running the check as it was with the new
regulator
code?
(I haven't tried it yet.)
   
#ifdef CONFIG_REGULATOR
 if (host-vmmc) {
 ret =
regulator_is_supported_voltage(host-vmmc,
330,
 330);
 if ((ret = 0) || (!(caps[0] 
SDHCI_CAN_VDD_330)))
 caps[0] = ~SDHCI_CAN_VDD_330;
 ret =
regulator_is_supported_voltage(host-vmmc,
300,
 300);
 if ((ret = 0) || (!(caps[0] 
SDHCI_CAN_VDD_300)))
 caps[0] = ~SDHCI_CAN_VDD_300;
 ret =
regulator_is_supported_voltage(host-vmmc,
180,
 180);
 if ((ret = 0) || (!(caps[0] 
SDHCI_CAN_VDD_180)))
 caps[0] = ~SDHCI_CAN_VDD_180;
 }
#endif /* CONFIG_REGULATOR */
   
The point is to remove unsupported voltages, so if someone sets
up
a
fixed regulator at 330, all of the other caps are disabled.
Why
wouldn't that work without this change, and how are we supposed
to
remove those caps on a fixed regulator after your patchset?
   
Thanks, sorry if I'm missing something obvious,
   
On our boards eMMC is connected to fixed 2.8V regulator, what
results
in
clearing all available voltages and fail. The same situation is
when
one
enable dummy regulator and try to use sdhci with it. My patch
fixes
this
and restores sdhci to working state as it was before (before
fixing
regulator regulator_is_supported_voltage() function and earlier
when
MMC_BROKEN_VOLATGE capability was used).
   
I see.  Sounds like a separate bug -- Philip (or anyone else), any
idea how we should be treating eMMCs with a fixed voltage here?
   
  
   I think we should check the voltage range rather than the voltage
   point accoring to the spec.
   Otherwise some valid voltage like 2.8v will be discarded by mistake.
   My below old patch aim to fix this issue.
   How do you think?
  
   -Original Message-
   From: Kevin Liu [mailto:keyuan@gmail.com]
   Sent: Friday, September 28, 2012 3:56 PM
   To: linux-mmc@vger.kernel.org; c...@laptop.org; pie...@ossman.eu;
   ulf.hans...@linaro.org; Zhangfei Gao
   Cc: Haojian Zhuang; Chao Xie; Philip Rakity; Kevin Liu; Jialing Fu
   Subject: [PATCH v5 03/13] mmc: sdhci: use regulator min/max voltage
   range according to spec
  
   From: Kevin Liu kl...@marvell.com
  
   For regulator vmmc/vmmcq, use voltage range as below
   3.3v/3.0v: (2.7v, 3.6v)
   1.8v: (1.7v, 1.95v)
   Original code use

Re: FW: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-20 Thread Kevin Liu
2012/11/20 Marek Szyprowski m.szyprow...@samsung.com:
 Hello,


 On 11/20/2012 3:14 PM, Kevin Liu wrote:

 2012/11/20 Marek Szyprowski m.szyprow...@samsung.com:
  Hello,
 
 
  On 11/20/2012 12:36 PM, Kevin Liu wrote:
 
  2012/11/20 Marek Szyprowski m.szyprow...@samsung.com:
   On 11/20/2012 9:59 AM, Kevin Liu wrote:
   2012/11/20 Marek Szyprowski m.szyprow...@samsung.com:
On 11/14/2012 8:11 AM, Kevin Liu wrote:
   
 From: linux-mmc-ow...@vger.kernel.org
 [mailto:linux-mmc-ow...@vger.kernel.org] On Behalf Of Chris
 Ball
 Sent: Tuesday, November 13, 2012 10:14 PM
 To: Marek Szyprowski
 Cc: linux-ker...@vger.kernel.org; linux-mmc@vger.kernel.org;
 Kyungmin
 Park; Mark Brown; Liam Girdwood; Philip Rakity
 Subject: Re: [PATCH v2] mmc: sdhci: apply voltage range check
 only
 for non-fixed regulators
 On Tue, Nov 13 2012, Marek Szyprowski wrote:
 On Tue, Nov 13 2012, Marek Szyprowski wrote:
  Fixed regulators cannot change their voltage, so disable
  all
  voltage
  range checking for them, otherwise the driver fails to
  operate
  with
  fixed regulators. Up to now it worked only by luck, because
  regulator_is_supported_voltage() function returned
  incorrect
  values.
  Commit regulator: fix voltage check in
  regulator_is_supported_voltage()
  fixed that function and now additional check is needed for
  fixed
  regulators.
 
  Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
  ---
   drivers/mmc/host/sdhci.c |2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)
 
  diff --git a/drivers/mmc/host/sdhci.c
  b/drivers/mmc/host/sdhci.c
  index c7851c0..6f6534e 100644
  --- a/drivers/mmc/host/sdhci.c
  +++ b/drivers/mmc/host/sdhci.c
  @@ -2923,7 +2923,7 @@ int sdhci_add_host(struct sdhci_host
  *host)
 regulator_enable(host-vmmc);
 
   #ifdef CONFIG_REGULATOR
  -  if (host-vmmc) {
  +  if (host-vmmc  regulator_count_voltages(host-vmmc) 
  1)
  {
 ret = regulator_is_supported_voltage(host-vmmc,
  330,
 330);
 if ((ret = 0) || (!(caps[0] 
  SDHCI_CAN_VDD_330)))

 Thanks for the longer explanation.  I'm still missing
 something,
 though;
 what's wrong with running the check as it was with the new
 regulator
 code?
 (I haven't tried it yet.)

 #ifdef CONFIG_REGULATOR
  if (host-vmmc) {
  ret =
 regulator_is_supported_voltage(host-vmmc,
 330,
  330);
  if ((ret = 0) || (!(caps[0] 
 SDHCI_CAN_VDD_330)))
  caps[0] = ~SDHCI_CAN_VDD_330;
  ret =
 regulator_is_supported_voltage(host-vmmc,
 300,
  300);
  if ((ret = 0) || (!(caps[0] 
 SDHCI_CAN_VDD_300)))
  caps[0] = ~SDHCI_CAN_VDD_300;
  ret =
 regulator_is_supported_voltage(host-vmmc,
 180,
  180);
  if ((ret = 0) || (!(caps[0] 
 SDHCI_CAN_VDD_180)))
  caps[0] = ~SDHCI_CAN_VDD_180;
  }
 #endif /* CONFIG_REGULATOR */

 The point is to remove unsupported voltages, so if someone
 sets
 up
 a
 fixed regulator at 330, all of the other caps are
 disabled.
 Why
 wouldn't that work without this change, and how are we
 supposed
 to
 remove those caps on a fixed regulator after your patchset?

 Thanks, sorry if I'm missing something obvious,

 On our boards eMMC is connected to fixed 2.8V regulator, what
 results
 in
 clearing all available voltages and fail. The same situation
 is
 when
 one
 enable dummy regulator and try to use sdhci with it. My patch
 fixes
 this
 and restores sdhci to working state as it was before (before
 fixing
 regulator regulator_is_supported_voltage() function and
 earlier
 when
 MMC_BROKEN_VOLATGE capability was used).

 I see.  Sounds like a separate bug -- Philip (or anyone else),
 any
 idea how we should be treating eMMCs with a fixed voltage here?

   
I think we should check the voltage range rather than the voltage
point accoring to the spec.
Otherwise some valid voltage like 2.8v will be discarded by
mistake.
My below old patch aim to fix this issue.
How do you think?
   
-Original Message-
From: Kevin Liu [mailto:keyuan@gmail.com]
Sent: Friday, September 28, 2012 3:56 PM
To: linux-mmc@vger.kernel.org; c...@laptop.org; pie...@ossman.eu;
ulf.hans...@linaro.org; Zhangfei Gao
Cc: Haojian Zhuang; Chao Xie; Philip Rakity; Kevin Liu; Jialing
Fu

Re: FW: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-14 Thread Kevin Liu
2012/11/14 Mark Brown broo...@opensource.wolfsonmicro.com:
 On Wed, Nov 14, 2012 at 03:11:37PM +0800, Kevin Liu wrote:

 - ret = regulator_set_voltage(host-vqmmc, 330, 330);
 + ret = regulator_set_voltage(host-vqmmc, 270, 360);

 Should this be regulator_set_voltage_tol()?  Otherwise it'd be good to
 explain where the numbers come from.
In SD physical layer spec 3.01 chapter 6.6.1, the threshold level for
voltage range is defined as below:
Vdd(min) = 2.7V while Vdd(max) = 3.6V.
The card should work within the voltage range.

If you are afraid the voltage value is too aggressive, maybe we can
use regulator_set_voltage_tol() to set a smaller range.
But which range should be reasonable?

 + ret = regulator_is_supported_voltage(host-vmmc, 170,
 + 195);

 We should really add a regulator_is_supported_voltage_tol...  let me
 just do that.
--
To unsubscribe from this list: send the line unsubscribe linux-mmc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: FW: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-14 Thread Mark Brown
On Wed, Nov 14, 2012 at 04:36:28PM +0800, Kevin Liu wrote:
 2012/11/14 Mark Brown broo...@opensource.wolfsonmicro.com:

  Should this be regulator_set_voltage_tol()?  Otherwise it'd be good to
  explain where the numbers come from.

 In SD physical layer spec 3.01 chapter 6.6.1, the threshold level for
 voltage range is defined as below:
 Vdd(min) = 2.7V while Vdd(max) = 3.6V.
 The card should work within the voltage range.

 If you are afraid the voltage value is too aggressive, maybe we can
 use regulator_set_voltage_tol() to set a smaller range.
 But which range should be reasonable?

The above makes total sense - thanks!  I just wasn't aware that the
range was specified in this fashion in the spec.  Might be worth a
comment in the code if you need to respin.


signature.asc
Description: Digital signature


Re: FW: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-14 Thread Kevin Liu
2012/11/14 Mark Brown broo...@opensource.wolfsonmicro.com:
 On Wed, Nov 14, 2012 at 04:36:28PM +0800, Kevin Liu wrote:
 2012/11/14 Mark Brown broo...@opensource.wolfsonmicro.com:

  Should this be regulator_set_voltage_tol()?  Otherwise it'd be good to
  explain where the numbers come from.

 In SD physical layer spec 3.01 chapter 6.6.1, the threshold level for
 voltage range is defined as below:
 Vdd(min) = 2.7V while Vdd(max) = 3.6V.
 The card should work within the voltage range.

 If you are afraid the voltage value is too aggressive, maybe we can
 use regulator_set_voltage_tol() to set a smaller range.
 But which range should be reasonable?

 The above makes total sense - thanks!  I just wasn't aware that the
 range was specified in this fashion in the spec.  Might be worth a
 comment in the code if you need to respin.

Sure, I will update the patch. Thanks!
--
To unsubscribe from this list: send the line unsubscribe linux-mmc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-14 Thread Philip Rakity

On Nov 14, 2012, at 8:57 AM, Kevin Liu keyuan@gmail.com wrote:

 2012/11/14 Mark Brown broo...@opensource.wolfsonmicro.com:
 On Wed, Nov 14, 2012 at 04:36:28PM +0800, Kevin Liu wrote:
 2012/11/14 Mark Brown broo...@opensource.wolfsonmicro.com:
 
 Should this be regulator_set_voltage_tol()?  Otherwise it'd be good to
 explain where the numbers come from.
 
 In SD physical layer spec 3.01 chapter 6.6.1, the threshold level for
 voltage range is defined as below:
 Vdd(min) = 2.7V while Vdd(max) = 3.6V.
 The card should work within the voltage range.
 
 If you are afraid the voltage value is too aggressive, maybe we can
 use regulator_set_voltage_tol() to set a smaller range.
 But which range should be reasonable?
 
 The above makes total sense - thanks!  I just wasn't aware that the
 range was specified in this fashion in the spec.  Might be worth a
 comment in the code if you need to respin.
 
 Sure, I will update the patch. Thanks!
 --
 To unsubscribe from this list: send the line unsubscribe linux-mmc in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html


re-read spec.  Please apply Kevin;s patch.

Reviewed-by: Philip Rakity prak...@nvidia.com
--
To unsubscribe from this list: send the line unsubscribe linux-mmc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-14 Thread Kevin Liu
2012/11/14 Philip Rakity prak...@nvidia.com:

 On Nov 14, 2012, at 8:57 AM, Kevin Liu keyuan@gmail.com wrote:

 2012/11/14 Mark Brown broo...@opensource.wolfsonmicro.com:
 On Wed, Nov 14, 2012 at 04:36:28PM +0800, Kevin Liu wrote:
 2012/11/14 Mark Brown broo...@opensource.wolfsonmicro.com:

 Should this be regulator_set_voltage_tol()?  Otherwise it'd be good to
 explain where the numbers come from.

 In SD physical layer spec 3.01 chapter 6.6.1, the threshold level for
 voltage range is defined as below:
 Vdd(min) = 2.7V while Vdd(max) = 3.6V.
 The card should work within the voltage range.

 If you are afraid the voltage value is too aggressive, maybe we can
 use regulator_set_voltage_tol() to set a smaller range.
 But which range should be reasonable?

 The above makes total sense - thanks!  I just wasn't aware that the
 range was specified in this fashion in the spec.  Might be worth a
 comment in the code if you need to respin.

 Sure, I will update the patch. Thanks!
 --
 To unsubscribe from this list: send the line unsubscribe linux-mmc in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html


 re-read spec.  Please apply Kevin;s patch.

 Reviewed-by: Philip Rakity prak...@nvidia.com

Philip, thanks!
--
To unsubscribe from this list: send the line unsubscribe linux-mmc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-13 Thread Marek Szyprowski
Fixed regulators cannot change their voltage, so disable all voltage
range checking for them, otherwise the driver fails to operate with
fixed regulators. Up to now it worked only by luck, because
regulator_is_supported_voltage() function returned incorrect values.
Commit regulator: fix voltage check in regulator_is_supported_voltage()
fixed that function and now additional check is needed for fixed
regulators.

Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
---
 drivers/mmc/host/sdhci.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index c7851c0..6f6534e 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2923,7 +2923,7 @@ int sdhci_add_host(struct sdhci_host *host)
regulator_enable(host-vmmc);
 
 #ifdef CONFIG_REGULATOR
-   if (host-vmmc) {
+   if (host-vmmc  regulator_count_voltages(host-vmmc)  1) {
ret = regulator_is_supported_voltage(host-vmmc, 330,
330);
if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))
-- 
1.7.9.5

--
To unsubscribe from this list: send the line unsubscribe linux-mmc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-13 Thread Chris Ball
Hi Marek,

On Tue, Nov 13 2012, Marek Szyprowski wrote:
 Fixed regulators cannot change their voltage, so disable all voltage
 range checking for them, otherwise the driver fails to operate with
 fixed regulators. Up to now it worked only by luck, because
 regulator_is_supported_voltage() function returned incorrect values.
 Commit regulator: fix voltage check in regulator_is_supported_voltage()
 fixed that function and now additional check is needed for fixed
 regulators.

 Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
 ---
  drivers/mmc/host/sdhci.c |2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
 index c7851c0..6f6534e 100644
 --- a/drivers/mmc/host/sdhci.c
 +++ b/drivers/mmc/host/sdhci.c
 @@ -2923,7 +2923,7 @@ int sdhci_add_host(struct sdhci_host *host)
   regulator_enable(host-vmmc);
  
  #ifdef CONFIG_REGULATOR
 - if (host-vmmc) {
 + if (host-vmmc  regulator_count_voltages(host-vmmc)  1) {
   ret = regulator_is_supported_voltage(host-vmmc, 330,
   330);
   if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))

Thanks for the longer explanation.  I'm still missing something, though;
what's wrong with running the check as it was with the new regulator code?
(I haven't tried it yet.)

#ifdef CONFIG_REGULATOR
if (host-vmmc) {
ret = regulator_is_supported_voltage(host-vmmc, 330,
330);
if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))
caps[0] = ~SDHCI_CAN_VDD_330;
ret = regulator_is_supported_voltage(host-vmmc, 300,
300);
if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_300)))
caps[0] = ~SDHCI_CAN_VDD_300;
ret = regulator_is_supported_voltage(host-vmmc, 180,
180);
if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_180)))
caps[0] = ~SDHCI_CAN_VDD_180;
}
#endif /* CONFIG_REGULATOR */

The point is to remove unsupported voltages, so if someone sets up a
fixed regulator at 330, all of the other caps are disabled.  Why
wouldn't that work without this change, and how are we supposed to
remove those caps on a fixed regulator after your patchset?

Thanks, sorry if I'm missing something obvious,

- Chris.
-- 
Chris Ball   c...@laptop.org   http://printf.net/
One Laptop Per Child
--
To unsubscribe from this list: send the line unsubscribe linux-mmc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-13 Thread Marek Szyprowski

Hello,

On 11/13/2012 2:45 PM, Chris Ball wrote:

Hi Marek,

On Tue, Nov 13 2012, Marek Szyprowski wrote:
 Fixed regulators cannot change their voltage, so disable all voltage
 range checking for them, otherwise the driver fails to operate with
 fixed regulators. Up to now it worked only by luck, because
 regulator_is_supported_voltage() function returned incorrect values.
 Commit regulator: fix voltage check in regulator_is_supported_voltage()
 fixed that function and now additional check is needed for fixed
 regulators.

 Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
 ---
  drivers/mmc/host/sdhci.c |2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
 index c7851c0..6f6534e 100644
 --- a/drivers/mmc/host/sdhci.c
 +++ b/drivers/mmc/host/sdhci.c
 @@ -2923,7 +2923,7 @@ int sdhci_add_host(struct sdhci_host *host)
regulator_enable(host-vmmc);

  #ifdef CONFIG_REGULATOR
 -  if (host-vmmc) {
 +  if (host-vmmc  regulator_count_voltages(host-vmmc)  1) {
ret = regulator_is_supported_voltage(host-vmmc, 330,
330);
if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))

Thanks for the longer explanation.  I'm still missing something, though;
what's wrong with running the check as it was with the new regulator code?
(I haven't tried it yet.)

#ifdef CONFIG_REGULATOR
 if (host-vmmc) {
 ret = regulator_is_supported_voltage(host-vmmc, 330,
 330);
 if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))
 caps[0] = ~SDHCI_CAN_VDD_330;
 ret = regulator_is_supported_voltage(host-vmmc, 300,
 300);
 if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_300)))
 caps[0] = ~SDHCI_CAN_VDD_300;
 ret = regulator_is_supported_voltage(host-vmmc, 180,
 180);
 if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_180)))
 caps[0] = ~SDHCI_CAN_VDD_180;
 }
#endif /* CONFIG_REGULATOR */

The point is to remove unsupported voltages, so if someone sets up a
fixed regulator at 330, all of the other caps are disabled.  Why
wouldn't that work without this change, and how are we supposed to
remove those caps on a fixed regulator after your patchset?

Thanks, sorry if I'm missing something obvious,


On our boards eMMC is connected to fixed 2.8V regulator, what results in
clearing all available voltages and fail. The same situation is when one
enable dummy regulator and try to use sdhci with it. My patch fixes this
and restores sdhci to working state as it was before (before fixing
regulator regulator_is_supported_voltage() function and earlier when
MMC_BROKEN_VOLATGE capability was used).

Best regards
--
Marek Szyprowski
Samsung Poland RD Center


--
To unsubscribe from this list: send the line unsubscribe linux-mmc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-13 Thread Chris Ball
Hi,

On Tue, Nov 13 2012, Marek Szyprowski wrote:
 On Tue, Nov 13 2012, Marek Szyprowski wrote:
  Fixed regulators cannot change their voltage, so disable all voltage
  range checking for them, otherwise the driver fails to operate with
  fixed regulators. Up to now it worked only by luck, because
  regulator_is_supported_voltage() function returned incorrect values.
  Commit regulator: fix voltage check in regulator_is_supported_voltage()
  fixed that function and now additional check is needed for fixed
  regulators.
 
  Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
  ---
   drivers/mmc/host/sdhci.c |2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)
 
  diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
  index c7851c0..6f6534e 100644
  --- a/drivers/mmc/host/sdhci.c
  +++ b/drivers/mmc/host/sdhci.c
  @@ -2923,7 +2923,7 @@ int sdhci_add_host(struct sdhci_host *host)
 regulator_enable(host-vmmc);
 
   #ifdef CONFIG_REGULATOR
  -  if (host-vmmc) {
  +  if (host-vmmc  regulator_count_voltages(host-vmmc)  1) {
 ret = regulator_is_supported_voltage(host-vmmc, 330,
 330);
 if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))

 Thanks for the longer explanation.  I'm still missing something, though;
 what's wrong with running the check as it was with the new regulator code?
 (I haven't tried it yet.)

 #ifdef CONFIG_REGULATOR
  if (host-vmmc) {
  ret = regulator_is_supported_voltage(host-vmmc, 330,
  330);
  if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))
  caps[0] = ~SDHCI_CAN_VDD_330;
  ret = regulator_is_supported_voltage(host-vmmc, 300,
  300);
  if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_300)))
  caps[0] = ~SDHCI_CAN_VDD_300;
  ret = regulator_is_supported_voltage(host-vmmc, 180,
  180);
  if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_180)))
  caps[0] = ~SDHCI_CAN_VDD_180;
  }
 #endif /* CONFIG_REGULATOR */

 The point is to remove unsupported voltages, so if someone sets up a
 fixed regulator at 330, all of the other caps are disabled.  Why
 wouldn't that work without this change, and how are we supposed to
 remove those caps on a fixed regulator after your patchset?

 Thanks, sorry if I'm missing something obvious,

 On our boards eMMC is connected to fixed 2.8V regulator, what results in
 clearing all available voltages and fail. The same situation is when one
 enable dummy regulator and try to use sdhci with it. My patch fixes this
 and restores sdhci to working state as it was before (before fixing
 regulator regulator_is_supported_voltage() function and earlier when
 MMC_BROKEN_VOLATGE capability was used).

I see.  Sounds like a separate bug -- Philip (or anyone else), any
idea how we should be treating eMMCs with a fixed voltage here?

Thanks,

- Chris.
-- 
Chris Ball   c...@laptop.org   http://printf.net/
One Laptop Per Child
--
To unsubscribe from this list: send the line unsubscribe linux-mmc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-13 Thread Philip Rakity

Hi Marek,

Is the regulator dedicated ?  or is it shared ?   Is it used for eMMC ?

If it cannot be turned off -- then just don't list it in the regulators list 
for vmmc.  

If it CAN be turned off then need to get back to you.

Philip 

On Nov 13, 2012, at 2:14 PM, Chris Ball c...@laptop.org wrote:

 Hi,
 
 On Tue, Nov 13 2012, Marek Szyprowski wrote:
 On Tue, Nov 13 2012, Marek Szyprowski wrote:
 Fixed regulators cannot change their voltage, so disable all voltage
 range checking for them, otherwise the driver fails to operate with
 fixed regulators. Up to now it worked only by luck, because
 regulator_is_supported_voltage() function returned incorrect values.
 Commit regulator: fix voltage check in regulator_is_supported_voltage()
 fixed that function and now additional check is needed for fixed
 regulators.
 
 Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
 ---
 drivers/mmc/host/sdhci.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
 index c7851c0..6f6534e 100644
 --- a/drivers/mmc/host/sdhci.c
 +++ b/drivers/mmc/host/sdhci.c
 @@ -2923,7 +2923,7 @@ int sdhci_add_host(struct sdhci_host *host)
regulator_enable(host-vmmc);
 
 #ifdef CONFIG_REGULATOR
 -  if (host-vmmc) {
 +  if (host-vmmc  regulator_count_voltages(host-vmmc)  1) {
ret = regulator_is_supported_voltage(host-vmmc, 330,
330);
if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))
 
 Thanks for the longer explanation.  I'm still missing something, though;
 what's wrong with running the check as it was with the new regulator code?
 (I haven't tried it yet.)
 
 #ifdef CONFIG_REGULATOR
 if (host-vmmc) {
 ret = regulator_is_supported_voltage(host-vmmc, 330,
 330);
 if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))
 caps[0] = ~SDHCI_CAN_VDD_330;
 ret = regulator_is_supported_voltage(host-vmmc, 300,
 300);
 if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_300)))
 caps[0] = ~SDHCI_CAN_VDD_300;
 ret = regulator_is_supported_voltage(host-vmmc, 180,
 180);
 if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_180)))
 caps[0] = ~SDHCI_CAN_VDD_180;
 }
 #endif /* CONFIG_REGULATOR */
 
 The point is to remove unsupported voltages, so if someone sets up a
 fixed regulator at 330, all of the other caps are disabled.  Why
 wouldn't that work without this change, and how are we supposed to
 remove those caps on a fixed regulator after your patchset?
 
 Thanks, sorry if I'm missing something obvious,
 
 On our boards eMMC is connected to fixed 2.8V regulator, what results in
 clearing all available voltages and fail. The same situation is when one
 enable dummy regulator and try to use sdhci with it. My patch fixes this
 and restores sdhci to working state as it was before (before fixing
 regulator regulator_is_supported_voltage() function and earlier when
 MMC_BROKEN_VOLATGE capability was used).
 
 I see.  Sounds like a separate bug -- Philip (or anyone else), any
 idea how we should be treating eMMCs with a fixed voltage here?
 
 Thanks,
 
 - Chris.
 -- 
 Chris Ball   c...@laptop.org   http://printf.net/
 One Laptop Per Child

--
To unsubscribe from this list: send the line unsubscribe linux-mmc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: FW: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-13 Thread Kevin Liu
 From: linux-mmc-ow...@vger.kernel.org 
 [mailto:linux-mmc-ow...@vger.kernel.org] On Behalf Of Chris Ball
 Sent: Tuesday, November 13, 2012 10:14 PM
 To: Marek Szyprowski
 Cc: linux-ker...@vger.kernel.org; linux-mmc@vger.kernel.org; Kyungmin Park; 
 Mark Brown; Liam Girdwood; Philip Rakity
 Subject: Re: [PATCH v2] mmc: sdhci: apply voltage range check only for 
 non-fixed regulators

 Hi,

 On Tue, Nov 13 2012, Marek Szyprowski wrote:
 On Tue, Nov 13 2012, Marek Szyprowski wrote:
  Fixed regulators cannot change their voltage, so disable all voltage
  range checking for them, otherwise the driver fails to operate with
  fixed regulators. Up to now it worked only by luck, because
  regulator_is_supported_voltage() function returned incorrect values.
  Commit regulator: fix voltage check in regulator_is_supported_voltage()
  fixed that function and now additional check is needed for fixed
  regulators.
 
  Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
  ---
   drivers/mmc/host/sdhci.c |2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)
 
  diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
  index c7851c0..6f6534e 100644
  --- a/drivers/mmc/host/sdhci.c
  +++ b/drivers/mmc/host/sdhci.c
  @@ -2923,7 +2923,7 @@ int sdhci_add_host(struct sdhci_host *host)
 regulator_enable(host-vmmc);
 
   #ifdef CONFIG_REGULATOR
  -  if (host-vmmc) {
  +  if (host-vmmc  regulator_count_voltages(host-vmmc)  1) {
 ret = regulator_is_supported_voltage(host-vmmc, 330,
 330);
 if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))

 Thanks for the longer explanation.  I'm still missing something, though;
 what's wrong with running the check as it was with the new regulator code?
 (I haven't tried it yet.)

 #ifdef CONFIG_REGULATOR
  if (host-vmmc) {
  ret = regulator_is_supported_voltage(host-vmmc, 330,
  330);
  if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_330)))
  caps[0] = ~SDHCI_CAN_VDD_330;
  ret = regulator_is_supported_voltage(host-vmmc, 300,
  300);
  if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_300)))
  caps[0] = ~SDHCI_CAN_VDD_300;
  ret = regulator_is_supported_voltage(host-vmmc, 180,
  180);
  if ((ret = 0) || (!(caps[0]  SDHCI_CAN_VDD_180)))
  caps[0] = ~SDHCI_CAN_VDD_180;
  }
 #endif /* CONFIG_REGULATOR */

 The point is to remove unsupported voltages, so if someone sets up a
 fixed regulator at 330, all of the other caps are disabled.  Why
 wouldn't that work without this change, and how are we supposed to
 remove those caps on a fixed regulator after your patchset?

 Thanks, sorry if I'm missing something obvious,

 On our boards eMMC is connected to fixed 2.8V regulator, what results in
 clearing all available voltages and fail. The same situation is when one
 enable dummy regulator and try to use sdhci with it. My patch fixes this
 and restores sdhci to working state as it was before (before fixing
 regulator regulator_is_supported_voltage() function and earlier when
 MMC_BROKEN_VOLATGE capability was used).

 I see.  Sounds like a separate bug -- Philip (or anyone else), any
 idea how we should be treating eMMCs with a fixed voltage here?


I think we should check the voltage range rather than the voltage
point accoring to the spec.
Otherwise some valid voltage like 2.8v will be discarded by mistake.
My below old patch aim to fix this issue.
How do you think?

-Original Message-
From: Kevin Liu [mailto:keyuan@gmail.com]
Sent: Friday, September 28, 2012 3:56 PM
To: linux-mmc@vger.kernel.org; c...@laptop.org; pie...@ossman.eu;
ulf.hans...@linaro.org; Zhangfei Gao
Cc: Haojian Zhuang; Chao Xie; Philip Rakity; Kevin Liu; Jialing Fu
Subject: [PATCH v5 03/13] mmc: sdhci: use regulator min/max voltage
range according to spec

From: Kevin Liu kl...@marvell.com

For regulator vmmc/vmmcq, use voltage range as below
3.3v/3.0v: (2.7v, 3.6v)
1.8v: (1.7v, 1.95v)
Original code use the specific value which may fail in regulator
driver if it does NOT support the specific voltage.

Signed-off-by: Jialing Fu j...@marvell.com
Signed-off-by: Kevin Liu kl...@marvell.com
---
 drivers/mmc/host/sdhci.c |   16 +++-
 1 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 3aef580..36afd47 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1628,7 +1628,7 @@ static int
sdhci_do_3_3v_signal_voltage_switch(struct sdhci_host *host,
sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);

if (host-vqmmc) {
-   ret = regulator_set_voltage(host-vqmmc, 330, 330);
+   ret = regulator_set_voltage(host-vqmmc, 270, 360

Re: FW: [PATCH v2] mmc: sdhci: apply voltage range check only for non-fixed regulators

2012-11-13 Thread Mark Brown
On Wed, Nov 14, 2012 at 03:11:37PM +0800, Kevin Liu wrote:

 - ret = regulator_set_voltage(host-vqmmc, 330, 330);
 + ret = regulator_set_voltage(host-vqmmc, 270, 360);

Should this be regulator_set_voltage_tol()?  Otherwise it'd be good to
explain where the numbers come from.

 + ret = regulator_is_supported_voltage(host-vmmc, 170,
 + 195);

We should really add a regulator_is_supported_voltage_tol...  let me
just do that.


signature.asc
Description: Digital signature