2013-07-18 22:15:51 +08:00
|
|
|
/*
|
|
|
|
* OMAP5 Clock init
|
|
|
|
*
|
|
|
|
* Copyright (C) 2013 Texas Instruments, Inc.
|
|
|
|
*
|
|
|
|
* Tero Kristo (t-kristo@ti.com)
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
|
|
* published by the Free Software Foundation.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <linux/kernel.h>
|
|
|
|
#include <linux/list.h>
|
2015-01-23 07:40:20 +08:00
|
|
|
#include <linux/clk.h>
|
2013-07-18 22:15:51 +08:00
|
|
|
#include <linux/clkdev.h>
|
|
|
|
#include <linux/io.h>
|
|
|
|
#include <linux/clk/ti.h>
|
|
|
|
|
2015-03-05 03:02:05 +08:00
|
|
|
#include "clock.h"
|
|
|
|
|
2013-07-18 22:15:51 +08:00
|
|
|
#define OMAP5_DPLL_ABE_DEFFREQ 98304000
|
|
|
|
|
2013-07-24 21:30:55 +08:00
|
|
|
/*
|
|
|
|
* OMAP543x TRM, section "3.6.3.9.5 DPLL_USB Preferred Settings"
|
|
|
|
* states it must be at 960MHz
|
|
|
|
*/
|
|
|
|
#define OMAP5_DPLL_USB_DEFFREQ 960000000
|
|
|
|
|
2013-07-18 22:15:51 +08:00
|
|
|
static struct ti_dt_clk omap54xx_clks[] = {
|
|
|
|
DT_CLK(NULL, "timer_32k_ck", "sys_32k_ck"),
|
2015-12-11 01:03:45 +08:00
|
|
|
DT_CLK(NULL, "sys_clkin_ck", "sys_clkin"),
|
2013-07-18 22:15:51 +08:00
|
|
|
{ .node_name = NULL },
|
|
|
|
};
|
|
|
|
|
|
|
|
int __init omap5xxx_dt_clk_init(void)
|
|
|
|
{
|
|
|
|
int rc;
|
2013-07-24 21:30:55 +08:00
|
|
|
struct clk *abe_dpll_ref, *abe_dpll, *sys_32k_ck, *usb_dpll;
|
2013-07-18 22:15:51 +08:00
|
|
|
|
|
|
|
ti_dt_clocks_register(omap54xx_clks);
|
|
|
|
|
|
|
|
omap2_clk_disable_autoidle_all();
|
|
|
|
|
2017-08-21 16:05:46 +08:00
|
|
|
ti_clk_add_aliases();
|
|
|
|
|
2013-07-18 22:15:51 +08:00
|
|
|
abe_dpll_ref = clk_get_sys(NULL, "abe_dpll_clk_mux");
|
|
|
|
sys_32k_ck = clk_get_sys(NULL, "sys_32k_ck");
|
|
|
|
rc = clk_set_parent(abe_dpll_ref, sys_32k_ck);
|
|
|
|
abe_dpll = clk_get_sys(NULL, "dpll_abe_ck");
|
|
|
|
if (!rc)
|
|
|
|
rc = clk_set_rate(abe_dpll, OMAP5_DPLL_ABE_DEFFREQ);
|
|
|
|
if (rc)
|
|
|
|
pr_err("%s: failed to configure ABE DPLL!\n", __func__);
|
|
|
|
|
2014-04-30 19:39:37 +08:00
|
|
|
abe_dpll = clk_get_sys(NULL, "dpll_abe_m2x2_ck");
|
|
|
|
if (!rc)
|
|
|
|
rc = clk_set_rate(abe_dpll, OMAP5_DPLL_ABE_DEFFREQ * 2);
|
|
|
|
if (rc)
|
|
|
|
pr_err("%s: failed to configure ABE m2x2 DPLL!\n", __func__);
|
|
|
|
|
2013-07-24 21:30:55 +08:00
|
|
|
usb_dpll = clk_get_sys(NULL, "dpll_usb_ck");
|
|
|
|
rc = clk_set_rate(usb_dpll, OMAP5_DPLL_USB_DEFFREQ);
|
|
|
|
if (rc)
|
|
|
|
pr_err("%s: failed to configure USB DPLL!\n", __func__);
|
|
|
|
|
|
|
|
usb_dpll = clk_get_sys(NULL, "dpll_usb_m2_ck");
|
|
|
|
rc = clk_set_rate(usb_dpll, OMAP5_DPLL_USB_DEFFREQ/2);
|
|
|
|
if (rc)
|
|
|
|
pr_err("%s: failed to set USB_DPLL M2 OUT\n", __func__);
|
|
|
|
|
2013-07-18 22:15:51 +08:00
|
|
|
return 0;
|
|
|
|
}
|