aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/clk/qcom/mmcc-msm8974.c105
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
48static const u8 mmcc_xo_mmpll0_mmpll1_gpll0_map[] = { 50static 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
166static 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
175static 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
166static struct clk_pll mmpll0 = { 186static struct clk_pll mmpll0 = {
@@ -500,15 +520,8 @@ static struct clk_rcg2 jpeg2_clk_src = {
500 }, 520 },
501}; 521};
502 522
503static struct freq_tbl ftbl_mdss_pclk0_clk[] = { 523static 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
509static 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
757static struct freq_tbl ftbl_mdss_byte0_clk[] = { 772static 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
763static 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
769static struct clk_rcg2 byte0_clk_src = { 777static 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
782static struct clk_rcg2 byte1_clk_src = { 791static 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
832static struct freq_tbl ftbl_mdss_edppixel_clk[] = { 843static 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[] = {
857static struct clk_rcg2 esc0_clk_src = { 867static 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 = {
870static struct clk_rcg2 esc1_clk_src = { 880static 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
883static struct freq_tbl ftbl_mdss_extpclk_clk[] = { 893static 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