aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/host/sdhci-of-esdhc.c
diff options
context:
space:
mode:
authorShawn Guo <shawn.guo@linaro.org>2011-05-27 11:48:14 -0400
committerChris Ball <cjb@laptop.org>2011-07-20 17:20:47 -0400
commit38576af1f8cad48446df47dcf404b197c9206dba (patch)
tree2e35c4fe4588b95febfb4430bbf784b5634b216d /drivers/mmc/host/sdhci-of-esdhc.c
parente307148fd4f971cecfaebb516ee28e164948a24b (diff)
mmc: sdhci: make sdhci-of device drivers self registered
The patch turns the sdhci-of-core common stuff into helper functions added into sdhci-pltfm.c, and makes sdhci-of device drviers self registered using the same pair of .probe and .remove used by sdhci-pltfm device drivers. As a result, sdhci-of-core.c and sdhci-of.h can be eliminated with those common things merged into sdhci-pltfm.c and sdhci-pltfm.h respectively. Signed-off-by: Shawn Guo <shawn.guo@linaro.org> Acked-by: Anton Vorontsov <cbouatmailru@gmail.com> Reviewed-by: Wolfram Sang <w.sang@pengutronix.de> Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc/host/sdhci-of-esdhc.c')
-rw-r--r--drivers/mmc/host/sdhci-of-esdhc.c53
1 files changed, 51 insertions, 2 deletions
diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c
index 492bcd72180a..2db6a455d839 100644
--- a/drivers/mmc/host/sdhci-of-esdhc.c
+++ b/drivers/mmc/host/sdhci-of-esdhc.c
@@ -16,7 +16,7 @@
16#include <linux/io.h> 16#include <linux/io.h>
17#include <linux/delay.h> 17#include <linux/delay.h>
18#include <linux/mmc/host.h> 18#include <linux/mmc/host.h>
19#include "sdhci-of.h" 19#include "sdhci-pltfm.h"
20#include "sdhci.h" 20#include "sdhci.h"
21#include "sdhci-esdhc.h" 21#include "sdhci-esdhc.h"
22 22
@@ -85,9 +85,58 @@ static struct sdhci_ops sdhci_esdhc_ops = {
85 .get_min_clock = esdhc_of_get_min_clock, 85 .get_min_clock = esdhc_of_get_min_clock,
86}; 86};
87 87
88struct sdhci_pltfm_data sdhci_esdhc_pdata = { 88static struct sdhci_pltfm_data sdhci_esdhc_pdata = {
89 /* card detection could be handled via GPIO */ 89 /* card detection could be handled via GPIO */
90 .quirks = ESDHC_DEFAULT_QUIRKS | SDHCI_QUIRK_BROKEN_CARD_DETECTION 90 .quirks = ESDHC_DEFAULT_QUIRKS | SDHCI_QUIRK_BROKEN_CARD_DETECTION
91 | SDHCI_QUIRK_NO_CARD_NO_RESET, 91 | SDHCI_QUIRK_NO_CARD_NO_RESET,
92 .ops = &sdhci_esdhc_ops, 92 .ops = &sdhci_esdhc_ops,
93}; 93};
94
95static int __devinit sdhci_esdhc_probe(struct platform_device *pdev)
96{
97 return sdhci_pltfm_register(pdev, &sdhci_esdhc_pdata);
98}
99
100static int __devexit sdhci_esdhc_remove(struct platform_device *pdev)
101{
102 return sdhci_pltfm_unregister(pdev);
103}
104
105static const struct of_device_id sdhci_esdhc_of_match[] = {
106 { .compatible = "fsl,mpc8379-esdhc" },
107 { .compatible = "fsl,mpc8536-esdhc" },
108 { .compatible = "fsl,esdhc" },
109 { }
110};
111MODULE_DEVICE_TABLE(of, sdhci_esdhc_of_match);
112
113static struct platform_driver sdhci_esdhc_driver = {
114 .driver = {
115 .name = "sdhci-esdhc",
116 .owner = THIS_MODULE,
117 .of_match_table = sdhci_esdhc_of_match,
118 },
119 .probe = sdhci_esdhc_probe,
120 .remove = __devexit_p(sdhci_esdhc_remove),
121#ifdef CONFIG_PM
122 .suspend = sdhci_pltfm_suspend,
123 .resume = sdhci_pltfm_resume,
124#endif
125};
126
127static int __init sdhci_esdhc_init(void)
128{
129 return platform_driver_register(&sdhci_esdhc_driver);
130}
131module_init(sdhci_esdhc_init);
132
133static void __exit sdhci_esdhc_exit(void)
134{
135 platform_driver_unregister(&sdhci_esdhc_driver);
136}
137module_exit(sdhci_esdhc_exit);
138
139MODULE_DESCRIPTION("SDHCI OF driver for Freescale MPC eSDHC");
140MODULE_AUTHOR("Xiaobo Xie <X.Xie@freescale.com>, "
141 "Anton Vorontsov <avorontsov@ru.mvista.com>");
142MODULE_LICENSE("GPL v2");