linux-mmc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/7] mmc: sdhci: set .remove to sdhci_pltfm_unregister()
@ 2015-02-27  7:47 Kevin Hao
  2015-02-27  7:47 ` [PATCH v2 1/7] mmc: sdhci-dove: remove the unneeded error check Kevin Hao
                   ` (7 more replies)
  0 siblings, 8 replies; 11+ messages in thread
From: Kevin Hao @ 2015-02-27  7:47 UTC (permalink / raw)
  To: linux-mmc; +Cc: Chris Ball, Ulf Hansson

Hi,

v2:
  - Update the sdhci-bcm-kona as suggested by Ray Jui.
  - Also kill the private get_max_clock function in sdhci-sirf.

v1:
In the current kernel, the specific .remove function in several sdhci platform
drivers seem pretty similar. Actually we can just set all of them to
sdhci_pltfm_unregister() with just a bit twist.

Only run test for sdhci-of-esdhc driver. All others just passed the build test.

Kevin Hao (7):
  mmc: sdhci-dove: remove the unneeded error check
  mmc: sdhci-dove: kill the driver specific private struct
  mmc: tegra: use devm help functions to get the clk and gpio
  mmc: sdhci-sirf: kill the "clk" member in driver private struct
  mmc: sdhci-bcm-kona: kill the "external_clk" member in driver private 
       struct
  mmc: sdhci: disable the clock in sdhci_pltfm_unregister()
  mmc: sdhci: set the .remove to sdhci_pltfm_unregister()

 drivers/mmc/host/sdhci-bcm-kona.c  | 61 ++++++++------------------------------
 drivers/mmc/host/sdhci-bcm2835.c   |  7 +----
 drivers/mmc/host/sdhci-cns3xxx.c   |  7 +----
 drivers/mmc/host/sdhci-dove.c      | 39 ++++--------------------
 drivers/mmc/host/sdhci-of-arasan.c |  1 -
 drivers/mmc/host/sdhci-of-esdhc.c  |  7 +----
 drivers/mmc/host/sdhci-of-hlwd.c   |  7 +----
 drivers/mmc/host/sdhci-pltfm.c     |  2 ++
 drivers/mmc/host/sdhci-sirf.c      | 36 +++++-----------------
 drivers/mmc/host/sdhci-st.c        | 12 +-------
 drivers/mmc/host/sdhci-tegra.c     | 30 +++----------------
 11 files changed, 36 insertions(+), 173 deletions(-)

-- 
1.9.3


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v2 1/7] mmc: sdhci-dove: remove the unneeded error check
  2015-02-27  7:47 [PATCH v2 0/7] mmc: sdhci: set .remove to sdhci_pltfm_unregister() Kevin Hao
@ 2015-02-27  7:47 ` Kevin Hao
  2015-02-27  7:47 ` [PATCH v2 2/7] mmc: sdhci-dove: kill the driver specific private struct Kevin Hao
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Kevin Hao @ 2015-02-27  7:47 UTC (permalink / raw)
  To: linux-mmc; +Cc: Chris Ball, Ulf Hansson

The function clk_disable_unprepare() already take care of either error
or null cases.

Signed-off-by: Kevin Hao <haokexin@gmail.com>
---
v2: No change.

 drivers/mmc/host/sdhci-dove.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/mmc/host/sdhci-dove.c b/drivers/mmc/host/sdhci-dove.c
index ca969d271a27..0a7aeb162497 100644
--- a/drivers/mmc/host/sdhci-dove.c
+++ b/drivers/mmc/host/sdhci-dove.c
@@ -117,8 +117,7 @@ static int sdhci_dove_probe(struct platform_device *pdev)
 	return 0;
 
 err_sdhci_add:
-	if (!IS_ERR(priv->clk))
-		clk_disable_unprepare(priv->clk);
+	clk_disable_unprepare(priv->clk);
 	sdhci_pltfm_free(pdev);
 	return ret;
 }
@@ -131,8 +130,7 @@ static int sdhci_dove_remove(struct platform_device *pdev)
 
 	sdhci_pltfm_unregister(pdev);
 
-	if (!IS_ERR(priv->clk))
-		clk_disable_unprepare(priv->clk);
+	clk_disable_unprepare(priv->clk);
 
 	return 0;
 }
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v2 2/7] mmc: sdhci-dove: kill the driver specific private struct
  2015-02-27  7:47 [PATCH v2 0/7] mmc: sdhci: set .remove to sdhci_pltfm_unregister() Kevin Hao
  2015-02-27  7:47 ` [PATCH v2 1/7] mmc: sdhci-dove: remove the unneeded error check Kevin Hao
@ 2015-02-27  7:47 ` Kevin Hao
       [not found] ` <1425023251-4544-1-git-send-email-haokexin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Kevin Hao @ 2015-02-27  7:47 UTC (permalink / raw)
  To: linux-mmc; +Cc: Chris Ball, Ulf Hansson

There is only one "clk" member in this driver specific private struct.
Actually we can use the "clk" member in the struct sdhci_pltfm_host,
and then kill this struct completely.

Signed-off-by: Kevin Hao <haokexin@gmail.com>
---
v2: No change.

 drivers/mmc/host/sdhci-dove.c | 26 +++++---------------------
 1 file changed, 5 insertions(+), 21 deletions(-)

diff --git a/drivers/mmc/host/sdhci-dove.c b/drivers/mmc/host/sdhci-dove.c
index 0a7aeb162497..f78440ef1ba4 100644
--- a/drivers/mmc/host/sdhci-dove.c
+++ b/drivers/mmc/host/sdhci-dove.c
@@ -28,10 +28,6 @@
 
 #include "sdhci-pltfm.h"
 
-struct sdhci_dove_priv {
-	struct clk *clk;
-};
-
 static u16 sdhci_dove_readw(struct sdhci_host *host, int reg)
 {
 	u16 ret;
@@ -84,27 +80,17 @@ static int sdhci_dove_probe(struct platform_device *pdev)
 {
 	struct sdhci_host *host;
 	struct sdhci_pltfm_host *pltfm_host;
-	struct sdhci_dove_priv *priv;
 	int ret;
 
-	priv = devm_kzalloc(&pdev->dev, sizeof(struct sdhci_dove_priv),
-			    GFP_KERNEL);
-	if (!priv) {
-		dev_err(&pdev->dev, "unable to allocate private data");
-		return -ENOMEM;
-	}
-
-	priv->clk = devm_clk_get(&pdev->dev, NULL);
-
 	host = sdhci_pltfm_init(pdev, &sdhci_dove_pdata, 0);
 	if (IS_ERR(host))
 		return PTR_ERR(host);
 
 	pltfm_host = sdhci_priv(host);
-	pltfm_host->priv = priv;
+	pltfm_host->clk = devm_clk_get(&pdev->dev, NULL);
 
-	if (!IS_ERR(priv->clk))
-		clk_prepare_enable(priv->clk);
+	if (!IS_ERR(pltfm_host->clk))
+		clk_prepare_enable(pltfm_host->clk);
 
 	ret = mmc_of_parse(host->mmc);
 	if (ret)
@@ -117,7 +103,7 @@ static int sdhci_dove_probe(struct platform_device *pdev)
 	return 0;
 
 err_sdhci_add:
-	clk_disable_unprepare(priv->clk);
+	clk_disable_unprepare(pltfm_host->clk);
 	sdhci_pltfm_free(pdev);
 	return ret;
 }
@@ -126,12 +112,10 @@ static int sdhci_dove_remove(struct platform_device *pdev)
 {
 	struct sdhci_host *host = platform_get_drvdata(pdev);
 	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-	struct sdhci_dove_priv *priv = pltfm_host->priv;
 
+	clk_disable_unprepare(pltfm_host->clk);
 	sdhci_pltfm_unregister(pdev);
 
-	clk_disable_unprepare(priv->clk);
-
 	return 0;
 }
 
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v2 3/7] mmc: tegra: use devm help functions to get the clk and gpio
       [not found] ` <1425023251-4544-1-git-send-email-haokexin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2015-02-27  7:47   ` Kevin Hao
       [not found]     ` <1425023251-4544-4-git-send-email-haokexin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  0 siblings, 1 reply; 11+ messages in thread
From: Kevin Hao @ 2015-02-27  7:47 UTC (permalink / raw)
  To: linux-mmc-u79uwXL29TY76Z2rM5mHXA
  Cc: Chris Ball, Ulf Hansson, linux-tegra-u79uwXL29TY76Z2rM5mHXA

Simplify the error and remove path.

Signed-off-by: Kevin Hao <haokexin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
v2: No change.

 drivers/mmc/host/sdhci-tegra.c | 13 +++----------
 1 file changed, 3 insertions(+), 10 deletions(-)

diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
index f3778d58d1cd..0643f66b4e14 100644
--- a/drivers/mmc/host/sdhci-tegra.c
+++ b/drivers/mmc/host/sdhci-tegra.c
@@ -286,7 +286,8 @@ static int sdhci_tegra_probe(struct platform_device *pdev)
 		goto err_parse_dt;
 
 	if (gpio_is_valid(tegra_host->power_gpio)) {
-		rc = gpio_request(tegra_host->power_gpio, "sdhci_power");
+		rc = devm_gpio_request(&pdev->dev, tegra_host->power_gpio,
+				       "sdhci_power");
 		if (rc) {
 			dev_err(mmc_dev(host->mmc),
 				"failed to allocate power gpio\n");
@@ -295,7 +296,7 @@ static int sdhci_tegra_probe(struct platform_device *pdev)
 		gpio_direction_output(tegra_host->power_gpio, 1);
 	}
 
-	clk = clk_get(mmc_dev(host->mmc), NULL);
+	clk = devm_clk_get(mmc_dev(host->mmc), NULL);
 	if (IS_ERR(clk)) {
 		dev_err(mmc_dev(host->mmc), "clk err\n");
 		rc = PTR_ERR(clk);
@@ -312,10 +313,7 @@ static int sdhci_tegra_probe(struct platform_device *pdev)
 
 err_add_host:
 	clk_disable_unprepare(pltfm_host->clk);
-	clk_put(pltfm_host->clk);
 err_clk_get:
-	if (gpio_is_valid(tegra_host->power_gpio))
-		gpio_free(tegra_host->power_gpio);
 err_power_req:
 err_parse_dt:
 err_alloc_tegra_host:
@@ -327,16 +325,11 @@ static int sdhci_tegra_remove(struct platform_device *pdev)
 {
 	struct sdhci_host *host = platform_get_drvdata(pdev);
 	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-	struct sdhci_tegra *tegra_host = pltfm_host->priv;
 	int dead = (readl(host->ioaddr + SDHCI_INT_STATUS) == 0xffffffff);
 
 	sdhci_remove_host(host, dead);
 
-	if (gpio_is_valid(tegra_host->power_gpio))
-		gpio_free(tegra_host->power_gpio);
-
 	clk_disable_unprepare(pltfm_host->clk);
-	clk_put(pltfm_host->clk);
 
 	sdhci_pltfm_free(pdev);
 
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v2 4/7] mmc: sdhci-sirf: kill the "clk" member in driver private struct
  2015-02-27  7:47 [PATCH v2 0/7] mmc: sdhci: set .remove to sdhci_pltfm_unregister() Kevin Hao
                   ` (2 preceding siblings ...)
       [not found] ` <1425023251-4544-1-git-send-email-haokexin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2015-02-27  7:47 ` Kevin Hao
  2015-02-27  7:47 ` [PATCH v2 5/7] mmc: sdhci-bcm-kona: kill the "external_clk" " Kevin Hao
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Kevin Hao @ 2015-02-27  7:47 UTC (permalink / raw)
  To: linux-mmc; +Cc: Chris Ball, Ulf Hansson, Barry Song

Actually we can use the "clk" in the struct sdhci_pltfm_host.
With this change we can also kill the private function for get
max clock in this driver.

Signed-off-by: Kevin Hao <haokexin@gmail.com>
---
v2: Also kill the private sdhci_sirf_get_max_clk().

 drivers/mmc/host/sdhci-sirf.c | 26 +++++++-------------------
 1 file changed, 7 insertions(+), 19 deletions(-)

diff --git a/drivers/mmc/host/sdhci-sirf.c b/drivers/mmc/host/sdhci-sirf.c
index f6f82ec3618d..c30d6f3dd9aa 100644
--- a/drivers/mmc/host/sdhci-sirf.c
+++ b/drivers/mmc/host/sdhci-sirf.c
@@ -20,17 +20,9 @@
 #define SIRF_TUNING_COUNT 128
 
 struct sdhci_sirf_priv {
-	struct clk *clk;
 	int gpio_cd;
 };
 
-static unsigned int sdhci_sirf_get_max_clk(struct sdhci_host *host)
-{
-	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-	struct sdhci_sirf_priv *priv = sdhci_pltfm_priv(pltfm_host);
-	return clk_get_rate(priv->clk);
-}
-
 static void sdhci_sirf_set_bus_width(struct sdhci_host *host, int width)
 {
 	u8 ctrl;
@@ -122,7 +114,7 @@ retry:
 static struct sdhci_ops sdhci_sirf_ops = {
 	.platform_execute_tuning = sdhci_sirf_execute_tuning,
 	.set_clock = sdhci_set_clock,
-	.get_max_clock	= sdhci_sirf_get_max_clk,
+	.get_max_clock	= sdhci_pltfm_clk_get_max_clock,
 	.set_bus_width = sdhci_sirf_set_bus_width,
 	.reset = sdhci_reset,
 	.set_uhs_signaling = sdhci_set_uhs_signaling,
@@ -162,13 +154,13 @@ static int sdhci_sirf_probe(struct platform_device *pdev)
 		return PTR_ERR(host);
 
 	pltfm_host = sdhci_priv(host);
+	pltfm_host->clk = clk;
 	priv = sdhci_pltfm_priv(pltfm_host);
-	priv->clk = clk;
 	priv->gpio_cd = gpio_cd;
 
 	sdhci_get_of_property(pdev);
 
-	ret = clk_prepare_enable(priv->clk);
+	ret = clk_prepare_enable(pltfm_host->clk);
 	if (ret)
 		goto err_clk_prepare;
 
@@ -195,7 +187,7 @@ static int sdhci_sirf_probe(struct platform_device *pdev)
 err_request_cd:
 	sdhci_remove_host(host, 0);
 err_sdhci_add:
-	clk_disable_unprepare(priv->clk);
+	clk_disable_unprepare(pltfm_host->clk);
 err_clk_prepare:
 	sdhci_pltfm_free(pdev);
 	return ret;
@@ -205,11 +197,9 @@ static int sdhci_sirf_remove(struct platform_device *pdev)
 {
 	struct sdhci_host *host = platform_get_drvdata(pdev);
 	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-	struct sdhci_sirf_priv *priv = sdhci_pltfm_priv(pltfm_host);
 
+	clk_disable_unprepare(pltfm_host->clk);
 	sdhci_pltfm_unregister(pdev);
-
-	clk_disable_unprepare(priv->clk);
 	return 0;
 }
 
@@ -218,14 +208,13 @@ static int sdhci_sirf_suspend(struct device *dev)
 {
 	struct sdhci_host *host = dev_get_drvdata(dev);
 	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-	struct sdhci_sirf_priv *priv = sdhci_pltfm_priv(pltfm_host);
 	int ret;
 
 	ret = sdhci_suspend_host(host);
 	if (ret)
 		return ret;
 
-	clk_disable(priv->clk);
+	clk_disable(pltfm_host->clk);
 
 	return 0;
 }
@@ -234,10 +223,9 @@ static int sdhci_sirf_resume(struct device *dev)
 {
 	struct sdhci_host *host = dev_get_drvdata(dev);
 	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-	struct sdhci_sirf_priv *priv = sdhci_pltfm_priv(pltfm_host);
 	int ret;
 
-	ret = clk_enable(priv->clk);
+	ret = clk_enable(pltfm_host->clk);
 	if (ret) {
 		dev_dbg(dev, "Resume: Error enabling clock\n");
 		return ret;
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v2 5/7] mmc: sdhci-bcm-kona: kill the "external_clk" member in driver private struct
  2015-02-27  7:47 [PATCH v2 0/7] mmc: sdhci: set .remove to sdhci_pltfm_unregister() Kevin Hao
                   ` (3 preceding siblings ...)
  2015-02-27  7:47 ` [PATCH v2 4/7] mmc: sdhci-sirf: kill the "clk" member in driver private struct Kevin Hao
@ 2015-02-27  7:47 ` Kevin Hao
  2015-02-27 17:12   ` Ray Jui
  2015-02-27  7:47 ` [PATCH v2 6/7] mmc: sdhci: disable the clock in sdhci_pltfm_unregister() Kevin Hao
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 11+ messages in thread
From: Kevin Hao @ 2015-02-27  7:47 UTC (permalink / raw)
  To: linux-mmc
  Cc: Chris Ball, Ulf Hansson, Christian Daudt, Matt Porter,
	Florian Fainelli, Ray Jui, bcm-kernel-feedback-list

Actually we can use the "clk" in the struct sdhci_pltfm_host. Also
change the "external clock" to "core clock" and kill two redundant
private functions in this driver as suggested by Ray Jui.

Signed-off-by: Kevin Hao <haokexin@gmail.com>
---
v2:
  - s/external clock/core clock/
  - kill the private functions sdhci_bcm_kona_get_max_clk() and sdhci_bcm_kona_get_timeout_clock()

 drivers/mmc/host/sdhci-bcm-kona.c | 46 +++++++++++----------------------------
 1 file changed, 13 insertions(+), 33 deletions(-)

diff --git a/drivers/mmc/host/sdhci-bcm-kona.c b/drivers/mmc/host/sdhci-bcm-kona.c
index 34bb8f92586e..5bc263b447b2 100644
--- a/drivers/mmc/host/sdhci-bcm-kona.c
+++ b/drivers/mmc/host/sdhci-bcm-kona.c
@@ -54,7 +54,6 @@
 
 struct sdhci_bcm_kona_dev {
 	struct mutex	write_lock; /* protect back to back writes */
-	struct clk	*external_clk;
 };
 
 
@@ -175,24 +174,6 @@ static void sdhci_bcm_kona_card_event(struct sdhci_host *host)
 	}
 }
 
-/*
- * Get the base clock. Use central clock source for now. Not sure if different
- * clock speed to each dev is allowed
- */
-static unsigned int sdhci_bcm_kona_get_max_clk(struct sdhci_host *host)
-{
-	struct sdhci_bcm_kona_dev *kona_dev;
-	struct sdhci_pltfm_host *pltfm_priv = sdhci_priv(host);
-	kona_dev = sdhci_pltfm_priv(pltfm_priv);
-
-	return host->mmc->f_max;
-}
-
-static unsigned int sdhci_bcm_kona_get_timeout_clock(struct sdhci_host *host)
-{
-	return sdhci_bcm_kona_get_max_clk(host);
-}
-
 static void sdhci_bcm_kona_init_74_clocks(struct sdhci_host *host,
 				u8 power_mode)
 {
@@ -207,8 +188,8 @@ static void sdhci_bcm_kona_init_74_clocks(struct sdhci_host *host,
 
 static struct sdhci_ops sdhci_bcm_kona_ops = {
 	.set_clock = sdhci_set_clock,
-	.get_max_clock = sdhci_bcm_kona_get_max_clk,
-	.get_timeout_clock = sdhci_bcm_kona_get_timeout_clock,
+	.get_max_clock = sdhci_pltfm_clk_get_max_clock,
+	.get_timeout_clock = sdhci_pltfm_clk_get_max_clock,
 	.platform_send_init_74_clocks = sdhci_bcm_kona_init_74_clocks,
 	.set_bus_width = sdhci_set_bus_width,
 	.reset = sdhci_reset,
@@ -264,21 +245,21 @@ static int sdhci_bcm_kona_probe(struct platform_device *pdev)
 		goto err_pltfm_free;
 	}
 
-	/* Get and enable the external clock */
-	kona_dev->external_clk = devm_clk_get(dev, NULL);
-	if (IS_ERR(kona_dev->external_clk)) {
-		dev_err(dev, "Failed to get external clock\n");
-		ret = PTR_ERR(kona_dev->external_clk);
+	/* Get and enable the core clock */
+	pltfm_priv->clk = devm_clk_get(dev, NULL);
+	if (IS_ERR(pltfm_priv->clk)) {
+		dev_err(dev, "Failed to get core clock\n");
+		ret = PTR_ERR(pltfm_priv->clk);
 		goto err_pltfm_free;
 	}
 
-	if (clk_set_rate(kona_dev->external_clk, host->mmc->f_max) != 0) {
-		dev_err(dev, "Failed to set rate external clock\n");
+	if (clk_set_rate(pltfm_priv->clk, host->mmc->f_max) != 0) {
+		dev_err(dev, "Failed to set rate core clock\n");
 		goto err_pltfm_free;
 	}
 
-	if (clk_prepare_enable(kona_dev->external_clk) != 0) {
-		dev_err(dev, "Failed to enable external clock\n");
+	if (clk_prepare_enable(pltfm_priv->clk) != 0) {
+		dev_err(dev, "Failed to enable core clock\n");
 		goto err_pltfm_free;
 	}
 
@@ -333,7 +314,7 @@ err_reset:
 	sdhci_bcm_kona_sd_reset(host);
 
 err_clk_disable:
-	clk_disable_unprepare(kona_dev->external_clk);
+	clk_disable_unprepare(pltfm_priv->clk);
 
 err_pltfm_free:
 	sdhci_pltfm_free(pdev);
@@ -346,12 +327,11 @@ static int sdhci_bcm_kona_remove(struct platform_device *pdev)
 {
 	struct sdhci_host *host = platform_get_drvdata(pdev);
 	struct sdhci_pltfm_host *pltfm_priv = sdhci_priv(host);
-	struct sdhci_bcm_kona_dev *kona_dev = sdhci_pltfm_priv(pltfm_priv);
 	int dead = (readl(host->ioaddr + SDHCI_INT_STATUS) == 0xffffffff);
 
 	sdhci_remove_host(host, dead);
 
-	clk_disable_unprepare(kona_dev->external_clk);
+	clk_disable_unprepare(pltfm_priv->clk);
 
 	sdhci_pltfm_free(pdev);
 
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v2 6/7] mmc: sdhci: disable the clock in sdhci_pltfm_unregister()
  2015-02-27  7:47 [PATCH v2 0/7] mmc: sdhci: set .remove to sdhci_pltfm_unregister() Kevin Hao
                   ` (4 preceding siblings ...)
  2015-02-27  7:47 ` [PATCH v2 5/7] mmc: sdhci-bcm-kona: kill the "external_clk" " Kevin Hao
@ 2015-02-27  7:47 ` Kevin Hao
  2015-02-27  7:47 ` [PATCH v2 7/7] mmc: sdhci: set the .remove to sdhci_pltfm_unregister() Kevin Hao
  2015-03-05 13:46 ` [PATCH v2 0/7] mmc: sdhci: set " Ulf Hansson
  7 siblings, 0 replies; 11+ messages in thread
From: Kevin Hao @ 2015-02-27  7:47 UTC (permalink / raw)
  To: linux-mmc; +Cc: Chris Ball, Ulf Hansson

So we can avoid to sprinkle the clk_disable_unprepare() in many
drivers.

Signed-off-by: Kevin Hao <haokexin@gmail.com>
---
v2: No change.

 drivers/mmc/host/sdhci-bcm-kona.c  | 12 +-----------
 drivers/mmc/host/sdhci-dove.c      |  8 +-------
 drivers/mmc/host/sdhci-of-arasan.c |  1 -
 drivers/mmc/host/sdhci-pltfm.c     |  2 ++
 drivers/mmc/host/sdhci-sirf.c      |  5 +----
 drivers/mmc/host/sdhci-st.c        |  5 -----
 drivers/mmc/host/sdhci-tegra.c     | 12 +-----------
 7 files changed, 6 insertions(+), 39 deletions(-)

diff --git a/drivers/mmc/host/sdhci-bcm-kona.c b/drivers/mmc/host/sdhci-bcm-kona.c
index 5bc263b447b2..91cba26f75af 100644
--- a/drivers/mmc/host/sdhci-bcm-kona.c
+++ b/drivers/mmc/host/sdhci-bcm-kona.c
@@ -325,17 +325,7 @@ err_pltfm_free:
 
 static int sdhci_bcm_kona_remove(struct platform_device *pdev)
 {
-	struct sdhci_host *host = platform_get_drvdata(pdev);
-	struct sdhci_pltfm_host *pltfm_priv = sdhci_priv(host);
-	int dead = (readl(host->ioaddr + SDHCI_INT_STATUS) == 0xffffffff);
-
-	sdhci_remove_host(host, dead);
-
-	clk_disable_unprepare(pltfm_priv->clk);
-
-	sdhci_pltfm_free(pdev);
-
-	return 0;
+	return sdhci_pltfm_unregister(pdev);
 }
 
 static struct platform_driver sdhci_bcm_kona_driver = {
diff --git a/drivers/mmc/host/sdhci-dove.c b/drivers/mmc/host/sdhci-dove.c
index f78440ef1ba4..2314ff88d942 100644
--- a/drivers/mmc/host/sdhci-dove.c
+++ b/drivers/mmc/host/sdhci-dove.c
@@ -110,13 +110,7 @@ err_sdhci_add:
 
 static int sdhci_dove_remove(struct platform_device *pdev)
 {
-	struct sdhci_host *host = platform_get_drvdata(pdev);
-	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-
-	clk_disable_unprepare(pltfm_host->clk);
-	sdhci_pltfm_unregister(pdev);
-
-	return 0;
+	return sdhci_pltfm_unregister(pdev);
 }
 
 static const struct of_device_id sdhci_dove_of_match_table[] = {
diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c
index bcb51e9dfdcd..129079fb53bf 100644
--- a/drivers/mmc/host/sdhci-of-arasan.c
+++ b/drivers/mmc/host/sdhci-of-arasan.c
@@ -195,7 +195,6 @@ static int sdhci_arasan_remove(struct platform_device *pdev)
 	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
 	struct sdhci_arasan_data *sdhci_arasan = pltfm_host->priv;
 
-	clk_disable_unprepare(pltfm_host->clk);
 	clk_disable_unprepare(sdhci_arasan->clk_ahb);
 
 	return sdhci_pltfm_unregister(pdev);
diff --git a/drivers/mmc/host/sdhci-pltfm.c b/drivers/mmc/host/sdhci-pltfm.c
index c5b01d6bb85d..74c58d9a4fc8 100644
--- a/drivers/mmc/host/sdhci-pltfm.c
+++ b/drivers/mmc/host/sdhci-pltfm.c
@@ -225,9 +225,11 @@ EXPORT_SYMBOL_GPL(sdhci_pltfm_register);
 int sdhci_pltfm_unregister(struct platform_device *pdev)
 {
 	struct sdhci_host *host = platform_get_drvdata(pdev);
+	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
 	int dead = (readl(host->ioaddr + SDHCI_INT_STATUS) == 0xffffffff);
 
 	sdhci_remove_host(host, dead);
+	clk_disable_unprepare(pltfm_host->clk);
 	sdhci_pltfm_free(pdev);
 
 	return 0;
diff --git a/drivers/mmc/host/sdhci-sirf.c b/drivers/mmc/host/sdhci-sirf.c
index c30d6f3dd9aa..f7dd68e55b49 100644
--- a/drivers/mmc/host/sdhci-sirf.c
+++ b/drivers/mmc/host/sdhci-sirf.c
@@ -196,11 +196,8 @@ err_clk_prepare:
 static int sdhci_sirf_remove(struct platform_device *pdev)
 {
 	struct sdhci_host *host = platform_get_drvdata(pdev);
-	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
 
-	clk_disable_unprepare(pltfm_host->clk);
-	sdhci_pltfm_unregister(pdev);
-	return 0;
+	return sdhci_pltfm_unregister(pdev);
 }
 
 #ifdef CONFIG_PM_SLEEP
diff --git a/drivers/mmc/host/sdhci-st.c b/drivers/mmc/host/sdhci-st.c
index 882b07e9667e..0019df452522 100644
--- a/drivers/mmc/host/sdhci-st.c
+++ b/drivers/mmc/host/sdhci-st.c
@@ -115,11 +115,6 @@ err_of:
 
 static int sdhci_st_remove(struct platform_device *pdev)
 {
-	struct sdhci_host *host = platform_get_drvdata(pdev);
-	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-
-	clk_disable_unprepare(pltfm_host->clk);
-
 	return sdhci_pltfm_unregister(pdev);
 }
 
diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
index 0643f66b4e14..12881e05ff30 100644
--- a/drivers/mmc/host/sdhci-tegra.c
+++ b/drivers/mmc/host/sdhci-tegra.c
@@ -323,17 +323,7 @@ err_alloc_tegra_host:
 
 static int sdhci_tegra_remove(struct platform_device *pdev)
 {
-	struct sdhci_host *host = platform_get_drvdata(pdev);
-	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-	int dead = (readl(host->ioaddr + SDHCI_INT_STATUS) == 0xffffffff);
-
-	sdhci_remove_host(host, dead);
-
-	clk_disable_unprepare(pltfm_host->clk);
-
-	sdhci_pltfm_free(pdev);
-
-	return 0;
+	return sdhci_pltfm_unregister(pdev);
 }
 
 static struct platform_driver sdhci_tegra_driver = {
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v2 7/7] mmc: sdhci: set the .remove to sdhci_pltfm_unregister()
  2015-02-27  7:47 [PATCH v2 0/7] mmc: sdhci: set .remove to sdhci_pltfm_unregister() Kevin Hao
                   ` (5 preceding siblings ...)
  2015-02-27  7:47 ` [PATCH v2 6/7] mmc: sdhci: disable the clock in sdhci_pltfm_unregister() Kevin Hao
@ 2015-02-27  7:47 ` Kevin Hao
  2015-03-05 13:46 ` [PATCH v2 0/7] mmc: sdhci: set " Ulf Hansson
  7 siblings, 0 replies; 11+ messages in thread
From: Kevin Hao @ 2015-02-27  7:47 UTC (permalink / raw)
  To: linux-mmc; +Cc: Chris Ball, Ulf Hansson

In these drivers, the driver specific .remove function just a simple
wrapper of function sdhci_pltfm_unregister(). So remove these wrappers
and just set .remove to sdhci_pltfm_unregister().

Signed-off-by: Kevin Hao <haokexin@gmail.com>
---
v2: No change.

 drivers/mmc/host/sdhci-bcm-kona.c | 7 +------
 drivers/mmc/host/sdhci-bcm2835.c  | 7 +------
 drivers/mmc/host/sdhci-cns3xxx.c  | 7 +------
 drivers/mmc/host/sdhci-dove.c     | 7 +------
 drivers/mmc/host/sdhci-of-esdhc.c | 7 +------
 drivers/mmc/host/sdhci-of-hlwd.c  | 7 +------
 drivers/mmc/host/sdhci-sirf.c     | 9 +--------
 drivers/mmc/host/sdhci-st.c       | 7 +------
 drivers/mmc/host/sdhci-tegra.c    | 7 +------
 9 files changed, 9 insertions(+), 56 deletions(-)

diff --git a/drivers/mmc/host/sdhci-bcm-kona.c b/drivers/mmc/host/sdhci-bcm-kona.c
index 91cba26f75af..2bd90fb35c75 100644
--- a/drivers/mmc/host/sdhci-bcm-kona.c
+++ b/drivers/mmc/host/sdhci-bcm-kona.c
@@ -323,11 +323,6 @@ err_pltfm_free:
 	return ret;
 }
 
-static int sdhci_bcm_kona_remove(struct platform_device *pdev)
-{
-	return sdhci_pltfm_unregister(pdev);
-}
-
 static struct platform_driver sdhci_bcm_kona_driver = {
 	.driver		= {
 		.name	= "sdhci-kona",
@@ -335,7 +330,7 @@ static struct platform_driver sdhci_bcm_kona_driver = {
 		.of_match_table = sdhci_bcm_kona_of_match,
 	},
 	.probe		= sdhci_bcm_kona_probe,
-	.remove		= sdhci_bcm_kona_remove,
+	.remove		= sdhci_pltfm_unregister,
 };
 module_platform_driver(sdhci_bcm_kona_driver);
 
diff --git a/drivers/mmc/host/sdhci-bcm2835.c b/drivers/mmc/host/sdhci-bcm2835.c
index 439d259fdf1d..0ef0343c603a 100644
--- a/drivers/mmc/host/sdhci-bcm2835.c
+++ b/drivers/mmc/host/sdhci-bcm2835.c
@@ -180,11 +180,6 @@ err:
 	return ret;
 }
 
-static int bcm2835_sdhci_remove(struct platform_device *pdev)
-{
-	return sdhci_pltfm_unregister(pdev);
-}
-
 static const struct of_device_id bcm2835_sdhci_of_match[] = {
 	{ .compatible = "brcm,bcm2835-sdhci" },
 	{ }
@@ -198,7 +193,7 @@ static struct platform_driver bcm2835_sdhci_driver = {
 		.pm = SDHCI_PLTFM_PMOPS,
 	},
 	.probe = bcm2835_sdhci_probe,
-	.remove = bcm2835_sdhci_remove,
+	.remove = sdhci_pltfm_unregister,
 };
 module_platform_driver(bcm2835_sdhci_driver);
 
diff --git a/drivers/mmc/host/sdhci-cns3xxx.c b/drivers/mmc/host/sdhci-cns3xxx.c
index a7935a8d0922..59f2923f8054 100644
--- a/drivers/mmc/host/sdhci-cns3xxx.c
+++ b/drivers/mmc/host/sdhci-cns3xxx.c
@@ -98,18 +98,13 @@ static int sdhci_cns3xxx_probe(struct platform_device *pdev)
 	return sdhci_pltfm_register(pdev, &sdhci_cns3xxx_pdata, 0);
 }
 
-static int sdhci_cns3xxx_remove(struct platform_device *pdev)
-{
-	return sdhci_pltfm_unregister(pdev);
-}
-
 static struct platform_driver sdhci_cns3xxx_driver = {
 	.driver		= {
 		.name	= "sdhci-cns3xxx",
 		.pm	= SDHCI_PLTFM_PMOPS,
 	},
 	.probe		= sdhci_cns3xxx_probe,
-	.remove		= sdhci_cns3xxx_remove,
+	.remove		= sdhci_pltfm_unregister,
 };
 
 module_platform_driver(sdhci_cns3xxx_driver);
diff --git a/drivers/mmc/host/sdhci-dove.c b/drivers/mmc/host/sdhci-dove.c
index 2314ff88d942..407c21f152b2 100644
--- a/drivers/mmc/host/sdhci-dove.c
+++ b/drivers/mmc/host/sdhci-dove.c
@@ -108,11 +108,6 @@ err_sdhci_add:
 	return ret;
 }
 
-static int sdhci_dove_remove(struct platform_device *pdev)
-{
-	return sdhci_pltfm_unregister(pdev);
-}
-
 static const struct of_device_id sdhci_dove_of_match_table[] = {
 	{ .compatible = "marvell,dove-sdhci", },
 	{}
@@ -126,7 +121,7 @@ static struct platform_driver sdhci_dove_driver = {
 		.of_match_table = sdhci_dove_of_match_table,
 	},
 	.probe		= sdhci_dove_probe,
-	.remove		= sdhci_dove_remove,
+	.remove		= sdhci_pltfm_unregister,
 };
 
 module_platform_driver(sdhci_dove_driver);
diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c
index 17fe02ed6672..22e9111b11ff 100644
--- a/drivers/mmc/host/sdhci-of-esdhc.c
+++ b/drivers/mmc/host/sdhci-of-esdhc.c
@@ -386,11 +386,6 @@ static int sdhci_esdhc_probe(struct platform_device *pdev)
 	return ret;
 }
 
-static int sdhci_esdhc_remove(struct platform_device *pdev)
-{
-	return sdhci_pltfm_unregister(pdev);
-}
-
 static const struct of_device_id sdhci_esdhc_of_match[] = {
 	{ .compatible = "fsl,mpc8379-esdhc" },
 	{ .compatible = "fsl,mpc8536-esdhc" },
@@ -406,7 +401,7 @@ static struct platform_driver sdhci_esdhc_driver = {
 		.pm = ESDHC_PMOPS,
 	},
 	.probe = sdhci_esdhc_probe,
-	.remove = sdhci_esdhc_remove,
+	.remove = sdhci_pltfm_unregister,
 };
 
 module_platform_driver(sdhci_esdhc_driver);
diff --git a/drivers/mmc/host/sdhci-of-hlwd.c b/drivers/mmc/host/sdhci-of-hlwd.c
index be479279a1d5..4079a96ad37e 100644
--- a/drivers/mmc/host/sdhci-of-hlwd.c
+++ b/drivers/mmc/host/sdhci-of-hlwd.c
@@ -75,11 +75,6 @@ static int sdhci_hlwd_probe(struct platform_device *pdev)
 	return sdhci_pltfm_register(pdev, &sdhci_hlwd_pdata, 0);
 }
 
-static int sdhci_hlwd_remove(struct platform_device *pdev)
-{
-	return sdhci_pltfm_unregister(pdev);
-}
-
 static const struct of_device_id sdhci_hlwd_of_match[] = {
 	{ .compatible = "nintendo,hollywood-sdhci" },
 	{ }
@@ -93,7 +88,7 @@ static struct platform_driver sdhci_hlwd_driver = {
 		.pm = SDHCI_PLTFM_PMOPS,
 	},
 	.probe = sdhci_hlwd_probe,
-	.remove = sdhci_hlwd_remove,
+	.remove = sdhci_pltfm_unregister,
 };
 
 module_platform_driver(sdhci_hlwd_driver);
diff --git a/drivers/mmc/host/sdhci-sirf.c b/drivers/mmc/host/sdhci-sirf.c
index f7dd68e55b49..606af4b5c312 100644
--- a/drivers/mmc/host/sdhci-sirf.c
+++ b/drivers/mmc/host/sdhci-sirf.c
@@ -193,13 +193,6 @@ err_clk_prepare:
 	return ret;
 }
 
-static int sdhci_sirf_remove(struct platform_device *pdev)
-{
-	struct sdhci_host *host = platform_get_drvdata(pdev);
-
-	return sdhci_pltfm_unregister(pdev);
-}
-
 #ifdef CONFIG_PM_SLEEP
 static int sdhci_sirf_suspend(struct device *dev)
 {
@@ -249,7 +242,7 @@ static struct platform_driver sdhci_sirf_driver = {
 #endif
 	},
 	.probe		= sdhci_sirf_probe,
-	.remove		= sdhci_sirf_remove,
+	.remove		= sdhci_pltfm_unregister,
 };
 
 module_platform_driver(sdhci_sirf_driver);
diff --git a/drivers/mmc/host/sdhci-st.c b/drivers/mmc/host/sdhci-st.c
index 0019df452522..594a4ef3285b 100644
--- a/drivers/mmc/host/sdhci-st.c
+++ b/drivers/mmc/host/sdhci-st.c
@@ -113,11 +113,6 @@ err_of:
 	return ret;
 }
 
-static int sdhci_st_remove(struct platform_device *pdev)
-{
-	return sdhci_pltfm_unregister(pdev);
-}
-
 #ifdef CONFIG_PM_SLEEP
 static int sdhci_st_suspend(struct device *dev)
 {
@@ -155,7 +150,7 @@ MODULE_DEVICE_TABLE(of, st_sdhci_match);
 
 static struct platform_driver sdhci_st_driver = {
 	.probe = sdhci_st_probe,
-	.remove = sdhci_st_remove,
+	.remove = sdhci_pltfm_unregister,
 	.driver = {
 		   .name = "sdhci-st",
 		   .pm = &sdhci_st_pmops,
diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
index 12881e05ff30..2489bb753708 100644
--- a/drivers/mmc/host/sdhci-tegra.c
+++ b/drivers/mmc/host/sdhci-tegra.c
@@ -321,11 +321,6 @@ err_alloc_tegra_host:
 	return rc;
 }
 
-static int sdhci_tegra_remove(struct platform_device *pdev)
-{
-	return sdhci_pltfm_unregister(pdev);
-}
-
 static struct platform_driver sdhci_tegra_driver = {
 	.driver		= {
 		.name	= "sdhci-tegra",
@@ -333,7 +328,7 @@ static struct platform_driver sdhci_tegra_driver = {
 		.pm	= SDHCI_PLTFM_PMOPS,
 	},
 	.probe		= sdhci_tegra_probe,
-	.remove		= sdhci_tegra_remove,
+	.remove		= sdhci_pltfm_unregister,
 };
 
 module_platform_driver(sdhci_tegra_driver);
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 5/7] mmc: sdhci-bcm-kona: kill the "external_clk" member in driver private struct
  2015-02-27  7:47 ` [PATCH v2 5/7] mmc: sdhci-bcm-kona: kill the "external_clk" " Kevin Hao
@ 2015-02-27 17:12   ` Ray Jui
  0 siblings, 0 replies; 11+ messages in thread
From: Ray Jui @ 2015-02-27 17:12 UTC (permalink / raw)
  To: Kevin Hao, linux-mmc
  Cc: Chris Ball, Ulf Hansson, Christian Daudt, Matt Porter,
	Florian Fainelli, bcm-kernel-feedback-list

Hi Kevin,

On 2/26/2015 11:47 PM, Kevin Hao wrote:
> Actually we can use the "clk" in the struct sdhci_pltfm_host. Also
> change the "external clock" to "core clock" and kill two redundant
> private functions in this driver as suggested by Ray Jui.
> 
> Signed-off-by: Kevin Hao <haokexin@gmail.com>
> ---
> v2:
>   - s/external clock/core clock/
>   - kill the private functions sdhci_bcm_kona_get_max_clk() and sdhci_bcm_kona_get_timeout_clock()
> 
>  drivers/mmc/host/sdhci-bcm-kona.c | 46 +++++++++++----------------------------
>  1 file changed, 13 insertions(+), 33 deletions(-)
> 
> diff --git a/drivers/mmc/host/sdhci-bcm-kona.c b/drivers/mmc/host/sdhci-bcm-kona.c
> index 34bb8f92586e..5bc263b447b2 100644
> --- a/drivers/mmc/host/sdhci-bcm-kona.c
> +++ b/drivers/mmc/host/sdhci-bcm-kona.c
> @@ -54,7 +54,6 @@
>  
>  struct sdhci_bcm_kona_dev {
>  	struct mutex	write_lock; /* protect back to back writes */
> -	struct clk	*external_clk;
>  };
>  
>  
> @@ -175,24 +174,6 @@ static void sdhci_bcm_kona_card_event(struct sdhci_host *host)
>  	}
>  }
>  
> -/*
> - * Get the base clock. Use central clock source for now. Not sure if different
> - * clock speed to each dev is allowed
> - */
> -static unsigned int sdhci_bcm_kona_get_max_clk(struct sdhci_host *host)
> -{
> -	struct sdhci_bcm_kona_dev *kona_dev;
> -	struct sdhci_pltfm_host *pltfm_priv = sdhci_priv(host);
> -	kona_dev = sdhci_pltfm_priv(pltfm_priv);
> -
> -	return host->mmc->f_max;
> -}
> -
> -static unsigned int sdhci_bcm_kona_get_timeout_clock(struct sdhci_host *host)
> -{
> -	return sdhci_bcm_kona_get_max_clk(host);
> -}
> -
>  static void sdhci_bcm_kona_init_74_clocks(struct sdhci_host *host,
>  				u8 power_mode)
>  {
> @@ -207,8 +188,8 @@ static void sdhci_bcm_kona_init_74_clocks(struct sdhci_host *host,
>  
>  static struct sdhci_ops sdhci_bcm_kona_ops = {
>  	.set_clock = sdhci_set_clock,
> -	.get_max_clock = sdhci_bcm_kona_get_max_clk,
> -	.get_timeout_clock = sdhci_bcm_kona_get_timeout_clock,
> +	.get_max_clock = sdhci_pltfm_clk_get_max_clock,
> +	.get_timeout_clock = sdhci_pltfm_clk_get_max_clock,
>  	.platform_send_init_74_clocks = sdhci_bcm_kona_init_74_clocks,
>  	.set_bus_width = sdhci_set_bus_width,
>  	.reset = sdhci_reset,
> @@ -264,21 +245,21 @@ static int sdhci_bcm_kona_probe(struct platform_device *pdev)
>  		goto err_pltfm_free;
>  	}
>  
> -	/* Get and enable the external clock */
> -	kona_dev->external_clk = devm_clk_get(dev, NULL);
> -	if (IS_ERR(kona_dev->external_clk)) {
> -		dev_err(dev, "Failed to get external clock\n");
> -		ret = PTR_ERR(kona_dev->external_clk);
> +	/* Get and enable the core clock */
> +	pltfm_priv->clk = devm_clk_get(dev, NULL);
> +	if (IS_ERR(pltfm_priv->clk)) {
> +		dev_err(dev, "Failed to get core clock\n");
> +		ret = PTR_ERR(pltfm_priv->clk);
>  		goto err_pltfm_free;
>  	}
>  
> -	if (clk_set_rate(kona_dev->external_clk, host->mmc->f_max) != 0) {
> -		dev_err(dev, "Failed to set rate external clock\n");
> +	if (clk_set_rate(pltfm_priv->clk, host->mmc->f_max) != 0) {
> +		dev_err(dev, "Failed to set rate core clock\n");
>  		goto err_pltfm_free;
>  	}
>  
> -	if (clk_prepare_enable(kona_dev->external_clk) != 0) {
> -		dev_err(dev, "Failed to enable external clock\n");
> +	if (clk_prepare_enable(pltfm_priv->clk) != 0) {
> +		dev_err(dev, "Failed to enable core clock\n");
>  		goto err_pltfm_free;
>  	}
>  
> @@ -333,7 +314,7 @@ err_reset:
>  	sdhci_bcm_kona_sd_reset(host);
>  
>  err_clk_disable:
> -	clk_disable_unprepare(kona_dev->external_clk);
> +	clk_disable_unprepare(pltfm_priv->clk);
>  
>  err_pltfm_free:
>  	sdhci_pltfm_free(pdev);
> @@ -346,12 +327,11 @@ static int sdhci_bcm_kona_remove(struct platform_device *pdev)
>  {
>  	struct sdhci_host *host = platform_get_drvdata(pdev);
>  	struct sdhci_pltfm_host *pltfm_priv = sdhci_priv(host);
> -	struct sdhci_bcm_kona_dev *kona_dev = sdhci_pltfm_priv(pltfm_priv);
>  	int dead = (readl(host->ioaddr + SDHCI_INT_STATUS) == 0xffffffff);
>  
>  	sdhci_remove_host(host, dead);
>  
> -	clk_disable_unprepare(kona_dev->external_clk);
> +	clk_disable_unprepare(pltfm_priv->clk);
>  
>  	sdhci_pltfm_free(pdev);
>  
> 

The change looks good to me. Thanks!

Reviewed-by: Ray Jui <rjui@broadcom.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 3/7] mmc: tegra: use devm help functions to get the clk and gpio
       [not found]     ` <1425023251-4544-4-git-send-email-haokexin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2015-03-02  6:46       ` Alexandre Courbot
  0 siblings, 0 replies; 11+ messages in thread
From: Alexandre Courbot @ 2015-03-02  6:46 UTC (permalink / raw)
  To: Kevin Hao
  Cc: linux-mmc, Chris Ball, Ulf Hansson,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org

On Fri, Feb 27, 2015 at 4:47 PM, Kevin Hao <haokexin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
> Simplify the error and remove path.
>
> Signed-off-by: Kevin Hao <haokexin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> ---
> v2: No change.
>
>  drivers/mmc/host/sdhci-tegra.c | 13 +++----------
>  1 file changed, 3 insertions(+), 10 deletions(-)

Acked-by: Alexandre Courbot <acourbot-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 0/7] mmc: sdhci: set .remove to sdhci_pltfm_unregister()
  2015-02-27  7:47 [PATCH v2 0/7] mmc: sdhci: set .remove to sdhci_pltfm_unregister() Kevin Hao
                   ` (6 preceding siblings ...)
  2015-02-27  7:47 ` [PATCH v2 7/7] mmc: sdhci: set the .remove to sdhci_pltfm_unregister() Kevin Hao
@ 2015-03-05 13:46 ` Ulf Hansson
  7 siblings, 0 replies; 11+ messages in thread
From: Ulf Hansson @ 2015-03-05 13:46 UTC (permalink / raw)
  To: Kevin Hao; +Cc: linux-mmc, Chris Ball

On 27 February 2015 at 08:47, Kevin Hao <haokexin@gmail.com> wrote:
> Hi,
>
> v2:
>   - Update the sdhci-bcm-kona as suggested by Ray Jui.
>   - Also kill the private get_max_clock function in sdhci-sirf.
>
> v1:
> In the current kernel, the specific .remove function in several sdhci platform
> drivers seem pretty similar. Actually we can just set all of them to
> sdhci_pltfm_unregister() with just a bit twist.
>
> Only run test for sdhci-of-esdhc driver. All others just passed the build test.
>
> Kevin Hao (7):
>   mmc: sdhci-dove: remove the unneeded error check
>   mmc: sdhci-dove: kill the driver specific private struct
>   mmc: tegra: use devm help functions to get the clk and gpio
>   mmc: sdhci-sirf: kill the "clk" member in driver private struct
>   mmc: sdhci-bcm-kona: kill the "external_clk" member in driver private
>        struct
>   mmc: sdhci: disable the clock in sdhci_pltfm_unregister()
>   mmc: sdhci: set the .remove to sdhci_pltfm_unregister()
>
>  drivers/mmc/host/sdhci-bcm-kona.c  | 61 ++++++++------------------------------
>  drivers/mmc/host/sdhci-bcm2835.c   |  7 +----
>  drivers/mmc/host/sdhci-cns3xxx.c   |  7 +----
>  drivers/mmc/host/sdhci-dove.c      | 39 ++++--------------------
>  drivers/mmc/host/sdhci-of-arasan.c |  1 -
>  drivers/mmc/host/sdhci-of-esdhc.c  |  7 +----
>  drivers/mmc/host/sdhci-of-hlwd.c   |  7 +----
>  drivers/mmc/host/sdhci-pltfm.c     |  2 ++
>  drivers/mmc/host/sdhci-sirf.c      | 36 +++++-----------------
>  drivers/mmc/host/sdhci-st.c        | 12 +-------
>  drivers/mmc/host/sdhci-tegra.c     | 30 +++----------------
>  11 files changed, 36 insertions(+), 173 deletions(-)
>
> --
> 1.9.3
>

Applied, thanks!

Kind regards
Uffe

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2015-03-05 13:46 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-27  7:47 [PATCH v2 0/7] mmc: sdhci: set .remove to sdhci_pltfm_unregister() Kevin Hao
2015-02-27  7:47 ` [PATCH v2 1/7] mmc: sdhci-dove: remove the unneeded error check Kevin Hao
2015-02-27  7:47 ` [PATCH v2 2/7] mmc: sdhci-dove: kill the driver specific private struct Kevin Hao
     [not found] ` <1425023251-4544-1-git-send-email-haokexin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-02-27  7:47   ` [PATCH v2 3/7] mmc: tegra: use devm help functions to get the clk and gpio Kevin Hao
     [not found]     ` <1425023251-4544-4-git-send-email-haokexin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-03-02  6:46       ` Alexandre Courbot
2015-02-27  7:47 ` [PATCH v2 4/7] mmc: sdhci-sirf: kill the "clk" member in driver private struct Kevin Hao
2015-02-27  7:47 ` [PATCH v2 5/7] mmc: sdhci-bcm-kona: kill the "external_clk" " Kevin Hao
2015-02-27 17:12   ` Ray Jui
2015-02-27  7:47 ` [PATCH v2 6/7] mmc: sdhci: disable the clock in sdhci_pltfm_unregister() Kevin Hao
2015-02-27  7:47 ` [PATCH v2 7/7] mmc: sdhci: set the .remove to sdhci_pltfm_unregister() Kevin Hao
2015-03-05 13:46 ` [PATCH v2 0/7] mmc: sdhci: set " Ulf Hansson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).