diff options
| -rw-r--r-- | drivers/clk/qcom/mmcc-msm8974.c | 105 |
1 files changed, 54 insertions, 51 deletions
diff --git a/drivers/clk/qcom/mmcc-msm8974.c b/drivers/clk/qcom/mmcc-msm8974.c index 62200bbc759e..c65b90515872 100644 --- a/drivers/clk/qcom/mmcc-msm8974.c +++ b/drivers/clk/qcom/mmcc-msm8974.c | |||
| @@ -41,9 +41,11 @@ | |||
| 41 | #define P_EDPVCO 3 | 41 | #define P_EDPVCO 3 |
| 42 | #define P_GPLL1 4 | 42 | #define P_GPLL1 4 |
| 43 | #define P_DSI0PLL 4 | 43 | #define P_DSI0PLL 4 |
| 44 | #define P_DSI0PLL_BYTE 4 | ||
| 44 | #define P_MMPLL2 4 | 45 | #define P_MMPLL2 4 |
| 45 | #define P_MMPLL3 4 | 46 | #define P_MMPLL3 4 |
| 46 | #define P_DSI1PLL 5 | 47 | #define P_DSI1PLL 5 |
| 48 | #define P_DSI1PLL_BYTE 5 | ||
| 47 | 49 | ||
| 48 | static const u8 mmcc_xo_mmpll0_mmpll1_gpll0_map[] = { | 50 | static const u8 mmcc_xo_mmpll0_mmpll1_gpll0_map[] = { |
| 49 | [P_XO] = 0, | 51 | [P_XO] = 0, |
| @@ -161,6 +163,24 @@ static const char *mmcc_xo_dsi_hdmi_edp_gpll0[] = { | |||
| 161 | "dsi1pll", | 163 | "dsi1pll", |
| 162 | }; | 164 | }; |
| 163 | 165 | ||
| 166 | static const u8 mmcc_xo_dsibyte_hdmi_edp_gpll0_map[] = { | ||
| 167 | [P_XO] = 0, | ||
| 168 | [P_EDPLINK] = 4, | ||
| 169 | [P_HDMIPLL] = 3, | ||
| 170 | [P_GPLL0] = 5, | ||
| 171 | [P_DSI0PLL_BYTE] = 1, | ||
| 172 | [P_DSI1PLL_BYTE] = 2, | ||
| 173 | }; | ||
| 174 | |||
| 175 | static const char *mmcc_xo_dsibyte_hdmi_edp_gpll0[] = { | ||
| 176 | "xo", | ||
| 177 | "edp_link_clk", | ||
| 178 | "hdmipll", | ||
| 179 | "gpll0_vote", | ||
| 180 | "dsi0pllbyte", | ||
| 181 | "dsi1pllbyte", | ||
| 182 | }; | ||
| 183 | |||
| 164 | #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) } | 184 | #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) } |
| 165 | 185 | ||
| 166 | static struct clk_pll mmpll0 = { | 186 | static struct clk_pll mmpll0 = { |
| @@ -500,15 +520,8 @@ static struct clk_rcg2 jpeg2_clk_src = { | |||
| 500 | }, | 520 | }, |
| 501 | }; | 521 | }; |
| 502 | 522 | ||
| 503 | static struct freq_tbl ftbl_mdss_pclk0_clk[] = { | 523 | static struct freq_tbl pixel_freq_tbl[] = { |
| 504 | F(125000000, P_DSI0PLL, 2, 0, 0), | 524 | { .src = P_DSI0PLL }, |
| 505 | F(250000000, P_DSI0PLL, 1, 0, 0), | ||
| 506 | { } | ||
| 507 | }; | ||
| 508 | |||
| 509 | static struct freq_tbl ftbl_mdss_pclk1_clk[] = { | ||
| 510 | F(125000000, P_DSI1PLL, 2, 0, 0), | ||
| 511 | F(250000000, P_DSI1PLL, 1, 0, 0), | ||
| 512 | { } | 525 | { } |
| 513 | }; | 526 | }; |
| 514 | 527 | ||
| @@ -517,12 +530,13 @@ static struct clk_rcg2 pclk0_clk_src = { | |||
| 517 | .mnd_width = 8, | 530 | .mnd_width = 8, |
| 518 | .hid_width = 5, | 531 | .hid_width = 5, |
| 519 | .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, | 532 | .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, |
| 520 | .freq_tbl = ftbl_mdss_pclk0_clk, | 533 | .freq_tbl = pixel_freq_tbl, |
| 521 | .clkr.hw.init = &(struct clk_init_data){ | 534 | .clkr.hw.init = &(struct clk_init_data){ |
| 522 | .name = "pclk0_clk_src", | 535 | .name = "pclk0_clk_src", |
| 523 | .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, | 536 | .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, |
| 524 | .num_parents = 6, | 537 | .num_parents = 6, |
| 525 | .ops = &clk_rcg2_ops, | 538 | .ops = &clk_pixel_ops, |
| 539 | .flags = CLK_SET_RATE_PARENT, | ||
| 526 | }, | 540 | }, |
| 527 | }; | 541 | }; |
| 528 | 542 | ||
| @@ -531,12 +545,13 @@ static struct clk_rcg2 pclk1_clk_src = { | |||
| 531 | .mnd_width = 8, | 545 | .mnd_width = 8, |
| 532 | .hid_width = 5, | 546 | .hid_width = 5, |
| 533 | .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, | 547 | .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, |
| 534 | .freq_tbl = ftbl_mdss_pclk1_clk, | 548 | .freq_tbl = pixel_freq_tbl, |
| 535 | .clkr.hw.init = &(struct clk_init_data){ | 549 | .clkr.hw.init = &(struct clk_init_data){ |
| 536 | .name = "pclk1_clk_src", | 550 | .name = "pclk1_clk_src", |
| 537 | .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, | 551 | .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, |
| 538 | .num_parents = 6, | 552 | .num_parents = 6, |
| 539 | .ops = &clk_rcg2_ops, | 553 | .ops = &clk_pixel_ops, |
| 554 | .flags = CLK_SET_RATE_PARENT, | ||
| 540 | }, | 555 | }, |
| 541 | }; | 556 | }; |
| 542 | 557 | ||
| @@ -754,41 +769,36 @@ static struct clk_rcg2 cpp_clk_src = { | |||
| 754 | }, | 769 | }, |
| 755 | }; | 770 | }; |
| 756 | 771 | ||
| 757 | static struct freq_tbl ftbl_mdss_byte0_clk[] = { | 772 | static struct freq_tbl byte_freq_tbl[] = { |
| 758 | F(93750000, P_DSI0PLL, 8, 0, 0), | 773 | { .src = P_DSI0PLL_BYTE }, |
| 759 | F(187500000, P_DSI0PLL, 4, 0, 0), | ||
| 760 | { } | ||
| 761 | }; | ||
| 762 | |||
| 763 | static struct freq_tbl ftbl_mdss_byte1_clk[] = { | ||
| 764 | F(93750000, P_DSI1PLL, 8, 0, 0), | ||
| 765 | F(187500000, P_DSI1PLL, 4, 0, 0), | ||
| 766 | { } | 774 | { } |
| 767 | }; | 775 | }; |
| 768 | 776 | ||
| 769 | static struct clk_rcg2 byte0_clk_src = { | 777 | static struct clk_rcg2 byte0_clk_src = { |
| 770 | .cmd_rcgr = 0x2120, | 778 | .cmd_rcgr = 0x2120, |
| 771 | .hid_width = 5, | 779 | .hid_width = 5, |
| 772 | .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, | 780 | .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map, |
| 773 | .freq_tbl = ftbl_mdss_byte0_clk, | 781 | .freq_tbl = byte_freq_tbl, |
| 774 | .clkr.hw.init = &(struct clk_init_data){ | 782 | .clkr.hw.init = &(struct clk_init_data){ |
| 775 | .name = "byte0_clk_src", | 783 | .name = "byte0_clk_src", |
| 776 | .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, | 784 | .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0, |
| 777 | .num_parents = 6, | 785 | .num_parents = 6, |
| 778 | .ops = &clk_rcg2_ops, | 786 | .ops = &clk_byte_ops, |
| 787 | .flags = CLK_SET_RATE_PARENT, | ||
| 779 | }, | 788 | }, |
| 780 | }; | 789 | }; |
| 781 | 790 | ||
| 782 | static struct clk_rcg2 byte1_clk_src = { | 791 | static struct clk_rcg2 byte1_clk_src = { |
| 783 | .cmd_rcgr = 0x2140, | 792 | .cmd_rcgr = 0x2140, |
| 784 | .hid_width = 5, | 793 | .hid_width = 5, |
| 785 | .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, | 794 | .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map, |
| 786 | .freq_tbl = ftbl_mdss_byte1_clk, | 795 | .freq_tbl = byte_freq_tbl, |
| 787 | .clkr.hw.init = &(struct clk_init_data){ | 796 | .clkr.hw.init = &(struct clk_init_data){ |
| 788 | .name = "byte1_clk_src", | 797 | .name = "byte1_clk_src", |
| 789 | .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, | 798 | .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0, |
| 790 | .num_parents = 6, | 799 | .num_parents = 6, |
| 791 | .ops = &clk_rcg2_ops, | 800 | .ops = &clk_byte_ops, |
| 801 | .flags = CLK_SET_RATE_PARENT, | ||
| 792 | }, | 802 | }, |
| 793 | }; | 803 | }; |
| 794 | 804 | ||
| @@ -826,12 +836,12 @@ static struct clk_rcg2 edplink_clk_src = { | |||
| 826 | .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, | 836 | .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, |
| 827 | .num_parents = 6, | 837 | .num_parents = 6, |
| 828 | .ops = &clk_rcg2_ops, | 838 | .ops = &clk_rcg2_ops, |
| 839 | .flags = CLK_SET_RATE_PARENT, | ||
| 829 | }, | 840 | }, |
| 830 | }; | 841 | }; |
| 831 | 842 | ||
| 832 | static struct freq_tbl ftbl_mdss_edppixel_clk[] = { | 843 | static struct freq_tbl edp_pixel_freq_tbl[] = { |
| 833 | F(175000000, P_EDPVCO, 2, 0, 0), | 844 | { .src = P_EDPVCO }, |
| 834 | F(350000000, P_EDPVCO, 11, 0, 0), | ||
| 835 | { } | 845 | { } |
| 836 | }; | 846 | }; |
| 837 | 847 | ||
| @@ -840,12 +850,12 @@ static struct clk_rcg2 edppixel_clk_src = { | |||
| 840 | .mnd_width = 8, | 850 | .mnd_width = 8, |
| 841 | .hid_width = 5, | 851 | .hid_width = 5, |
| 842 | .parent_map = mmcc_xo_dsi_hdmi_edp_map, | 852 | .parent_map = mmcc_xo_dsi_hdmi_edp_map, |
| 843 | .freq_tbl = ftbl_mdss_edppixel_clk, | 853 | .freq_tbl = edp_pixel_freq_tbl, |
| 844 | .clkr.hw.init = &(struct clk_init_data){ | 854 | .clkr.hw.init = &(struct clk_init_data){ |
| 845 | .name = "edppixel_clk_src", | 855 | .name = "edppixel_clk_src", |
| 846 | .parent_names = mmcc_xo_dsi_hdmi_edp, | 856 | .parent_names = mmcc_xo_dsi_hdmi_edp, |
| 847 | .num_parents = 6, | 857 | .num_parents = 6, |
| 848 | .ops = &clk_rcg2_ops, | 858 | .ops = &clk_edp_pixel_ops, |
| 849 | }, | 859 | }, |
| 850 | }; | 860 | }; |
| 851 | 861 | ||
| @@ -857,11 +867,11 @@ static struct freq_tbl ftbl_mdss_esc0_1_clk[] = { | |||
| 857 | static struct clk_rcg2 esc0_clk_src = { | 867 | static struct clk_rcg2 esc0_clk_src = { |
| 858 | .cmd_rcgr = 0x2160, | 868 | .cmd_rcgr = 0x2160, |
| 859 | .hid_width = 5, | 869 | .hid_width = 5, |
| 860 | .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, | 870 | .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map, |
| 861 | .freq_tbl = ftbl_mdss_esc0_1_clk, | 871 | .freq_tbl = ftbl_mdss_esc0_1_clk, |
| 862 | .clkr.hw.init = &(struct clk_init_data){ | 872 | .clkr.hw.init = &(struct clk_init_data){ |
| 863 | .name = "esc0_clk_src", | 873 | .name = "esc0_clk_src", |
| 864 | .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, | 874 | .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0, |
| 865 | .num_parents = 6, | 875 | .num_parents = 6, |
| 866 | .ops = &clk_rcg2_ops, | 876 | .ops = &clk_rcg2_ops, |
| 867 | }, | 877 | }, |
| @@ -870,26 +880,18 @@ static struct clk_rcg2 esc0_clk_src = { | |||
| 870 | static struct clk_rcg2 esc1_clk_src = { | 880 | static struct clk_rcg2 esc1_clk_src = { |
| 871 | .cmd_rcgr = 0x2180, | 881 | .cmd_rcgr = 0x2180, |
| 872 | .hid_width = 5, | 882 | .hid_width = 5, |
| 873 | .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, | 883 | .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map, |
| 874 | .freq_tbl = ftbl_mdss_esc0_1_clk, | 884 | .freq_tbl = ftbl_mdss_esc0_1_clk, |
| 875 | .clkr.hw.init = &(struct clk_init_data){ | 885 | .clkr.hw.init = &(struct clk_init_data){ |
| 876 | .name = "esc1_clk_src", | 886 | .name = "esc1_clk_src", |
| 877 | .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, | 887 | .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0, |
| 878 | .num_parents = 6, | 888 | .num_parents = 6, |
| 879 | .ops = &clk_rcg2_ops, | 889 | .ops = &clk_rcg2_ops, |
| 880 | }, | 890 | }, |
| 881 | }; | 891 | }; |
| 882 | 892 | ||
| 883 | static struct freq_tbl ftbl_mdss_extpclk_clk[] = { | 893 | static struct freq_tbl extpclk_freq_tbl[] = { |
| 884 | F(25200000, P_HDMIPLL, 1, 0, 0), | 894 | { .src = P_HDMIPLL }, |
| 885 | F(27000000, P_HDMIPLL, 1, 0, 0), | ||
| 886 | F(27030000, P_HDMIPLL, 1, 0, 0), | ||
| 887 | F(65000000, P_HDMIPLL, 1, 0, 0), | ||
| 888 | F(74250000, P_HDMIPLL, 1, 0, 0), | ||
| 889 | F(108000000, P_HDMIPLL, 1, 0, 0), | ||
| 890 | F(148500000, P_HDMIPLL, 1, 0, 0), | ||
| 891 | F(268500000, P_HDMIPLL, 1, 0, 0), | ||
| 892 | F(297000000, P_HDMIPLL, 1, 0, 0), | ||
| 893 | { } | 895 | { } |
| 894 | }; | 896 | }; |
| 895 | 897 | ||
| @@ -897,12 +899,13 @@ static struct clk_rcg2 extpclk_clk_src = { | |||
| 897 | .cmd_rcgr = 0x2060, | 899 | .cmd_rcgr = 0x2060, |
| 898 | .hid_width = 5, | 900 | .hid_width = 5, |
| 899 | .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, | 901 | .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map, |
| 900 | .freq_tbl = ftbl_mdss_extpclk_clk, | 902 | .freq_tbl = extpclk_freq_tbl, |
| 901 | .clkr.hw.init = &(struct clk_init_data){ | 903 | .clkr.hw.init = &(struct clk_init_data){ |
| 902 | .name = "extpclk_clk_src", | 904 | .name = "extpclk_clk_src", |
| 903 | .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, | 905 | .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0, |
| 904 | .num_parents = 6, | 906 | .num_parents = 6, |
| 905 | .ops = &clk_rcg2_ops, | 907 | .ops = &clk_byte_ops, |
| 908 | .flags = CLK_SET_RATE_PARENT, | ||
| 906 | }, | 909 | }, |
| 907 | }; | 910 | }; |
| 908 | 911 | ||
