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: [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


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