Re: [PATCH v4 2/5] mmc: atmel-mci: prepare clk before calling enable

2013-08-24 Thread boris brezillon

Hello Chris,

On 25/08/2013 05:18, Chris Ball wrote:

Hi,

On Thu, Jul 18 2013, Boris BREZILLON wrote:

Replace clk_enable/disable with clk_prepare_enable/disable_unprepare to
avoid common clk framework warnings.

Signed-off-by: Boris BREZILLON 
Acked-by: Ludovic Desroches 

Okay, pushed to mmc-next for 3.12.


Thanks.



Boris, you got feedback from Thomas Petazzoni and Russell King, but
you didn't CC either of them on the patch v4


I didn't knew I had to add the reviewers of a patch in the cc list
of the future versions. I'll do it next time.


, and you didn't write a
changelog explaining the differences between patches v3 and v4 --
please do both of those next time.


The changelog is in the cover letter ("Changes since v3").
But I didn't send you this cover letter.


Also, it looks like the Ack from Ludovic happened away from the MMC
list, since I don't see a message from Ludovic on the thread here.
It would be better if the Ack happened somewhere I can see it.


The 'Acked-by: Ludovic Desroches ' was added
in the 2nd version of this patch series.
But I don't know if I should have kept it in this version since this 
patch has evolved.



Thanks for these feebacks, I'm still learning the good practices of the 
kernel

submission process.
I'll check these points next time.

Best Regards,

Boris

Thanks,

- Chris.


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v4 2/5] mmc: atmel-mci: prepare clk before calling enable

2013-08-24 Thread Chris Ball
Hi,

On Thu, Jul 18 2013, Boris BREZILLON wrote:
> Replace clk_enable/disable with clk_prepare_enable/disable_unprepare to
> avoid common clk framework warnings.
>
> Signed-off-by: Boris BREZILLON 
> Acked-by: Ludovic Desroches 

Okay, pushed to mmc-next for 3.12.

Boris, you got feedback from Thomas Petazzoni and Russell King, but
you didn't CC either of them on the patch v4, and you didn't write a
changelog explaining the differences between patches v3 and v4 --
please do both of those next time.

Also, it looks like the Ack from Ludovic happened away from the MMC
list, since I don't see a message from Ludovic on the thread here.
It would be better if the Ack happened somewhere I can see it.

Thanks,

- Chris.
-- 
Chris Ball  
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v4 2/5] mmc: atmel-mci: prepare clk before calling enable

2013-08-24 Thread Chris Ball
Hi,

On Thu, Jul 18 2013, Boris BREZILLON wrote:
 Replace clk_enable/disable with clk_prepare_enable/disable_unprepare to
 avoid common clk framework warnings.

 Signed-off-by: Boris BREZILLON b.brezil...@overkiz.com
 Acked-by: Ludovic Desroches ludovic.desroc...@atmel.com

Okay, pushed to mmc-next for 3.12.

Boris, you got feedback from Thomas Petazzoni and Russell King, but
you didn't CC either of them on the patch v4, and you didn't write a
changelog explaining the differences between patches v3 and v4 --
please do both of those next time.

Also, it looks like the Ack from Ludovic happened away from the MMC
list, since I don't see a message from Ludovic on the thread here.
It would be better if the Ack happened somewhere I can see it.

Thanks,

- Chris.
-- 
Chris Ball   c...@laptop.org   http://printf.net/
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v4 2/5] mmc: atmel-mci: prepare clk before calling enable

2013-08-24 Thread boris brezillon

Hello Chris,

On 25/08/2013 05:18, Chris Ball wrote:

Hi,

On Thu, Jul 18 2013, Boris BREZILLON wrote:

Replace clk_enable/disable with clk_prepare_enable/disable_unprepare to
avoid common clk framework warnings.

Signed-off-by: Boris BREZILLON b.brezil...@overkiz.com
Acked-by: Ludovic Desroches ludovic.desroc...@atmel.com

Okay, pushed to mmc-next for 3.12.


Thanks.



Boris, you got feedback from Thomas Petazzoni and Russell King, but
you didn't CC either of them on the patch v4


I didn't knew I had to add the reviewers of a patch in the cc list
of the future versions. I'll do it next time.


, and you didn't write a
changelog explaining the differences between patches v3 and v4 --
please do both of those next time.


The changelog is in the cover letter (Changes since v3).
But I didn't send you this cover letter.


Also, it looks like the Ack from Ludovic happened away from the MMC
list, since I don't see a message from Ludovic on the thread here.
It would be better if the Ack happened somewhere I can see it.


The 'Acked-by: Ludovic Desroches ludovic.desroc...@atmel.com' was added
in the 2nd version of this patch series.
But I don't know if I should have kept it in this version since this 
patch has evolved.



Thanks for these feebacks, I'm still learning the good practices of the 
kernel

submission process.
I'll check these points next time.

Best Regards,

Boris

Thanks,

- Chris.


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


Re: [PATCH v4 2/5] mmc: atmel-mci: prepare clk before calling enable

2013-08-22 Thread boris brezillon

Hello Chris,

Could you take this patch ?

It has been acked by Ludovic, and I need it in order to gracefully handle
at91's SoCs migration to common clk framework.

Thanks.

Best Regards,

Boris

On 18/07/2013 09:38, Boris BREZILLON wrote:

Replace clk_enable/disable with clk_prepare_enable/disable_unprepare to
avoid common clk framework warnings.

Signed-off-by: Boris BREZILLON 
Acked-by: Ludovic Desroches 
---
  drivers/mmc/host/atmel-mci.c |   34 +++---
  1 file changed, 27 insertions(+), 7 deletions(-)

diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c
index bdb84da..69e438e 100644
--- a/drivers/mmc/host/atmel-mci.c
+++ b/drivers/mmc/host/atmel-mci.c
@@ -378,6 +378,8 @@ static int atmci_regs_show(struct seq_file *s, void *v)
  {
struct atmel_mci*host = s->private;
u32 *buf;
+   int ret = 0;
+
  
  	buf = kmalloc(ATMCI_REGS_SIZE, GFP_KERNEL);

if (!buf)
@@ -388,12 +390,16 @@ static int atmci_regs_show(struct seq_file *s, void *v)
 * not disabling interrupts, so IMR and SR may not be
 * consistent.
 */
+   ret = clk_prepare_enable(host->mck);
+   if (ret)
+   goto out;
+
spin_lock_bh(>lock);
-   clk_enable(host->mck);
memcpy_fromio(buf, host->regs, ATMCI_REGS_SIZE);
-   clk_disable(host->mck);
spin_unlock_bh(>lock);
  
+	clk_disable_unprepare(host->mck);

+
seq_printf(s, "MR:\t0x%08x%s%s ",
buf[ATMCI_MR / 4],
buf[ATMCI_MR / 4] & ATMCI_MR_RDPROOF ? " RDPROOF" : "",
@@ -442,9 +448,10 @@ static int atmci_regs_show(struct seq_file *s, void *v)
val & ATMCI_CFG_LSYNC ? " LSYNC" : "");
}
  
+out:

kfree(buf);
  
-	return 0;

+   return ret;
  }
  
  static int atmci_regs_open(struct inode *inode, struct file *file)

@@ -1262,6 +1269,7 @@ static void atmci_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
struct atmel_mci_slot   *slot = mmc_priv(mmc);
struct atmel_mci*host = slot->host;
unsigned inti;
+   boolunprepare_clk;
  
  	slot->sdc_reg &= ~ATMCI_SDCBUS_MASK;

switch (ios->bus_width) {
@@ -1277,9 +1285,13 @@ static void atmci_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
unsigned int clock_min = ~0U;
u32 clkdiv;
  
+		clk_prepare(host->mck);

+   unprepare_clk = true;
+
spin_lock_bh(>lock);
if (!host->mode_reg) {
clk_enable(host->mck);
+   unprepare_clk = false;
atmci_writel(host, ATMCI_CR, ATMCI_CR_SWRST);
atmci_writel(host, ATMCI_CR, ATMCI_CR_MCIEN);
if (host->caps.has_cfg_reg)
@@ -1347,6 +1359,8 @@ static void atmci_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
} else {
bool any_slot_active = false;
  
+		unprepare_clk = false;

+
spin_lock_bh(>lock);
slot->clock = 0;
for (i = 0; i < ATMCI_MAX_NR_SLOTS; i++) {
@@ -1360,12 +1374,16 @@ static void atmci_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
if (host->mode_reg) {
atmci_readl(host, ATMCI_MR);
clk_disable(host->mck);
+   unprepare_clk = true;
}
host->mode_reg = 0;
}
spin_unlock_bh(>lock);
}
  
+	if (unprepare_clk)

+   clk_unprepare(host->mck);
+
switch (ios->power_mode) {
case MMC_POWER_UP:
set_bit(ATMCI_CARD_NEED_INIT, >flags);
@@ -2376,10 +2394,12 @@ static int __init atmci_probe(struct platform_device 
*pdev)
if (!host->regs)
goto err_ioremap;
  
-	clk_enable(host->mck);

+   ret = clk_prepare_enable(host->mck);
+   if (ret)
+   goto err_request_irq;
atmci_writel(host, ATMCI_CR, ATMCI_CR_SWRST);
host->bus_hz = clk_get_rate(host->mck);
-   clk_disable(host->mck);
+   clk_disable_unprepare(host->mck);
  
  	host->mapbase = regs->start;
  
@@ -2482,11 +2502,11 @@ static int __exit atmci_remove(struct platform_device *pdev)

atmci_cleanup_slot(host->slot[i], i);
}
  
-	clk_enable(host->mck);

+   clk_prepare_enable(host->mck);
atmci_writel(host, ATMCI_IDR, ~0UL);
atmci_writel(host, ATMCI_CR, ATMCI_CR_MCIDIS);
atmci_readl(host, ATMCI_SR);
-   clk_disable(host->mck);
+   clk_disable_unprepare(host->mck);
  
  	if (host->dma.chan)

dma_release_channel(host->dma.chan);


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org

Re: [PATCH v4 2/5] mmc: atmel-mci: prepare clk before calling enable

2013-08-22 Thread boris brezillon

Hello Chris,

Could you take this patch ?

It has been acked by Ludovic, and I need it in order to gracefully handle
at91's SoCs migration to common clk framework.

Thanks.

Best Regards,

Boris

On 18/07/2013 09:38, Boris BREZILLON wrote:

Replace clk_enable/disable with clk_prepare_enable/disable_unprepare to
avoid common clk framework warnings.

Signed-off-by: Boris BREZILLON b.brezil...@overkiz.com
Acked-by: Ludovic Desroches ludovic.desroc...@atmel.com
---
  drivers/mmc/host/atmel-mci.c |   34 +++---
  1 file changed, 27 insertions(+), 7 deletions(-)

diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c
index bdb84da..69e438e 100644
--- a/drivers/mmc/host/atmel-mci.c
+++ b/drivers/mmc/host/atmel-mci.c
@@ -378,6 +378,8 @@ static int atmci_regs_show(struct seq_file *s, void *v)
  {
struct atmel_mci*host = s-private;
u32 *buf;
+   int ret = 0;
+
  
  	buf = kmalloc(ATMCI_REGS_SIZE, GFP_KERNEL);

if (!buf)
@@ -388,12 +390,16 @@ static int atmci_regs_show(struct seq_file *s, void *v)
 * not disabling interrupts, so IMR and SR may not be
 * consistent.
 */
+   ret = clk_prepare_enable(host-mck);
+   if (ret)
+   goto out;
+
spin_lock_bh(host-lock);
-   clk_enable(host-mck);
memcpy_fromio(buf, host-regs, ATMCI_REGS_SIZE);
-   clk_disable(host-mck);
spin_unlock_bh(host-lock);
  
+	clk_disable_unprepare(host-mck);

+
seq_printf(s, MR:\t0x%08x%s%s ,
buf[ATMCI_MR / 4],
buf[ATMCI_MR / 4]  ATMCI_MR_RDPROOF ?  RDPROOF : ,
@@ -442,9 +448,10 @@ static int atmci_regs_show(struct seq_file *s, void *v)
val  ATMCI_CFG_LSYNC ?  LSYNC : );
}
  
+out:

kfree(buf);
  
-	return 0;

+   return ret;
  }
  
  static int atmci_regs_open(struct inode *inode, struct file *file)

@@ -1262,6 +1269,7 @@ static void atmci_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
struct atmel_mci_slot   *slot = mmc_priv(mmc);
struct atmel_mci*host = slot-host;
unsigned inti;
+   boolunprepare_clk;
  
  	slot-sdc_reg = ~ATMCI_SDCBUS_MASK;

switch (ios-bus_width) {
@@ -1277,9 +1285,13 @@ static void atmci_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
unsigned int clock_min = ~0U;
u32 clkdiv;
  
+		clk_prepare(host-mck);

+   unprepare_clk = true;
+
spin_lock_bh(host-lock);
if (!host-mode_reg) {
clk_enable(host-mck);
+   unprepare_clk = false;
atmci_writel(host, ATMCI_CR, ATMCI_CR_SWRST);
atmci_writel(host, ATMCI_CR, ATMCI_CR_MCIEN);
if (host-caps.has_cfg_reg)
@@ -1347,6 +1359,8 @@ static void atmci_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
} else {
bool any_slot_active = false;
  
+		unprepare_clk = false;

+
spin_lock_bh(host-lock);
slot-clock = 0;
for (i = 0; i  ATMCI_MAX_NR_SLOTS; i++) {
@@ -1360,12 +1374,16 @@ static void atmci_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
if (host-mode_reg) {
atmci_readl(host, ATMCI_MR);
clk_disable(host-mck);
+   unprepare_clk = true;
}
host-mode_reg = 0;
}
spin_unlock_bh(host-lock);
}
  
+	if (unprepare_clk)

+   clk_unprepare(host-mck);
+
switch (ios-power_mode) {
case MMC_POWER_UP:
set_bit(ATMCI_CARD_NEED_INIT, slot-flags);
@@ -2376,10 +2394,12 @@ static int __init atmci_probe(struct platform_device 
*pdev)
if (!host-regs)
goto err_ioremap;
  
-	clk_enable(host-mck);

+   ret = clk_prepare_enable(host-mck);
+   if (ret)
+   goto err_request_irq;
atmci_writel(host, ATMCI_CR, ATMCI_CR_SWRST);
host-bus_hz = clk_get_rate(host-mck);
-   clk_disable(host-mck);
+   clk_disable_unprepare(host-mck);
  
  	host-mapbase = regs-start;
  
@@ -2482,11 +2502,11 @@ static int __exit atmci_remove(struct platform_device *pdev)

atmci_cleanup_slot(host-slot[i], i);
}
  
-	clk_enable(host-mck);

+   clk_prepare_enable(host-mck);
atmci_writel(host, ATMCI_IDR, ~0UL);
atmci_writel(host, ATMCI_CR, ATMCI_CR_MCIDIS);
atmci_readl(host, ATMCI_SR);
-   clk_disable(host-mck);
+   clk_disable_unprepare(host-mck);
  
  	if (host-dma.chan)

dma_release_channel(host-dma.chan);


--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to 

[PATCH v4 2/5] mmc: atmel-mci: prepare clk before calling enable

2013-07-18 Thread Boris BREZILLON
Replace clk_enable/disable with clk_prepare_enable/disable_unprepare to
avoid common clk framework warnings.

Signed-off-by: Boris BREZILLON 
Acked-by: Ludovic Desroches 
---
 drivers/mmc/host/atmel-mci.c |   34 +++---
 1 file changed, 27 insertions(+), 7 deletions(-)

diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c
index bdb84da..69e438e 100644
--- a/drivers/mmc/host/atmel-mci.c
+++ b/drivers/mmc/host/atmel-mci.c
@@ -378,6 +378,8 @@ static int atmci_regs_show(struct seq_file *s, void *v)
 {
struct atmel_mci*host = s->private;
u32 *buf;
+   int ret = 0;
+
 
buf = kmalloc(ATMCI_REGS_SIZE, GFP_KERNEL);
if (!buf)
@@ -388,12 +390,16 @@ static int atmci_regs_show(struct seq_file *s, void *v)
 * not disabling interrupts, so IMR and SR may not be
 * consistent.
 */
+   ret = clk_prepare_enable(host->mck);
+   if (ret)
+   goto out;
+
spin_lock_bh(>lock);
-   clk_enable(host->mck);
memcpy_fromio(buf, host->regs, ATMCI_REGS_SIZE);
-   clk_disable(host->mck);
spin_unlock_bh(>lock);
 
+   clk_disable_unprepare(host->mck);
+
seq_printf(s, "MR:\t0x%08x%s%s ",
buf[ATMCI_MR / 4],
buf[ATMCI_MR / 4] & ATMCI_MR_RDPROOF ? " RDPROOF" : "",
@@ -442,9 +448,10 @@ static int atmci_regs_show(struct seq_file *s, void *v)
val & ATMCI_CFG_LSYNC ? " LSYNC" : "");
}
 
+out:
kfree(buf);
 
-   return 0;
+   return ret;
 }
 
 static int atmci_regs_open(struct inode *inode, struct file *file)
@@ -1262,6 +1269,7 @@ static void atmci_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
struct atmel_mci_slot   *slot = mmc_priv(mmc);
struct atmel_mci*host = slot->host;
unsigned inti;
+   boolunprepare_clk;
 
slot->sdc_reg &= ~ATMCI_SDCBUS_MASK;
switch (ios->bus_width) {
@@ -1277,9 +1285,13 @@ static void atmci_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
unsigned int clock_min = ~0U;
u32 clkdiv;
 
+   clk_prepare(host->mck);
+   unprepare_clk = true;
+
spin_lock_bh(>lock);
if (!host->mode_reg) {
clk_enable(host->mck);
+   unprepare_clk = false;
atmci_writel(host, ATMCI_CR, ATMCI_CR_SWRST);
atmci_writel(host, ATMCI_CR, ATMCI_CR_MCIEN);
if (host->caps.has_cfg_reg)
@@ -1347,6 +1359,8 @@ static void atmci_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
} else {
bool any_slot_active = false;
 
+   unprepare_clk = false;
+
spin_lock_bh(>lock);
slot->clock = 0;
for (i = 0; i < ATMCI_MAX_NR_SLOTS; i++) {
@@ -1360,12 +1374,16 @@ static void atmci_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
if (host->mode_reg) {
atmci_readl(host, ATMCI_MR);
clk_disable(host->mck);
+   unprepare_clk = true;
}
host->mode_reg = 0;
}
spin_unlock_bh(>lock);
}
 
+   if (unprepare_clk)
+   clk_unprepare(host->mck);
+
switch (ios->power_mode) {
case MMC_POWER_UP:
set_bit(ATMCI_CARD_NEED_INIT, >flags);
@@ -2376,10 +2394,12 @@ static int __init atmci_probe(struct platform_device 
*pdev)
if (!host->regs)
goto err_ioremap;
 
-   clk_enable(host->mck);
+   ret = clk_prepare_enable(host->mck);
+   if (ret)
+   goto err_request_irq;
atmci_writel(host, ATMCI_CR, ATMCI_CR_SWRST);
host->bus_hz = clk_get_rate(host->mck);
-   clk_disable(host->mck);
+   clk_disable_unprepare(host->mck);
 
host->mapbase = regs->start;
 
@@ -2482,11 +2502,11 @@ static int __exit atmci_remove(struct platform_device 
*pdev)
atmci_cleanup_slot(host->slot[i], i);
}
 
-   clk_enable(host->mck);
+   clk_prepare_enable(host->mck);
atmci_writel(host, ATMCI_IDR, ~0UL);
atmci_writel(host, ATMCI_CR, ATMCI_CR_MCIDIS);
atmci_readl(host, ATMCI_SR);
-   clk_disable(host->mck);
+   clk_disable_unprepare(host->mck);
 
if (host->dma.chan)
dma_release_channel(host->dma.chan);
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH v4 2/5] mmc: atmel-mci: prepare clk before calling enable

2013-07-18 Thread Boris BREZILLON
Replace clk_enable/disable with clk_prepare_enable/disable_unprepare to
avoid common clk framework warnings.

Signed-off-by: Boris BREZILLON b.brezil...@overkiz.com
Acked-by: Ludovic Desroches ludovic.desroc...@atmel.com
---
 drivers/mmc/host/atmel-mci.c |   34 +++---
 1 file changed, 27 insertions(+), 7 deletions(-)

diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c
index bdb84da..69e438e 100644
--- a/drivers/mmc/host/atmel-mci.c
+++ b/drivers/mmc/host/atmel-mci.c
@@ -378,6 +378,8 @@ static int atmci_regs_show(struct seq_file *s, void *v)
 {
struct atmel_mci*host = s-private;
u32 *buf;
+   int ret = 0;
+
 
buf = kmalloc(ATMCI_REGS_SIZE, GFP_KERNEL);
if (!buf)
@@ -388,12 +390,16 @@ static int atmci_regs_show(struct seq_file *s, void *v)
 * not disabling interrupts, so IMR and SR may not be
 * consistent.
 */
+   ret = clk_prepare_enable(host-mck);
+   if (ret)
+   goto out;
+
spin_lock_bh(host-lock);
-   clk_enable(host-mck);
memcpy_fromio(buf, host-regs, ATMCI_REGS_SIZE);
-   clk_disable(host-mck);
spin_unlock_bh(host-lock);
 
+   clk_disable_unprepare(host-mck);
+
seq_printf(s, MR:\t0x%08x%s%s ,
buf[ATMCI_MR / 4],
buf[ATMCI_MR / 4]  ATMCI_MR_RDPROOF ?  RDPROOF : ,
@@ -442,9 +448,10 @@ static int atmci_regs_show(struct seq_file *s, void *v)
val  ATMCI_CFG_LSYNC ?  LSYNC : );
}
 
+out:
kfree(buf);
 
-   return 0;
+   return ret;
 }
 
 static int atmci_regs_open(struct inode *inode, struct file *file)
@@ -1262,6 +1269,7 @@ static void atmci_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
struct atmel_mci_slot   *slot = mmc_priv(mmc);
struct atmel_mci*host = slot-host;
unsigned inti;
+   boolunprepare_clk;
 
slot-sdc_reg = ~ATMCI_SDCBUS_MASK;
switch (ios-bus_width) {
@@ -1277,9 +1285,13 @@ static void atmci_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
unsigned int clock_min = ~0U;
u32 clkdiv;
 
+   clk_prepare(host-mck);
+   unprepare_clk = true;
+
spin_lock_bh(host-lock);
if (!host-mode_reg) {
clk_enable(host-mck);
+   unprepare_clk = false;
atmci_writel(host, ATMCI_CR, ATMCI_CR_SWRST);
atmci_writel(host, ATMCI_CR, ATMCI_CR_MCIEN);
if (host-caps.has_cfg_reg)
@@ -1347,6 +1359,8 @@ static void atmci_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
} else {
bool any_slot_active = false;
 
+   unprepare_clk = false;
+
spin_lock_bh(host-lock);
slot-clock = 0;
for (i = 0; i  ATMCI_MAX_NR_SLOTS; i++) {
@@ -1360,12 +1374,16 @@ static void atmci_set_ios(struct mmc_host *mmc, struct 
mmc_ios *ios)
if (host-mode_reg) {
atmci_readl(host, ATMCI_MR);
clk_disable(host-mck);
+   unprepare_clk = true;
}
host-mode_reg = 0;
}
spin_unlock_bh(host-lock);
}
 
+   if (unprepare_clk)
+   clk_unprepare(host-mck);
+
switch (ios-power_mode) {
case MMC_POWER_UP:
set_bit(ATMCI_CARD_NEED_INIT, slot-flags);
@@ -2376,10 +2394,12 @@ static int __init atmci_probe(struct platform_device 
*pdev)
if (!host-regs)
goto err_ioremap;
 
-   clk_enable(host-mck);
+   ret = clk_prepare_enable(host-mck);
+   if (ret)
+   goto err_request_irq;
atmci_writel(host, ATMCI_CR, ATMCI_CR_SWRST);
host-bus_hz = clk_get_rate(host-mck);
-   clk_disable(host-mck);
+   clk_disable_unprepare(host-mck);
 
host-mapbase = regs-start;
 
@@ -2482,11 +2502,11 @@ static int __exit atmci_remove(struct platform_device 
*pdev)
atmci_cleanup_slot(host-slot[i], i);
}
 
-   clk_enable(host-mck);
+   clk_prepare_enable(host-mck);
atmci_writel(host, ATMCI_IDR, ~0UL);
atmci_writel(host, ATMCI_CR, ATMCI_CR_MCIDIS);
atmci_readl(host, ATMCI_SR);
-   clk_disable(host-mck);
+   clk_disable_unprepare(host-mck);
 
if (host-dma.chan)
dma_release_channel(host-dma.chan);
-- 
1.7.9.5

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