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>

authored by Felipe Balbi and committed by Tony Lindgren 138ab9f8 6e2d4107

+313 -14
+57 -3
arch/arm/configs/omap_h2_1610_defconfig
··· 74 CONFIG_RT_MUTEXES=y 75 # CONFIG_TINY_SHMEM is not set 76 CONFIG_BASE_SMALL=0 77 CONFIG_MODULES=y 78 CONFIG_MODULE_UNLOAD=y 79 # CONFIG_MODULE_FORCE_UNLOAD is not set 80 # CONFIG_MODVERSIONS is not set 81 # CONFIG_MODULE_SRCVERSION_ALL is not set 82 # CONFIG_KMOD is not set 83 CONFIG_BLOCK=y 84 # CONFIG_LBD is not set 85 # CONFIG_BLK_DEV_IO_TRACE is not set ··· 366 # CONFIG_INET6_TUNNEL is not set 367 # CONFIG_NETWORK_SECMARK is not set 368 # CONFIG_NETFILTER is not set 369 # CONFIG_IP_DCCP is not set 370 # CONFIG_IP_SCTP is not set 371 # CONFIG_TIPC is not set 372 # CONFIG_ATM is not set 373 # CONFIG_BRIDGE is not set ··· 428 CONFIG_PREVENT_FIRMWARE_BUILD=y 429 # CONFIG_FW_LOADER is not set 430 # CONFIG_SYS_HYPERVISOR is not set 431 # CONFIG_CONNECTOR is not set 432 # CONFIG_MTD is not set 433 # CONFIG_PARPORT is not set ··· 487 # CONFIG_ISCSI_TCP is not set 488 # CONFIG_SCSI_DEBUG is not set 489 # CONFIG_ATA is not set 490 # CONFIG_MD is not set 491 CONFIG_NETDEVICES=y 492 # CONFIG_NETDEVICES_MULTIQUEUE is not set 493 # CONFIG_DUMMY is not set ··· 504 # CONFIG_EQUALIZER is not set 505 # CONFIG_TUN is not set 506 # CONFIG_PHYLIB is not set 507 CONFIG_NET_ETHERNET=y 508 CONFIG_MII=y 509 # CONFIG_AX88796 is not set ··· 515 # CONFIG_DM9000 is not set 516 CONFIG_NETDEV_1000=y 517 CONFIG_NETDEV_10000=y 518 519 # 520 # Wireless LAN ··· 545 # CONFIG_NETCONSOLE is not set 546 # CONFIG_NETPOLL is not set 547 # CONFIG_NET_POLL_CONTROLLER is not set 548 # CONFIG_ISDN is not set 549 550 # ··· 585 # CONFIG_INPUT_POWERMATE is not set 586 # CONFIG_INPUT_YEALINK is not set 587 CONFIG_INPUT_UINPUT=y 588 589 # 590 # Hardware I/O ports ··· 620 CONFIG_SERIAL_CORE_CONSOLE=y 621 CONFIG_UNIX98_PTYS=y 622 # CONFIG_LEGACY_PTYS is not set 623 # CONFIG_IPMI_HANDLER is not set 624 CONFIG_WATCHDOG=y 625 CONFIG_WATCHDOG_NOWAYOUT=y ··· 637 # CONFIG_NVRAM is not set 638 # CONFIG_R3964 is not set 639 # CONFIG_RAW_DRIVER is not set 640 # CONFIG_TCG_TPM is not set 641 # CONFIG_I2C is not set 642 ··· 824 # 825 CONFIG_FAT_FS=y 826 CONFIG_MSDOS_FS=y 827 - # CONFIG_VFAT_FS is not set 828 CONFIG_FAT_DEFAULT_CODEPAGE=437 829 # CONFIG_NTFS_FS is not set 830 831 # ··· 892 # 893 CONFIG_NLS=y 894 CONFIG_NLS_DEFAULT="iso8859-1" 895 - # CONFIG_NLS_CODEPAGE_437 is not set 896 # CONFIG_NLS_CODEPAGE_737 is not set 897 # CONFIG_NLS_CODEPAGE_775 is not set 898 # CONFIG_NLS_CODEPAGE_850 is not set ··· 916 # CONFIG_NLS_CODEPAGE_1250 is not set 917 # CONFIG_NLS_CODEPAGE_1251 is not set 918 # CONFIG_NLS_ASCII is not set 919 - # CONFIG_NLS_ISO8859_1 is not set 920 # CONFIG_NLS_ISO8859_2 is not set 921 # CONFIG_NLS_ISO8859_3 is not set 922 # CONFIG_NLS_ISO8859_4 is not set
··· 74 CONFIG_RT_MUTEXES=y 75 # CONFIG_TINY_SHMEM is not set 76 CONFIG_BASE_SMALL=0 77 + 78 + # 79 + # Loadable module support 80 + # 81 CONFIG_MODULES=y 82 CONFIG_MODULE_UNLOAD=y 83 # CONFIG_MODULE_FORCE_UNLOAD is not set 84 # CONFIG_MODVERSIONS is not set 85 # CONFIG_MODULE_SRCVERSION_ALL is not set 86 # CONFIG_KMOD is not set 87 + 88 + # 89 + # Block layer 90 + # 91 CONFIG_BLOCK=y 92 # CONFIG_LBD is not set 93 # CONFIG_BLK_DEV_IO_TRACE is not set ··· 358 # CONFIG_INET6_TUNNEL is not set 359 # CONFIG_NETWORK_SECMARK is not set 360 # CONFIG_NETFILTER is not set 361 + 362 + # 363 + # DCCP Configuration (EXPERIMENTAL) 364 + # 365 # CONFIG_IP_DCCP is not set 366 + 367 + # 368 + # SCTP Configuration (EXPERIMENTAL) 369 + # 370 # CONFIG_IP_SCTP is not set 371 + 372 + # 373 + # TIPC Configuration (EXPERIMENTAL) 374 + # 375 # CONFIG_TIPC is not set 376 # CONFIG_ATM is not set 377 # CONFIG_BRIDGE is not set ··· 408 CONFIG_PREVENT_FIRMWARE_BUILD=y 409 # CONFIG_FW_LOADER is not set 410 # CONFIG_SYS_HYPERVISOR is not set 411 + 412 + # 413 + # Connector - unified userspace <-> kernelspace linker 414 + # 415 # CONFIG_CONNECTOR is not set 416 # CONFIG_MTD is not set 417 # CONFIG_PARPORT is not set ··· 463 # CONFIG_ISCSI_TCP is not set 464 # CONFIG_SCSI_DEBUG is not set 465 # CONFIG_ATA is not set 466 + 467 + # 468 + # Multi-device support (RAID and LVM) 469 + # 470 # CONFIG_MD is not set 471 + 472 + # 473 + # Network device support 474 + # 475 CONFIG_NETDEVICES=y 476 # CONFIG_NETDEVICES_MULTIQUEUE is not set 477 # CONFIG_DUMMY is not set ··· 472 # CONFIG_EQUALIZER is not set 473 # CONFIG_TUN is not set 474 # CONFIG_PHYLIB is not set 475 + 476 + # 477 + # Ethernet (10 or 100Mbit) 478 + # 479 CONFIG_NET_ETHERNET=y 480 CONFIG_MII=y 481 # CONFIG_AX88796 is not set ··· 479 # CONFIG_DM9000 is not set 480 CONFIG_NETDEV_1000=y 481 CONFIG_NETDEV_10000=y 482 + 483 + # 484 + # Token Ring devices 485 + # 486 487 # 488 # Wireless LAN ··· 505 # CONFIG_NETCONSOLE is not set 506 # CONFIG_NETPOLL is not set 507 # CONFIG_NET_POLL_CONTROLLER is not set 508 + 509 + # 510 + # ISDN subsystem 511 + # 512 # CONFIG_ISDN is not set 513 514 # ··· 541 # CONFIG_INPUT_POWERMATE is not set 542 # CONFIG_INPUT_YEALINK is not set 543 CONFIG_INPUT_UINPUT=y 544 + # CONFIG_INPUT_POLLDEV is not set 545 546 # 547 # Hardware I/O ports ··· 575 CONFIG_SERIAL_CORE_CONSOLE=y 576 CONFIG_UNIX98_PTYS=y 577 # CONFIG_LEGACY_PTYS is not set 578 + 579 + # 580 + # IPMI 581 + # 582 # CONFIG_IPMI_HANDLER is not set 583 CONFIG_WATCHDOG=y 584 CONFIG_WATCHDOG_NOWAYOUT=y ··· 588 # CONFIG_NVRAM is not set 589 # CONFIG_R3964 is not set 590 # CONFIG_RAW_DRIVER is not set 591 + 592 + # 593 + # TPM devices 594 + # 595 # CONFIG_TCG_TPM is not set 596 # CONFIG_I2C is not set 597 ··· 771 # 772 CONFIG_FAT_FS=y 773 CONFIG_MSDOS_FS=y 774 + CONFIG_VFAT_FS=y 775 CONFIG_FAT_DEFAULT_CODEPAGE=437 776 + CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" 777 # CONFIG_NTFS_FS is not set 778 779 # ··· 838 # 839 CONFIG_NLS=y 840 CONFIG_NLS_DEFAULT="iso8859-1" 841 + CONFIG_NLS_CODEPAGE_437=y 842 # CONFIG_NLS_CODEPAGE_737 is not set 843 # CONFIG_NLS_CODEPAGE_775 is not set 844 # CONFIG_NLS_CODEPAGE_850 is not set ··· 862 # CONFIG_NLS_CODEPAGE_1250 is not set 863 # CONFIG_NLS_CODEPAGE_1251 is not set 864 # CONFIG_NLS_ASCII is not set 865 + CONFIG_NLS_ISO8859_1=y 866 # CONFIG_NLS_ISO8859_2 is not set 867 # CONFIG_NLS_ISO8859_3 is not set 868 # CONFIG_NLS_ISO8859_4 is not set
+2 -2
arch/arm/mach-omap1/Makefile
··· 13 led-y := leds.o 14 15 # Specific board support 16 - obj-$(CONFIG_MACH_OMAP_H2) += board-h2.o 17 obj-$(CONFIG_MACH_OMAP_INNOVATOR) += board-innovator.o 18 obj-$(CONFIG_MACH_OMAP_GENERIC) += board-generic.o 19 obj-$(CONFIG_MACH_OMAP_PERSEUS2) += board-perseus2.o 20 obj-$(CONFIG_MACH_OMAP_FSAMPLE) += board-fsample.o 21 obj-$(CONFIG_MACH_OMAP_OSK) += board-osk.o 22 - obj-$(CONFIG_MACH_OMAP_H3) += board-h3.o 23 obj-$(CONFIG_MACH_VOICEBLUE) += board-voiceblue.o 24 obj-$(CONFIG_MACH_OMAP_PALMTE) += board-palmte.o 25 obj-$(CONFIG_MACH_OMAP_PALMZ71) += board-palmz71.o
··· 13 led-y := leds.o 14 15 # Specific board support 16 + obj-$(CONFIG_MACH_OMAP_H2) += board-h2.o board-h2-mmc.o 17 obj-$(CONFIG_MACH_OMAP_INNOVATOR) += board-innovator.o 18 obj-$(CONFIG_MACH_OMAP_GENERIC) += board-generic.o 19 obj-$(CONFIG_MACH_OMAP_PERSEUS2) += board-perseus2.o 20 obj-$(CONFIG_MACH_OMAP_FSAMPLE) += board-fsample.o 21 obj-$(CONFIG_MACH_OMAP_OSK) += board-osk.o 22 + obj-$(CONFIG_MACH_OMAP_H3) += board-h3.o board-h3-mmc.o 23 obj-$(CONFIG_MACH_VOICEBLUE) += board-voiceblue.o 24 obj-$(CONFIG_MACH_OMAP_PALMTE) += board-palmte.o 25 obj-$(CONFIG_MACH_OMAP_PALMZ71) += board-palmz71.o
+110
arch/arm/mach-omap1/board-h2-mmc.c
···
··· 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
+5 -5
arch/arm/mach-omap1/board-h2.c
··· 389 }; 390 391 static struct omap_mmc_config h2_mmc_config __initdata = { 392 - .mmc [0] = { 393 - .enabled = 1, 394 .wire4 = 1, 395 - .wp_pin = OMAP_MPUIO(3), 396 - .power_pin = -1, /* tps65010 gpio3 */ 397 - .switch_pin = OMAP_MPUIO(1), 398 }, 399 }; 400 401 static struct omap_uart_config h2_uart_config __initdata = { 402 .enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)), ··· 458 omap_board_config = h2_config; 459 omap_board_config_size = ARRAY_SIZE(h2_config); 460 omap_serial_init(); 461 462 /* irq for tps65010 chip */ 463 omap_cfg_reg(W4_GPIO58);
··· 389 }; 390 391 static struct omap_mmc_config h2_mmc_config __initdata = { 392 + .mmc[0] = { 393 + .enabled = 1, 394 .wire4 = 1, 395 }, 396 }; 397 + 398 + extern struct omap_mmc_platform_data h2_mmc_data; 399 400 static struct omap_uart_config h2_uart_config __initdata = { 401 .enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)), ··· 459 omap_board_config = h2_config; 460 omap_board_config_size = ARRAY_SIZE(h2_config); 461 omap_serial_init(); 462 + h2_mmc_init(); 463 464 /* irq for tps65010 chip */ 465 omap_cfg_reg(W4_GPIO58);
+114
arch/arm/mach-omap1/board-h3-mmc.c
···
··· 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
+18 -4
arch/arm/mach-omap1/board-h3.c
··· 437 438 static struct omap_mmc_config h3_mmc_config __initdata = { 439 .mmc[0] = { 440 - .enabled = 1, 441 - .power_pin = -1, /* tps65010 GPIO4 */ 442 - .switch_pin = OMAP_MPUIO(1), 443 - }, 444 }; 445 446 static struct omap_uart_config h3_uart_config __initdata = { 447 .enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)), ··· 470 * - optional ov9640 camera sensor at 0x30 471 * - ... 472 */ 473 }; 474 475 #define H3_NAND_RB_GPIO_PIN 10 ··· 517 omap_board_config = h3_config; 518 omap_board_config_size = ARRAY_SIZE(h3_config); 519 omap_serial_init(); 520 521 /* FIXME setup irq for tps65013 chip */ 522 i2c_register_board_info(1, h3_i2c_board_info,
··· 437 438 static struct omap_mmc_config h3_mmc_config __initdata = { 439 .mmc[0] = { 440 + .enabled = 1, 441 + .wire4 = 1, 442 + }, 443 }; 444 + 445 + extern struct omap_mmc_platform_data h3_mmc_data; 446 447 static struct omap_uart_config h3_uart_config __initdata = { 448 .enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)), ··· 469 * - optional ov9640 camera sensor at 0x30 470 * - ... 471 */ 472 + }; 473 + 474 + static struct omap_gpio_switch h3_gpio_switches[] __initdata = { 475 + { 476 + .name = "mmc_slot", 477 + .gpio = OMAP_MPUIO(1), 478 + .type = OMAP_GPIO_SWITCH_TYPE_COVER, 479 + .debounce_rising = 100, 480 + .debounce_falling = 0, 481 + .notify = h3_mmc_slot_cover_handler, 482 + .notify_data = NULL, 483 + }, 484 }; 485 486 #define H3_NAND_RB_GPIO_PIN 10 ··· 504 omap_board_config = h3_config; 505 omap_board_config_size = ARRAY_SIZE(h3_config); 506 omap_serial_init(); 507 + h3_mmc_init(); 508 509 /* FIXME setup irq for tps65013 chip */ 510 i2c_register_board_info(1, h3_i2c_board_info,
+2
include/asm-arm/arch-omap/board-apollon.h
··· 29 #ifndef __ASM_ARCH_OMAP_APOLLON_H 30 #define __ASM_ARCH_OMAP_APOLLON_H 31 32 /* Placeholder for APOLLON specific defines */ 33 #define APOLLON_ETHR_GPIO_IRQ 74 34
··· 29 #ifndef __ASM_ARCH_OMAP_APOLLON_H 30 #define __ASM_ARCH_OMAP_APOLLON_H 31 32 + extern void apollon_mmc_init(void); 33 + 34 /* Placeholder for APOLLON specific defines */ 35 #define APOLLON_ETHR_GPIO_IRQ 74 36
+3
include/asm-arm/arch-omap/board-h2.h
··· 34 /* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */ 35 #define OMAP1610_ETHR_START 0x04000300 36 37 #endif /* __ASM_ARCH_OMAP_H2_H */ 38
··· 34 /* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */ 35 #define OMAP1610_ETHR_START 0x04000300 36 37 + extern void h2_mmc_init(void); 38 + extern void h2_mmc_slot_cover_handler(void *arg, int state); 39 + 40 #endif /* __ASM_ARCH_OMAP_H2_H */ 41
+2
include/asm-arm/arch-omap/board-h3.h
··· 36 37 #define NR_IRQS (MAXIRQNUM + 1) 38 39 40 #endif /* __ASM_ARCH_OMAP_H3_H */
··· 36 37 #define NR_IRQS (MAXIRQNUM + 1) 38 39 + extern void __init h3_mmc_init(void); 40 + extern void h3_mmc_slot_cover_handler(void *arg, int state); 41 42 #endif /* __ASM_ARCH_OMAP_H3_H */