diff options
| -rw-r--r-- | arch/sh/boards/mach-ecovec24/setup.c | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/arch/sh/boards/mach-ecovec24/setup.c b/arch/sh/boards/mach-ecovec24/setup.c index 2274985753a4..5932f049e782 100644 --- a/arch/sh/boards/mach-ecovec24/setup.c +++ b/arch/sh/boards/mach-ecovec24/setup.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include <linux/i2c.h> | 20 | #include <linux/i2c.h> |
| 21 | #include <linux/i2c/tsc2007.h> | 21 | #include <linux/i2c/tsc2007.h> |
| 22 | #include <linux/input.h> | 22 | #include <linux/input.h> |
| 23 | #include <linux/mfd/sh_mobile_sdhi.h> | ||
| 23 | #include <video/sh_mobile_lcdc.h> | 24 | #include <video/sh_mobile_lcdc.h> |
| 24 | #include <media/sh_mobile_ceu.h> | 25 | #include <media/sh_mobile_ceu.h> |
| 25 | #include <asm/heartbeat.h> | 26 | #include <asm/heartbeat.h> |
| @@ -421,6 +422,15 @@ static struct i2c_board_info ts_i2c_clients = { | |||
| 421 | }; | 422 | }; |
| 422 | 423 | ||
| 423 | /* SHDI0 */ | 424 | /* SHDI0 */ |
| 425 | static void sdhi0_set_pwr(struct platform_device *pdev, int state) | ||
| 426 | { | ||
| 427 | gpio_set_value(GPIO_PTB6, state); | ||
| 428 | } | ||
| 429 | |||
| 430 | static struct sh_mobile_sdhi_info sdhi0_info = { | ||
| 431 | .set_pwr = sdhi0_set_pwr, | ||
| 432 | }; | ||
| 433 | |||
| 424 | static struct resource sdhi0_resources[] = { | 434 | static struct resource sdhi0_resources[] = { |
| 425 | [0] = { | 435 | [0] = { |
| 426 | .name = "SDHI0", | 436 | .name = "SDHI0", |
| @@ -439,12 +449,24 @@ static struct platform_device sdhi0_device = { | |||
| 439 | .num_resources = ARRAY_SIZE(sdhi0_resources), | 449 | .num_resources = ARRAY_SIZE(sdhi0_resources), |
| 440 | .resource = sdhi0_resources, | 450 | .resource = sdhi0_resources, |
| 441 | .id = 0, | 451 | .id = 0, |
| 452 | .dev = { | ||
| 453 | .platform_data = &sdhi0_info, | ||
| 454 | }, | ||
| 442 | .archdata = { | 455 | .archdata = { |
| 443 | .hwblk_id = HWBLK_SDHI0, | 456 | .hwblk_id = HWBLK_SDHI0, |
| 444 | }, | 457 | }, |
| 445 | }; | 458 | }; |
| 446 | 459 | ||
| 447 | /* SHDI1 */ | 460 | /* SHDI1 */ |
| 461 | static void sdhi1_set_pwr(struct platform_device *pdev, int state) | ||
| 462 | { | ||
| 463 | gpio_set_value(GPIO_PTB7, state); | ||
| 464 | } | ||
| 465 | |||
| 466 | static struct sh_mobile_sdhi_info sdhi1_info = { | ||
| 467 | .set_pwr = sdhi1_set_pwr, | ||
| 468 | }; | ||
| 469 | |||
| 448 | static struct resource sdhi1_resources[] = { | 470 | static struct resource sdhi1_resources[] = { |
| 449 | [0] = { | 471 | [0] = { |
| 450 | .name = "SDHI1", | 472 | .name = "SDHI1", |
| @@ -463,6 +485,9 @@ static struct platform_device sdhi1_device = { | |||
| 463 | .num_resources = ARRAY_SIZE(sdhi1_resources), | 485 | .num_resources = ARRAY_SIZE(sdhi1_resources), |
| 464 | .resource = sdhi1_resources, | 486 | .resource = sdhi1_resources, |
| 465 | .id = 1, | 487 | .id = 1, |
| 488 | .dev = { | ||
| 489 | .platform_data = &sdhi1_info, | ||
| 490 | }, | ||
| 466 | .archdata = { | 491 | .archdata = { |
| 467 | .hwblk_id = HWBLK_SDHI1, | 492 | .hwblk_id = HWBLK_SDHI1, |
| 468 | }, | 493 | }, |
| @@ -748,7 +773,7 @@ static int __init arch_setup(void) | |||
| 748 | gpio_direction_input(GPIO_PTR5); | 773 | gpio_direction_input(GPIO_PTR5); |
| 749 | gpio_direction_input(GPIO_PTR6); | 774 | gpio_direction_input(GPIO_PTR6); |
| 750 | 775 | ||
| 751 | /* enable SDHI0 */ | 776 | /* enable SDHI0 (needs DS2.4 set to ON) */ |
| 752 | gpio_request(GPIO_FN_SDHI0CD, NULL); | 777 | gpio_request(GPIO_FN_SDHI0CD, NULL); |
| 753 | gpio_request(GPIO_FN_SDHI0WP, NULL); | 778 | gpio_request(GPIO_FN_SDHI0WP, NULL); |
| 754 | gpio_request(GPIO_FN_SDHI0CMD, NULL); | 779 | gpio_request(GPIO_FN_SDHI0CMD, NULL); |
| @@ -757,8 +782,10 @@ static int __init arch_setup(void) | |||
| 757 | gpio_request(GPIO_FN_SDHI0D2, NULL); | 782 | gpio_request(GPIO_FN_SDHI0D2, NULL); |
| 758 | gpio_request(GPIO_FN_SDHI0D1, NULL); | 783 | gpio_request(GPIO_FN_SDHI0D1, NULL); |
| 759 | gpio_request(GPIO_FN_SDHI0D0, NULL); | 784 | gpio_request(GPIO_FN_SDHI0D0, NULL); |
| 785 | gpio_request(GPIO_PTB6, NULL); | ||
| 786 | gpio_direction_output(GPIO_PTB6, 0); | ||
| 760 | 787 | ||
| 761 | /* enable SDHI1 */ | 788 | /* enable SDHI1 (needs DS2.6,7 set to ON,OFF) */ |
| 762 | gpio_request(GPIO_FN_SDHI1CD, NULL); | 789 | gpio_request(GPIO_FN_SDHI1CD, NULL); |
| 763 | gpio_request(GPIO_FN_SDHI1WP, NULL); | 790 | gpio_request(GPIO_FN_SDHI1WP, NULL); |
| 764 | gpio_request(GPIO_FN_SDHI1CMD, NULL); | 791 | gpio_request(GPIO_FN_SDHI1CMD, NULL); |
| @@ -767,11 +794,8 @@ static int __init arch_setup(void) | |||
| 767 | gpio_request(GPIO_FN_SDHI1D2, NULL); | 794 | gpio_request(GPIO_FN_SDHI1D2, NULL); |
| 768 | gpio_request(GPIO_FN_SDHI1D1, NULL); | 795 | gpio_request(GPIO_FN_SDHI1D1, NULL); |
| 769 | gpio_request(GPIO_FN_SDHI1D0, NULL); | 796 | gpio_request(GPIO_FN_SDHI1D0, NULL); |
| 770 | |||
| 771 | gpio_request(GPIO_PTB6, NULL); | ||
| 772 | gpio_request(GPIO_PTB7, NULL); | 797 | gpio_request(GPIO_PTB7, NULL); |
| 773 | gpio_direction_output(GPIO_PTB6, 1); | 798 | gpio_direction_output(GPIO_PTB7, 0); |
| 774 | gpio_direction_output(GPIO_PTB7, 1); | ||
| 775 | 799 | ||
| 776 | /* I/O buffer drive ability is high for SDHI1 */ | 800 | /* I/O buffer drive ability is high for SDHI1 */ |
| 777 | ctrl_outw((ctrl_inw(IODRIVEA) & ~0x3000) | 0x2000 , IODRIVEA); | 801 | ctrl_outw((ctrl_inw(IODRIVEA) & ~0x3000) | 0x2000 , IODRIVEA); |
