diff options
author | Felipe Balbi <felipe.lima@indt.org.br> | 2007-11-26 23:01:45 -0500 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2008-02-08 13:38:01 -0500 |
commit | 138ab9f8321f67c71984ca43222efa71b0a0a0a9 (patch) | |
tree | 57e8bcabfb647fd2ecad10d3641ef2041857ff09 /arch | |
parent | 6e2d4107245cc0411959e91d7a1613e15097f117 (diff) |
ARM: OMAP1: Make omap1 use MMC multislot structures
Make omap1 use new MMC multislot structures. The related MMC
patches will be sent separately.
Signed-off-by: Felipe Balbi <felipe.lima@indt.org.br>
Signed-off-by: Anderson Briglia <anderson.briglia@indt.org.br>
Signed-off-by: Carlos Eduardo Aguiar <carlos.aguiar@indt.org.br>
Signed-off-by: David Cohen <david.cohen@indt.org.br>
Signed-off-by: Eduardo Valentin <eduardo.valentin@indt.org.br>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/configs/omap_h2_1610_defconfig | 60 | ||||
-rw-r--r-- | arch/arm/mach-omap1/Makefile | 4 | ||||
-rw-r--r-- | arch/arm/mach-omap1/board-h2-mmc.c | 110 | ||||
-rw-r--r-- | arch/arm/mach-omap1/board-h2.c | 10 | ||||
-rw-r--r-- | arch/arm/mach-omap1/board-h3-mmc.c | 114 | ||||
-rw-r--r-- | arch/arm/mach-omap1/board-h3.c | 22 |
6 files changed, 306 insertions, 14 deletions
diff --git a/arch/arm/configs/omap_h2_1610_defconfig b/arch/arm/configs/omap_h2_1610_defconfig index b8a78ab49cdd..64aa431f8514 100644 --- a/arch/arm/configs/omap_h2_1610_defconfig +++ b/arch/arm/configs/omap_h2_1610_defconfig | |||
@@ -74,12 +74,20 @@ CONFIG_SLAB=y | |||
74 | CONFIG_RT_MUTEXES=y | 74 | CONFIG_RT_MUTEXES=y |
75 | # CONFIG_TINY_SHMEM is not set | 75 | # CONFIG_TINY_SHMEM is not set |
76 | CONFIG_BASE_SMALL=0 | 76 | CONFIG_BASE_SMALL=0 |
77 | |||
78 | # | ||
79 | # Loadable module support | ||
80 | # | ||
77 | CONFIG_MODULES=y | 81 | CONFIG_MODULES=y |
78 | CONFIG_MODULE_UNLOAD=y | 82 | CONFIG_MODULE_UNLOAD=y |
79 | # CONFIG_MODULE_FORCE_UNLOAD is not set | 83 | # CONFIG_MODULE_FORCE_UNLOAD is not set |
80 | # CONFIG_MODVERSIONS is not set | 84 | # CONFIG_MODVERSIONS is not set |
81 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 85 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
82 | # CONFIG_KMOD is not set | 86 | # CONFIG_KMOD is not set |
87 | |||
88 | # | ||
89 | # Block layer | ||
90 | # | ||
83 | CONFIG_BLOCK=y | 91 | CONFIG_BLOCK=y |
84 | # CONFIG_LBD is not set | 92 | # CONFIG_LBD is not set |
85 | # CONFIG_BLK_DEV_IO_TRACE is not set | 93 | # CONFIG_BLK_DEV_IO_TRACE is not set |
@@ -358,8 +366,20 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
358 | # CONFIG_INET6_TUNNEL is not set | 366 | # CONFIG_INET6_TUNNEL is not set |
359 | # CONFIG_NETWORK_SECMARK is not set | 367 | # CONFIG_NETWORK_SECMARK is not set |
360 | # CONFIG_NETFILTER is not set | 368 | # CONFIG_NETFILTER is not set |
369 | |||
370 | # | ||
371 | # DCCP Configuration (EXPERIMENTAL) | ||
372 | # | ||
361 | # CONFIG_IP_DCCP is not set | 373 | # CONFIG_IP_DCCP is not set |
374 | |||
375 | # | ||
376 | # SCTP Configuration (EXPERIMENTAL) | ||
377 | # | ||
362 | # CONFIG_IP_SCTP is not set | 378 | # CONFIG_IP_SCTP is not set |
379 | |||
380 | # | ||
381 | # TIPC Configuration (EXPERIMENTAL) | ||
382 | # | ||
363 | # CONFIG_TIPC is not set | 383 | # CONFIG_TIPC is not set |
364 | # CONFIG_ATM is not set | 384 | # CONFIG_ATM is not set |
365 | # CONFIG_BRIDGE is not set | 385 | # CONFIG_BRIDGE is not set |
@@ -408,6 +428,10 @@ CONFIG_STANDALONE=y | |||
408 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 428 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
409 | # CONFIG_FW_LOADER is not set | 429 | # CONFIG_FW_LOADER is not set |
410 | # CONFIG_SYS_HYPERVISOR is not set | 430 | # CONFIG_SYS_HYPERVISOR is not set |
431 | |||
432 | # | ||
433 | # Connector - unified userspace <-> kernelspace linker | ||
434 | # | ||
411 | # CONFIG_CONNECTOR is not set | 435 | # CONFIG_CONNECTOR is not set |
412 | # CONFIG_MTD is not set | 436 | # CONFIG_MTD is not set |
413 | # CONFIG_PARPORT is not set | 437 | # CONFIG_PARPORT is not set |
@@ -463,7 +487,15 @@ CONFIG_SCSI_LOWLEVEL=y | |||
463 | # CONFIG_ISCSI_TCP is not set | 487 | # CONFIG_ISCSI_TCP is not set |
464 | # CONFIG_SCSI_DEBUG is not set | 488 | # CONFIG_SCSI_DEBUG is not set |
465 | # CONFIG_ATA is not set | 489 | # CONFIG_ATA is not set |
490 | |||
491 | # | ||
492 | # Multi-device support (RAID and LVM) | ||
493 | # | ||
466 | # CONFIG_MD is not set | 494 | # CONFIG_MD is not set |
495 | |||
496 | # | ||
497 | # Network device support | ||
498 | # | ||
467 | CONFIG_NETDEVICES=y | 499 | CONFIG_NETDEVICES=y |
468 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | 500 | # CONFIG_NETDEVICES_MULTIQUEUE is not set |
469 | # CONFIG_DUMMY is not set | 501 | # CONFIG_DUMMY is not set |
@@ -472,6 +504,10 @@ CONFIG_NETDEVICES=y | |||
472 | # CONFIG_EQUALIZER is not set | 504 | # CONFIG_EQUALIZER is not set |
473 | # CONFIG_TUN is not set | 505 | # CONFIG_TUN is not set |
474 | # CONFIG_PHYLIB is not set | 506 | # CONFIG_PHYLIB is not set |
507 | |||
508 | # | ||
509 | # Ethernet (10 or 100Mbit) | ||
510 | # | ||
475 | CONFIG_NET_ETHERNET=y | 511 | CONFIG_NET_ETHERNET=y |
476 | CONFIG_MII=y | 512 | CONFIG_MII=y |
477 | # CONFIG_AX88796 is not set | 513 | # CONFIG_AX88796 is not set |
@@ -481,6 +517,10 @@ CONFIG_NETDEV_1000=y | |||
481 | CONFIG_NETDEV_10000=y | 517 | CONFIG_NETDEV_10000=y |
482 | 518 | ||
483 | # | 519 | # |
520 | # Token Ring devices | ||
521 | # | ||
522 | |||
523 | # | ||
484 | # Wireless LAN | 524 | # Wireless LAN |
485 | # | 525 | # |
486 | # CONFIG_WLAN_PRE80211 is not set | 526 | # CONFIG_WLAN_PRE80211 is not set |
@@ -505,6 +545,10 @@ CONFIG_SLHC=y | |||
505 | # CONFIG_NETCONSOLE is not set | 545 | # CONFIG_NETCONSOLE is not set |
506 | # CONFIG_NETPOLL is not set | 546 | # CONFIG_NETPOLL is not set |
507 | # CONFIG_NET_POLL_CONTROLLER is not set | 547 | # CONFIG_NET_POLL_CONTROLLER is not set |
548 | |||
549 | # | ||
550 | # ISDN subsystem | ||
551 | # | ||
508 | # CONFIG_ISDN is not set | 552 | # CONFIG_ISDN is not set |
509 | 553 | ||
510 | # | 554 | # |
@@ -541,6 +585,7 @@ CONFIG_INPUT_MISC=y | |||
541 | # CONFIG_INPUT_POWERMATE is not set | 585 | # CONFIG_INPUT_POWERMATE is not set |
542 | # CONFIG_INPUT_YEALINK is not set | 586 | # CONFIG_INPUT_YEALINK is not set |
543 | CONFIG_INPUT_UINPUT=y | 587 | CONFIG_INPUT_UINPUT=y |
588 | # CONFIG_INPUT_POLLDEV is not set | ||
544 | 589 | ||
545 | # | 590 | # |
546 | # Hardware I/O ports | 591 | # Hardware I/O ports |
@@ -575,6 +620,10 @@ CONFIG_SERIAL_CORE=y | |||
575 | CONFIG_SERIAL_CORE_CONSOLE=y | 620 | CONFIG_SERIAL_CORE_CONSOLE=y |
576 | CONFIG_UNIX98_PTYS=y | 621 | CONFIG_UNIX98_PTYS=y |
577 | # CONFIG_LEGACY_PTYS is not set | 622 | # CONFIG_LEGACY_PTYS is not set |
623 | |||
624 | # | ||
625 | # IPMI | ||
626 | # | ||
578 | # CONFIG_IPMI_HANDLER is not set | 627 | # CONFIG_IPMI_HANDLER is not set |
579 | CONFIG_WATCHDOG=y | 628 | CONFIG_WATCHDOG=y |
580 | CONFIG_WATCHDOG_NOWAYOUT=y | 629 | CONFIG_WATCHDOG_NOWAYOUT=y |
@@ -588,6 +637,10 @@ CONFIG_WATCHDOG_NOWAYOUT=y | |||
588 | # CONFIG_NVRAM is not set | 637 | # CONFIG_NVRAM is not set |
589 | # CONFIG_R3964 is not set | 638 | # CONFIG_R3964 is not set |
590 | # CONFIG_RAW_DRIVER is not set | 639 | # CONFIG_RAW_DRIVER is not set |
640 | |||
641 | # | ||
642 | # TPM devices | ||
643 | # | ||
591 | # CONFIG_TCG_TPM is not set | 644 | # CONFIG_TCG_TPM is not set |
592 | # CONFIG_I2C is not set | 645 | # CONFIG_I2C is not set |
593 | 646 | ||
@@ -771,8 +824,9 @@ CONFIG_DNOTIFY=y | |||
771 | # | 824 | # |
772 | CONFIG_FAT_FS=y | 825 | CONFIG_FAT_FS=y |
773 | CONFIG_MSDOS_FS=y | 826 | CONFIG_MSDOS_FS=y |
774 | # CONFIG_VFAT_FS is not set | 827 | CONFIG_VFAT_FS=y |
775 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | 828 | CONFIG_FAT_DEFAULT_CODEPAGE=437 |
829 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
776 | # CONFIG_NTFS_FS is not set | 830 | # CONFIG_NTFS_FS is not set |
777 | 831 | ||
778 | # | 832 | # |
@@ -838,7 +892,7 @@ CONFIG_MSDOS_PARTITION=y | |||
838 | # | 892 | # |
839 | CONFIG_NLS=y | 893 | CONFIG_NLS=y |
840 | CONFIG_NLS_DEFAULT="iso8859-1" | 894 | CONFIG_NLS_DEFAULT="iso8859-1" |
841 | # CONFIG_NLS_CODEPAGE_437 is not set | 895 | CONFIG_NLS_CODEPAGE_437=y |
842 | # CONFIG_NLS_CODEPAGE_737 is not set | 896 | # CONFIG_NLS_CODEPAGE_737 is not set |
843 | # CONFIG_NLS_CODEPAGE_775 is not set | 897 | # CONFIG_NLS_CODEPAGE_775 is not set |
844 | # CONFIG_NLS_CODEPAGE_850 is not set | 898 | # CONFIG_NLS_CODEPAGE_850 is not set |
@@ -862,7 +916,7 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
862 | # CONFIG_NLS_CODEPAGE_1250 is not set | 916 | # CONFIG_NLS_CODEPAGE_1250 is not set |
863 | # CONFIG_NLS_CODEPAGE_1251 is not set | 917 | # CONFIG_NLS_CODEPAGE_1251 is not set |
864 | # CONFIG_NLS_ASCII is not set | 918 | # CONFIG_NLS_ASCII is not set |
865 | # CONFIG_NLS_ISO8859_1 is not set | 919 | CONFIG_NLS_ISO8859_1=y |
866 | # CONFIG_NLS_ISO8859_2 is not set | 920 | # CONFIG_NLS_ISO8859_2 is not set |
867 | # CONFIG_NLS_ISO8859_3 is not set | 921 | # CONFIG_NLS_ISO8859_3 is not set |
868 | # CONFIG_NLS_ISO8859_4 is not set | 922 | # CONFIG_NLS_ISO8859_4 is not set |
diff --git a/arch/arm/mach-omap1/Makefile b/arch/arm/mach-omap1/Makefile index 391b6f4827f6..416a778611b4 100644 --- a/arch/arm/mach-omap1/Makefile +++ b/arch/arm/mach-omap1/Makefile | |||
@@ -13,13 +13,13 @@ obj-$(CONFIG_PM) += pm.o sleep.o | |||
13 | led-y := leds.o | 13 | led-y := leds.o |
14 | 14 | ||
15 | # Specific board support | 15 | # Specific board support |
16 | obj-$(CONFIG_MACH_OMAP_H2) += board-h2.o | 16 | obj-$(CONFIG_MACH_OMAP_H2) += board-h2.o board-h2-mmc.o |
17 | obj-$(CONFIG_MACH_OMAP_INNOVATOR) += board-innovator.o | 17 | obj-$(CONFIG_MACH_OMAP_INNOVATOR) += board-innovator.o |
18 | obj-$(CONFIG_MACH_OMAP_GENERIC) += board-generic.o | 18 | obj-$(CONFIG_MACH_OMAP_GENERIC) += board-generic.o |
19 | obj-$(CONFIG_MACH_OMAP_PERSEUS2) += board-perseus2.o | 19 | obj-$(CONFIG_MACH_OMAP_PERSEUS2) += board-perseus2.o |
20 | obj-$(CONFIG_MACH_OMAP_FSAMPLE) += board-fsample.o | 20 | obj-$(CONFIG_MACH_OMAP_FSAMPLE) += board-fsample.o |
21 | obj-$(CONFIG_MACH_OMAP_OSK) += board-osk.o | 21 | obj-$(CONFIG_MACH_OMAP_OSK) += board-osk.o |
22 | obj-$(CONFIG_MACH_OMAP_H3) += board-h3.o | 22 | obj-$(CONFIG_MACH_OMAP_H3) += board-h3.o board-h3-mmc.o |
23 | obj-$(CONFIG_MACH_VOICEBLUE) += board-voiceblue.o | 23 | obj-$(CONFIG_MACH_VOICEBLUE) += board-voiceblue.o |
24 | obj-$(CONFIG_MACH_OMAP_PALMTE) += board-palmte.o | 24 | obj-$(CONFIG_MACH_OMAP_PALMTE) += board-palmte.o |
25 | obj-$(CONFIG_MACH_OMAP_PALMZ71) += board-palmz71.o | 25 | obj-$(CONFIG_MACH_OMAP_PALMZ71) += board-palmz71.o |
diff --git a/arch/arm/mach-omap1/board-h2-mmc.c b/arch/arm/mach-omap1/board-h2-mmc.c new file mode 100644 index 000000000000..6fdc78406b21 --- /dev/null +++ b/arch/arm/mach-omap1/board-h2-mmc.c | |||
@@ -0,0 +1,110 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-omap1/board-h2-mmc.c | ||
3 | * | ||
4 | * Copyright (C) 2007 Instituto Nokia de Tecnologia - INdT | ||
5 | * Author: Felipe Balbi <felipe.lima@indt.org.br> | ||
6 | * | ||
7 | * This code is based on linux/arch/arm/mach-omap2/board-n800-mmc.c, which is: | ||
8 | * Copyright (C) 2006 Nokia Corporation | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #include <asm/arch/mmc.h> | ||
16 | #include <asm/arch/gpio.h> | ||
17 | |||
18 | #ifdef CONFIG_MMC_OMAP | ||
19 | static int slot_cover_open; | ||
20 | static struct device *mmc_device; | ||
21 | |||
22 | static int h2_mmc_set_power(struct device *dev, int slot, int power_on, | ||
23 | int vdd) | ||
24 | { | ||
25 | #ifdef CONFIG_MMC_DEBUG | ||
26 | dev_dbg(dev, "Set slot %d power: %s (vdd %d)\n", slot + 1, | ||
27 | power_on ? "on" : "off", vdd); | ||
28 | #endif | ||
29 | if (slot != 0) { | ||
30 | dev_err(dev, "No such slot %d\n", slot + 1); | ||
31 | return -ENODEV; | ||
32 | } | ||
33 | |||
34 | return 0; | ||
35 | } | ||
36 | |||
37 | static int h2_mmc_set_bus_mode(struct device *dev, int slot, int bus_mode) | ||
38 | { | ||
39 | #ifdef CONFIG_MMC_DEBUG | ||
40 | dev_dbg(dev, "Set slot %d bus_mode %s\n", slot + 1, | ||
41 | bus_mode == MMC_BUSMODE_OPENDRAIN ? "open-drain" : "push-pull"); | ||
42 | #endif | ||
43 | if (slot != 0) { | ||
44 | dev_err(dev, "No such slot %d\n", slot + 1); | ||
45 | return -ENODEV; | ||
46 | } | ||
47 | |||
48 | return 0; | ||
49 | } | ||
50 | |||
51 | static int h2_mmc_get_cover_state(struct device *dev, int slot) | ||
52 | { | ||
53 | BUG_ON(slot != 0); | ||
54 | |||
55 | return slot_cover_open; | ||
56 | } | ||
57 | |||
58 | void h2_mmc_slot_cover_handler(void *arg, int state) | ||
59 | { | ||
60 | if (mmc_device == NULL) | ||
61 | return; | ||
62 | |||
63 | slot_cover_open = state; | ||
64 | omap_mmc_notify_cover_event(mmc_device, 0, state); | ||
65 | } | ||
66 | |||
67 | static int h2_mmc_late_init(struct device *dev) | ||
68 | { | ||
69 | int ret = 0; | ||
70 | |||
71 | mmc_device = dev; | ||
72 | |||
73 | return ret; | ||
74 | } | ||
75 | |||
76 | static void h2_mmc_cleanup(struct device *dev) | ||
77 | { | ||
78 | } | ||
79 | |||
80 | static struct omap_mmc_platform_data h2_mmc_data = { | ||
81 | .nr_slots = 1, | ||
82 | .switch_slot = NULL, | ||
83 | .init = h2_mmc_late_init, | ||
84 | .cleanup = h2_mmc_cleanup, | ||
85 | .slots[0] = { | ||
86 | .set_power = h2_mmc_set_power, | ||
87 | .set_bus_mode = h2_mmc_set_bus_mode, | ||
88 | .get_ro = NULL, | ||
89 | .get_cover_state = h2_mmc_get_cover_state, | ||
90 | .ocr_mask = MMC_VDD_28_29 | MMC_VDD_30_31 | | ||
91 | MMC_VDD_32_33 | MMC_VDD_33_34, | ||
92 | .name = "mmcblk", | ||
93 | }, | ||
94 | }; | ||
95 | |||
96 | void __init h2_mmc_init(void) | ||
97 | { | ||
98 | omap_set_mmc_info(1, &h2_mmc_data); | ||
99 | } | ||
100 | |||
101 | #else | ||
102 | |||
103 | void __init h2_mmc_init(void) | ||
104 | { | ||
105 | } | ||
106 | |||
107 | void h2_mmc_slot_cover_handler(void *arg, int state) | ||
108 | { | ||
109 | } | ||
110 | #endif | ||
diff --git a/arch/arm/mach-omap1/board-h2.c b/arch/arm/mach-omap1/board-h2.c index 18899d74d4c0..ab6e68b00064 100644 --- a/arch/arm/mach-omap1/board-h2.c +++ b/arch/arm/mach-omap1/board-h2.c | |||
@@ -389,15 +389,14 @@ static struct omap_usb_config h2_usb_config __initdata = { | |||
389 | }; | 389 | }; |
390 | 390 | ||
391 | static struct omap_mmc_config h2_mmc_config __initdata = { | 391 | static struct omap_mmc_config h2_mmc_config __initdata = { |
392 | .mmc [0] = { | 392 | .mmc[0] = { |
393 | .enabled = 1, | 393 | .enabled = 1, |
394 | .wire4 = 1, | 394 | .wire4 = 1, |
395 | .wp_pin = OMAP_MPUIO(3), | ||
396 | .power_pin = -1, /* tps65010 gpio3 */ | ||
397 | .switch_pin = OMAP_MPUIO(1), | ||
398 | }, | 395 | }, |
399 | }; | 396 | }; |
400 | 397 | ||
398 | extern struct omap_mmc_platform_data h2_mmc_data; | ||
399 | |||
401 | static struct omap_uart_config h2_uart_config __initdata = { | 400 | static struct omap_uart_config h2_uart_config __initdata = { |
402 | .enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)), | 401 | .enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)), |
403 | }; | 402 | }; |
@@ -459,6 +458,7 @@ static void __init h2_init(void) | |||
459 | omap_board_config = h2_config; | 458 | omap_board_config = h2_config; |
460 | omap_board_config_size = ARRAY_SIZE(h2_config); | 459 | omap_board_config_size = ARRAY_SIZE(h2_config); |
461 | omap_serial_init(); | 460 | omap_serial_init(); |
461 | h2_mmc_init(); | ||
462 | 462 | ||
463 | /* irq for tps65010 chip */ | 463 | /* irq for tps65010 chip */ |
464 | omap_cfg_reg(W4_GPIO58); | 464 | omap_cfg_reg(W4_GPIO58); |
diff --git a/arch/arm/mach-omap1/board-h3-mmc.c b/arch/arm/mach-omap1/board-h3-mmc.c new file mode 100644 index 000000000000..66ecc437928f --- /dev/null +++ b/arch/arm/mach-omap1/board-h3-mmc.c | |||
@@ -0,0 +1,114 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-omap1/board-h3-mmc.c | ||
3 | * | ||
4 | * Copyright (C) 2007 Instituto Nokia de Tecnologia - INdT | ||
5 | * Author: Felipe Balbi <felipe.lima@indt.org.br> | ||
6 | * | ||
7 | * This code is based on linux/arch/arm/mach-omap2/board-n800-mmc.c, which is: | ||
8 | * Copyright (C) 2006 Nokia Corporation | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #include <asm/arch/mmc.h> | ||
16 | #include <asm/arch/gpio.h> | ||
17 | |||
18 | #ifdef CONFIG_MMC_OMAP | ||
19 | static int slot_cover_open; | ||
20 | static struct device *mmc_device; | ||
21 | |||
22 | static int h3_mmc_set_power(struct device *dev, int slot, int power_on, | ||
23 | int vdd) | ||
24 | { | ||
25 | #ifdef CONFIG_MMC_DEBUG | ||
26 | dev_dbg(dev, "Set slot %d power: %s (vdd %d)\n", slot + 1, | ||
27 | power_on ? "on" : "off", vdd); | ||
28 | #endif | ||
29 | if (slot != 0) { | ||
30 | dev_err(dev, "No such slot %d\n", slot + 1); | ||
31 | return -ENODEV; | ||
32 | } | ||
33 | |||
34 | return 0; | ||
35 | } | ||
36 | |||
37 | static int h3_mmc_set_bus_mode(struct device *dev, int slot, int bus_mode) | ||
38 | { | ||
39 | int ret = 0; | ||
40 | |||
41 | #ifdef CONFIG_MMC_DEBUG | ||
42 | dev_dbg(dev, "Set slot %d bus_mode %s\n", slot + 1, | ||
43 | bus_mode == MMC_BUSMODE_OPENDRAIN ? "open-drain" : "push-pull"); | ||
44 | #endif | ||
45 | if (slot != 0) { | ||
46 | dev_err(dev, "No such slot %d\n", slot + 1); | ||
47 | return -ENODEV; | ||
48 | } | ||
49 | |||
50 | /* Treated on upper level */ | ||
51 | |||
52 | return bus_mode; | ||
53 | } | ||
54 | |||
55 | static int h3_mmc_get_cover_state(struct device *dev, int slot) | ||
56 | { | ||
57 | BUG_ON(slot != 0); | ||
58 | |||
59 | return slot_cover_open; | ||
60 | } | ||
61 | |||
62 | void h3_mmc_slot_cover_handler(void *arg, int state) | ||
63 | { | ||
64 | if (mmc_device == NULL) | ||
65 | return; | ||
66 | |||
67 | slot_cover_open = state; | ||
68 | omap_mmc_notify_cover_event(mmc_device, 0, state); | ||
69 | } | ||
70 | |||
71 | static int h3_mmc_late_init(struct device *dev) | ||
72 | { | ||
73 | int ret = 0; | ||
74 | |||
75 | mmc_device = dev; | ||
76 | |||
77 | return ret; | ||
78 | } | ||
79 | |||
80 | static void h3_mmc_cleanup(struct device *dev) | ||
81 | { | ||
82 | } | ||
83 | |||
84 | static struct omap_mmc_platform_data h3_mmc_data = { | ||
85 | .nr_slots = 1, | ||
86 | .switch_slot = NULL, | ||
87 | .init = h3_mmc_late_init, | ||
88 | .cleanup = h3_mmc_cleanup, | ||
89 | .slots[0] = { | ||
90 | .set_power = h3_mmc_set_power, | ||
91 | .set_bus_mode = h3_mmc_set_bus_mode, | ||
92 | .get_ro = NULL, | ||
93 | .get_cover_state = h3_mmc_get_cover_state, | ||
94 | .ocr_mask = MMC_VDD_28_29 | MMC_VDD_30_31 | | ||
95 | MMC_VDD_32_33 | MMC_VDD_33_34, | ||
96 | .name = "mmcblk", | ||
97 | }, | ||
98 | }; | ||
99 | |||
100 | void __init h3_mmc_init(void) | ||
101 | { | ||
102 | omap_set_mmc_info(1, &h3_mmc_data); | ||
103 | } | ||
104 | |||
105 | #else | ||
106 | |||
107 | void __init h3_mmc_init(void) | ||
108 | { | ||
109 | } | ||
110 | |||
111 | void h3_mmc_slot_cover_handler(void *arg, int state) | ||
112 | { | ||
113 | } | ||
114 | #endif | ||
diff --git a/arch/arm/mach-omap1/board-h3.c b/arch/arm/mach-omap1/board-h3.c index 67ae5035a7ef..f28f05d6760d 100644 --- a/arch/arm/mach-omap1/board-h3.c +++ b/arch/arm/mach-omap1/board-h3.c | |||
@@ -437,12 +437,13 @@ static struct omap_usb_config h3_usb_config __initdata = { | |||
437 | 437 | ||
438 | static struct omap_mmc_config h3_mmc_config __initdata = { | 438 | static struct omap_mmc_config h3_mmc_config __initdata = { |
439 | .mmc[0] = { | 439 | .mmc[0] = { |
440 | .enabled = 1, | 440 | .enabled = 1, |
441 | .power_pin = -1, /* tps65010 GPIO4 */ | 441 | .wire4 = 1, |
442 | .switch_pin = OMAP_MPUIO(1), | 442 | }, |
443 | }, | ||
444 | }; | 443 | }; |
445 | 444 | ||
445 | extern struct omap_mmc_platform_data h3_mmc_data; | ||
446 | |||
446 | static struct omap_uart_config h3_uart_config __initdata = { | 447 | static struct omap_uart_config h3_uart_config __initdata = { |
447 | .enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)), | 448 | .enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)), |
448 | }; | 449 | }; |
@@ -471,6 +472,18 @@ static struct i2c_board_info __initdata h3_i2c_board_info[] = { | |||
471 | */ | 472 | */ |
472 | }; | 473 | }; |
473 | 474 | ||
475 | static struct omap_gpio_switch h3_gpio_switches[] __initdata = { | ||
476 | { | ||
477 | .name = "mmc_slot", | ||
478 | .gpio = OMAP_MPUIO(1), | ||
479 | .type = OMAP_GPIO_SWITCH_TYPE_COVER, | ||
480 | .debounce_rising = 100, | ||
481 | .debounce_falling = 0, | ||
482 | .notify = h3_mmc_slot_cover_handler, | ||
483 | .notify_data = NULL, | ||
484 | }, | ||
485 | }; | ||
486 | |||
474 | #define H3_NAND_RB_GPIO_PIN 10 | 487 | #define H3_NAND_RB_GPIO_PIN 10 |
475 | 488 | ||
476 | static int nand_dev_ready(struct omap_nand_platform_data *data) | 489 | static int nand_dev_ready(struct omap_nand_platform_data *data) |
@@ -504,6 +517,7 @@ static void __init h3_init(void) | |||
504 | omap_board_config = h3_config; | 517 | omap_board_config = h3_config; |
505 | omap_board_config_size = ARRAY_SIZE(h3_config); | 518 | omap_board_config_size = ARRAY_SIZE(h3_config); |
506 | omap_serial_init(); | 519 | omap_serial_init(); |
520 | h3_mmc_init(); | ||
507 | 521 | ||
508 | /* FIXME setup irq for tps65013 chip */ | 522 | /* FIXME setup irq for tps65013 chip */ |
509 | i2c_register_board_info(1, h3_i2c_board_info, | 523 | i2c_register_board_info(1, h3_i2c_board_info, |