* [U-Boot] [RFC 1/2] mmc: introduce mmc_power_init and pwrup hook function
@ 2016-03-16 1:32 Peng Fan
2016-03-16 1:32 ` [U-Boot] [RFC 2/2] dm: mmc: implement pwrup function Peng Fan
2016-04-09 18:34 ` [U-Boot] [RFC 1/2] mmc: introduce mmc_power_init and pwrup hook function Simon Glass
0 siblings, 2 replies; 7+ messages in thread
From: Peng Fan @ 2016-03-16 1:32 UTC (permalink / raw)
To: u-boot
In device tree, there is vmmc-supply property for SD/MMC.
Introduce mmc_power_init function and pwrup hook function to let
the specific drivers handle vmmc-supply.
mmc_power_init will first invoke board_mmc_power_init to
avoid break boards which already implement board_mmc_power_init.
Then if pwrup hook functions have been implemented for different
mmc drivers, pwrup will be invoked.
Signed-off-by: Peng Fan <van.freenix@gmail.com>
Cc: Pantelis Antoniou <panto@antoniou-consulting.com>
Cc: Andrew Gabbasov <andrew_gabbasov@mentor.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Stephen Warren <swarren@nvidia.com>
Cc: Clemens Gruber <clemens.gruber@pqgruber.com>
Cc: Eric Nelson <eric@nelint.com>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Fabio Estevam <fabio.estevam@nxp.com>
---
drivers/mmc/mmc.c | 15 ++++++++++++++-
include/mmc.h | 1 +
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index ede5d6e..f6d5c6f 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -1594,6 +1594,16 @@ __weak void board_mmc_power_init(void)
{
}
+__weak int mmc_power_init(struct mmc *mmc)
+{
+ board_mmc_power_init();
+
+ if (mmc->cfg->ops->pwrup)
+ return mmc->cfg->ops->pwrup(mmc);
+
+ return 0;
+}
+
int mmc_start_init(struct mmc *mmc)
{
int err;
@@ -1613,7 +1623,10 @@ int mmc_start_init(struct mmc *mmc)
#ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
mmc_adapter_card_type_ident();
#endif
- board_mmc_power_init();
+
+ err = mmc_power_init(mmc);
+ if (err)
+ return err;
/* made sure it's not NULL earlier */
err = mmc->cfg->ops->init(mmc);
diff --git a/include/mmc.h b/include/mmc.h
index d652c14..111ff75 100644
--- a/include/mmc.h
+++ b/include/mmc.h
@@ -329,6 +329,7 @@ struct mmc_ops {
int (*init)(struct mmc *mmc);
int (*getcd)(struct mmc *mmc);
int (*getwp)(struct mmc *mmc);
+ int (*pwrup)(struct mmc *mmc);
};
struct mmc_config {
--
2.6.2
^ permalink raw reply related [flat|nested] 7+ messages in thread* [U-Boot] [RFC 2/2] dm: mmc: implement pwrup function
2016-03-16 1:32 [U-Boot] [RFC 1/2] mmc: introduce mmc_power_init and pwrup hook function Peng Fan
@ 2016-03-16 1:32 ` Peng Fan
2016-04-09 18:34 ` Simon Glass
2016-04-09 18:34 ` [U-Boot] [RFC 1/2] mmc: introduce mmc_power_init and pwrup hook function Simon Glass
1 sibling, 1 reply; 7+ messages in thread
From: Peng Fan @ 2016-03-16 1:32 UTC (permalink / raw)
To: u-boot
If vmmc-supply property is provided, then enable it.
If vmmc-supply is not provided, just ignore it.
For now, only fixed regulator is supported.
In device tree:
"
reg_sd1_vmmc: regulator at 1 {
compatible = "regulator-fixed";
regulator-name = "VSD_3V3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
gpio = <&gpio1 9 GPIO_ACTIVE_HIGH>;
enable-active-high;
};
&usdhc1 {
pinctrl-names = "default", "state_100mhz", "state_200mhz";
pinctrl-0 = <&pinctrl_usdhc1>;
pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
keep-power-in-suspend;
enable-sdio-wakeup;
vmmc-supply = <®_sd1_vmmc>;
status = "okay";
};
"
Signed-off-by: Peng Fan <van.freenix@gmail.com>
Cc: Pantelis Antoniou <panto@antoniou-consulting.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Eric Nelson <eric@nelint.com>
Cc: York Sun <york.sun@nxp.com>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Fabio Estevam <fabio.estevam@nxp.com>
---
drivers/mmc/fsl_esdhc.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c
index e657bd0..33a7efb 100644
--- a/drivers/mmc/fsl_esdhc.c
+++ b/drivers/mmc/fsl_esdhc.c
@@ -23,6 +23,7 @@
#include <dm.h>
#include <asm/arch/clock.h>
#include <asm-generic/gpio.h>
+#include <power/regulator.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -671,6 +672,29 @@ static int esdhc_getcd(struct mmc *mmc)
return timeout > 0;
}
+static int esdhc_pwrup(struct mmc *mmc)
+{
+#ifdef CONFIG_DM_MMC
+ struct fsl_esdhc_priv *priv = mmc->priv;
+ struct udevice *vmmc_supply;
+ int ret;
+
+ ret = device_get_supply_regulator(priv->dev, "vmmc-supply",
+ &vmmc_supply);
+ if (ret) {
+ debug("No vmmc supply\n");
+ return 0;
+ }
+
+ ret = regulator_set_enable(vmmc_supply, true);
+ if (ret) {
+ puts("Error enabling VMMC supply\n");
+ return ret;
+ }
+#endif
+ return 0;
+}
+
static void esdhc_reset(struct fsl_esdhc *regs)
{
unsigned long timeout = 100; /* wait max 100 ms */
@@ -690,6 +714,7 @@ static const struct mmc_ops esdhc_ops = {
.set_ios = esdhc_set_ios,
.init = esdhc_init,
.getcd = esdhc_getcd,
+ .pwrup = esdhc_pwrup,
};
static int fsl_esdhc_cfg_to_priv(struct fsl_esdhc_cfg *cfg,
--
2.6.2
^ permalink raw reply related [flat|nested] 7+ messages in thread* [U-Boot] [RFC 2/2] dm: mmc: implement pwrup function
2016-03-16 1:32 ` [U-Boot] [RFC 2/2] dm: mmc: implement pwrup function Peng Fan
@ 2016-04-09 18:34 ` Simon Glass
0 siblings, 0 replies; 7+ messages in thread
From: Simon Glass @ 2016-04-09 18:34 UTC (permalink / raw)
To: u-boot
On 15 March 2016 at 19:32, Peng Fan <van.freenix@gmail.com> wrote:
> If vmmc-supply property is provided, then enable it.
> If vmmc-supply is not provided, just ignore it.
> For now, only fixed regulator is supported.
>
> In device tree:
> "
> reg_sd1_vmmc: regulator at 1 {
> compatible = "regulator-fixed";
> regulator-name = "VSD_3V3";
> regulator-min-microvolt = <3300000>;
> regulator-max-microvolt = <3300000>;
> gpio = <&gpio1 9 GPIO_ACTIVE_HIGH>;
> enable-active-high;
> };
>
> &usdhc1 {
> pinctrl-names = "default", "state_100mhz", "state_200mhz";
> pinctrl-0 = <&pinctrl_usdhc1>;
> pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
> pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
> cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
> keep-power-in-suspend;
> enable-sdio-wakeup;
> vmmc-supply = <®_sd1_vmmc>;
> status = "okay";
> };
> "
>
> Signed-off-by: Peng Fan <van.freenix@gmail.com>
> Cc: Pantelis Antoniou <panto@antoniou-consulting.com>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Eric Nelson <eric@nelint.com>
> Cc: York Sun <york.sun@nxp.com>
> Cc: Stefano Babic <sbabic@denx.de>
> Cc: Fabio Estevam <fabio.estevam@nxp.com>
> ---
> drivers/mmc/fsl_esdhc.c | 25 +++++++++++++++++++++++++
> 1 file changed, 25 insertions(+)
Acked-by: Simon Glass <sjg@chromium.org>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [U-Boot] [RFC 1/2] mmc: introduce mmc_power_init and pwrup hook function
2016-03-16 1:32 [U-Boot] [RFC 1/2] mmc: introduce mmc_power_init and pwrup hook function Peng Fan
2016-03-16 1:32 ` [U-Boot] [RFC 2/2] dm: mmc: implement pwrup function Peng Fan
@ 2016-04-09 18:34 ` Simon Glass
2016-04-11 5:34 ` Peng Fan
1 sibling, 1 reply; 7+ messages in thread
From: Simon Glass @ 2016-04-09 18:34 UTC (permalink / raw)
To: u-boot
Hi Peng,
On 15 March 2016 at 19:32, Peng Fan <van.freenix@gmail.com> wrote:
> In device tree, there is vmmc-supply property for SD/MMC.
> Introduce mmc_power_init function and pwrup hook function to let
> the specific drivers handle vmmc-supply.
>
> mmc_power_init will first invoke board_mmc_power_init to
> avoid break boards which already implement board_mmc_power_init.
>
> Then if pwrup hook functions have been implemented for different
> mmc drivers, pwrup will be invoked.
>
> Signed-off-by: Peng Fan <van.freenix@gmail.com>
> Cc: Pantelis Antoniou <panto@antoniou-consulting.com>
> Cc: Andrew Gabbasov <andrew_gabbasov@mentor.com>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Stephen Warren <swarren@nvidia.com>
> Cc: Clemens Gruber <clemens.gruber@pqgruber.com>
> Cc: Eric Nelson <eric@nelint.com>
> Cc: Stefano Babic <sbabic@denx.de>
> Cc: Fabio Estevam <fabio.estevam@nxp.com>
> ---
> drivers/mmc/mmc.c | 15 ++++++++++++++-
> include/mmc.h | 1 +
> 2 files changed, 15 insertions(+), 1 deletion(-)
Acked-by: Simon Glass <sjg@chromium.org>
I wonder if there is a way to handle this property generically?
Regards,
Simon
^ permalink raw reply [flat|nested] 7+ messages in thread
* [U-Boot] [RFC 1/2] mmc: introduce mmc_power_init and pwrup hook function
2016-04-09 18:34 ` [U-Boot] [RFC 1/2] mmc: introduce mmc_power_init and pwrup hook function Simon Glass
@ 2016-04-11 5:34 ` Peng Fan
2016-04-20 14:40 ` Simon Glass
0 siblings, 1 reply; 7+ messages in thread
From: Peng Fan @ 2016-04-11 5:34 UTC (permalink / raw)
To: u-boot
Hi Simon,
On Sat, Apr 09, 2016 at 12:34:13PM -0600, Simon Glass wrote:
>Hi Peng,
>
>On 15 March 2016 at 19:32, Peng Fan <van.freenix@gmail.com> wrote:
>> In device tree, there is vmmc-supply property for SD/MMC.
>> Introduce mmc_power_init function and pwrup hook function to let
>> the specific drivers handle vmmc-supply.
>>
>> mmc_power_init will first invoke board_mmc_power_init to
>> avoid break boards which already implement board_mmc_power_init.
>>
>> Then if pwrup hook functions have been implemented for different
>> mmc drivers, pwrup will be invoked.
>>
>> Signed-off-by: Peng Fan <van.freenix@gmail.com>
>> Cc: Pantelis Antoniou <panto@antoniou-consulting.com>
>> Cc: Andrew Gabbasov <andrew_gabbasov@mentor.com>
>> Cc: Simon Glass <sjg@chromium.org>
>> Cc: Stephen Warren <swarren@nvidia.com>
>> Cc: Clemens Gruber <clemens.gruber@pqgruber.com>
>> Cc: Eric Nelson <eric@nelint.com>
>> Cc: Stefano Babic <sbabic@denx.de>
>> Cc: Fabio Estevam <fabio.estevam@nxp.com>
>> ---
>> drivers/mmc/mmc.c | 15 ++++++++++++++-
>> include/mmc.h | 1 +
>> 2 files changed, 15 insertions(+), 1 deletion(-)
>
>Acked-by: Simon Glass <sjg@chromium.org>
>
>I wonder if there is a way to handle this property generically?
Now I do not have a better idea for this (:
Or we directly more the following piece code to driver/mmc/mmc.c?
And Add a device entry for struct mmc.
static int xxx_pwrup(struct mmc *mmc)
{
#ifdef CONFIG_DM_MMC
struct udevice *vmmc_supply;
int ret;
ret = device_get_supply_regulator(mmc->dev, "vmmc-supply",
&vmmc_supply);
if (ret) {
debug("No vmmc supply\n");
return 0;
}
ret = regulator_set_enable(vmmc_supply, true);
if (ret) {
puts("Error enabling VMMC supply\n");
return ret;
}
#endif
return 0;
}
Thanks,
Peng.
>
>Regards,
>Simon
^ permalink raw reply [flat|nested] 7+ messages in thread* [U-Boot] [RFC 1/2] mmc: introduce mmc_power_init and pwrup hook function
2016-04-11 5:34 ` Peng Fan
@ 2016-04-20 14:40 ` Simon Glass
2016-04-21 1:22 ` Peng Fan
0 siblings, 1 reply; 7+ messages in thread
From: Simon Glass @ 2016-04-20 14:40 UTC (permalink / raw)
To: u-boot
Hi Peng,
On 10 April 2016 at 23:34, Peng Fan <van.freenix@gmail.com> wrote:
> Hi Simon,
>
> On Sat, Apr 09, 2016 at 12:34:13PM -0600, Simon Glass wrote:
>>Hi Peng,
>>
>>On 15 March 2016 at 19:32, Peng Fan <van.freenix@gmail.com> wrote:
>>> In device tree, there is vmmc-supply property for SD/MMC.
>>> Introduce mmc_power_init function and pwrup hook function to let
>>> the specific drivers handle vmmc-supply.
>>>
>>> mmc_power_init will first invoke board_mmc_power_init to
>>> avoid break boards which already implement board_mmc_power_init.
>>>
>>> Then if pwrup hook functions have been implemented for different
>>> mmc drivers, pwrup will be invoked.
>>>
>>> Signed-off-by: Peng Fan <van.freenix@gmail.com>
>>> Cc: Pantelis Antoniou <panto@antoniou-consulting.com>
>>> Cc: Andrew Gabbasov <andrew_gabbasov@mentor.com>
>>> Cc: Simon Glass <sjg@chromium.org>
>>> Cc: Stephen Warren <swarren@nvidia.com>
>>> Cc: Clemens Gruber <clemens.gruber@pqgruber.com>
>>> Cc: Eric Nelson <eric@nelint.com>
>>> Cc: Stefano Babic <sbabic@denx.de>
>>> Cc: Fabio Estevam <fabio.estevam@nxp.com>
>>> ---
>>> drivers/mmc/mmc.c | 15 ++++++++++++++-
>>> include/mmc.h | 1 +
>>> 2 files changed, 15 insertions(+), 1 deletion(-)
>>
>>Acked-by: Simon Glass <sjg@chromium.org>
>>
>>I wonder if there is a way to handle this property generically?
>
> Now I do not have a better idea for this (:
>
> Or we directly more the following piece code to driver/mmc/mmc.c?
> And Add a device entry for struct mmc.
>
> static int xxx_pwrup(struct mmc *mmc)
> {
> #ifdef CONFIG_DM_MMC
> struct udevice *vmmc_supply;
> int ret;
>
> ret = device_get_supply_regulator(mmc->dev, "vmmc-supply",
> &vmmc_supply);
> if (ret) {
> debug("No vmmc supply\n");
> return 0;
> }
>
> ret = regulator_set_enable(vmmc_supply, true);
> if (ret) {
> puts("Error enabling VMMC supply\n");
> return ret;
> }
> #endif
> return 0;
> }
>
That seems better to me.
Regards,
Simon
^ permalink raw reply [flat|nested] 7+ messages in thread* [U-Boot] [RFC 1/2] mmc: introduce mmc_power_init and pwrup hook function
2016-04-20 14:40 ` Simon Glass
@ 2016-04-21 1:22 ` Peng Fan
0 siblings, 0 replies; 7+ messages in thread
From: Peng Fan @ 2016-04-21 1:22 UTC (permalink / raw)
To: u-boot
Hi Simon,
On Wed, Apr 20, 2016 at 08:40:10AM -0600, Simon Glass wrote:
>Hi Peng,
>
>On 10 April 2016 at 23:34, Peng Fan <van.freenix@gmail.com> wrote:
>> Hi Simon,
>>
>> On Sat, Apr 09, 2016 at 12:34:13PM -0600, Simon Glass wrote:
>>>Hi Peng,
>>>
>>>On 15 March 2016 at 19:32, Peng Fan <van.freenix@gmail.com> wrote:
>>>> In device tree, there is vmmc-supply property for SD/MMC.
>>>> Introduce mmc_power_init function and pwrup hook function to let
>>>> the specific drivers handle vmmc-supply.
>>>>
>>>> mmc_power_init will first invoke board_mmc_power_init to
>>>> avoid break boards which already implement board_mmc_power_init.
>>>>
>>>> Then if pwrup hook functions have been implemented for different
>>>> mmc drivers, pwrup will be invoked.
>>>>
>>>> Signed-off-by: Peng Fan <van.freenix@gmail.com>
>>>> Cc: Pantelis Antoniou <panto@antoniou-consulting.com>
>>>> Cc: Andrew Gabbasov <andrew_gabbasov@mentor.com>
>>>> Cc: Simon Glass <sjg@chromium.org>
>>>> Cc: Stephen Warren <swarren@nvidia.com>
>>>> Cc: Clemens Gruber <clemens.gruber@pqgruber.com>
>>>> Cc: Eric Nelson <eric@nelint.com>
>>>> Cc: Stefano Babic <sbabic@denx.de>
>>>> Cc: Fabio Estevam <fabio.estevam@nxp.com>
>>>> ---
>>>> drivers/mmc/mmc.c | 15 ++++++++++++++-
>>>> include/mmc.h | 1 +
>>>> 2 files changed, 15 insertions(+), 1 deletion(-)
>>>
>>>Acked-by: Simon Glass <sjg@chromium.org>
>>>
>>>I wonder if there is a way to handle this property generically?
>>
>> Now I do not have a better idea for this (:
>>
>> Or we directly more the following piece code to driver/mmc/mmc.c?
>> And Add a device entry for struct mmc.
>>
>> static int xxx_pwrup(struct mmc *mmc)
>> {
>> #ifdef CONFIG_DM_MMC
>> struct udevice *vmmc_supply;
>> int ret;
>>
>> ret = device_get_supply_regulator(mmc->dev, "vmmc-supply",
>> &vmmc_supply);
>> if (ret) {
>> debug("No vmmc supply\n");
>> return 0;
>> }
>>
>> ret = regulator_set_enable(vmmc_supply, true);
>> if (ret) {
>> puts("Error enabling VMMC supply\n");
>> return ret;
>> }
>> #endif
>> return 0;
>> }
>>
>
>That seems better to me.
Ok, I'll try this new way.
"
we directly more the following piece code to driver/mmc/mmc.c?
And Add a device entry for struct mmc.
"
Thanks,
Peng.
>
>Regards,
>Simon
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-04-21 1:22 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-16 1:32 [U-Boot] [RFC 1/2] mmc: introduce mmc_power_init and pwrup hook function Peng Fan
2016-03-16 1:32 ` [U-Boot] [RFC 2/2] dm: mmc: implement pwrup function Peng Fan
2016-04-09 18:34 ` Simon Glass
2016-04-09 18:34 ` [U-Boot] [RFC 1/2] mmc: introduce mmc_power_init and pwrup hook function Simon Glass
2016-04-11 5:34 ` Peng Fan
2016-04-20 14:40 ` Simon Glass
2016-04-21 1:22 ` Peng Fan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox