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 | ||