diff options
| -rw-r--r-- | arch/arm/configs/marzen_defconfig | 14 | ||||
| -rw-r--r-- | arch/arm/mach-shmobile/Kconfig | 2 | ||||
| -rw-r--r-- | arch/arm/mach-shmobile/board-ap4evb.c | 139 | ||||
| -rw-r--r-- | arch/arm/mach-shmobile/board-armadillo800eva.c | 38 | ||||
| -rw-r--r-- | arch/arm/mach-shmobile/board-mackerel.c | 74 | ||||
| -rw-r--r-- | arch/arm/mach-shmobile/board-marzen.c | 186 |
6 files changed, 205 insertions, 248 deletions
diff --git a/arch/arm/configs/marzen_defconfig b/arch/arm/configs/marzen_defconfig index 5b8215f424c5..728a43c446f8 100644 --- a/arch/arm/configs/marzen_defconfig +++ b/arch/arm/configs/marzen_defconfig | |||
| @@ -47,6 +47,8 @@ CONFIG_DEVTMPFS_MOUNT=y | |||
| 47 | # CONFIG_STANDALONE is not set | 47 | # CONFIG_STANDALONE is not set |
| 48 | # CONFIG_PREVENT_FIRMWARE_BUILD is not set | 48 | # CONFIG_PREVENT_FIRMWARE_BUILD is not set |
| 49 | # CONFIG_FW_LOADER is not set | 49 | # CONFIG_FW_LOADER is not set |
| 50 | CONFIG_SCSI=y | ||
| 51 | CONFIG_BLK_DEV_SD=y | ||
| 50 | CONFIG_NETDEVICES=y | 52 | CONFIG_NETDEVICES=y |
| 51 | # CONFIG_NET_VENDOR_BROADCOM is not set | 53 | # CONFIG_NET_VENDOR_BROADCOM is not set |
| 52 | # CONFIG_NET_VENDOR_FARADAY is not set | 54 | # CONFIG_NET_VENDOR_FARADAY is not set |
| @@ -59,9 +61,8 @@ CONFIG_SMSC911X=y | |||
| 59 | # CONFIG_NET_VENDOR_STMICRO is not set | 61 | # CONFIG_NET_VENDOR_STMICRO is not set |
| 60 | # CONFIG_WLAN is not set | 62 | # CONFIG_WLAN is not set |
| 61 | # CONFIG_INPUT_MOUSEDEV is not set | 63 | # CONFIG_INPUT_MOUSEDEV is not set |
| 62 | # CONFIG_INPUT_KEYBOARD is not set | 64 | CONFIG_INPUT_EVDEV=y |
| 63 | # CONFIG_INPUT_MOUSE is not set | 65 | # CONFIG_INPUT_MOUSE is not set |
| 64 | # CONFIG_SERIO is not set | ||
| 65 | # CONFIG_VT is not set | 66 | # CONFIG_VT is not set |
| 66 | # CONFIG_LEGACY_PTYS is not set | 67 | # CONFIG_LEGACY_PTYS is not set |
| 67 | # CONFIG_DEVKMEM is not set | 68 | # CONFIG_DEVKMEM is not set |
| @@ -78,9 +79,16 @@ CONFIG_GPIO_SYSFS=y | |||
| 78 | CONFIG_THERMAL=y | 79 | CONFIG_THERMAL=y |
| 79 | CONFIG_RCAR_THERMAL=y | 80 | CONFIG_RCAR_THERMAL=y |
| 80 | CONFIG_SSB=y | 81 | CONFIG_SSB=y |
| 81 | # CONFIG_USB_SUPPORT is not set | 82 | CONFIG_USB=y |
| 83 | CONFIG_USB_RCAR_PHY=y | ||
| 82 | CONFIG_MMC=y | 84 | CONFIG_MMC=y |
| 83 | CONFIG_MMC_SDHI=y | 85 | CONFIG_MMC_SDHI=y |
| 86 | CONFIG_USB=y | ||
| 87 | CONFIG_USB_EHCI_HCD=y | ||
| 88 | CONFIG_USB_OHCI_HCD=y | ||
| 89 | CONFIG_USB_OHCI_HCD_PLATFORM=y | ||
| 90 | CONFIG_USB_EHCI_HCD_PLATFORM=y | ||
| 91 | CONFIG_USB_STORAGE=y | ||
| 84 | CONFIG_UIO=y | 92 | CONFIG_UIO=y |
| 85 | CONFIG_UIO_PDRV_GENIRQ=y | 93 | CONFIG_UIO_PDRV_GENIRQ=y |
| 86 | # CONFIG_IOMMU_SUPPORT is not set | 94 | # CONFIG_IOMMU_SUPPORT is not set |
diff --git a/arch/arm/mach-shmobile/Kconfig b/arch/arm/mach-shmobile/Kconfig index 4eddca14ae07..9255546e7bf6 100644 --- a/arch/arm/mach-shmobile/Kconfig +++ b/arch/arm/mach-shmobile/Kconfig | |||
| @@ -29,6 +29,8 @@ config ARCH_R8A7779 | |||
| 29 | select ARM_GIC | 29 | select ARM_GIC |
| 30 | select CPU_V7 | 30 | select CPU_V7 |
| 31 | select SH_CLK_CPG | 31 | select SH_CLK_CPG |
| 32 | select USB_ARCH_HAS_EHCI | ||
| 33 | select USB_ARCH_HAS_OHCI | ||
| 32 | 34 | ||
| 33 | config ARCH_EMEV2 | 35 | config ARCH_EMEV2 |
| 34 | bool "Emma Mobile EV2" | 36 | bool "Emma Mobile EV2" |
diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c index cefdd030361d..40657854e3ad 100644 --- a/arch/arm/mach-shmobile/board-ap4evb.c +++ b/arch/arm/mach-shmobile/board-ap4evb.c | |||
| @@ -658,133 +658,16 @@ static struct platform_device lcdc_device = { | |||
| 658 | 658 | ||
| 659 | /* FSI */ | 659 | /* FSI */ |
| 660 | #define IRQ_FSI evt2irq(0x1840) | 660 | #define IRQ_FSI evt2irq(0x1840) |
| 661 | static int __fsi_set_rate(struct clk *clk, long rate, int enable) | ||
| 662 | { | ||
| 663 | int ret = 0; | ||
| 664 | |||
| 665 | if (rate <= 0) | ||
| 666 | return ret; | ||
| 667 | |||
| 668 | if (enable) { | ||
| 669 | ret = clk_set_rate(clk, rate); | ||
| 670 | if (0 == ret) | ||
| 671 | ret = clk_enable(clk); | ||
| 672 | } else { | ||
| 673 | clk_disable(clk); | ||
| 674 | } | ||
| 675 | |||
| 676 | return ret; | ||
| 677 | } | ||
| 678 | |||
| 679 | static int __fsi_set_round_rate(struct clk *clk, long rate, int enable) | ||
| 680 | { | ||
| 681 | return __fsi_set_rate(clk, clk_round_rate(clk, rate), enable); | ||
| 682 | } | ||
| 683 | |||
| 684 | static int fsi_ak4642_set_rate(struct device *dev, int rate, int enable) | ||
| 685 | { | ||
| 686 | struct clk *fsia_ick; | ||
| 687 | struct clk *fsiack; | ||
| 688 | int ret = -EIO; | ||
| 689 | |||
| 690 | fsia_ick = clk_get(dev, "icka"); | ||
| 691 | if (IS_ERR(fsia_ick)) | ||
| 692 | return PTR_ERR(fsia_ick); | ||
| 693 | |||
| 694 | /* | ||
| 695 | * FSIACK is connected to AK4642, | ||
| 696 | * and use external clock pin from it. | ||
| 697 | * it is parent of fsia_ick now. | ||
| 698 | */ | ||
| 699 | fsiack = clk_get_parent(fsia_ick); | ||
| 700 | if (!fsiack) | ||
| 701 | goto fsia_ick_out; | ||
| 702 | |||
| 703 | /* | ||
| 704 | * we get 1/1 divided clock by setting same rate to fsiack and fsia_ick | ||
| 705 | * | ||
| 706 | ** FIXME ** | ||
| 707 | * Because the freq_table of external clk (fsiack) are all 0, | ||
| 708 | * the return value of clk_round_rate became 0. | ||
| 709 | * So, it use __fsi_set_rate here. | ||
| 710 | */ | ||
| 711 | ret = __fsi_set_rate(fsiack, rate, enable); | ||
| 712 | if (ret < 0) | ||
| 713 | goto fsiack_out; | ||
| 714 | |||
| 715 | ret = __fsi_set_round_rate(fsia_ick, rate, enable); | ||
| 716 | if ((ret < 0) && enable) | ||
| 717 | __fsi_set_round_rate(fsiack, rate, 0); /* disable FSI ACK */ | ||
| 718 | |||
| 719 | fsiack_out: | ||
| 720 | clk_put(fsiack); | ||
| 721 | |||
| 722 | fsia_ick_out: | ||
| 723 | clk_put(fsia_ick); | ||
| 724 | |||
| 725 | return 0; | ||
| 726 | } | ||
| 727 | |||
| 728 | static int fsi_hdmi_set_rate(struct device *dev, int rate, int enable) | ||
| 729 | { | ||
| 730 | struct clk *fsib_clk; | ||
| 731 | struct clk *fdiv_clk = clk_get(NULL, "fsidivb"); | ||
| 732 | long fsib_rate = 0; | ||
| 733 | long fdiv_rate = 0; | ||
| 734 | int ackmd_bpfmd; | ||
| 735 | int ret; | ||
| 736 | |||
| 737 | switch (rate) { | ||
| 738 | case 44100: | ||
| 739 | fsib_rate = rate * 256; | ||
| 740 | ackmd_bpfmd = SH_FSI_ACKMD_256 | SH_FSI_BPFMD_64; | ||
| 741 | break; | ||
| 742 | case 48000: | ||
| 743 | fsib_rate = 85428000; /* around 48kHz x 256 x 7 */ | ||
| 744 | fdiv_rate = rate * 256; | ||
| 745 | ackmd_bpfmd = SH_FSI_ACKMD_256 | SH_FSI_BPFMD_64; | ||
| 746 | break; | ||
| 747 | default: | ||
| 748 | pr_err("unsupported rate in FSI2 port B\n"); | ||
| 749 | return -EINVAL; | ||
| 750 | } | ||
| 751 | |||
| 752 | /* FSI B setting */ | ||
| 753 | fsib_clk = clk_get(dev, "ickb"); | ||
| 754 | if (IS_ERR(fsib_clk)) | ||
| 755 | return -EIO; | ||
| 756 | |||
| 757 | ret = __fsi_set_round_rate(fsib_clk, fsib_rate, enable); | ||
| 758 | if (ret < 0) | ||
| 759 | goto fsi_set_rate_end; | ||
| 760 | |||
| 761 | /* FSI DIV setting */ | ||
| 762 | ret = __fsi_set_round_rate(fdiv_clk, fdiv_rate, enable); | ||
| 763 | if (ret < 0) { | ||
| 764 | /* disable FSI B */ | ||
| 765 | if (enable) | ||
| 766 | __fsi_set_round_rate(fsib_clk, fsib_rate, 0); | ||
| 767 | goto fsi_set_rate_end; | ||
| 768 | } | ||
| 769 | |||
| 770 | ret = ackmd_bpfmd; | ||
| 771 | |||
| 772 | fsi_set_rate_end: | ||
| 773 | clk_put(fsib_clk); | ||
| 774 | return ret; | ||
| 775 | } | ||
| 776 | |||
| 777 | static struct sh_fsi_platform_info fsi_info = { | 661 | static struct sh_fsi_platform_info fsi_info = { |
| 778 | .port_a = { | 662 | .port_a = { |
| 779 | .flags = SH_FSI_BRS_INV, | 663 | .flags = SH_FSI_BRS_INV, |
| 780 | .set_rate = fsi_ak4642_set_rate, | ||
| 781 | }, | 664 | }, |
| 782 | .port_b = { | 665 | .port_b = { |
| 783 | .flags = SH_FSI_BRS_INV | | 666 | .flags = SH_FSI_BRS_INV | |
| 784 | SH_FSI_BRM_INV | | 667 | SH_FSI_BRM_INV | |
| 785 | SH_FSI_LRS_INV | | 668 | SH_FSI_LRS_INV | |
| 669 | SH_FSI_CLK_CPG | | ||
| 786 | SH_FSI_FMT_SPDIF, | 670 | SH_FSI_FMT_SPDIF, |
| 787 | .set_rate = fsi_hdmi_set_rate, | ||
| 788 | }, | 671 | }, |
| 789 | }; | 672 | }; |
| 790 | 673 | ||
| @@ -1144,25 +1027,6 @@ out: | |||
| 1144 | clk_put(hdmi_ick); | 1027 | clk_put(hdmi_ick); |
| 1145 | } | 1028 | } |
| 1146 | 1029 | ||
| 1147 | static void __init fsi_init_pm_clock(void) | ||
| 1148 | { | ||
| 1149 | struct clk *fsia_ick; | ||
| 1150 | int ret; | ||
| 1151 | |||
| 1152 | fsia_ick = clk_get(&fsi_device.dev, "icka"); | ||
| 1153 | if (IS_ERR(fsia_ick)) { | ||
| 1154 | ret = PTR_ERR(fsia_ick); | ||
| 1155 | pr_err("Cannot get FSI ICK: %d\n", ret); | ||
| 1156 | return; | ||
| 1157 | } | ||
| 1158 | |||
| 1159 | ret = clk_set_parent(fsia_ick, &sh7372_fsiack_clk); | ||
| 1160 | if (ret < 0) | ||
| 1161 | pr_err("Cannot set FSI-A parent: %d\n", ret); | ||
| 1162 | |||
| 1163 | clk_put(fsia_ick); | ||
| 1164 | } | ||
| 1165 | |||
| 1166 | /* TouchScreen */ | 1030 | /* TouchScreen */ |
| 1167 | #ifdef CONFIG_AP4EVB_QHD | 1031 | #ifdef CONFIG_AP4EVB_QHD |
| 1168 | # define GPIO_TSC_IRQ GPIO_FN_IRQ28_123 | 1032 | # define GPIO_TSC_IRQ GPIO_FN_IRQ28_123 |
| @@ -1476,7 +1340,6 @@ static void __init ap4evb_init(void) | |||
| 1476 | ARRAY_SIZE(domain_devices)); | 1340 | ARRAY_SIZE(domain_devices)); |
| 1477 | 1341 | ||
| 1478 | hdmi_init_pm_clock(); | 1342 | hdmi_init_pm_clock(); |
| 1479 | fsi_init_pm_clock(); | ||
| 1480 | sh7372_pm_init(); | 1343 | sh7372_pm_init(); |
| 1481 | pm_clk_add(&fsi_device.dev, "spu2"); | 1344 | pm_clk_add(&fsi_device.dev, "spu2"); |
| 1482 | pm_clk_add(&lcdc1_device.dev, "hdmi"); | 1345 | pm_clk_add(&lcdc1_device.dev, "hdmi"); |
diff --git a/arch/arm/mach-shmobile/board-armadillo800eva.c b/arch/arm/mach-shmobile/board-armadillo800eva.c index 499e6e376666..5353adf6b828 100644 --- a/arch/arm/mach-shmobile/board-armadillo800eva.c +++ b/arch/arm/mach-shmobile/board-armadillo800eva.c | |||
| @@ -768,32 +768,6 @@ static struct platform_device ceu0_device = { | |||
| 768 | }; | 768 | }; |
| 769 | 769 | ||
| 770 | /* FSI */ | 770 | /* FSI */ |
| 771 | static int fsi_hdmi_set_rate(struct device *dev, int rate, int enable) | ||
| 772 | { | ||
| 773 | struct clk *fsib; | ||
| 774 | int ret; | ||
| 775 | |||
| 776 | /* it support 48KHz only */ | ||
| 777 | if (48000 != rate) | ||
| 778 | return -EINVAL; | ||
| 779 | |||
| 780 | fsib = clk_get(dev, "ickb"); | ||
| 781 | if (IS_ERR(fsib)) | ||
| 782 | return -EINVAL; | ||
| 783 | |||
| 784 | if (enable) { | ||
| 785 | ret = SH_FSI_ACKMD_256 | SH_FSI_BPFMD_64; | ||
| 786 | clk_enable(fsib); | ||
| 787 | } else { | ||
| 788 | ret = 0; | ||
| 789 | clk_disable(fsib); | ||
| 790 | } | ||
| 791 | |||
| 792 | clk_put(fsib); | ||
| 793 | |||
| 794 | return ret; | ||
| 795 | } | ||
| 796 | |||
| 797 | static struct sh_fsi_platform_info fsi_info = { | 771 | static struct sh_fsi_platform_info fsi_info = { |
| 798 | /* FSI-WM8978 */ | 772 | /* FSI-WM8978 */ |
| 799 | .port_a = { | 773 | .port_a = { |
| @@ -802,8 +776,8 @@ static struct sh_fsi_platform_info fsi_info = { | |||
| 802 | /* FSI-HDMI */ | 776 | /* FSI-HDMI */ |
| 803 | .port_b = { | 777 | .port_b = { |
| 804 | .flags = SH_FSI_FMT_SPDIF | | 778 | .flags = SH_FSI_FMT_SPDIF | |
| 805 | SH_FSI_ENABLE_STREAM_MODE, | 779 | SH_FSI_ENABLE_STREAM_MODE | |
| 806 | .set_rate = fsi_hdmi_set_rate, | 780 | SH_FSI_CLK_CPG, |
| 807 | .tx_id = SHDMA_SLAVE_FSIB_TX, | 781 | .tx_id = SHDMA_SLAVE_FSIB_TX, |
| 808 | } | 782 | } |
| 809 | }; | 783 | }; |
| @@ -938,13 +912,11 @@ static void __init eva_clock_init(void) | |||
| 938 | struct clk *xtal1 = clk_get(NULL, "extal1"); | 912 | struct clk *xtal1 = clk_get(NULL, "extal1"); |
| 939 | struct clk *usb24s = clk_get(NULL, "usb24s"); | 913 | struct clk *usb24s = clk_get(NULL, "usb24s"); |
| 940 | struct clk *fsibck = clk_get(NULL, "fsibck"); | 914 | struct clk *fsibck = clk_get(NULL, "fsibck"); |
| 941 | struct clk *fsib = clk_get(&fsi_device.dev, "ickb"); | ||
| 942 | 915 | ||
| 943 | if (IS_ERR(system) || | 916 | if (IS_ERR(system) || |
| 944 | IS_ERR(xtal1) || | 917 | IS_ERR(xtal1) || |
| 945 | IS_ERR(usb24s) || | 918 | IS_ERR(usb24s) || |
| 946 | IS_ERR(fsibck) || | 919 | IS_ERR(fsibck)) { |
| 947 | IS_ERR(fsib)) { | ||
| 948 | pr_err("armadillo800eva board clock init failed\n"); | 920 | pr_err("armadillo800eva board clock init failed\n"); |
| 949 | goto clock_error; | 921 | goto clock_error; |
| 950 | } | 922 | } |
| @@ -956,9 +928,7 @@ static void __init eva_clock_init(void) | |||
| 956 | clk_set_parent(usb24s, system); | 928 | clk_set_parent(usb24s, system); |
| 957 | 929 | ||
| 958 | /* FSIBCK is 12.288MHz, and it is parent of FSI-B */ | 930 | /* FSIBCK is 12.288MHz, and it is parent of FSI-B */ |
| 959 | clk_set_parent(fsib, fsibck); | ||
| 960 | clk_set_rate(fsibck, 12288000); | 931 | clk_set_rate(fsibck, 12288000); |
| 961 | clk_set_rate(fsib, 12288000); | ||
| 962 | 932 | ||
| 963 | clock_error: | 933 | clock_error: |
| 964 | if (!IS_ERR(system)) | 934 | if (!IS_ERR(system)) |
| @@ -969,8 +939,6 @@ clock_error: | |||
| 969 | clk_put(usb24s); | 939 | clk_put(usb24s); |
| 970 | if (!IS_ERR(fsibck)) | 940 | if (!IS_ERR(fsibck)) |
| 971 | clk_put(fsibck); | 941 | clk_put(fsibck); |
| 972 | if (!IS_ERR(fsib)) | ||
| 973 | clk_put(fsib); | ||
| 974 | } | 942 | } |
| 975 | 943 | ||
| 976 | /* | 944 | /* |
diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c index f274252e4705..bf2bcb92b426 100644 --- a/arch/arm/mach-shmobile/board-mackerel.c +++ b/arch/arm/mach-shmobile/board-mackerel.c | |||
| @@ -816,6 +816,8 @@ static struct platform_device usbhs1_device = { | |||
| 816 | .id = 1, | 816 | .id = 1, |
| 817 | .dev = { | 817 | .dev = { |
| 818 | .platform_data = &usbhs1_private.info, | 818 | .platform_data = &usbhs1_private.info, |
| 819 | .dma_mask = &usbhs1_device.dev.coherent_dma_mask, | ||
| 820 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
| 819 | }, | 821 | }, |
| 820 | .num_resources = ARRAY_SIZE(usbhs1_resources), | 822 | .num_resources = ARRAY_SIZE(usbhs1_resources), |
| 821 | .resource = usbhs1_resources, | 823 | .resource = usbhs1_resources, |
| @@ -860,76 +862,6 @@ static struct platform_device leds_device = { | |||
| 860 | 862 | ||
| 861 | /* FSI */ | 863 | /* FSI */ |
| 862 | #define IRQ_FSI evt2irq(0x1840) | 864 | #define IRQ_FSI evt2irq(0x1840) |
| 863 | static int __fsi_set_round_rate(struct clk *clk, long rate, int enable) | ||
| 864 | { | ||
| 865 | int ret; | ||
| 866 | |||
| 867 | if (rate <= 0) | ||
| 868 | return 0; | ||
| 869 | |||
| 870 | if (!enable) { | ||
| 871 | clk_disable(clk); | ||
| 872 | return 0; | ||
| 873 | } | ||
| 874 | |||
| 875 | ret = clk_set_rate(clk, clk_round_rate(clk, rate)); | ||
| 876 | if (ret < 0) | ||
| 877 | return ret; | ||
| 878 | |||
| 879 | return clk_enable(clk); | ||
| 880 | } | ||
| 881 | |||
| 882 | static int fsi_b_set_rate(struct device *dev, int rate, int enable) | ||
| 883 | { | ||
| 884 | struct clk *fsib_clk; | ||
| 885 | struct clk *fdiv_clk = clk_get(NULL, "fsidivb"); | ||
| 886 | long fsib_rate = 0; | ||
| 887 | long fdiv_rate = 0; | ||
| 888 | int ackmd_bpfmd; | ||
| 889 | int ret; | ||
| 890 | |||
| 891 | /* clock start */ | ||
| 892 | switch (rate) { | ||
| 893 | case 44100: | ||
| 894 | fsib_rate = rate * 256; | ||
| 895 | ackmd_bpfmd = SH_FSI_ACKMD_256 | SH_FSI_BPFMD_64; | ||
| 896 | break; | ||
| 897 | case 48000: | ||
| 898 | fsib_rate = 85428000; /* around 48kHz x 256 x 7 */ | ||
| 899 | fdiv_rate = rate * 256; | ||
| 900 | ackmd_bpfmd = SH_FSI_ACKMD_256 | SH_FSI_BPFMD_64; | ||
| 901 | break; | ||
| 902 | default: | ||
| 903 | pr_err("unsupported rate in FSI2 port B\n"); | ||
| 904 | return -EINVAL; | ||
| 905 | } | ||
| 906 | |||
| 907 | /* FSI B setting */ | ||
| 908 | fsib_clk = clk_get(dev, "ickb"); | ||
| 909 | if (IS_ERR(fsib_clk)) | ||
| 910 | return -EIO; | ||
| 911 | |||
| 912 | /* fsib */ | ||
| 913 | ret = __fsi_set_round_rate(fsib_clk, fsib_rate, enable); | ||
| 914 | if (ret < 0) | ||
| 915 | goto fsi_set_rate_end; | ||
| 916 | |||
| 917 | /* FSI DIV */ | ||
| 918 | ret = __fsi_set_round_rate(fdiv_clk, fdiv_rate, enable); | ||
| 919 | if (ret < 0) { | ||
| 920 | /* disable FSI B */ | ||
| 921 | if (enable) | ||
| 922 | __fsi_set_round_rate(fsib_clk, fsib_rate, 0); | ||
| 923 | goto fsi_set_rate_end; | ||
| 924 | } | ||
| 925 | |||
| 926 | ret = ackmd_bpfmd; | ||
| 927 | |||
| 928 | fsi_set_rate_end: | ||
| 929 | clk_put(fsib_clk); | ||
| 930 | return ret; | ||
| 931 | } | ||
| 932 | |||
| 933 | static struct sh_fsi_platform_info fsi_info = { | 865 | static struct sh_fsi_platform_info fsi_info = { |
| 934 | .port_a = { | 866 | .port_a = { |
| 935 | .flags = SH_FSI_BRS_INV, | 867 | .flags = SH_FSI_BRS_INV, |
| @@ -940,8 +872,8 @@ static struct sh_fsi_platform_info fsi_info = { | |||
| 940 | .flags = SH_FSI_BRS_INV | | 872 | .flags = SH_FSI_BRS_INV | |
| 941 | SH_FSI_BRM_INV | | 873 | SH_FSI_BRM_INV | |
| 942 | SH_FSI_LRS_INV | | 874 | SH_FSI_LRS_INV | |
| 875 | SH_FSI_CLK_CPG | | ||
| 943 | SH_FSI_FMT_SPDIF, | 876 | SH_FSI_FMT_SPDIF, |
| 944 | .set_rate = fsi_b_set_rate, | ||
| 945 | } | 877 | } |
| 946 | }; | 878 | }; |
| 947 | 879 | ||
diff --git a/arch/arm/mach-shmobile/board-marzen.c b/arch/arm/mach-shmobile/board-marzen.c index 69f7f464eff8..449f9289567d 100644 --- a/arch/arm/mach-shmobile/board-marzen.c +++ b/arch/arm/mach-shmobile/board-marzen.c | |||
| @@ -34,6 +34,10 @@ | |||
| 34 | #include <linux/spi/sh_hspi.h> | 34 | #include <linux/spi/sh_hspi.h> |
| 35 | #include <linux/mmc/sh_mobile_sdhi.h> | 35 | #include <linux/mmc/sh_mobile_sdhi.h> |
| 36 | #include <linux/mfd/tmio.h> | 36 | #include <linux/mfd/tmio.h> |
| 37 | #include <linux/usb/otg.h> | ||
| 38 | #include <linux/usb/ehci_pdriver.h> | ||
| 39 | #include <linux/usb/ohci_pdriver.h> | ||
| 40 | #include <linux/pm_runtime.h> | ||
| 37 | #include <mach/hardware.h> | 41 | #include <mach/hardware.h> |
| 38 | #include <mach/r8a7779.h> | 42 | #include <mach/r8a7779.h> |
| 39 | #include <mach/common.h> | 43 | #include <mach/common.h> |
| @@ -144,13 +148,185 @@ static struct platform_device hspi_device = { | |||
| 144 | .num_resources = ARRAY_SIZE(hspi_resources), | 148 | .num_resources = ARRAY_SIZE(hspi_resources), |
| 145 | }; | 149 | }; |
| 146 | 150 | ||
| 151 | /* USB PHY */ | ||
| 152 | static struct resource usb_phy_resources[] = { | ||
| 153 | [0] = { | ||
| 154 | .start = 0xffe70000, | ||
| 155 | .end = 0xffe70900 - 1, | ||
| 156 | .flags = IORESOURCE_MEM, | ||
| 157 | }, | ||
| 158 | [1] = { | ||
| 159 | .start = 0xfff70000, | ||
| 160 | .end = 0xfff70900 - 1, | ||
| 161 | .flags = IORESOURCE_MEM, | ||
| 162 | }, | ||
| 163 | }; | ||
| 164 | |||
| 165 | static struct platform_device usb_phy_device = { | ||
| 166 | .name = "rcar_usb_phy", | ||
| 167 | .resource = usb_phy_resources, | ||
| 168 | .num_resources = ARRAY_SIZE(usb_phy_resources), | ||
| 169 | }; | ||
| 170 | |||
| 147 | static struct platform_device *marzen_devices[] __initdata = { | 171 | static struct platform_device *marzen_devices[] __initdata = { |
| 148 | ð_device, | 172 | ð_device, |
| 149 | &sdhi0_device, | 173 | &sdhi0_device, |
| 150 | &thermal_device, | 174 | &thermal_device, |
| 151 | &hspi_device, | 175 | &hspi_device, |
| 176 | &usb_phy_device, | ||
| 177 | }; | ||
| 178 | |||
| 179 | /* USB */ | ||
| 180 | static struct usb_phy *phy; | ||
| 181 | static int usb_power_on(struct platform_device *pdev) | ||
| 182 | { | ||
| 183 | if (!phy) | ||
| 184 | return -EIO; | ||
| 185 | |||
| 186 | pm_runtime_enable(&pdev->dev); | ||
| 187 | pm_runtime_get_sync(&pdev->dev); | ||
| 188 | |||
| 189 | usb_phy_init(phy); | ||
| 190 | |||
| 191 | return 0; | ||
| 192 | } | ||
| 193 | |||
| 194 | static void usb_power_off(struct platform_device *pdev) | ||
| 195 | { | ||
| 196 | if (!phy) | ||
| 197 | return; | ||
| 198 | |||
| 199 | usb_phy_shutdown(phy); | ||
| 200 | |||
| 201 | pm_runtime_put_sync(&pdev->dev); | ||
| 202 | pm_runtime_disable(&pdev->dev); | ||
| 203 | } | ||
| 204 | |||
| 205 | static struct usb_ehci_pdata ehcix_pdata = { | ||
| 206 | .power_on = usb_power_on, | ||
| 207 | .power_off = usb_power_off, | ||
| 208 | .power_suspend = usb_power_off, | ||
| 209 | }; | ||
| 210 | |||
| 211 | static struct resource ehci0_resources[] = { | ||
| 212 | [0] = { | ||
| 213 | .start = 0xffe70000, | ||
| 214 | .end = 0xffe70400 - 1, | ||
| 215 | .flags = IORESOURCE_MEM, | ||
| 216 | }, | ||
| 217 | [1] = { | ||
| 218 | .start = gic_spi(44), | ||
| 219 | .flags = IORESOURCE_IRQ, | ||
| 220 | }, | ||
| 221 | }; | ||
| 222 | |||
| 223 | static struct platform_device ehci0_device = { | ||
| 224 | .name = "ehci-platform", | ||
| 225 | .id = 0, | ||
| 226 | .dev = { | ||
| 227 | .dma_mask = &ehci0_device.dev.coherent_dma_mask, | ||
| 228 | .coherent_dma_mask = 0xffffffff, | ||
| 229 | .platform_data = &ehcix_pdata, | ||
| 230 | }, | ||
| 231 | .num_resources = ARRAY_SIZE(ehci0_resources), | ||
| 232 | .resource = ehci0_resources, | ||
| 152 | }; | 233 | }; |
| 153 | 234 | ||
| 235 | static struct resource ehci1_resources[] = { | ||
| 236 | [0] = { | ||
| 237 | .start = 0xfff70000, | ||
| 238 | .end = 0xfff70400 - 1, | ||
| 239 | .flags = IORESOURCE_MEM, | ||
| 240 | }, | ||
| 241 | [1] = { | ||
| 242 | .start = gic_spi(45), | ||
| 243 | .flags = IORESOURCE_IRQ, | ||
| 244 | }, | ||
| 245 | }; | ||
| 246 | |||
| 247 | static struct platform_device ehci1_device = { | ||
| 248 | .name = "ehci-platform", | ||
| 249 | .id = 1, | ||
| 250 | .dev = { | ||
| 251 | .dma_mask = &ehci1_device.dev.coherent_dma_mask, | ||
| 252 | .coherent_dma_mask = 0xffffffff, | ||
| 253 | .platform_data = &ehcix_pdata, | ||
| 254 | }, | ||
| 255 | .num_resources = ARRAY_SIZE(ehci1_resources), | ||
| 256 | .resource = ehci1_resources, | ||
| 257 | }; | ||
| 258 | |||
| 259 | static struct usb_ohci_pdata ohcix_pdata = { | ||
| 260 | .power_on = usb_power_on, | ||
| 261 | .power_off = usb_power_off, | ||
| 262 | .power_suspend = usb_power_off, | ||
| 263 | }; | ||
| 264 | |||
| 265 | static struct resource ohci0_resources[] = { | ||
| 266 | [0] = { | ||
| 267 | .start = 0xffe70400, | ||
| 268 | .end = 0xffe70800 - 1, | ||
| 269 | .flags = IORESOURCE_MEM, | ||
| 270 | }, | ||
| 271 | [1] = { | ||
| 272 | .start = gic_spi(44), | ||
| 273 | .flags = IORESOURCE_IRQ, | ||
| 274 | }, | ||
| 275 | }; | ||
| 276 | |||
| 277 | static struct platform_device ohci0_device = { | ||
| 278 | .name = "ohci-platform", | ||
| 279 | .id = 0, | ||
| 280 | .dev = { | ||
| 281 | .dma_mask = &ohci0_device.dev.coherent_dma_mask, | ||
| 282 | .coherent_dma_mask = 0xffffffff, | ||
| 283 | .platform_data = &ohcix_pdata, | ||
| 284 | }, | ||
| 285 | .num_resources = ARRAY_SIZE(ohci0_resources), | ||
| 286 | .resource = ohci0_resources, | ||
| 287 | }; | ||
| 288 | |||
| 289 | static struct resource ohci1_resources[] = { | ||
| 290 | [0] = { | ||
| 291 | .start = 0xfff70400, | ||
| 292 | .end = 0xfff70800 - 1, | ||
| 293 | .flags = IORESOURCE_MEM, | ||
| 294 | }, | ||
| 295 | [1] = { | ||
| 296 | .start = gic_spi(45), | ||
| 297 | .flags = IORESOURCE_IRQ, | ||
| 298 | }, | ||
| 299 | }; | ||
| 300 | |||
| 301 | static struct platform_device ohci1_device = { | ||
| 302 | .name = "ohci-platform", | ||
| 303 | .id = 1, | ||
| 304 | .dev = { | ||
| 305 | .dma_mask = &ohci1_device.dev.coherent_dma_mask, | ||
| 306 | .coherent_dma_mask = 0xffffffff, | ||
| 307 | .platform_data = &ohcix_pdata, | ||
| 308 | }, | ||
| 309 | .num_resources = ARRAY_SIZE(ohci1_resources), | ||
| 310 | .resource = ohci1_resources, | ||
| 311 | }; | ||
| 312 | |||
| 313 | static struct platform_device *marzen_late_devices[] __initdata = { | ||
| 314 | &ehci0_device, | ||
| 315 | &ehci1_device, | ||
| 316 | &ohci0_device, | ||
| 317 | &ohci1_device, | ||
| 318 | }; | ||
| 319 | |||
| 320 | void __init marzen_init_late(void) | ||
| 321 | { | ||
| 322 | /* get usb phy */ | ||
| 323 | phy = usb_get_phy(USB_PHY_TYPE_USB2); | ||
| 324 | |||
| 325 | shmobile_init_late(); | ||
| 326 | platform_add_devices(marzen_late_devices, | ||
| 327 | ARRAY_SIZE(marzen_late_devices)); | ||
| 328 | } | ||
| 329 | |||
| 154 | static void __init marzen_init(void) | 330 | static void __init marzen_init(void) |
| 155 | { | 331 | { |
| 156 | regulator_register_always_on(0, "fixed-3.3V", fixed3v3_power_consumers, | 332 | regulator_register_always_on(0, "fixed-3.3V", fixed3v3_power_consumers, |
| @@ -188,6 +364,14 @@ static void __init marzen_init(void) | |||
| 188 | gpio_request(GPIO_FN_HSPI_TX0, NULL); | 364 | gpio_request(GPIO_FN_HSPI_TX0, NULL); |
| 189 | gpio_request(GPIO_FN_HSPI_RX0, NULL); | 365 | gpio_request(GPIO_FN_HSPI_RX0, NULL); |
| 190 | 366 | ||
| 367 | /* USB (CN21) */ | ||
| 368 | gpio_request(GPIO_FN_USB_OVC0, NULL); | ||
| 369 | gpio_request(GPIO_FN_USB_OVC1, NULL); | ||
| 370 | gpio_request(GPIO_FN_USB_OVC2, NULL); | ||
| 371 | |||
| 372 | /* USB (CN22) */ | ||
| 373 | gpio_request(GPIO_FN_USB_PENC2, NULL); | ||
| 374 | |||
| 191 | r8a7779_add_standard_devices(); | 375 | r8a7779_add_standard_devices(); |
| 192 | platform_add_devices(marzen_devices, ARRAY_SIZE(marzen_devices)); | 376 | platform_add_devices(marzen_devices, ARRAY_SIZE(marzen_devices)); |
| 193 | } | 377 | } |
| @@ -200,6 +384,6 @@ MACHINE_START(MARZEN, "marzen") | |||
| 200 | .init_irq = r8a7779_init_irq, | 384 | .init_irq = r8a7779_init_irq, |
| 201 | .handle_irq = gic_handle_irq, | 385 | .handle_irq = gic_handle_irq, |
| 202 | .init_machine = marzen_init, | 386 | .init_machine = marzen_init, |
| 203 | .init_late = shmobile_init_late, | 387 | .init_late = marzen_init_late, |
| 204 | .timer = &shmobile_timer, | 388 | .timer = &shmobile_timer, |
| 205 | MACHINE_END | 389 | MACHINE_END |
