All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH resend 0/3] sdhci-pltfm: Few additions and enhancements
@ 2010-03-16 18:34 Anton Vorontsov
  2010-03-16 18:34 ` [PATCH 1/3] sdhci: Implement CAP_CLOCK_BASE_BROKEN quirk Anton Vorontsov
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Anton Vorontsov @ 2010-03-16 18:34 UTC (permalink / raw)
  To: Andrew Morton
  Cc: David Vrabel, Richard Röjfors, Pierre Ossman, Ben Dooks,
	linux-mmc, linux-kernel

On Fri, Feb 19, 2010 at 11:11:00PM +0300, Anton Vorontsov wrote:
> On Fri, Feb 19, 2010 at 07:55:30PM +0000, David Vrabel wrote:
> > Anton Vorontsov wrote:
> > > Some hosts (e.g. as found in CNS3xxx SOCs) report wrong value in
> > > CLOCK_BASE capability field, and currently there is no way to
> > > force the SDHCI core to use the platform-provided base clock value.
> > 
> > I don't think this needs a new quirk. Change the sdhci driver to check
> > if the platform provides a value before reading the standard register.
> 
> Well, Pierre once said that by default we should conform to the
> SDHCI spec, and any diviations from the spec should be handled by
> the quirks:
> 
> http://linux.derkeiler.com/Mailing-Lists/Kernel/2009-02/msg03385.html
> 
> Spec clearly states that base clock == 0 is the case when we should
> fall back to the platform-provided clocks.

No further comments, resending the patches...

Thanks,

-- 
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2

^ permalink raw reply	[flat|nested] 11+ messages in thread
* [PATCH 2/3] sdhci-pltfm: Implement platform data passing
@ 2010-02-19 19:48 Anton Vorontsov
  0 siblings, 0 replies; 11+ messages in thread
From: Anton Vorontsov @ 2010-02-19 19:48 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Richard Röjfors, Pierre Ossman, Ben Dooks, linux-mmc,
	linux-kernel

This includes platform ops, quirks and (de)initialization callbacks.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
 drivers/mmc/host/sdhci-pltfm.c |   24 ++++++++++++++++++++----
 drivers/mmc/host/sdhci-pltfm.h |   27 +++++++++++++++++++++++++++
 2 files changed, 47 insertions(+), 4 deletions(-)
 create mode 100644 drivers/mmc/host/sdhci-pltfm.h

diff --git a/drivers/mmc/host/sdhci-pltfm.c b/drivers/mmc/host/sdhci-pltfm.c
index 297f40a..d0a52cb 100644
--- a/drivers/mmc/host/sdhci-pltfm.c
+++ b/drivers/mmc/host/sdhci-pltfm.c
@@ -31,6 +31,7 @@
 #include <linux/io.h>
 
 #include "sdhci.h"
+#include "sdhci-pltfm.h"
 
 /*****************************************************************************\
  *                                                                           *
@@ -49,12 +50,11 @@ static struct sdhci_ops sdhci_pltfm_ops = {
 
 static int __devinit sdhci_pltfm_probe(struct platform_device *pdev)
 {
+	struct sdhci_pltfm_data *pdata = pdev->dev.platform_data;
 	struct sdhci_host *host;
 	struct resource *iomem;
 	int ret;
 
-	BUG_ON(pdev == NULL);
-
 	iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	if (!iomem) {
 		ret = -ENOMEM;
@@ -76,7 +76,12 @@ static int __devinit sdhci_pltfm_probe(struct platform_device *pdev)
 	}
 
 	host->hw_name = "platform";
-	host->ops = &sdhci_pltfm_ops;
+	if (pdata && pdata->ops)
+		host->ops = pdata->ops;
+	else
+		host->ops = &sdhci_pltfm_ops;
+	if (pdata)
+		host->quirks = pdata->quirks;
 	host->irq = platform_get_irq(pdev, 0);
 
 	if (!request_mem_region(iomem->start, resource_size(iomem),
@@ -93,6 +98,12 @@ static int __devinit sdhci_pltfm_probe(struct platform_device *pdev)
 		goto err_remap;
 	}
 
+	if (pdata && pdata->init) {
+		ret = pdata->init(host);
+		if (ret)
+			goto err_plat_init;
+	}
+
 	ret = sdhci_add_host(host);
 	if (ret)
 		goto err_add_host;
@@ -102,6 +113,9 @@ static int __devinit sdhci_pltfm_probe(struct platform_device *pdev)
 	return 0;
 
 err_add_host:
+	if (pdata && pdata->exit)
+		pdata->exit(host);
+err_plat_init:
 	iounmap(host->ioaddr);
 err_remap:
 	release_mem_region(iomem->start, resource_size(iomem));
@@ -114,6 +128,7 @@ err:
 
 static int __devexit sdhci_pltfm_remove(struct platform_device *pdev)
 {
+	struct sdhci_pltfm_data *pdata = pdev->dev.platform_data;
 	struct sdhci_host *host = platform_get_drvdata(pdev);
 	struct resource *iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	int dead;
@@ -125,6 +140,8 @@ static int __devexit sdhci_pltfm_remove(struct platform_device *pdev)
 		dead = 1;
 
 	sdhci_remove_host(host, dead);
+	if (pdata && pdata->exit)
+		pdata->exit(host);
 	iounmap(host->ioaddr);
 	release_mem_region(iomem->start, resource_size(iomem));
 	sdhci_free_host(host);
@@ -165,4 +182,3 @@ MODULE_DESCRIPTION("Secure Digital Host Controller Interface platform driver");
 MODULE_AUTHOR("Mocean Laboratories <info@mocean-labs.com>");
 MODULE_LICENSE("GPL v2");
 MODULE_ALIAS("platform:sdhci");
-
diff --git a/drivers/mmc/host/sdhci-pltfm.h b/drivers/mmc/host/sdhci-pltfm.h
new file mode 100644
index 0000000..0aaa334
--- /dev/null
+++ b/drivers/mmc/host/sdhci-pltfm.h
@@ -0,0 +1,27 @@
+/*
+ * Platform data declarations for the sdhci-pltfm driver.
+ *
+ * Copyright (c) 2010 MontaVista Software, LLC.
+ *
+ * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ */
+
+#ifndef _SDHCI_PLTFM_H
+#define _SDHCI_PLTFM_H
+
+struct sdhci_ops;
+struct sdhci_host;
+
+struct sdhci_pltfm_data {
+	struct sdhci_ops *ops;
+	unsigned int quirks;
+	int (*init)(struct sdhci_host *host);
+	void (*exit)(struct sdhci_host *host);
+};
+
+#endif /* _SDHCI_PLTFM_H */
-- 
1.7.0

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

end of thread, other threads:[~2010-05-03  6:01 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-16 18:34 [PATCH resend 0/3] sdhci-pltfm: Few additions and enhancements Anton Vorontsov
2010-03-16 18:34 ` [PATCH 1/3] sdhci: Implement CAP_CLOCK_BASE_BROKEN quirk Anton Vorontsov
2010-03-16 18:34 ` [PATCH 2/3] sdhci-pltfm: Implement platform data passing Anton Vorontsov
2010-03-17  6:14   ` Richard Röjfors
2010-04-23 18:26     ` [PATCH] sdhci-pltfm: Add kernel-doc for struct sdhci_pltfm_data Anton Vorontsov
2010-03-16 18:34 ` [PATCH 3/3] sdhci-pltfm: Do not print errors in case of an extended iomem size Anton Vorontsov
2010-03-17  6:02   ` Richard Röjfors
2010-03-22 19:30     ` Andrew Morton
2010-04-23 18:25     ` Anton Vorontsov
2010-05-03  6:01       ` Richard Röjfors
  -- strict thread matches above, loose matches on Subject: below --
2010-02-19 19:48 [PATCH 2/3] sdhci-pltfm: Implement platform data passing Anton Vorontsov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.