MMC: OMAP: Modifications at N800 MMC board specific file to works MMC multislot support.
Subsystems (3)
PATCH 10/17 MMC: OMAP: Modifications at N800 MMC board specific file to works MMC multislot support.
From: Jarkko Lavinen <[email protected]>
Modifications at board-n800-mmc.c file to works with MMC multislot support.
Modifications at board-n800-mmc.c file to works with MMC multislot support.
arch/arm/mach-omap2/board-n800-mmc.c +42 -21
@@ -13,13 +13,14 @@#include <asm/arch/menelaus.h> #include <asm/arch/gpio.h> +#include <asm/mach-types.h> +#include <linux/delay.h> +#ifdef CONFIG_MMC_OMAP static const int slot_switch_gpio =96 ; -static const int slot1_wp_gpio =23 ; -static const int slot2_wp_gpio =8 ; -static int slot1_cover_closed; -static int slot2_cover_closed; +static int slot1_cover_open; +static int slot2_cover_open;static struct device *mmc_device;/*
@@ -158,18 +159,31 @@ static int n800_mmc_get_cover_state(stru slot++;BUG_ON (slot !=1 && slot !=2 );if (slot ==1 ) -return slot1_cover_closed; +return slot1_cover_open;else -return slot2_cover_closed; +return slot2_cover_open; }static void n800_mmc_callback (void *data,u8 card_mask) { -if (card_mask & (1 <<1 )) - slot2_cover_closed =0 ; +int bit, *openp, index; + +if (machine_is_nokia_n800 ()) { + bit =1 <<1 ; + openp = &slot2_cover_open; + index =1 ; + }else { + bit =1 ; + openp = &slot1_cover_open; + index =0 ; + } + +if (card_mask & bit) + *openp =1 ;else - slot2_cover_closed =1 ; -omap_mmc_notify_cover_event (mmc_device,1 , slot2_cover_closed); + *openp =0 ; + +omap_mmc_notify_cover_event (mmc_device, index, *openp); }void n800_mmc_slot1_cover_handler (void *arg,int state)
@@ -177,13 +191,13 @@ void n800_mmc_slot1_cover_handler(void *if (mmc_device ==NULL )return ; - slot1_cover_closed = state; + slot1_cover_open = !state;omap_mmc_notify_cover_event (mmc_device,0 , state); }static int n800_mmc_late_init (struct device *dev) { -int r; +int r, bit, *openp; mmc_device = dev;
@@ -202,10 +216,23 @@ static int n800_mmc_late_init(struct devif (r <0 )return r; -if (r & (1 <<1 )) - slot2_cover_closed =1 ; +if (machine_is_nokia_n800 ()) { + bit =1 <<1 ; + openp = &slot2_cover_open; + }else { + bit =1 ; + openp = &slot1_cover_open; + slot2_cover_open =0 ; + } + +/* All slot pin bits seem to be inversed until first swith change */ +if (r ==0xf || r == (0xf & ~bit)) + r = ~r; + +if (r & bit) + *openp =1 ;else - slot2_cover_closed =0 ; + *openp =0 ; r =menelaus_register_mmc_callback (n800_mmc_callback,NULL );
@@ -253,12 +280,6 @@ void __init n800_mmc_init(void)BUG ();omap_set_gpio_dataout (slot_switch_gpio,0 ); omap_set_gpio_direction(slot_switch_gpio, 0); -if (omap_request_gpio (slot1_wp_gpio) <0 ) -BUG (); -if (omap_request_gpio (slot2_wp_gpio) <0 ) -BUG (); -omap_set_gpio_direction (slot1_wp_gpio,1 ); - omap_set_gpio_direction(slot2_wp_gpio, 1); }#else
Hi Carlos,
Quoted 53 lines · Carlos Aguiar
From: Jarkko Lavinen <[email protected]>
Modifications at
board-n800-mmc.cfile to works with MMC multislot support.Signed-off-by Jarkko Lavinen <[email protected]>Signed-off-by Juha Yrjola <[email protected]>Signed-off-by Carlos Eduardo Aguiar <[email protected]>Modifications at
board-n800-mmc.cfile to works with MMC multislot support.Signed-off-by Jarkko Lavinen <[email protected]>Signed-off-by Juha Yrjola <[email protected]>Signed-off-by Carlos Eduardo Aguiar <[email protected]>Index:
linux-omap/arch/arm/mach-omap2/board-n800-mmc.c
===================================================================arch/arm/mach-omap2/board-n800-mmc.c 2007-08-13 13:25:47.000000000 -0400 renamed from arch/arm/mach-omap2/board-n800-mmc.c 2007-08-13 13:19:59.000000000 -0400 +8
-8@@ -13,13 +13,14 @@ #include <asm/arch/menelaus.h> #include <asm/arch/gpio.h> +#include <asm/mach-types.h> +#include <linux/delay.h> + #ifdef CONFIG_MMC_OMAP static const int slot_switch_gpio = 96; -static const int slot1_wp_gpio = 23; -static const int slot2_wp_gpio = 8; -static int slot1_cover_closed; -static int slot2_cover_closed; +static int slot1_cover_open; +static int slot2_cover_open; static struct device *mmc_device; /*@@ -158,18 +159,31 @@ static int n800_mmc_get_cover_state(stru slot++; BUG_ON(slot != 1 && slot != 2); if (slot == 1) - return slot1_cover_closed; + return slot1_cover_open; else - return slot2_cover_closed; + return slot2_cover_open; } static void n800_mmc_callback(void *data, u8 card_mask) { - if (card_mask & (1 << 1)) - slot2_cover_closed = 0; + int bit, *openp, index;
arch/arm/mach-omap2/board-n800-mmc.c 2007-08-13 13:25:47.000000000 -0400 static int n800_mmc_get_cover_state(stru · line 179
Quoted 10 lines
arch/arm/mach-omap2/board-n800-mmc.c 2007-08-13 13:25:47.000000000 -0400 renamed from arch/arm/mach-omap2/board-n800-mmc.c 2007-08-13 13:19:59.000000000 -0400 +10
-0+ + if (machine_is_nokia_n800()) { + bit = 1 << 1; + openp = &slot2_cover_open; + index = 1; + } else { + bit = 1; + openp = &slot1_cover_open; + index = 0; + }
What is the use of "else" above. You are executing on n800 machine specific code only when above callback gets built, or am I smelling something :)
Quoted 75 lines
arch/arm/mach-omap2/board-n800-mmc.c 2007-08-13 13:25:47.000000000 -0400 renamed from arch/arm/mach-omap2/board-n800-mmc.c 2007-08-13 13:19:59.000000000 -0400 +24
-13+ + if (card_mask & bit) + *openp = 1; else - slot2_cover_closed = 1; - omap_mmc_notify_cover_event(mmc_device, 1, slot2_cover_closed); + *openp = 0; + + omap_mmc_notify_cover_event(mmc_device, index, *openp); } void n800_mmc_slot1_cover_handler(void *arg, int state)@@ -177,13 +191,13 @@ void n800_mmc_slot1_cover_handler(void * if (mmc_device == NULL) return; - slot1_cover_closed = state; + slot1_cover_open = !state; omap_mmc_notify_cover_event(mmc_device, 0, state); } static int n800_mmc_late_init(struct device *dev) { - int r; + int r, bit, *openp; mmc_device = dev;@@ -202,10 +216,23 @@ static int n800_mmc_late_init(struct dev if (r < 0) return r; - if (r & (1 << 1)) - slot2_cover_closed = 1; + if (machine_is_nokia_n800()) { + bit = 1 << 1; + openp = &slot2_cover_open; + } else { + bit = 1; + openp = &slot1_cover_open; + slot2_cover_open = 0; + } + + /* All slot pin bits seem to be inversed until first swith change */ + if (r == 0xf || r == (0xf & ~bit)) + r = ~r; + + if (r & bit) + *openp = 1; else - slot2_cover_closed = 0; + *openp = 0; r = menelaus_register_mmc_callback(n800_mmc_callback, NULL);@@ -253,12 +280,6 @@ void __init n800_mmc_init(void) BUG(); omap_set_gpio_dataout(slot_switch_gpio, 0); omap_set_gpio_direction(slot_switch_gpio, 0); - if (omap_request_gpio(slot1_wp_gpio) < 0) - BUG(); - if (omap_request_gpio(slot2_wp_gpio) < 0) - BUG(); - omap_set_gpio_direction(slot1_wp_gpio, 1); - omap_set_gpio_direction(slot2_wp_gpio, 1); } #else_______________________________________________
Linux-omap-open-source mailing list
[email protected]
http://linux.omap.com/mailman/listinfo/linux-omap-open-source
Signature · 1 line
--Trilok Soni