aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-u300/mmc.c
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@stericsson.com>2009-08-10 07:52:40 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2009-08-15 10:36:28 -0400
commitdf1e0520f9434b5b771c854a13dd928727d8673a (patch)
tree5d48442a1c8e43122511fd0c73596ac3917f8483 /arch/arm/mach-u300/mmc.c
parent5ad73d07173e7b76c16bcb8b6cf64d8386019689 (diff)
ARM: 5666/1: Revamped U300 padmux API
This abstracts the hackish padmux API on the U300 platform into something more manageable. It provides a way for drivers to activate/deactivate a certain padmux setting. It will also switch the users of the old API over to using the new style, pushing muxing into the apropriate setup files. Signed-off-by: Linus Walleij <linus.walleij@stericsson.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-u300/mmc.c')
-rw-r--r--arch/arm/mach-u300/mmc.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/arm/mach-u300/mmc.c b/arch/arm/mach-u300/mmc.c
index 3138d3955c9e..e66284d73565 100644
--- a/arch/arm/mach-u300/mmc.c
+++ b/arch/arm/mach-u300/mmc.c
@@ -22,6 +22,7 @@
22 22
23#include <asm/mach/mmc.h> 23#include <asm/mach/mmc.h>
24#include "mmc.h" 24#include "mmc.h"
25#include "padmux.h"
25 26
26struct mmci_card_event { 27struct mmci_card_event {
27 struct input_dev *mmc_input; 28 struct input_dev *mmc_input;
@@ -146,6 +147,7 @@ int __devinit mmc_init(struct amba_device *adev)
146{ 147{
147 struct mmci_card_event *mmci_card; 148 struct mmci_card_event *mmci_card;
148 struct device *mmcsd_device = &adev->dev; 149 struct device *mmcsd_device = &adev->dev;
150 struct pmx *pmx;
149 int ret = 0; 151 int ret = 0;
150 152
151 mmci_card = kzalloc(sizeof(struct mmci_card_event), GFP_KERNEL); 153 mmci_card = kzalloc(sizeof(struct mmci_card_event), GFP_KERNEL);
@@ -205,6 +207,20 @@ int __devinit mmc_init(struct amba_device *adev)
205 207
206 input_set_drvdata(mmci_card->mmc_input, mmci_card); 208 input_set_drvdata(mmci_card->mmc_input, mmci_card);
207 209
210 /*
211 * Setup padmuxing for MMC. Since this must always be
212 * compiled into the kernel, pmx is never released.
213 */
214 pmx = pmx_get(mmcsd_device, U300_APP_PMX_MMC_SETTING);
215
216 if (IS_ERR(pmx))
217 pr_warning("Could not get padmux handle\n");
218 else {
219 ret = pmx_activate(mmcsd_device, pmx);
220 if (IS_ERR_VALUE(ret))
221 pr_warning("Could not activate padmuxing\n");
222 }
223
208 ret = gpio_register_callback(U300_GPIO_PIN_MMC_CD, mmci_callback, 224 ret = gpio_register_callback(U300_GPIO_PIN_MMC_CD, mmci_callback,
209 mmci_card); 225 mmci_card);
210 226