Russell King - ARM Linux <li...@arm.linux.org.uk> writes:

> On Fri, Oct 16, 2009 at 12:09:20PM -0700, Kevin Hilman wrote:
>> From: David A. Griego <dgri...@mvista.com>
>> 
>> Add pinmux settings, etc. to enable the MMC/SC hardware.
>> 
>> Signed-off-by: David A. Griego <dgri...@mvista.com>
>> Signed-off-by: Mark A. Greer <mgr...@mvista.com>
>> Signed-off-by: Kevin Hilman <khil...@deeprootsystems.com>
>> ---
>>  arch/arm/mach-davinci/board-da830-evm.c |   43 
>> +++++++++++++++++++++++++++++++
>>  1 files changed, 43 insertions(+), 0 deletions(-)
>> 
>> diff --git a/arch/arm/mach-davinci/board-da830-evm.c 
>> b/arch/arm/mach-davinci/board-da830-evm.c
>> index 39711c1..69a791a 100644
>> --- a/arch/arm/mach-davinci/board-da830-evm.c
>> +++ b/arch/arm/mach-davinci/board-da830-evm.c
>> @@ -23,6 +23,7 @@
>>  #include <mach/irqs.h>
>>  #include <mach/cp_intc.h>
>>  #include <mach/mux.h>
>> +#include <mach/gpio.h>
>
> linux/gpio.h
>
>> +static int da830_evm_mmc_get_ro(int index)
>> +{
>> +    int val, status, gpio_num = 33;
>> +
>> +    status = gpio_request(gpio_num, "MMC WP\n");
>> +    if (status < 0) {
>> +            pr_warning("%s can not open GPIO %d\n", __func__, gpio_num);
>> +            return 0;
>> +    }
>> +    gpio_direction_input(gpio_num);
>> +    val = gpio_get_value(gpio_num);
>> +    gpio_free(gpio_num);
>
> Should this really be requesting the gpio every time it wants to be
> read?  This approach sounds wrong.  Why not just request the GPIO in
> the platform initialisation code, setting its direction, and merely
> reading it in this function?

Russell,

Thanks for the reviews.

Indeed, request and init should be done at init time as is done for
the da850 board.  Here's an updated version.

This version is now the one pushed to the davinci-next branch.

Kevin

>From 05e5376685ce71812ae8eb48115ce0d7fd8e0776 Mon Sep 17 00:00:00 2001
From: David A. Griego <dgri...@mvista.com>
Date: Tue, 15 Sep 2009 18:10:20 -0700
Subject: [PATCH 16/46] davinci: Add MMC/SD support for DA830/OMAP-L137 EVM

Add pinmux settings, etc. to enable the MMC/SC hardware.

Signed-off-by: David A. Griego <dgri...@mvista.com>
Signed-off-by: Mark A. Greer <mgr...@mvista.com>
Signed-off-by: Kevin Hilman <khil...@deeprootsystems.com>
---
 arch/arm/mach-davinci/board-da830-evm.c |   41 +++++++++++++++++++++++++++++++
 1 files changed, 41 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-davinci/board-da830-evm.c 
b/arch/arm/mach-davinci/board-da830-evm.c
index 39711c1..444029e 100644
--- a/arch/arm/mach-davinci/board-da830-evm.c
+++ b/arch/arm/mach-davinci/board-da830-evm.c
@@ -23,6 +23,7 @@
 #include <mach/irqs.h>
 #include <mach/cp_intc.h>
 #include <mach/mux.h>
+#include <mach/gpio.h>
 #include <mach/da8xx.h>
 #include <mach/asp.h>
 
@@ -83,6 +84,30 @@ static struct snd_platform_data da830_evm_snd_data = {
        .rxnumevt       = 1,
 };
 
+/*
+ * GPIO2[1] is used as MMC_SD_WP and GPIO2[2] as MMC_SD_INS.
+ */
+static const short da830_evm_mmc_sd_pins[] = {
+       DA830_MMCSD_DAT_0, DA830_MMCSD_DAT_1, DA830_MMCSD_DAT_2,
+       DA830_MMCSD_DAT_3, DA830_MMCSD_DAT_4, DA830_MMCSD_DAT_5,
+       DA830_MMCSD_DAT_6, DA830_MMCSD_DAT_7, DA830_MMCSD_CLK,
+       DA830_MMCSD_CMD,   DA830_GPIO2_1,     DA830_GPIO2_2,
+       -1
+};
+
+#define DA830_MMCSD_WP_PIN             GPIO_TO_PIN(2, 1)
+
+static int da830_evm_mmc_get_ro(int index)
+{
+       return gpio_get_value(DA830_MMCSD_WP_PIN);
+}
+
+static struct davinci_mmc_config da830_evm_mmc_config = {
+       .get_ro                 = da830_evm_mmc_get_ro,
+       .wires                  = 4,
+       .version                = MMC_CTLR_VERSION_2,
+};
+
 static __init void da830_evm_init(void)
 {
        struct davinci_soc_info *soc_info = &davinci_soc_info;
@@ -132,6 +157,22 @@ static __init void da830_evm_init(void)
                                ret);
 
        da8xx_register_mcasp(1, &da830_evm_snd_data);
+
+       ret = da8xx_pinmux_setup(da830_evm_mmc_sd_pins);
+       if (ret)
+               pr_warning("da830_evm_init: mmc/sd mux setup failed: %d\n",
+                               ret);
+
+       ret = gpio_request(DA830_MMCSD_WP_PIN, "MMC WP");
+       if (ret)
+               pr_warning("da830_evm_init: can not open GPIO %d\n",
+                          DA830_MMCSD_WP_PIN);
+       gpio_direction_input(DA830_MMCSD_WP_PIN);
+
+       ret = da8xx_register_mmcsd0(&da830_evm_mmc_config);
+       if (ret)
+               pr_warning("da830_evm_init: mmc/sd registration failed: %d\n",
+                               ret);
 }
 
 #ifdef CONFIG_SERIAL_8250_CONSOLE
-- 
1.6.4.3


_______________________________________________
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to