diff options
Diffstat (limited to 'arch/blackfin/mach-bf537/boards/stamp.c')
-rw-r--r-- | arch/blackfin/mach-bf537/boards/stamp.c | 142 |
1 files changed, 118 insertions, 24 deletions
diff --git a/arch/blackfin/mach-bf537/boards/stamp.c b/arch/blackfin/mach-bf537/boards/stamp.c index 9c43d7756510..47d7d4a0e73d 100644 --- a/arch/blackfin/mach-bf537/boards/stamp.c +++ b/arch/blackfin/mach-bf537/boards/stamp.c | |||
@@ -37,10 +37,13 @@ | |||
37 | #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE) | 37 | #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE) |
38 | #include <linux/usb_isp1362.h> | 38 | #include <linux/usb_isp1362.h> |
39 | #endif | 39 | #endif |
40 | #include <linux/pata_platform.h> | ||
40 | #include <linux/irq.h> | 41 | #include <linux/irq.h> |
41 | #include <linux/interrupt.h> | 42 | #include <linux/interrupt.h> |
42 | #include <linux/usb_sl811.h> | 43 | #include <linux/usb_sl811.h> |
44 | #include <asm/dma.h> | ||
43 | #include <asm/bfin5xx_spi.h> | 45 | #include <asm/bfin5xx_spi.h> |
46 | #include <asm/reboot.h> | ||
44 | #include <linux/spi/ad7877.h> | 47 | #include <linux/spi/ad7877.h> |
45 | 48 | ||
46 | /* | 49 | /* |
@@ -199,15 +202,13 @@ static struct resource sl811_hcd_resources[] = { | |||
199 | #if defined(CONFIG_USB_SL811_BFIN_USE_VBUS) | 202 | #if defined(CONFIG_USB_SL811_BFIN_USE_VBUS) |
200 | void sl811_port_power(struct device *dev, int is_on) | 203 | void sl811_port_power(struct device *dev, int is_on) |
201 | { | 204 | { |
202 | unsigned short mask = (1 << CONFIG_USB_SL811_BFIN_GPIO_VBUS); | 205 | gpio_request(CONFIG_USB_SL811_BFIN_GPIO_VBUS, "usb:SL811_VBUS"); |
203 | 206 | gpio_direction_output(CONFIG_USB_SL811_BFIN_GPIO_VBUS); | |
204 | bfin_write_PORT_FER(bfin_read_PORT_FER() & ~mask); | ||
205 | bfin_write_FIO_DIR(bfin_read_FIO_DIR() | mask); | ||
206 | 207 | ||
207 | if (is_on) | 208 | if (is_on) |
208 | bfin_write_FIO_FLAG_S(mask); | 209 | gpio_set_value(CONFIG_USB_SL811_BFIN_GPIO_VBUS, 1); |
209 | else | 210 | else |
210 | bfin_write_FIO_FLAG_C(mask); | 211 | gpio_set_value(CONFIG_USB_SL811_BFIN_GPIO_VBUS, 0); |
211 | } | 212 | } |
212 | #endif | 213 | #endif |
213 | 214 | ||
@@ -407,7 +408,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
407 | /* the modalias must be the same as spi device driver name */ | 408 | /* the modalias must be the same as spi device driver name */ |
408 | .modalias = "m25p80", /* Name of spi_driver for this device */ | 409 | .modalias = "m25p80", /* Name of spi_driver for this device */ |
409 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | 410 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ |
410 | .bus_num = 1, /* Framework bus number */ | 411 | .bus_num = 0, /* Framework bus number */ |
411 | .chip_select = 1, /* Framework chip select. On STAMP537 it is SPISSEL1*/ | 412 | .chip_select = 1, /* Framework chip select. On STAMP537 it is SPISSEL1*/ |
412 | .platform_data = &bfin_spi_flash_data, | 413 | .platform_data = &bfin_spi_flash_data, |
413 | .controller_data = &spi_flash_chip_info, | 414 | .controller_data = &spi_flash_chip_info, |
@@ -420,7 +421,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
420 | { | 421 | { |
421 | .modalias = "bfin_spi_adc", /* Name of spi_driver for this device */ | 422 | .modalias = "bfin_spi_adc", /* Name of spi_driver for this device */ |
422 | .max_speed_hz = 6250000, /* max spi clock (SCK) speed in HZ */ | 423 | .max_speed_hz = 6250000, /* max spi clock (SCK) speed in HZ */ |
423 | .bus_num = 1, /* Framework bus number */ | 424 | .bus_num = 0, /* Framework bus number */ |
424 | .chip_select = 1, /* Framework chip select. */ | 425 | .chip_select = 1, /* Framework chip select. */ |
425 | .platform_data = NULL, /* No spi_driver specific config */ | 426 | .platform_data = NULL, /* No spi_driver specific config */ |
426 | .controller_data = &spi_adc_chip_info, | 427 | .controller_data = &spi_adc_chip_info, |
@@ -432,7 +433,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
432 | { | 433 | { |
433 | .modalias = "ad1836-spi", | 434 | .modalias = "ad1836-spi", |
434 | .max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */ | 435 | .max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */ |
435 | .bus_num = 1, | 436 | .bus_num = 0, |
436 | .chip_select = CONFIG_SND_BLACKFIN_SPI_PFBIT, | 437 | .chip_select = CONFIG_SND_BLACKFIN_SPI_PFBIT, |
437 | .controller_data = &ad1836_spi_chip_info, | 438 | .controller_data = &ad1836_spi_chip_info, |
438 | }, | 439 | }, |
@@ -441,7 +442,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
441 | { | 442 | { |
442 | .modalias = "ad9960-spi", | 443 | .modalias = "ad9960-spi", |
443 | .max_speed_hz = 10000000, /* max spi clock (SCK) speed in HZ */ | 444 | .max_speed_hz = 10000000, /* max spi clock (SCK) speed in HZ */ |
444 | .bus_num = 1, | 445 | .bus_num = 0, |
445 | .chip_select = 1, | 446 | .chip_select = 1, |
446 | .controller_data = &ad9960_spi_chip_info, | 447 | .controller_data = &ad9960_spi_chip_info, |
447 | }, | 448 | }, |
@@ -450,7 +451,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
450 | { | 451 | { |
451 | .modalias = "spi_mmc_dummy", | 452 | .modalias = "spi_mmc_dummy", |
452 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | 453 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ |
453 | .bus_num = 1, | 454 | .bus_num = 0, |
454 | .chip_select = 0, | 455 | .chip_select = 0, |
455 | .platform_data = NULL, | 456 | .platform_data = NULL, |
456 | .controller_data = &spi_mmc_chip_info, | 457 | .controller_data = &spi_mmc_chip_info, |
@@ -459,7 +460,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
459 | { | 460 | { |
460 | .modalias = "spi_mmc", | 461 | .modalias = "spi_mmc", |
461 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | 462 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ |
462 | .bus_num = 1, | 463 | .bus_num = 0, |
463 | .chip_select = CONFIG_SPI_MMC_CS_CHAN, | 464 | .chip_select = CONFIG_SPI_MMC_CS_CHAN, |
464 | .platform_data = NULL, | 465 | .platform_data = NULL, |
465 | .controller_data = &spi_mmc_chip_info, | 466 | .controller_data = &spi_mmc_chip_info, |
@@ -470,16 +471,16 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
470 | { | 471 | { |
471 | .modalias = "fxs-spi", | 472 | .modalias = "fxs-spi", |
472 | .max_speed_hz = 12500000, /* max spi clock (SCK) speed in HZ */ | 473 | .max_speed_hz = 12500000, /* max spi clock (SCK) speed in HZ */ |
473 | .bus_num = 1, | 474 | .bus_num = 0, |
474 | .chip_select = 3, | 475 | .chip_select = 8 - CONFIG_J11_JUMPER, |
475 | .controller_data = &spi_si3xxx_chip_info, | 476 | .controller_data = &spi_si3xxx_chip_info, |
476 | .mode = SPI_MODE_3, | 477 | .mode = SPI_MODE_3, |
477 | }, | 478 | }, |
478 | { | 479 | { |
479 | .modalias = "fxo-spi", | 480 | .modalias = "fxo-spi", |
480 | .max_speed_hz = 12500000, /* max spi clock (SCK) speed in HZ */ | 481 | .max_speed_hz = 12500000, /* max spi clock (SCK) speed in HZ */ |
481 | .bus_num = 1, | 482 | .bus_num = 0, |
482 | .chip_select = 2, | 483 | .chip_select = 8 - CONFIG_J19_JUMPER, |
483 | .controller_data = &spi_si3xxx_chip_info, | 484 | .controller_data = &spi_si3xxx_chip_info, |
484 | .mode = SPI_MODE_3, | 485 | .mode = SPI_MODE_3, |
485 | }, | 486 | }, |
@@ -488,7 +489,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
488 | { | 489 | { |
489 | .modalias = "ad5304_spi", | 490 | .modalias = "ad5304_spi", |
490 | .max_speed_hz = 1250000, /* max spi clock (SCK) speed in HZ */ | 491 | .max_speed_hz = 1250000, /* max spi clock (SCK) speed in HZ */ |
491 | .bus_num = 1, | 492 | .bus_num = 0, |
492 | .chip_select = 2, | 493 | .chip_select = 2, |
493 | .platform_data = NULL, | 494 | .platform_data = NULL, |
494 | .controller_data = &ad5304_chip_info, | 495 | .controller_data = &ad5304_chip_info, |
@@ -509,23 +510,45 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
509 | }; | 510 | }; |
510 | 511 | ||
511 | /* SPI controller data */ | 512 | /* SPI controller data */ |
512 | static struct bfin5xx_spi_master spi_bfin_master_info = { | 513 | static struct bfin5xx_spi_master bfin_spi0_info = { |
513 | .num_chipselect = 8, | 514 | .num_chipselect = 8, |
514 | .enable_dma = 1, /* master has the ability to do dma transfer */ | 515 | .enable_dma = 1, /* master has the ability to do dma transfer */ |
515 | }; | 516 | }; |
516 | 517 | ||
517 | static struct platform_device spi_bfin_master_device = { | 518 | /* SPI (0) */ |
518 | .name = "bfin-spi-master", | 519 | static struct resource bfin_spi0_resource[] = { |
519 | .id = 1, /* Bus number */ | 520 | [0] = { |
521 | .start = SPI0_REGBASE, | ||
522 | .end = SPI0_REGBASE + 0xFF, | ||
523 | .flags = IORESOURCE_MEM, | ||
524 | }, | ||
525 | [1] = { | ||
526 | .start = CH_SPI, | ||
527 | .end = CH_SPI, | ||
528 | .flags = IORESOURCE_IRQ, | ||
529 | }, | ||
530 | }; | ||
531 | |||
532 | static struct platform_device bfin_spi0_device = { | ||
533 | .name = "bfin-spi", | ||
534 | .id = 0, /* Bus number */ | ||
535 | .num_resources = ARRAY_SIZE(bfin_spi0_resource), | ||
536 | .resource = bfin_spi0_resource, | ||
520 | .dev = { | 537 | .dev = { |
521 | .platform_data = &spi_bfin_master_info, /* Passed to driver */ | 538 | .platform_data = &bfin_spi0_info, /* Passed to driver */ |
522 | }, | 539 | }, |
523 | }; | 540 | }; |
524 | #endif /* spi master and devices */ | 541 | #endif /* spi master and devices */ |
525 | 542 | ||
526 | #if defined(CONFIG_FB_BF537_LQ035) || defined(CONFIG_FB_BF537_LQ035_MODULE) | 543 | #if defined(CONFIG_FB_BF537_LQ035) || defined(CONFIG_FB_BF537_LQ035_MODULE) |
527 | static struct platform_device bfin_fb_device = { | 544 | static struct platform_device bfin_fb_device = { |
528 | .name = "bf537-fb", | 545 | .name = "bf537-lq035", |
546 | }; | ||
547 | #endif | ||
548 | |||
549 | #if defined(CONFIG_FB_BFIN_7393) || defined(CONFIG_FB_BFIN_7393_MODULE) | ||
550 | static struct platform_device bfin_fb_adv7393_device = { | ||
551 | .name = "bfin-adv7393", | ||
529 | }; | 552 | }; |
530 | #endif | 553 | #endif |
531 | 554 | ||
@@ -551,9 +574,24 @@ static struct platform_device bfin_uart_device = { | |||
551 | #endif | 574 | #endif |
552 | 575 | ||
553 | #if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE) | 576 | #if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE) |
577 | static struct resource bfin_twi0_resource[] = { | ||
578 | [0] = { | ||
579 | .start = TWI0_REGBASE, | ||
580 | .end = TWI0_REGBASE, | ||
581 | .flags = IORESOURCE_MEM, | ||
582 | }, | ||
583 | [1] = { | ||
584 | .start = IRQ_TWI, | ||
585 | .end = IRQ_TWI, | ||
586 | .flags = IORESOURCE_IRQ, | ||
587 | }, | ||
588 | }; | ||
589 | |||
554 | static struct platform_device i2c_bfin_twi_device = { | 590 | static struct platform_device i2c_bfin_twi_device = { |
555 | .name = "i2c-bfin-twi", | 591 | .name = "i2c-bfin-twi", |
556 | .id = 0, | 592 | .id = 0, |
593 | .num_resources = ARRAY_SIZE(bfin_twi0_resource), | ||
594 | .resource = bfin_twi0_resource, | ||
557 | }; | 595 | }; |
558 | #endif | 596 | #endif |
559 | 597 | ||
@@ -569,6 +607,43 @@ static struct platform_device bfin_sport1_uart_device = { | |||
569 | }; | 607 | }; |
570 | #endif | 608 | #endif |
571 | 609 | ||
610 | #if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE) | ||
611 | #define PATA_INT 55 | ||
612 | |||
613 | static struct pata_platform_info bfin_pata_platform_data = { | ||
614 | .ioport_shift = 1, | ||
615 | .irq_type = IRQF_TRIGGER_HIGH | IRQF_DISABLED, | ||
616 | }; | ||
617 | |||
618 | static struct resource bfin_pata_resources[] = { | ||
619 | { | ||
620 | .start = 0x20314020, | ||
621 | .end = 0x2031403F, | ||
622 | .flags = IORESOURCE_MEM, | ||
623 | }, | ||
624 | { | ||
625 | .start = 0x2031401C, | ||
626 | .end = 0x2031401F, | ||
627 | .flags = IORESOURCE_MEM, | ||
628 | }, | ||
629 | { | ||
630 | .start = PATA_INT, | ||
631 | .end = PATA_INT, | ||
632 | .flags = IORESOURCE_IRQ, | ||
633 | }, | ||
634 | }; | ||
635 | |||
636 | static struct platform_device bfin_pata_device = { | ||
637 | .name = "pata_platform", | ||
638 | .id = -1, | ||
639 | .num_resources = ARRAY_SIZE(bfin_pata_resources), | ||
640 | .resource = bfin_pata_resources, | ||
641 | .dev = { | ||
642 | .platform_data = &bfin_pata_platform_data, | ||
643 | } | ||
644 | }; | ||
645 | #endif | ||
646 | |||
572 | static struct platform_device *stamp_devices[] __initdata = { | 647 | static struct platform_device *stamp_devices[] __initdata = { |
573 | #if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE) | 648 | #if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE) |
574 | &bfin_pcmcia_cf_device, | 649 | &bfin_pcmcia_cf_device, |
@@ -603,13 +678,17 @@ static struct platform_device *stamp_devices[] __initdata = { | |||
603 | #endif | 678 | #endif |
604 | 679 | ||
605 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | 680 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) |
606 | &spi_bfin_master_device, | 681 | &bfin_spi0_device, |
607 | #endif | 682 | #endif |
608 | 683 | ||
609 | #if defined(CONFIG_FB_BF537_LQ035) || defined(CONFIG_FB_BF537_LQ035_MODULE) | 684 | #if defined(CONFIG_FB_BF537_LQ035) || defined(CONFIG_FB_BF537_LQ035_MODULE) |
610 | &bfin_fb_device, | 685 | &bfin_fb_device, |
611 | #endif | 686 | #endif |
612 | 687 | ||
688 | #if defined(CONFIG_FB_BFIN_7393) || defined(CONFIG_FB_BFIN_7393_MODULE) | ||
689 | &bfin_fb_adv7393_device, | ||
690 | #endif | ||
691 | |||
613 | #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE) | 692 | #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE) |
614 | &bfin_uart_device, | 693 | &bfin_uart_device, |
615 | #endif | 694 | #endif |
@@ -622,6 +701,10 @@ static struct platform_device *stamp_devices[] __initdata = { | |||
622 | &bfin_sport0_uart_device, | 701 | &bfin_sport0_uart_device, |
623 | &bfin_sport1_uart_device, | 702 | &bfin_sport1_uart_device, |
624 | #endif | 703 | #endif |
704 | |||
705 | #if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE) | ||
706 | &bfin_pata_device, | ||
707 | #endif | ||
625 | }; | 708 | }; |
626 | 709 | ||
627 | static int __init stamp_init(void) | 710 | static int __init stamp_init(void) |
@@ -632,7 +715,18 @@ static int __init stamp_init(void) | |||
632 | spi_register_board_info(bfin_spi_board_info, | 715 | spi_register_board_info(bfin_spi_board_info, |
633 | ARRAY_SIZE(bfin_spi_board_info)); | 716 | ARRAY_SIZE(bfin_spi_board_info)); |
634 | #endif | 717 | #endif |
718 | |||
719 | #if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE) | ||
720 | irq_desc[PATA_INT].status |= IRQ_NOAUTOEN; | ||
721 | #endif | ||
635 | return 0; | 722 | return 0; |
636 | } | 723 | } |
637 | 724 | ||
638 | arch_initcall(stamp_init); | 725 | arch_initcall(stamp_init); |
726 | |||
727 | void native_machine_restart(char *cmd) | ||
728 | { | ||
729 | /* workaround reboot hang when booting from SPI */ | ||
730 | if ((bfin_read_SYSCR() & 0x7) == 0x3) | ||
731 | bfin_gpio_reset_spi0_ssel1(); | ||
732 | } | ||