diff mbox

[1/4] davinci: Add MMC/SD support for DA830/OMAP-L137 EVM

Message ID 20090916011020.GA32194@mag.az.mvista.com (mailing list archive)
State Accepted
Headers show

Commit Message

Mark A. Greer Sept. 16, 2009, 1:10 a.m. UTC
From: David A. Griego <dgriego@mvista.com>

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

Signed-off-by: David A. Griego <dgriego@mvista.com>
Signed-off-by: Mark A. Greer <mgreer@mvista.com>
---
 arch/arm/mach-davinci/board-da830-evm.c |   43 +++++++++++++++++++++++++++++++
 1 files changed, 43 insertions(+), 0 deletions(-)

Comments

Kevin Hilman Sept. 16, 2009, 2:56 p.m. UTC | #1
"Mark A. Greer" <mgreer@mvista.com> writes:

> From: David A. Griego <dgriego@mvista.com>
>
> Add pinmux settings, etc. to enable the MMC/SC hardware.
>
> Signed-off-by: David A. Griego <dgriego@mvista.com>
> Signed-off-by: Mark A. Greer <mgreer@mvista.com>

Thanks, pushing all 4 today.

Kevin

> ---
>  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>
>  #include <mach/da8xx.h>
>  #include <mach/asp.h>
>  
> @@ -83,6 +84,38 @@ 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
> +};
> +
> +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);
> +	return val;
> +}
> +
> +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 +165,16 @@ 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 = 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.2.5.182.ga808d
>
>
> _______________________________________________
> Davinci-linux-open-source mailing list
> Davinci-linux-open-source@linux.davincidsp.com
> http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
Sergei Shtylyov Sept. 18, 2009, 4:42 p.m. UTC | #2
Hello.

Mark A. Greer wrote:

> From: David A. Griego <dgriego@mvista.com>

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

> Signed-off-by: David A. Griego <dgriego@mvista.com>
> Signed-off-by: Mark A. Greer <mgreer@mvista.com>
[...]
> 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>
>  #include <mach/da8xx.h>
>  #include <mach/asp.h>
>  
> @@ -83,6 +84,38 @@ 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,

    There was no sense in overriding the whole "standard" pin list -- you 
could just have created an extra list consisting of 2 GPIO pins...

> +	-1
> +};
> +
> +static int da830_evm_mmc_get_ro(int index)
> +{
> +	int val, status, gpio_num = 33;

    There's GPIO_PIN() macro now, so you could have used GPIO_PIN(2, 1) 
instead. It's not clear why you useed a variable at all -- instead of a macro...

> +
> +	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);
> +	return val;
> +}
> +
> +static struct davinci_mmc_config da830_evm_mmc_config = {
> +	.get_ro			= da830_evm_mmc_get_ro,
> +	.wires			= 4,

    Doesn't DA830 EVM have 8-wire MMC interface?

WBR, Sergei
Mark A. Greer Sept. 18, 2009, 6:54 p.m. UTC | #3
On Fri, Sep 18, 2009 at 08:42:09PM +0400, Sergei Shtylyov wrote:
>> diff --git a/arch/arm/mach-davinci/board-da830-evm.c b/arch/arm/mach-davinci/board-da830-evm.c

>>  +/*
>> + * 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,
>
>    There was no sense in overriding the whole "standard" pin list -- you  
> could just have created an extra list consisting of 2 GPIO pins...

It seems better to have the exact list here to its obvious what's being
set up.  If I set up the std list then changed it, its less obvious
what's being changed (IMHO).

>> +static int da830_evm_mmc_get_ro(int index)
>> +{
>> +	int val, status, gpio_num = 33;
>
>    There's GPIO_PIN() macro now, so you could have used GPIO_PIN(2, 1)  
> instead. It's not clear why you useed a variable at all -- instead of a 
> macro...

I pretty much copied it from an internal file and didn't really look at
it closely.  I'll go though it closer.  Thanks.

>> +static struct davinci_mmc_config da830_evm_mmc_config = {
>> +	.get_ro			= da830_evm_mmc_get_ro,
>> +	.wires			= 4,
>
>    Doesn't DA830 EVM have 8-wire MMC interface?

It supports 1-bit, 4-bit & 8-bit modes but 8-bit mode isn't supported by
the driver yet.  IIUC, its on TI's todo list.

Mark
--
diff mbox

Patch

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>
 #include <mach/da8xx.h>
 #include <mach/asp.h>
 
@@ -83,6 +84,38 @@  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
+};
+
+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);
+	return val;
+}
+
+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 +165,16 @@  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 = 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