diff options
Diffstat (limited to 'arch/arm/mach-davinci/board-dm644x-evm.c')
-rw-r--r-- | arch/arm/mach-davinci/board-dm644x-evm.c | 68 |
1 files changed, 33 insertions, 35 deletions
diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c index b2e7f9c63bc5..d9d40450bdc5 100644 --- a/arch/arm/mach-davinci/board-dm644x-evm.c +++ b/arch/arm/mach-davinci/board-dm644x-evm.c | |||
@@ -16,12 +16,11 @@ | |||
16 | #include <linux/gpio.h> | 16 | #include <linux/gpio.h> |
17 | #include <linux/leds.h> | 17 | #include <linux/leds.h> |
18 | #include <linux/memory.h> | 18 | #include <linux/memory.h> |
19 | #include <linux/etherdevice.h> | ||
20 | 19 | ||
21 | #include <linux/i2c.h> | 20 | #include <linux/i2c.h> |
22 | #include <linux/i2c/pcf857x.h> | 21 | #include <linux/i2c/pcf857x.h> |
23 | #include <linux/i2c/at24.h> | 22 | #include <linux/i2c/at24.h> |
24 | 23 | #include <linux/etherdevice.h> | |
25 | #include <linux/mtd/mtd.h> | 24 | #include <linux/mtd/mtd.h> |
26 | #include <linux/mtd/nand.h> | 25 | #include <linux/mtd/nand.h> |
27 | #include <linux/mtd/partitions.h> | 26 | #include <linux/mtd/partitions.h> |
@@ -44,6 +43,9 @@ | |||
44 | #include <mach/mux.h> | 43 | #include <mach/mux.h> |
45 | #include <mach/psc.h> | 44 | #include <mach/psc.h> |
46 | #include <mach/nand.h> | 45 | #include <mach/nand.h> |
46 | #include <mach/mmc.h> | ||
47 | #include <mach/emac.h> | ||
48 | #include <mach/common.h> | ||
47 | 49 | ||
48 | #define DM644X_EVM_PHY_MASK (0x2) | 50 | #define DM644X_EVM_PHY_MASK (0x2) |
49 | #define DM644X_EVM_MDIO_FREQUENCY (2200000) /* PHY bus frequency */ | 51 | #define DM644X_EVM_MDIO_FREQUENCY (2200000) /* PHY bus frequency */ |
@@ -436,45 +438,15 @@ static struct pcf857x_platform_data pcf_data_u35 = { | |||
436 | * - 0x0039, 1 byte NTSC vs PAL (bit 0x80 == PAL) | 438 | * - 0x0039, 1 byte NTSC vs PAL (bit 0x80 == PAL) |
437 | * - ... newer boards may have more | 439 | * - ... newer boards may have more |
438 | */ | 440 | */ |
439 | static struct memory_accessor *at24_mem_acc; | ||
440 | |||
441 | static void at24_setup(struct memory_accessor *mem_acc, void *context) | ||
442 | { | ||
443 | DECLARE_MAC_BUF(mac_str); | ||
444 | char mac_addr[6]; | ||
445 | |||
446 | at24_mem_acc = mem_acc; | ||
447 | |||
448 | /* Read MAC addr from EEPROM */ | ||
449 | if (at24_mem_acc->read(at24_mem_acc, mac_addr, 0x7f00, 6) == 6) { | ||
450 | printk(KERN_INFO "Read MAC addr from EEPROM: %s\n", | ||
451 | print_mac(mac_str, mac_addr)); | ||
452 | } | ||
453 | } | ||
454 | 441 | ||
455 | static struct at24_platform_data eeprom_info = { | 442 | static struct at24_platform_data eeprom_info = { |
456 | .byte_len = (256*1024) / 8, | 443 | .byte_len = (256*1024) / 8, |
457 | .page_size = 64, | 444 | .page_size = 64, |
458 | .flags = AT24_FLAG_ADDR16, | 445 | .flags = AT24_FLAG_ADDR16, |
459 | .setup = at24_setup, | 446 | .setup = davinci_get_mac_addr, |
447 | .context = (void *)0x7f00, | ||
460 | }; | 448 | }; |
461 | 449 | ||
462 | int dm6446evm_eeprom_read(void *buf, off_t off, size_t count) | ||
463 | { | ||
464 | if (at24_mem_acc) | ||
465 | return at24_mem_acc->read(at24_mem_acc, buf, off, count); | ||
466 | return -ENODEV; | ||
467 | } | ||
468 | EXPORT_SYMBOL(dm6446evm_eeprom_read); | ||
469 | |||
470 | int dm6446evm_eeprom_write(void *buf, off_t off, size_t count) | ||
471 | { | ||
472 | if (at24_mem_acc) | ||
473 | return at24_mem_acc->write(at24_mem_acc, buf, off, count); | ||
474 | return -ENODEV; | ||
475 | } | ||
476 | EXPORT_SYMBOL(dm6446evm_eeprom_write); | ||
477 | |||
478 | /* | 450 | /* |
479 | * MSP430 supports RTC, card detection, input from IR remote, and | 451 | * MSP430 supports RTC, card detection, input from IR remote, and |
480 | * a bit more. It triggers interrupts on GPIO(7) from pressing | 452 | * a bit more. It triggers interrupts on GPIO(7) from pressing |
@@ -545,6 +517,27 @@ static int dm6444evm_msp430_get_pins(void) | |||
545 | return (buf[3] << 8) | buf[2]; | 517 | return (buf[3] << 8) | buf[2]; |
546 | } | 518 | } |
547 | 519 | ||
520 | static int dm6444evm_mmc_get_cd(int module) | ||
521 | { | ||
522 | int status = dm6444evm_msp430_get_pins(); | ||
523 | |||
524 | return (status < 0) ? status : !(status & BIT(1)); | ||
525 | } | ||
526 | |||
527 | static int dm6444evm_mmc_get_ro(int module) | ||
528 | { | ||
529 | int status = dm6444evm_msp430_get_pins(); | ||
530 | |||
531 | return (status < 0) ? status : status & BIT(6 + 8); | ||
532 | } | ||
533 | |||
534 | static struct davinci_mmc_config dm6446evm_mmc_config = { | ||
535 | .get_cd = dm6444evm_mmc_get_cd, | ||
536 | .get_ro = dm6444evm_mmc_get_ro, | ||
537 | .wires = 4, | ||
538 | .version = MMC_CTLR_VERSION_1 | ||
539 | }; | ||
540 | |||
548 | static struct i2c_board_info __initdata i2c_info[] = { | 541 | static struct i2c_board_info __initdata i2c_info[] = { |
549 | { | 542 | { |
550 | I2C_BOARD_INFO("dm6446evm_msp", 0x23), | 543 | I2C_BOARD_INFO("dm6446evm_msp", 0x23), |
@@ -598,7 +591,6 @@ static struct davinci_uart_config uart_config __initdata = { | |||
598 | static void __init | 591 | static void __init |
599 | davinci_evm_map_io(void) | 592 | davinci_evm_map_io(void) |
600 | { | 593 | { |
601 | davinci_map_common_io(); | ||
602 | dm644x_init(); | 594 | dm644x_init(); |
603 | } | 595 | } |
604 | 596 | ||
@@ -639,6 +631,7 @@ static int davinci_phy_fixup(struct phy_device *phydev) | |||
639 | static __init void davinci_evm_init(void) | 631 | static __init void davinci_evm_init(void) |
640 | { | 632 | { |
641 | struct clk *aemif_clk; | 633 | struct clk *aemif_clk; |
634 | struct davinci_soc_info *soc_info = &davinci_soc_info; | ||
642 | 635 | ||
643 | aemif_clk = clk_get(NULL, "aemif"); | 636 | aemif_clk = clk_get(NULL, "aemif"); |
644 | clk_enable(aemif_clk); | 637 | clk_enable(aemif_clk); |
@@ -671,8 +664,13 @@ static __init void davinci_evm_init(void) | |||
671 | ARRAY_SIZE(davinci_evm_devices)); | 664 | ARRAY_SIZE(davinci_evm_devices)); |
672 | evm_init_i2c(); | 665 | evm_init_i2c(); |
673 | 666 | ||
667 | davinci_setup_mmc(0, &dm6446evm_mmc_config); | ||
668 | |||
674 | davinci_serial_init(&uart_config); | 669 | davinci_serial_init(&uart_config); |
675 | 670 | ||
671 | soc_info->emac_pdata->phy_mask = DM644X_EVM_PHY_MASK; | ||
672 | soc_info->emac_pdata->mdio_max_freq = DM644X_EVM_MDIO_FREQUENCY; | ||
673 | |||
676 | /* Register the fixup for PHY on DaVinci */ | 674 | /* Register the fixup for PHY on DaVinci */ |
677 | phy_register_fixup_for_uid(LXT971_PHY_ID, LXT971_PHY_MASK, | 675 | phy_register_fixup_for_uid(LXT971_PHY_ID, LXT971_PHY_MASK, |
678 | davinci_phy_fixup); | 676 | davinci_phy_fixup); |