diff options
| -rw-r--r-- | arch/arm/mach-shmobile/board-ap4evb.c | 139 |
1 files changed, 1 insertions, 138 deletions
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"); |
