xref: /openbmc/linux/drivers/clk/ti/clk-7xx.c (revision 43c56e04)
1251a449dSTero Kristo /*
2251a449dSTero Kristo  * DRA7 Clock init
3251a449dSTero Kristo  *
4251a449dSTero Kristo  * Copyright (C) 2013 Texas Instruments, Inc.
5251a449dSTero Kristo  *
6251a449dSTero Kristo  * Tero Kristo (t-kristo@ti.com)
7251a449dSTero Kristo  *
8251a449dSTero Kristo  * This program is free software; you can redistribute it and/or modify
9251a449dSTero Kristo  * it under the terms of the GNU General Public License version 2 as
10251a449dSTero Kristo  * published by the Free Software Foundation.
11251a449dSTero Kristo  */
12251a449dSTero Kristo 
13251a449dSTero Kristo #include <linux/kernel.h>
14251a449dSTero Kristo #include <linux/list.h>
15e387088aSStephen Boyd #include <linux/clk.h>
16251a449dSTero Kristo #include <linux/clkdev.h>
17251a449dSTero Kristo #include <linux/clk/ti.h>
1824d504a3STero Kristo #include <dt-bindings/clock/dra7.h>
19251a449dSTero Kristo 
20a3314e9cSTero Kristo #include "clock.h"
21a3314e9cSTero Kristo 
22251a449dSTero Kristo #define DRA7_DPLL_GMAC_DEFFREQ				1000000000
2394e72ae5SRoger Quadros #define DRA7_DPLL_USB_DEFFREQ				960000000
24251a449dSTero Kristo 
25251a449dSTero Kristo int __init dra7xx_dt_clk_init(void)
26251a449dSTero Kristo {
27251a449dSTero Kristo 	int rc;
284b3061b3SPeter Ujfalusi 	struct clk *dpll_ck, *hdcp_ck;
29251a449dSTero Kristo 
3043c56e04STero Kristo 	ti_dt_clocks_register(dra7xx_compat_clks);
31251a449dSTero Kristo 
32251a449dSTero Kristo 	omap2_clk_disable_autoidle_all();
33251a449dSTero Kristo 
34a8202cd5STero Kristo 	ti_clk_add_aliases();
35a8202cd5STero Kristo 
36251a449dSTero Kristo 	dpll_ck = clk_get_sys(NULL, "dpll_gmac_ck");
37251a449dSTero Kristo 	rc = clk_set_rate(dpll_ck, DRA7_DPLL_GMAC_DEFFREQ);
38251a449dSTero Kristo 	if (rc)
39251a449dSTero Kristo 		pr_err("%s: failed to configure GMAC DPLL!\n", __func__);
40251a449dSTero Kristo 
4194e72ae5SRoger Quadros 	dpll_ck = clk_get_sys(NULL, "dpll_usb_ck");
4294e72ae5SRoger Quadros 	rc = clk_set_rate(dpll_ck, DRA7_DPLL_USB_DEFFREQ);
4394e72ae5SRoger Quadros 	if (rc)
4494e72ae5SRoger Quadros 		pr_err("%s: failed to configure USB DPLL!\n", __func__);
4594e72ae5SRoger Quadros 
4694e72ae5SRoger Quadros 	dpll_ck = clk_get_sys(NULL, "dpll_usb_m2_ck");
4794e72ae5SRoger Quadros 	rc = clk_set_rate(dpll_ck, DRA7_DPLL_USB_DEFFREQ/2);
4894e72ae5SRoger Quadros 	if (rc)
4994e72ae5SRoger Quadros 		pr_err("%s: failed to set USB_DPLL M2 OUT\n", __func__);
5094e72ae5SRoger Quadros 
51f892b203STomi Valkeinen 	hdcp_ck = clk_get_sys(NULL, "dss_deshdcp_clk");
52f892b203STomi Valkeinen 	rc = clk_prepare_enable(hdcp_ck);
53f892b203STomi Valkeinen 	if (rc)
54f892b203STomi Valkeinen 		pr_err("%s: failed to set dss_deshdcp_clk\n", __func__);
55f892b203STomi Valkeinen 
56251a449dSTero Kristo 	return rc;
57251a449dSTero Kristo }
58