diff options
| author | Guennadi Liakhovetski <g.liakhovetski@gmx.de> | 2010-03-29 03:45:28 -0400 |
|---|---|---|
| committer | Paul Mundt <lethal@linux-sh.org> | 2010-05-22 03:44:57 -0400 |
| commit | 2d151248286d438e97ebb22ff676423df299da86 (patch) | |
| tree | 22cf5d5379ef29abb073f98622df75d092b5abde | |
| parent | aee5ab0bbd224b618408cacfcc656699feec4230 (diff) | |
sh: add Video Output Unit (VOU) and AK8813 TV-encoder support to ms7724se
Add platform bindings, GPIO initialisation and allocation and AK8813 reset code
to ms7724se.
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
| -rw-r--r-- | arch/sh/boards/mach-se/7724/setup.c | 90 |
1 files changed, 82 insertions, 8 deletions
diff --git a/arch/sh/boards/mach-se/7724/setup.c b/arch/sh/boards/mach-se/7724/setup.c index e74ae7b0d8bf..60f0387a69d1 100644 --- a/arch/sh/boards/mach-se/7724/setup.c +++ b/arch/sh/boards/mach-se/7724/setup.c | |||
| @@ -515,6 +515,52 @@ static struct platform_device irda_device = { | |||
| 515 | .resource = irda_resources, | 515 | .resource = irda_resources, |
| 516 | }; | 516 | }; |
| 517 | 517 | ||
| 518 | #include <media/ak881x.h> | ||
| 519 | #include <media/sh_vou.h> | ||
| 520 | |||
| 521 | struct ak881x_pdata ak881x_pdata = { | ||
| 522 | .flags = AK881X_IF_MODE_SLAVE, | ||
| 523 | }; | ||
| 524 | |||
| 525 | static struct i2c_board_info ak8813 = { | ||
| 526 | /* With open J18 jumper address is 0x21 */ | ||
| 527 | I2C_BOARD_INFO("ak8813", 0x20), | ||
| 528 | .platform_data = &ak881x_pdata, | ||
| 529 | }; | ||
| 530 | |||
| 531 | struct sh_vou_pdata sh_vou_pdata = { | ||
| 532 | .bus_fmt = SH_VOU_BUS_8BIT, | ||
| 533 | .flags = SH_VOU_HSYNC_LOW | SH_VOU_VSYNC_LOW, | ||
| 534 | .board_info = &ak8813, | ||
| 535 | .i2c_adap = 0, | ||
| 536 | .module_name = "ak881x", | ||
| 537 | }; | ||
| 538 | |||
| 539 | static struct resource sh_vou_resources[] = { | ||
| 540 | [0] = { | ||
| 541 | .start = 0xfe960000, | ||
| 542 | .end = 0xfe962043, | ||
| 543 | .flags = IORESOURCE_MEM, | ||
| 544 | }, | ||
| 545 | [1] = { | ||
| 546 | .start = 55, | ||
| 547 | .flags = IORESOURCE_IRQ, | ||
| 548 | }, | ||
| 549 | }; | ||
| 550 | |||
| 551 | static struct platform_device vou_device = { | ||
| 552 | .name = "sh-vou", | ||
| 553 | .id = -1, | ||
| 554 | .num_resources = ARRAY_SIZE(sh_vou_resources), | ||
| 555 | .resource = sh_vou_resources, | ||
| 556 | .dev = { | ||
| 557 | .platform_data = &sh_vou_pdata, | ||
| 558 | }, | ||
| 559 | .archdata = { | ||
| 560 | .hwblk_id = HWBLK_VOU, | ||
| 561 | }, | ||
| 562 | }; | ||
| 563 | |||
| 518 | static struct platform_device *ms7724se_devices[] __initdata = { | 564 | static struct platform_device *ms7724se_devices[] __initdata = { |
| 519 | &heartbeat_device, | 565 | &heartbeat_device, |
| 520 | &smc91x_eth_device, | 566 | &smc91x_eth_device, |
| @@ -530,6 +576,7 @@ static struct platform_device *ms7724se_devices[] __initdata = { | |||
| 530 | &sdhi0_cn7_device, | 576 | &sdhi0_cn7_device, |
| 531 | &sdhi1_cn8_device, | 577 | &sdhi1_cn8_device, |
| 532 | &irda_device, | 578 | &irda_device, |
| 579 | &vou_device, | ||
| 533 | }; | 580 | }; |
| 534 | 581 | ||
| 535 | /* I2C device */ | 582 | /* I2C device */ |
| @@ -614,6 +661,7 @@ static int __init devices_setup(void) | |||
| 614 | { | 661 | { |
| 615 | u16 sw = __raw_readw(SW4140); /* select camera, monitor */ | 662 | u16 sw = __raw_readw(SW4140); /* select camera, monitor */ |
| 616 | struct clk *clk; | 663 | struct clk *clk; |
| 664 | u16 fpga_out; | ||
| 617 | 665 | ||
| 618 | /* register board specific self-refresh code */ | 666 | /* register board specific self-refresh code */ |
| 619 | sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF | | 667 | sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF | |
| @@ -623,14 +671,26 @@ static int __init devices_setup(void) | |||
| 623 | &ms7724se_sdram_leave_start, | 671 | &ms7724se_sdram_leave_start, |
| 624 | &ms7724se_sdram_leave_end); | 672 | &ms7724se_sdram_leave_end); |
| 625 | /* Reset Release */ | 673 | /* Reset Release */ |
| 626 | __raw_writew(__raw_readw(FPGA_OUT) & | 674 | fpga_out = __raw_readw(FPGA_OUT); |
| 627 | ~((1 << 1) | /* LAN */ | 675 | /* bit4: NTSC_PDN, bit5: NTSC_RESET */ |
| 628 | (1 << 6) | /* VIDEO DAC */ | 676 | fpga_out &= ~((1 << 1) | /* LAN */ |
| 629 | (1 << 7) | /* AK4643 */ | 677 | (1 << 4) | /* AK8813 PDN */ |
| 630 | (1 << 8) | /* IrDA */ | 678 | (1 << 5) | /* AK8813 RESET */ |
| 631 | (1 << 12) | /* USB0 */ | 679 | (1 << 6) | /* VIDEO DAC */ |
| 632 | (1 << 14)), /* RMII */ | 680 | (1 << 7) | /* AK4643 */ |
| 633 | FPGA_OUT); | 681 | (1 << 8) | /* IrDA */ |
| 682 | (1 << 12) | /* USB0 */ | ||
| 683 | (1 << 14)); /* RMII */ | ||
| 684 | __raw_writew(fpga_out | (1 << 4), FPGA_OUT); | ||
| 685 | |||
| 686 | udelay(10); | ||
| 687 | |||
| 688 | /* AK8813 RESET */ | ||
| 689 | __raw_writew(fpga_out | (1 << 5), FPGA_OUT); | ||
| 690 | |||
| 691 | udelay(10); | ||
| 692 | |||
| 693 | __raw_writew(fpga_out, FPGA_OUT); | ||
| 634 | 694 | ||
| 635 | /* turn on USB clocks, use external clock */ | 695 | /* turn on USB clocks, use external clock */ |
| 636 | __raw_writew((__raw_readw(PORT_MSELCRB) & ~0xc000) | 0x8000, PORT_MSELCRB); | 696 | __raw_writew((__raw_readw(PORT_MSELCRB) & ~0xc000) | 0x8000, PORT_MSELCRB); |
| @@ -862,6 +922,20 @@ static int __init devices_setup(void) | |||
| 862 | lcdc_info.ch[0].flags = LCDC_FLAGS_DWPOL; | 922 | lcdc_info.ch[0].flags = LCDC_FLAGS_DWPOL; |
| 863 | } | 923 | } |
| 864 | 924 | ||
| 925 | /* VOU */ | ||
| 926 | gpio_request(GPIO_FN_DV_D15, NULL); | ||
| 927 | gpio_request(GPIO_FN_DV_D14, NULL); | ||
| 928 | gpio_request(GPIO_FN_DV_D13, NULL); | ||
| 929 | gpio_request(GPIO_FN_DV_D12, NULL); | ||
| 930 | gpio_request(GPIO_FN_DV_D11, NULL); | ||
| 931 | gpio_request(GPIO_FN_DV_D10, NULL); | ||
| 932 | gpio_request(GPIO_FN_DV_D9, NULL); | ||
| 933 | gpio_request(GPIO_FN_DV_D8, NULL); | ||
| 934 | gpio_request(GPIO_FN_DV_CLKI, NULL); | ||
| 935 | gpio_request(GPIO_FN_DV_CLK, NULL); | ||
| 936 | gpio_request(GPIO_FN_DV_VSYNC, NULL); | ||
| 937 | gpio_request(GPIO_FN_DV_HSYNC, NULL); | ||
| 938 | |||
| 865 | return platform_add_devices(ms7724se_devices, | 939 | return platform_add_devices(ms7724se_devices, |
| 866 | ARRAY_SIZE(ms7724se_devices)); | 940 | ARRAY_SIZE(ms7724se_devices)); |
| 867 | } | 941 | } |
