2019-06-04 10:11:33 +02:00
// SPDX-License-Identifier: GPL-2.0-only
2014-03-24 02:15:54 +05:30
/*
* Copyright ( c ) 2014 Samsung Electronics Co . , Ltd .
* Author : Rahul Sharma < rahul . sharma @ samsung . com >
*
* Common Clock Framework support for Exynos5260 SoC .
*/
# include <linux/of.h>
# include <linux/of_address.h>
# include "clk-exynos5260.h"
# include "clk.h"
# include "clk-pll.h"
# include <dt-bindings/clock/exynos5260-clk.h>
/*
* Applicable for all 2550 Type PLLS for Exynos5260 , listed below
* DISP_PLL , EGL_PLL , KFC_PLL , MEM_PLL , BUS_PLL , MEDIA_PLL , G3D_PLL .
*/
2016-05-11 14:02:05 +02:00
static const struct samsung_pll_rate_table pll2550_24mhz_tbl [ ] __initconst = {
2018-02-20 08:05:39 +01:00
PLL_35XX_RATE ( 24 * MHZ , 1700000000 , 425 , 6 , 0 ) ,
PLL_35XX_RATE ( 24 * MHZ , 1600000000 , 200 , 3 , 0 ) ,
PLL_35XX_RATE ( 24 * MHZ , 1500000000 , 250 , 4 , 0 ) ,
PLL_35XX_RATE ( 24 * MHZ , 1400000000 , 175 , 3 , 0 ) ,
PLL_35XX_RATE ( 24 * MHZ , 1300000000 , 325 , 6 , 0 ) ,
PLL_35XX_RATE ( 24 * MHZ , 1200000000 , 400 , 4 , 1 ) ,
PLL_35XX_RATE ( 24 * MHZ , 1100000000 , 275 , 3 , 1 ) ,
PLL_35XX_RATE ( 24 * MHZ , 1000000000 , 250 , 3 , 1 ) ,
PLL_35XX_RATE ( 24 * MHZ , 933000000 , 311 , 4 , 1 ) ,
PLL_35XX_RATE ( 24 * MHZ , 900000000 , 300 , 4 , 1 ) ,
PLL_35XX_RATE ( 24 * MHZ , 800000000 , 200 , 3 , 1 ) ,
PLL_35XX_RATE ( 24 * MHZ , 733000000 , 733 , 12 , 1 ) ,
PLL_35XX_RATE ( 24 * MHZ , 700000000 , 175 , 3 , 1 ) ,
PLL_35XX_RATE ( 24 * MHZ , 667000000 , 667 , 12 , 1 ) ,
PLL_35XX_RATE ( 24 * MHZ , 633000000 , 211 , 4 , 1 ) ,
PLL_35XX_RATE ( 24 * MHZ , 620000000 , 310 , 3 , 2 ) ,
PLL_35XX_RATE ( 24 * MHZ , 600000000 , 400 , 4 , 2 ) ,
PLL_35XX_RATE ( 24 * MHZ , 543000000 , 362 , 4 , 2 ) ,
PLL_35XX_RATE ( 24 * MHZ , 533000000 , 533 , 6 , 2 ) ,
PLL_35XX_RATE ( 24 * MHZ , 500000000 , 250 , 3 , 2 ) ,
PLL_35XX_RATE ( 24 * MHZ , 450000000 , 300 , 4 , 2 ) ,
PLL_35XX_RATE ( 24 * MHZ , 400000000 , 200 , 3 , 2 ) ,
PLL_35XX_RATE ( 24 * MHZ , 350000000 , 175 , 3 , 2 ) ,
PLL_35XX_RATE ( 24 * MHZ , 300000000 , 400 , 4 , 3 ) ,
PLL_35XX_RATE ( 24 * MHZ , 266000000 , 266 , 3 , 3 ) ,
PLL_35XX_RATE ( 24 * MHZ , 200000000 , 200 , 3 , 3 ) ,
PLL_35XX_RATE ( 24 * MHZ , 160000000 , 160 , 3 , 3 ) ,
2014-03-24 02:15:54 +05:30
} ;
/*
* Applicable for 2650 Type PLL for AUD_PLL .
*/
2016-05-11 14:02:05 +02:00
static const struct samsung_pll_rate_table pll2650_24mhz_tbl [ ] __initconst = {
2018-02-20 08:05:39 +01:00
PLL_36XX_RATE ( 24 * MHZ , 1600000000 , 200 , 3 , 0 , 0 ) ,
PLL_36XX_RATE ( 24 * MHZ , 1200000000 , 100 , 2 , 0 , 0 ) ,
PLL_36XX_RATE ( 24 * MHZ , 1000000000 , 250 , 3 , 1 , 0 ) ,
PLL_36XX_RATE ( 24 * MHZ , 800000000 , 200 , 3 , 1 , 0 ) ,
PLL_36XX_RATE ( 24 * MHZ , 600000000 , 100 , 2 , 1 , 0 ) ,
PLL_36XX_RATE ( 24 * MHZ , 532000000 , 266 , 3 , 2 , 0 ) ,
PLL_36XX_RATE ( 24 * MHZ , 480000000 , 160 , 2 , 2 , 0 ) ,
PLL_36XX_RATE ( 24 * MHZ , 432000000 , 144 , 2 , 2 , 0 ) ,
PLL_36XX_RATE ( 24 * MHZ , 400000000 , 200 , 3 , 2 , 0 ) ,
PLL_36XX_RATE ( 24 * MHZ , 394073128 , 459 , 7 , 2 , 49282 ) ,
PLL_36XX_RATE ( 24 * MHZ , 333000000 , 111 , 2 , 2 , 0 ) ,
PLL_36XX_RATE ( 24 * MHZ , 300000000 , 100 , 2 , 2 , 0 ) ,
PLL_36XX_RATE ( 24 * MHZ , 266000000 , 266 , 3 , 3 , 0 ) ,
PLL_36XX_RATE ( 24 * MHZ , 200000000 , 200 , 3 , 3 , 0 ) ,
PLL_36XX_RATE ( 24 * MHZ , 166000000 , 166 , 3 , 3 , 0 ) ,
PLL_36XX_RATE ( 24 * MHZ , 133000000 , 266 , 3 , 4 , 0 ) ,
PLL_36XX_RATE ( 24 * MHZ , 100000000 , 200 , 3 , 4 , 0 ) ,
PLL_36XX_RATE ( 24 * MHZ , 66000000 , 176 , 2 , 5 , 0 ) ,
2014-03-24 02:15:54 +05:30
} ;
/* CMU_AUD */
2016-05-11 14:02:05 +02:00
static const unsigned long aud_clk_regs [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX_SEL_AUD ,
DIV_AUD0 ,
DIV_AUD1 ,
EN_ACLK_AUD ,
EN_PCLK_AUD ,
EN_SCLK_AUD ,
EN_IP_AUD ,
} ;
PNAME ( mout_aud_pll_user_p ) = { " fin_pll " , " fout_aud_pll " } ;
PNAME ( mout_sclk_aud_i2s_p ) = { " mout_aud_pll_user " , " ioclk_i2s_cdclk " } ;
PNAME ( mout_sclk_aud_pcm_p ) = { " mout_aud_pll_user " , " ioclk_pcm_extclk " } ;
2016-05-11 14:02:05 +02:00
static const struct samsung_mux_clock aud_mux_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX ( AUD_MOUT_AUD_PLL_USER , " mout_aud_pll_user " , mout_aud_pll_user_p ,
MUX_SEL_AUD , 0 , 1 ) ,
MUX ( AUD_MOUT_SCLK_AUD_I2S , " mout_sclk_aud_i2s " , mout_sclk_aud_i2s_p ,
MUX_SEL_AUD , 4 , 1 ) ,
MUX ( AUD_MOUT_SCLK_AUD_PCM , " mout_sclk_aud_pcm " , mout_sclk_aud_pcm_p ,
MUX_SEL_AUD , 8 , 1 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_div_clock aud_div_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
DIV ( AUD_DOUT_ACLK_AUD_131 , " dout_aclk_aud_131 " , " mout_aud_pll_user " ,
DIV_AUD0 , 0 , 4 ) ,
DIV ( AUD_DOUT_SCLK_AUD_I2S , " dout_sclk_aud_i2s " , " mout_sclk_aud_i2s " ,
DIV_AUD1 , 0 , 4 ) ,
DIV ( AUD_DOUT_SCLK_AUD_PCM , " dout_sclk_aud_pcm " , " mout_sclk_aud_pcm " ,
DIV_AUD1 , 4 , 8 ) ,
DIV ( AUD_DOUT_SCLK_AUD_UART , " dout_sclk_aud_uart " , " mout_aud_pll_user " ,
DIV_AUD1 , 12 , 4 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_gate_clock aud_gate_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
GATE ( AUD_SCLK_I2S , " sclk_aud_i2s " , " dout_sclk_aud_i2s " ,
EN_SCLK_AUD , 0 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( AUD_SCLK_PCM , " sclk_aud_pcm " , " dout_sclk_aud_pcm " ,
EN_SCLK_AUD , 1 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( AUD_SCLK_AUD_UART , " sclk_aud_uart " , " dout_sclk_aud_uart " ,
EN_SCLK_AUD , 2 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( AUD_CLK_SRAMC , " clk_sramc " , " dout_aclk_aud_131 " , EN_IP_AUD ,
0 , 0 , 0 ) ,
GATE ( AUD_CLK_DMAC , " clk_dmac " , " dout_aclk_aud_131 " ,
EN_IP_AUD , 1 , 0 , 0 ) ,
GATE ( AUD_CLK_I2S , " clk_i2s " , " dout_aclk_aud_131 " , EN_IP_AUD , 2 , 0 , 0 ) ,
GATE ( AUD_CLK_PCM , " clk_pcm " , " dout_aclk_aud_131 " , EN_IP_AUD , 3 , 0 , 0 ) ,
GATE ( AUD_CLK_AUD_UART , " clk_aud_uart " , " dout_aclk_aud_131 " ,
EN_IP_AUD , 4 , 0 , 0 ) ,
} ;
2016-08-22 11:49:44 +09:00
static const struct samsung_cmu_info aud_cmu __initconst = {
. mux_clks = aud_mux_clks ,
. nr_mux_clks = ARRAY_SIZE ( aud_mux_clks ) ,
. div_clks = aud_div_clks ,
. nr_div_clks = ARRAY_SIZE ( aud_div_clks ) ,
. gate_clks = aud_gate_clks ,
. nr_gate_clks = ARRAY_SIZE ( aud_gate_clks ) ,
. nr_clk_ids = AUD_NR_CLK ,
. clk_regs = aud_clk_regs ,
. nr_clk_regs = ARRAY_SIZE ( aud_clk_regs ) ,
} ;
2014-03-24 02:15:54 +05:30
static void __init exynos5260_clk_aud_init ( struct device_node * np )
{
2016-08-22 11:49:44 +09:00
samsung_cmu_register_one ( np , & aud_cmu ) ;
2014-03-24 02:15:54 +05:30
}
CLK_OF_DECLARE ( exynos5260_clk_aud , " samsung,exynos5260-clock-aud " ,
exynos5260_clk_aud_init ) ;
/* CMU_DISP */
2016-05-11 14:02:05 +02:00
static const unsigned long disp_clk_regs [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX_SEL_DISP0 ,
MUX_SEL_DISP1 ,
MUX_SEL_DISP2 ,
MUX_SEL_DISP3 ,
MUX_SEL_DISP4 ,
DIV_DISP ,
EN_ACLK_DISP ,
EN_PCLK_DISP ,
EN_SCLK_DISP0 ,
EN_SCLK_DISP1 ,
EN_IP_DISP ,
EN_IP_DISP_BUS ,
} ;
PNAME ( mout_phyclk_dptx_phy_ch3_txd_clk_user_p ) = { " fin_pll " ,
" phyclk_dptx_phy_ch3_txd_clk " } ;
PNAME ( mout_phyclk_dptx_phy_ch2_txd_clk_user_p ) = { " fin_pll " ,
" phyclk_dptx_phy_ch2_txd_clk " } ;
PNAME ( mout_phyclk_dptx_phy_ch1_txd_clk_user_p ) = { " fin_pll " ,
" phyclk_dptx_phy_ch1_txd_clk " } ;
PNAME ( mout_phyclk_dptx_phy_ch0_txd_clk_user_p ) = { " fin_pll " ,
" phyclk_dptx_phy_ch0_txd_clk " } ;
PNAME ( mout_aclk_disp_222_user_p ) = { " fin_pll " , " dout_aclk_disp_222 " } ;
PNAME ( mout_sclk_disp_pixel_user_p ) = { " fin_pll " , " dout_sclk_disp_pixel " } ;
PNAME ( mout_aclk_disp_333_user_p ) = { " fin_pll " , " dout_aclk_disp_333 " } ;
PNAME ( mout_phyclk_hdmi_phy_tmds_clko_user_p ) = { " fin_pll " ,
" phyclk_hdmi_phy_tmds_clko " } ;
PNAME ( mout_phyclk_hdmi_phy_ref_clko_user_p ) = { " fin_pll " ,
" phyclk_hdmi_phy_ref_clko " } ;
PNAME ( mout_phyclk_hdmi_phy_pixel_clko_user_p ) = { " fin_pll " ,
" phyclk_hdmi_phy_pixel_clko " } ;
PNAME ( mout_phyclk_hdmi_link_o_tmds_clkhi_user_p ) = { " fin_pll " ,
" phyclk_hdmi_link_o_tmds_clkhi " } ;
PNAME ( mout_phyclk_mipi_dphy_4l_m_txbyte_clkhs_p ) = { " fin_pll " ,
" phyclk_mipi_dphy_4l_m_txbyte_clkhs " } ;
PNAME ( mout_phyclk_dptx_phy_o_ref_clk_24m_user_p ) = { " fin_pll " ,
" phyclk_dptx_phy_o_ref_clk_24m " } ;
PNAME ( mout_phyclk_dptx_phy_clk_div2_user_p ) = { " fin_pll " ,
" phyclk_dptx_phy_clk_div2 " } ;
PNAME ( mout_sclk_hdmi_pixel_p ) = { " mout_sclk_disp_pixel_user " ,
" mout_aclk_disp_222_user " } ;
PNAME ( mout_phyclk_mipi_dphy_4lmrxclk_esc0_user_p ) = { " fin_pll " ,
" phyclk_mipi_dphy_4l_m_rxclkesc0 " } ;
PNAME ( mout_sclk_hdmi_spdif_p ) = { " fin_pll " , " ioclk_spdif_extclk " ,
" dout_aclk_peri_aud " , " phyclk_hdmi_phy_ref_cko " } ;
2016-05-11 14:02:05 +02:00
static const struct samsung_mux_clock disp_mux_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX ( DISP_MOUT_ACLK_DISP_333_USER , " mout_aclk_disp_333_user " ,
mout_aclk_disp_333_user_p ,
MUX_SEL_DISP0 , 0 , 1 ) ,
MUX ( DISP_MOUT_SCLK_DISP_PIXEL_USER , " mout_sclk_disp_pixel_user " ,
mout_sclk_disp_pixel_user_p ,
MUX_SEL_DISP0 , 4 , 1 ) ,
MUX ( DISP_MOUT_ACLK_DISP_222_USER , " mout_aclk_disp_222_user " ,
mout_aclk_disp_222_user_p ,
MUX_SEL_DISP0 , 8 , 1 ) ,
MUX ( DISP_MOUT_PHYCLK_DPTX_PHY_CH0_TXD_CLK_USER ,
" mout_phyclk_dptx_phy_ch0_txd_clk_user " ,
mout_phyclk_dptx_phy_ch0_txd_clk_user_p ,
MUX_SEL_DISP0 , 16 , 1 ) ,
MUX ( DISP_MOUT_PHYCLK_DPTX_PHY_CH1_TXD_CLK_USER ,
" mout_phyclk_dptx_phy_ch1_txd_clk_user " ,
mout_phyclk_dptx_phy_ch1_txd_clk_user_p ,
MUX_SEL_DISP0 , 20 , 1 ) ,
MUX ( DISP_MOUT_PHYCLK_DPTX_PHY_CH2_TXD_CLK_USER ,
" mout_phyclk_dptx_phy_ch2_txd_clk_user " ,
mout_phyclk_dptx_phy_ch2_txd_clk_user_p ,
MUX_SEL_DISP0 , 24 , 1 ) ,
MUX ( DISP_MOUT_PHYCLK_DPTX_PHY_CH3_TXD_CLK_USER ,
" mout_phyclk_dptx_phy_ch3_txd_clk_user " ,
mout_phyclk_dptx_phy_ch3_txd_clk_user_p ,
MUX_SEL_DISP0 , 28 , 1 ) ,
MUX ( DISP_MOUT_PHYCLK_DPTX_PHY_CLK_DIV2_USER ,
" mout_phyclk_dptx_phy_clk_div2_user " ,
mout_phyclk_dptx_phy_clk_div2_user_p ,
MUX_SEL_DISP1 , 0 , 1 ) ,
MUX ( DISP_MOUT_PHYCLK_DPTX_PHY_O_REF_CLK_24M_USER ,
" mout_phyclk_dptx_phy_o_ref_clk_24m_user " ,
mout_phyclk_dptx_phy_o_ref_clk_24m_user_p ,
MUX_SEL_DISP1 , 4 , 1 ) ,
MUX ( DISP_MOUT_PHYCLK_MIPI_DPHY_4L_M_TXBYTE_CLKHS ,
" mout_phyclk_mipi_dphy_4l_m_txbyte_clkhs " ,
mout_phyclk_mipi_dphy_4l_m_txbyte_clkhs_p ,
MUX_SEL_DISP1 , 8 , 1 ) ,
MUX ( DISP_MOUT_PHYCLK_HDMI_LINK_O_TMDS_CLKHI_USER ,
" mout_phyclk_hdmi_link_o_tmds_clkhi_user " ,
mout_phyclk_hdmi_link_o_tmds_clkhi_user_p ,
MUX_SEL_DISP1 , 16 , 1 ) ,
MUX ( DISP_MOUT_HDMI_PHY_PIXEL ,
" mout_phyclk_hdmi_phy_pixel_clko_user " ,
mout_phyclk_hdmi_phy_pixel_clko_user_p ,
MUX_SEL_DISP1 , 20 , 1 ) ,
MUX ( DISP_MOUT_PHYCLK_HDMI_PHY_REF_CLKO_USER ,
" mout_phyclk_hdmi_phy_ref_clko_user " ,
mout_phyclk_hdmi_phy_ref_clko_user_p ,
MUX_SEL_DISP1 , 24 , 1 ) ,
MUX ( DISP_MOUT_PHYCLK_HDMI_PHY_TMDS_CLKO_USER ,
" mout_phyclk_hdmi_phy_tmds_clko_user " ,
mout_phyclk_hdmi_phy_tmds_clko_user_p ,
MUX_SEL_DISP1 , 28 , 1 ) ,
MUX ( DISP_MOUT_PHYCLK_MIPI_DPHY_4LMRXCLK_ESC0_USER ,
" mout_phyclk_mipi_dphy_4lmrxclk_esc0_user " ,
mout_phyclk_mipi_dphy_4lmrxclk_esc0_user_p ,
MUX_SEL_DISP2 , 0 , 1 ) ,
MUX ( DISP_MOUT_SCLK_HDMI_PIXEL , " mout_sclk_hdmi_pixel " ,
mout_sclk_hdmi_pixel_p ,
MUX_SEL_DISP2 , 4 , 1 ) ,
MUX ( DISP_MOUT_SCLK_HDMI_SPDIF , " mout_sclk_hdmi_spdif " ,
mout_sclk_hdmi_spdif_p ,
MUX_SEL_DISP4 , 4 , 2 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_div_clock disp_div_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
DIV ( DISP_DOUT_PCLK_DISP_111 , " dout_pclk_disp_111 " ,
" mout_aclk_disp_222_user " ,
DIV_DISP , 8 , 4 ) ,
DIV ( DISP_DOUT_SCLK_FIMD1_EXTCLKPLL , " dout_sclk_fimd1_extclkpll " ,
" mout_sclk_disp_pixel_user " ,
DIV_DISP , 12 , 4 ) ,
DIV ( DISP_DOUT_SCLK_HDMI_PHY_PIXEL_CLKI ,
" dout_sclk_hdmi_phy_pixel_clki " ,
" mout_sclk_hdmi_pixel " ,
DIV_DISP , 16 , 4 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_gate_clock disp_gate_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
GATE ( DISP_MOUT_HDMI_PHY_PIXEL_USER , " sclk_hdmi_link_i_pixel " ,
" mout_phyclk_hdmi_phy_pixel_clko_user " ,
EN_SCLK_DISP0 , 26 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( DISP_SCLK_PIXEL , " sclk_hdmi_phy_pixel_clki " ,
" dout_sclk_hdmi_phy_pixel_clki " ,
EN_SCLK_DISP0 , 29 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( DISP_CLK_DP , " clk_dptx_link " , " mout_aclk_disp_222_user " ,
EN_IP_DISP , 4 , 0 , 0 ) ,
GATE ( DISP_CLK_DPPHY , " clk_dptx_phy " , " mout_aclk_disp_222_user " ,
EN_IP_DISP , 5 , 0 , 0 ) ,
GATE ( DISP_CLK_DSIM1 , " clk_dsim1 " , " mout_aclk_disp_222_user " ,
EN_IP_DISP , 6 , 0 , 0 ) ,
GATE ( DISP_CLK_FIMD1 , " clk_fimd1 " , " mout_aclk_disp_222_user " ,
EN_IP_DISP , 7 , 0 , 0 ) ,
GATE ( DISP_CLK_HDMI , " clk_hdmi " , " mout_aclk_disp_222_user " ,
EN_IP_DISP , 8 , 0 , 0 ) ,
GATE ( DISP_CLK_HDMIPHY , " clk_hdmiphy " , " mout_aclk_disp_222_user " ,
EN_IP_DISP , 9 , 0 , 0 ) ,
GATE ( DISP_CLK_MIPIPHY , " clk_mipi_dphy " , " mout_aclk_disp_222_user " ,
EN_IP_DISP , 10 , 0 , 0 ) ,
GATE ( DISP_CLK_MIXER , " clk_mixer " , " mout_aclk_disp_222_user " ,
EN_IP_DISP , 11 , 0 , 0 ) ,
GATE ( DISP_CLK_PIXEL_DISP , " clk_pixel_disp " , " mout_aclk_disp_222_user " ,
EN_IP_DISP , 12 , CLK_IGNORE_UNUSED , 0 ) ,
GATE ( DISP_CLK_PIXEL_MIXER , " clk_pixel_mixer " , " mout_aclk_disp_222_user " ,
EN_IP_DISP , 13 , CLK_IGNORE_UNUSED , 0 ) ,
GATE ( DISP_CLK_SMMU_FIMD1M0 , " clk_smmu3_fimd1m0 " ,
" mout_aclk_disp_222_user " ,
EN_IP_DISP , 22 , 0 , 0 ) ,
GATE ( DISP_CLK_SMMU_FIMD1M1 , " clk_smmu3_fimd1m1 " ,
" mout_aclk_disp_222_user " ,
EN_IP_DISP , 23 , 0 , 0 ) ,
GATE ( DISP_CLK_SMMU_TV , " clk_smmu3_tv " , " mout_aclk_disp_222_user " ,
EN_IP_DISP , 25 , 0 , 0 ) ,
} ;
2016-08-22 11:49:44 +09:00
static const struct samsung_cmu_info disp_cmu __initconst = {
. mux_clks = disp_mux_clks ,
. nr_mux_clks = ARRAY_SIZE ( disp_mux_clks ) ,
. div_clks = disp_div_clks ,
. nr_div_clks = ARRAY_SIZE ( disp_div_clks ) ,
. gate_clks = disp_gate_clks ,
. nr_gate_clks = ARRAY_SIZE ( disp_gate_clks ) ,
. nr_clk_ids = DISP_NR_CLK ,
. clk_regs = disp_clk_regs ,
. nr_clk_regs = ARRAY_SIZE ( disp_clk_regs ) ,
} ;
2014-03-24 02:15:54 +05:30
static void __init exynos5260_clk_disp_init ( struct device_node * np )
{
2016-08-22 11:49:44 +09:00
samsung_cmu_register_one ( np , & disp_cmu ) ;
2014-03-24 02:15:54 +05:30
}
CLK_OF_DECLARE ( exynos5260_clk_disp , " samsung,exynos5260-clock-disp " ,
exynos5260_clk_disp_init ) ;
/* CMU_EGL */
2016-05-11 14:02:05 +02:00
static const unsigned long egl_clk_regs [ ] __initconst = {
2014-03-24 02:15:54 +05:30
EGL_PLL_LOCK ,
EGL_PLL_CON0 ,
EGL_PLL_CON1 ,
EGL_PLL_FREQ_DET ,
MUX_SEL_EGL ,
MUX_ENABLE_EGL ,
DIV_EGL ,
DIV_EGL_PLL_FDET ,
EN_ACLK_EGL ,
EN_PCLK_EGL ,
EN_SCLK_EGL ,
} ;
PNAME ( mout_egl_b_p ) = { " mout_egl_pll " , " dout_bus_pll " } ;
PNAME ( mout_egl_pll_p ) = { " fin_pll " , " fout_egl_pll " } ;
2016-05-11 14:02:05 +02:00
static const struct samsung_mux_clock egl_mux_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX ( EGL_MOUT_EGL_PLL , " mout_egl_pll " , mout_egl_pll_p ,
MUX_SEL_EGL , 4 , 1 ) ,
MUX ( EGL_MOUT_EGL_B , " mout_egl_b " , mout_egl_b_p , MUX_SEL_EGL , 16 , 1 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_div_clock egl_div_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
DIV ( EGL_DOUT_EGL1 , " dout_egl1 " , " mout_egl_b " , DIV_EGL , 0 , 3 ) ,
DIV ( EGL_DOUT_EGL2 , " dout_egl2 " , " dout_egl1 " , DIV_EGL , 4 , 3 ) ,
DIV ( EGL_DOUT_ACLK_EGL , " dout_aclk_egl " , " dout_egl2 " , DIV_EGL , 8 , 3 ) ,
DIV ( EGL_DOUT_PCLK_EGL , " dout_pclk_egl " , " dout_egl_atclk " ,
DIV_EGL , 12 , 3 ) ,
DIV ( EGL_DOUT_EGL_ATCLK , " dout_egl_atclk " , " dout_egl2 " , DIV_EGL , 16 , 3 ) ,
DIV ( EGL_DOUT_EGL_PCLK_DBG , " dout_egl_pclk_dbg " , " dout_egl_atclk " ,
DIV_EGL , 20 , 3 ) ,
DIV ( EGL_DOUT_EGL_PLL , " dout_egl_pll " , " mout_egl_b " , DIV_EGL , 24 , 3 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_pll_clock egl_pll_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
PLL ( pll_2550xx , EGL_FOUT_EGL_PLL , " fout_egl_pll " , " fin_pll " ,
EGL_PLL_LOCK , EGL_PLL_CON0 ,
pll2550_24mhz_tbl ) ,
} ;
2016-08-22 11:49:44 +09:00
static const struct samsung_cmu_info egl_cmu __initconst = {
. pll_clks = egl_pll_clks ,
. nr_pll_clks = ARRAY_SIZE ( egl_pll_clks ) ,
. mux_clks = egl_mux_clks ,
. nr_mux_clks = ARRAY_SIZE ( egl_mux_clks ) ,
. div_clks = egl_div_clks ,
. nr_div_clks = ARRAY_SIZE ( egl_div_clks ) ,
. nr_clk_ids = EGL_NR_CLK ,
. clk_regs = egl_clk_regs ,
. nr_clk_regs = ARRAY_SIZE ( egl_clk_regs ) ,
} ;
2014-03-24 02:15:54 +05:30
static void __init exynos5260_clk_egl_init ( struct device_node * np )
{
2016-08-22 11:49:44 +09:00
samsung_cmu_register_one ( np , & egl_cmu ) ;
2014-03-24 02:15:54 +05:30
}
CLK_OF_DECLARE ( exynos5260_clk_egl , " samsung,exynos5260-clock-egl " ,
exynos5260_clk_egl_init ) ;
/* CMU_FSYS */
2016-05-11 14:02:05 +02:00
static const unsigned long fsys_clk_regs [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX_SEL_FSYS0 ,
MUX_SEL_FSYS1 ,
EN_ACLK_FSYS ,
EN_ACLK_FSYS_SECURE_RTIC ,
EN_ACLK_FSYS_SECURE_SMMU_RTIC ,
EN_SCLK_FSYS ,
EN_IP_FSYS ,
EN_IP_FSYS_SECURE_RTIC ,
EN_IP_FSYS_SECURE_SMMU_RTIC ,
} ;
PNAME ( mout_phyclk_usbhost20_phyclk_user_p ) = { " fin_pll " ,
" phyclk_usbhost20_phy_phyclock " } ;
PNAME ( mout_phyclk_usbhost20_freeclk_user_p ) = { " fin_pll " ,
" phyclk_usbhost20_phy_freeclk " } ;
PNAME ( mout_phyclk_usbhost20_clk48mohci_user_p ) = { " fin_pll " ,
" phyclk_usbhost20_phy_clk48mohci " } ;
PNAME ( mout_phyclk_usbdrd30_pipe_pclk_user_p ) = { " fin_pll " ,
" phyclk_usbdrd30_udrd30_pipe_pclk " } ;
PNAME ( mout_phyclk_usbdrd30_phyclock_user_p ) = { " fin_pll " ,
" phyclk_usbdrd30_udrd30_phyclock " } ;
2016-05-11 14:02:05 +02:00
static const struct samsung_mux_clock fsys_mux_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX ( FSYS_MOUT_PHYCLK_USBDRD30_PHYCLOCK_USER ,
" mout_phyclk_usbdrd30_phyclock_user " ,
mout_phyclk_usbdrd30_phyclock_user_p ,
MUX_SEL_FSYS1 , 0 , 1 ) ,
MUX ( FSYS_MOUT_PHYCLK_USBDRD30_PIPE_PCLK_USER ,
" mout_phyclk_usbdrd30_pipe_pclk_user " ,
mout_phyclk_usbdrd30_pipe_pclk_user_p ,
MUX_SEL_FSYS1 , 4 , 1 ) ,
MUX ( FSYS_MOUT_PHYCLK_USBHOST20_CLK48MOHCI_USER ,
" mout_phyclk_usbhost20_clk48mohci_user " ,
mout_phyclk_usbhost20_clk48mohci_user_p ,
MUX_SEL_FSYS1 , 8 , 1 ) ,
MUX ( FSYS_MOUT_PHYCLK_USBHOST20_FREECLK_USER ,
" mout_phyclk_usbhost20_freeclk_user " ,
mout_phyclk_usbhost20_freeclk_user_p ,
MUX_SEL_FSYS1 , 12 , 1 ) ,
MUX ( FSYS_MOUT_PHYCLK_USBHOST20_PHYCLK_USER ,
" mout_phyclk_usbhost20_phyclk_user " ,
mout_phyclk_usbhost20_phyclk_user_p ,
MUX_SEL_FSYS1 , 16 , 1 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_gate_clock fsys_gate_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
GATE ( FSYS_PHYCLK_USBHOST20 , " phyclk_usbhost20_phyclock " ,
" mout_phyclk_usbdrd30_phyclock_user " ,
EN_SCLK_FSYS , 1 , 0 , 0 ) ,
GATE ( FSYS_PHYCLK_USBDRD30 , " phyclk_usbdrd30_udrd30_phyclock_g " ,
" mout_phyclk_usbdrd30_phyclock_user " ,
EN_SCLK_FSYS , 7 , 0 , 0 ) ,
GATE ( FSYS_CLK_MMC0 , " clk_mmc0 " , " dout_aclk_fsys_200 " ,
EN_IP_FSYS , 6 , 0 , 0 ) ,
GATE ( FSYS_CLK_MMC1 , " clk_mmc1 " , " dout_aclk_fsys_200 " ,
EN_IP_FSYS , 7 , 0 , 0 ) ,
GATE ( FSYS_CLK_MMC2 , " clk_mmc2 " , " dout_aclk_fsys_200 " ,
EN_IP_FSYS , 8 , 0 , 0 ) ,
GATE ( FSYS_CLK_PDMA , " clk_pdma " , " dout_aclk_fsys_200 " ,
EN_IP_FSYS , 9 , 0 , 0 ) ,
GATE ( FSYS_CLK_SROMC , " clk_sromc " , " dout_aclk_fsys_200 " ,
EN_IP_FSYS , 13 , 0 , 0 ) ,
GATE ( FSYS_CLK_USBDRD30 , " clk_usbdrd30 " , " dout_aclk_fsys_200 " ,
EN_IP_FSYS , 14 , 0 , 0 ) ,
GATE ( FSYS_CLK_USBHOST20 , " clk_usbhost20 " , " dout_aclk_fsys_200 " ,
EN_IP_FSYS , 15 , 0 , 0 ) ,
GATE ( FSYS_CLK_USBLINK , " clk_usblink " , " dout_aclk_fsys_200 " ,
EN_IP_FSYS , 18 , 0 , 0 ) ,
GATE ( FSYS_CLK_TSI , " clk_tsi " , " dout_aclk_fsys_200 " ,
EN_IP_FSYS , 20 , 0 , 0 ) ,
GATE ( FSYS_CLK_RTIC , " clk_rtic " , " dout_aclk_fsys_200 " ,
EN_IP_FSYS_SECURE_RTIC , 11 , 0 , 0 ) ,
GATE ( FSYS_CLK_SMMU_RTIC , " clk_smmu_rtic " , " dout_aclk_fsys_200 " ,
EN_IP_FSYS_SECURE_SMMU_RTIC , 12 , 0 , 0 ) ,
} ;
2016-08-22 11:49:44 +09:00
static const struct samsung_cmu_info fsys_cmu __initconst = {
. mux_clks = fsys_mux_clks ,
. nr_mux_clks = ARRAY_SIZE ( fsys_mux_clks ) ,
. gate_clks = fsys_gate_clks ,
. nr_gate_clks = ARRAY_SIZE ( fsys_gate_clks ) ,
. nr_clk_ids = FSYS_NR_CLK ,
. clk_regs = fsys_clk_regs ,
. nr_clk_regs = ARRAY_SIZE ( fsys_clk_regs ) ,
} ;
2014-03-24 02:15:54 +05:30
static void __init exynos5260_clk_fsys_init ( struct device_node * np )
{
2016-08-22 11:49:44 +09:00
samsung_cmu_register_one ( np , & fsys_cmu ) ;
2014-03-24 02:15:54 +05:30
}
CLK_OF_DECLARE ( exynos5260_clk_fsys , " samsung,exynos5260-clock-fsys " ,
exynos5260_clk_fsys_init ) ;
/* CMU_G2D */
2016-05-11 14:02:05 +02:00
static const unsigned long g2d_clk_regs [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX_SEL_G2D ,
MUX_STAT_G2D ,
DIV_G2D ,
EN_ACLK_G2D ,
EN_ACLK_G2D_SECURE_SSS ,
EN_ACLK_G2D_SECURE_SLIM_SSS ,
EN_ACLK_G2D_SECURE_SMMU_SLIM_SSS ,
EN_ACLK_G2D_SECURE_SMMU_SSS ,
EN_ACLK_G2D_SECURE_SMMU_MDMA ,
EN_ACLK_G2D_SECURE_SMMU_G2D ,
EN_PCLK_G2D ,
EN_PCLK_G2D_SECURE_SMMU_SLIM_SSS ,
EN_PCLK_G2D_SECURE_SMMU_SSS ,
EN_PCLK_G2D_SECURE_SMMU_MDMA ,
EN_PCLK_G2D_SECURE_SMMU_G2D ,
EN_IP_G2D ,
EN_IP_G2D_SECURE_SSS ,
EN_IP_G2D_SECURE_SLIM_SSS ,
EN_IP_G2D_SECURE_SMMU_SLIM_SSS ,
EN_IP_G2D_SECURE_SMMU_SSS ,
EN_IP_G2D_SECURE_SMMU_MDMA ,
EN_IP_G2D_SECURE_SMMU_G2D ,
} ;
PNAME ( mout_aclk_g2d_333_user_p ) = { " fin_pll " , " dout_aclk_g2d_333 " } ;
2016-05-11 14:02:05 +02:00
static const struct samsung_mux_clock g2d_mux_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX ( G2D_MOUT_ACLK_G2D_333_USER , " mout_aclk_g2d_333_user " ,
mout_aclk_g2d_333_user_p ,
MUX_SEL_G2D , 0 , 1 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_div_clock g2d_div_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
DIV ( G2D_DOUT_PCLK_G2D_83 , " dout_pclk_g2d_83 " , " mout_aclk_g2d_333_user " ,
DIV_G2D , 0 , 3 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_gate_clock g2d_gate_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
GATE ( G2D_CLK_G2D , " clk_g2d " , " mout_aclk_g2d_333_user " ,
EN_IP_G2D , 4 , 0 , 0 ) ,
GATE ( G2D_CLK_JPEG , " clk_jpeg " , " mout_aclk_g2d_333_user " ,
EN_IP_G2D , 5 , 0 , 0 ) ,
GATE ( G2D_CLK_MDMA , " clk_mdma " , " mout_aclk_g2d_333_user " ,
EN_IP_G2D , 6 , 0 , 0 ) ,
GATE ( G2D_CLK_SMMU3_JPEG , " clk_smmu3_jpeg " , " mout_aclk_g2d_333_user " ,
EN_IP_G2D , 16 , 0 , 0 ) ,
GATE ( G2D_CLK_SSS , " clk_sss " , " mout_aclk_g2d_333_user " ,
EN_IP_G2D_SECURE_SSS , 17 , 0 , 0 ) ,
GATE ( G2D_CLK_SLIM_SSS , " clk_slim_sss " , " mout_aclk_g2d_333_user " ,
EN_IP_G2D_SECURE_SLIM_SSS , 11 , 0 , 0 ) ,
GATE ( G2D_CLK_SMMU_SLIM_SSS , " clk_smmu_slim_sss " ,
" mout_aclk_g2d_333_user " ,
EN_IP_G2D_SECURE_SMMU_SLIM_SSS , 13 , 0 , 0 ) ,
GATE ( G2D_CLK_SMMU_SSS , " clk_smmu_sss " , " mout_aclk_g2d_333_user " ,
EN_IP_G2D_SECURE_SMMU_SSS , 14 , 0 , 0 ) ,
GATE ( G2D_CLK_SMMU_MDMA , " clk_smmu_mdma " , " mout_aclk_g2d_333_user " ,
EN_IP_G2D_SECURE_SMMU_MDMA , 12 , 0 , 0 ) ,
GATE ( G2D_CLK_SMMU3_G2D , " clk_smmu3_g2d " , " mout_aclk_g2d_333_user " ,
EN_IP_G2D_SECURE_SMMU_G2D , 15 , 0 , 0 ) ,
} ;
2016-08-22 11:49:44 +09:00
static const struct samsung_cmu_info g2d_cmu __initconst = {
. mux_clks = g2d_mux_clks ,
. nr_mux_clks = ARRAY_SIZE ( g2d_mux_clks ) ,
. div_clks = g2d_div_clks ,
. nr_div_clks = ARRAY_SIZE ( g2d_div_clks ) ,
. gate_clks = g2d_gate_clks ,
. nr_gate_clks = ARRAY_SIZE ( g2d_gate_clks ) ,
. nr_clk_ids = G2D_NR_CLK ,
. clk_regs = g2d_clk_regs ,
. nr_clk_regs = ARRAY_SIZE ( g2d_clk_regs ) ,
} ;
2014-03-24 02:15:54 +05:30
static void __init exynos5260_clk_g2d_init ( struct device_node * np )
{
2016-08-22 11:49:44 +09:00
samsung_cmu_register_one ( np , & g2d_cmu ) ;
2014-03-24 02:15:54 +05:30
}
CLK_OF_DECLARE ( exynos5260_clk_g2d , " samsung,exynos5260-clock-g2d " ,
exynos5260_clk_g2d_init ) ;
/* CMU_G3D */
2016-05-11 14:02:05 +02:00
static const unsigned long g3d_clk_regs [ ] __initconst = {
2014-03-24 02:15:54 +05:30
G3D_PLL_LOCK ,
G3D_PLL_CON0 ,
G3D_PLL_CON1 ,
G3D_PLL_FDET ,
MUX_SEL_G3D ,
DIV_G3D ,
DIV_G3D_PLL_FDET ,
EN_ACLK_G3D ,
EN_PCLK_G3D ,
EN_SCLK_G3D ,
EN_IP_G3D ,
} ;
PNAME ( mout_g3d_pll_p ) = { " fin_pll " , " fout_g3d_pll " } ;
2016-05-11 14:02:05 +02:00
static const struct samsung_mux_clock g3d_mux_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX ( G3D_MOUT_G3D_PLL , " mout_g3d_pll " , mout_g3d_pll_p ,
MUX_SEL_G3D , 0 , 1 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_div_clock g3d_div_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
DIV ( G3D_DOUT_PCLK_G3D , " dout_pclk_g3d " , " dout_aclk_g3d " , DIV_G3D , 0 , 3 ) ,
DIV ( G3D_DOUT_ACLK_G3D , " dout_aclk_g3d " , " mout_g3d_pll " , DIV_G3D , 4 , 3 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_gate_clock g3d_gate_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
GATE ( G3D_CLK_G3D , " clk_g3d " , " dout_aclk_g3d " , EN_IP_G3D , 2 , 0 , 0 ) ,
GATE ( G3D_CLK_G3D_HPM , " clk_g3d_hpm " , " dout_aclk_g3d " ,
EN_IP_G3D , 3 , 0 , 0 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_pll_clock g3d_pll_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
PLL ( pll_2550 , G3D_FOUT_G3D_PLL , " fout_g3d_pll " , " fin_pll " ,
G3D_PLL_LOCK , G3D_PLL_CON0 ,
pll2550_24mhz_tbl ) ,
} ;
2016-08-22 11:49:44 +09:00
static const struct samsung_cmu_info g3d_cmu __initconst = {
. pll_clks = g3d_pll_clks ,
. nr_pll_clks = ARRAY_SIZE ( g3d_pll_clks ) ,
. mux_clks = g3d_mux_clks ,
. nr_mux_clks = ARRAY_SIZE ( g3d_mux_clks ) ,
. div_clks = g3d_div_clks ,
. nr_div_clks = ARRAY_SIZE ( g3d_div_clks ) ,
. gate_clks = g3d_gate_clks ,
. nr_gate_clks = ARRAY_SIZE ( g3d_gate_clks ) ,
. nr_clk_ids = G3D_NR_CLK ,
. clk_regs = g3d_clk_regs ,
. nr_clk_regs = ARRAY_SIZE ( g3d_clk_regs ) ,
} ;
2014-03-24 02:15:54 +05:30
static void __init exynos5260_clk_g3d_init ( struct device_node * np )
{
2016-08-22 11:49:44 +09:00
samsung_cmu_register_one ( np , & g3d_cmu ) ;
2014-03-24 02:15:54 +05:30
}
CLK_OF_DECLARE ( exynos5260_clk_g3d , " samsung,exynos5260-clock-g3d " ,
exynos5260_clk_g3d_init ) ;
/* CMU_GSCL */
2016-05-11 14:02:05 +02:00
static const unsigned long gscl_clk_regs [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX_SEL_GSCL ,
DIV_GSCL ,
EN_ACLK_GSCL ,
EN_ACLK_GSCL_FIMC ,
EN_ACLK_GSCL_SECURE_SMMU_GSCL0 ,
EN_ACLK_GSCL_SECURE_SMMU_GSCL1 ,
EN_ACLK_GSCL_SECURE_SMMU_MSCL0 ,
EN_ACLK_GSCL_SECURE_SMMU_MSCL1 ,
EN_PCLK_GSCL ,
EN_PCLK_GSCL_FIMC ,
EN_PCLK_GSCL_SECURE_SMMU_GSCL0 ,
EN_PCLK_GSCL_SECURE_SMMU_GSCL1 ,
EN_PCLK_GSCL_SECURE_SMMU_MSCL0 ,
EN_PCLK_GSCL_SECURE_SMMU_MSCL1 ,
EN_SCLK_GSCL ,
EN_SCLK_GSCL_FIMC ,
EN_IP_GSCL ,
EN_IP_GSCL_FIMC ,
EN_IP_GSCL_SECURE_SMMU_GSCL0 ,
EN_IP_GSCL_SECURE_SMMU_GSCL1 ,
EN_IP_GSCL_SECURE_SMMU_MSCL0 ,
EN_IP_GSCL_SECURE_SMMU_MSCL1 ,
} ;
PNAME ( mout_aclk_gscl_333_user_p ) = { " fin_pll " , " dout_aclk_gscl_333 " } ;
PNAME ( mout_aclk_m2m_400_user_p ) = { " fin_pll " , " dout_aclk_gscl_400 " } ;
PNAME ( mout_aclk_gscl_fimc_user_p ) = { " fin_pll " , " dout_aclk_gscl_400 " } ;
PNAME ( mout_aclk_csis_p ) = { " dout_aclk_csis_200 " , " mout_aclk_gscl_fimc_user " } ;
2016-05-11 14:02:05 +02:00
static const struct samsung_mux_clock gscl_mux_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX ( GSCL_MOUT_ACLK_GSCL_333_USER , " mout_aclk_gscl_333_user " ,
mout_aclk_gscl_333_user_p ,
MUX_SEL_GSCL , 0 , 1 ) ,
MUX ( GSCL_MOUT_ACLK_M2M_400_USER , " mout_aclk_m2m_400_user " ,
mout_aclk_m2m_400_user_p ,
MUX_SEL_GSCL , 4 , 1 ) ,
MUX ( GSCL_MOUT_ACLK_GSCL_FIMC_USER , " mout_aclk_gscl_fimc_user " ,
mout_aclk_gscl_fimc_user_p ,
MUX_SEL_GSCL , 8 , 1 ) ,
MUX ( GSCL_MOUT_ACLK_CSIS , " mout_aclk_csis " , mout_aclk_csis_p ,
MUX_SEL_GSCL , 24 , 1 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_div_clock gscl_div_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
DIV ( GSCL_DOUT_PCLK_M2M_100 , " dout_pclk_m2m_100 " ,
" mout_aclk_m2m_400_user " ,
DIV_GSCL , 0 , 3 ) ,
DIV ( GSCL_DOUT_ACLK_CSIS_200 , " dout_aclk_csis_200 " ,
" mout_aclk_m2m_400_user " ,
DIV_GSCL , 4 , 3 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_gate_clock gscl_gate_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
GATE ( GSCL_SCLK_CSIS0_WRAP , " sclk_csis0_wrap " , " dout_aclk_csis_200 " ,
EN_SCLK_GSCL_FIMC , 0 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( GSCL_SCLK_CSIS1_WRAP , " sclk_csis1_wrap " , " dout_aclk_csis_200 " ,
EN_SCLK_GSCL_FIMC , 1 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( GSCL_CLK_GSCL0 , " clk_gscl0 " , " mout_aclk_gscl_333_user " ,
EN_IP_GSCL , 2 , 0 , 0 ) ,
GATE ( GSCL_CLK_GSCL1 , " clk_gscl1 " , " mout_aclk_gscl_333_user " ,
EN_IP_GSCL , 3 , 0 , 0 ) ,
GATE ( GSCL_CLK_MSCL0 , " clk_mscl0 " , " mout_aclk_gscl_333_user " ,
EN_IP_GSCL , 4 , 0 , 0 ) ,
GATE ( GSCL_CLK_MSCL1 , " clk_mscl1 " , " mout_aclk_gscl_333_user " ,
EN_IP_GSCL , 5 , 0 , 0 ) ,
GATE ( GSCL_CLK_PIXEL_GSCL0 , " clk_pixel_gscl0 " ,
" mout_aclk_gscl_333_user " ,
EN_IP_GSCL , 8 , 0 , 0 ) ,
GATE ( GSCL_CLK_PIXEL_GSCL1 , " clk_pixel_gscl1 " ,
" mout_aclk_gscl_333_user " ,
EN_IP_GSCL , 9 , 0 , 0 ) ,
GATE ( GSCL_CLK_SMMU3_LITE_A , " clk_smmu3_lite_a " ,
" mout_aclk_gscl_fimc_user " ,
EN_IP_GSCL_FIMC , 5 , 0 , 0 ) ,
GATE ( GSCL_CLK_SMMU3_LITE_B , " clk_smmu3_lite_b " ,
" mout_aclk_gscl_fimc_user " ,
EN_IP_GSCL_FIMC , 6 , 0 , 0 ) ,
GATE ( GSCL_CLK_SMMU3_LITE_D , " clk_smmu3_lite_d " ,
" mout_aclk_gscl_fimc_user " ,
EN_IP_GSCL_FIMC , 7 , 0 , 0 ) ,
GATE ( GSCL_CLK_CSIS0 , " clk_csis0 " , " mout_aclk_gscl_fimc_user " ,
EN_IP_GSCL_FIMC , 8 , 0 , 0 ) ,
GATE ( GSCL_CLK_CSIS1 , " clk_csis1 " , " mout_aclk_gscl_fimc_user " ,
EN_IP_GSCL_FIMC , 9 , 0 , 0 ) ,
GATE ( GSCL_CLK_FIMC_LITE_A , " clk_fimc_lite_a " ,
" mout_aclk_gscl_fimc_user " ,
EN_IP_GSCL_FIMC , 10 , 0 , 0 ) ,
GATE ( GSCL_CLK_FIMC_LITE_B , " clk_fimc_lite_b " ,
" mout_aclk_gscl_fimc_user " ,
EN_IP_GSCL_FIMC , 11 , 0 , 0 ) ,
GATE ( GSCL_CLK_FIMC_LITE_D , " clk_fimc_lite_d " ,
" mout_aclk_gscl_fimc_user " ,
EN_IP_GSCL_FIMC , 12 , 0 , 0 ) ,
GATE ( GSCL_CLK_SMMU3_GSCL0 , " clk_smmu3_gscl0 " ,
" mout_aclk_gscl_333_user " ,
EN_IP_GSCL_SECURE_SMMU_GSCL0 , 17 , 0 , 0 ) ,
GATE ( GSCL_CLK_SMMU3_GSCL1 , " clk_smmu3_gscl1 " , " mout_aclk_gscl_333_user " ,
EN_IP_GSCL_SECURE_SMMU_GSCL1 , 18 , 0 , 0 ) ,
GATE ( GSCL_CLK_SMMU3_MSCL0 , " clk_smmu3_mscl0 " ,
" mout_aclk_m2m_400_user " ,
EN_IP_GSCL_SECURE_SMMU_MSCL0 , 19 , 0 , 0 ) ,
GATE ( GSCL_CLK_SMMU3_MSCL1 , " clk_smmu3_mscl1 " ,
" mout_aclk_m2m_400_user " ,
EN_IP_GSCL_SECURE_SMMU_MSCL1 , 20 , 0 , 0 ) ,
} ;
2016-08-22 11:49:44 +09:00
static const struct samsung_cmu_info gscl_cmu __initconst = {
. mux_clks = gscl_mux_clks ,
. nr_mux_clks = ARRAY_SIZE ( gscl_mux_clks ) ,
. div_clks = gscl_div_clks ,
. nr_div_clks = ARRAY_SIZE ( gscl_div_clks ) ,
. gate_clks = gscl_gate_clks ,
. nr_gate_clks = ARRAY_SIZE ( gscl_gate_clks ) ,
. nr_clk_ids = GSCL_NR_CLK ,
. clk_regs = gscl_clk_regs ,
. nr_clk_regs = ARRAY_SIZE ( gscl_clk_regs ) ,
} ;
2014-03-24 02:15:54 +05:30
static void __init exynos5260_clk_gscl_init ( struct device_node * np )
{
2016-08-22 11:49:44 +09:00
samsung_cmu_register_one ( np , & gscl_cmu ) ;
2014-03-24 02:15:54 +05:30
}
CLK_OF_DECLARE ( exynos5260_clk_gscl , " samsung,exynos5260-clock-gscl " ,
exynos5260_clk_gscl_init ) ;
/* CMU_ISP */
2016-05-11 14:02:05 +02:00
static const unsigned long isp_clk_regs [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX_SEL_ISP0 ,
MUX_SEL_ISP1 ,
DIV_ISP ,
EN_ACLK_ISP0 ,
EN_ACLK_ISP1 ,
EN_PCLK_ISP0 ,
EN_PCLK_ISP1 ,
EN_SCLK_ISP ,
EN_IP_ISP0 ,
EN_IP_ISP1 ,
} ;
PNAME ( mout_isp_400_user_p ) = { " fin_pll " , " dout_aclk_isp1_400 " } ;
PNAME ( mout_isp_266_user_p ) = { " fin_pll " , " dout_aclk_isp1_266 " } ;
2016-05-11 14:02:05 +02:00
static const struct samsung_mux_clock isp_mux_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX ( ISP_MOUT_ISP_266_USER , " mout_isp_266_user " , mout_isp_266_user_p ,
MUX_SEL_ISP0 , 0 , 1 ) ,
MUX ( ISP_MOUT_ISP_400_USER , " mout_isp_400_user " , mout_isp_400_user_p ,
MUX_SEL_ISP0 , 4 , 1 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_div_clock isp_div_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
DIV ( ISP_DOUT_PCLK_ISP_66 , " dout_pclk_isp_66 " , " mout_kfc " ,
DIV_ISP , 0 , 3 ) ,
DIV ( ISP_DOUT_PCLK_ISP_133 , " dout_pclk_isp_133 " , " mout_kfc " ,
DIV_ISP , 4 , 4 ) ,
DIV ( ISP_DOUT_CA5_ATCLKIN , " dout_ca5_atclkin " , " mout_kfc " ,
DIV_ISP , 12 , 3 ) ,
DIV ( ISP_DOUT_CA5_PCLKDBG , " dout_ca5_pclkdbg " , " mout_kfc " ,
DIV_ISP , 16 , 4 ) ,
DIV ( ISP_DOUT_SCLK_MPWM , " dout_sclk_mpwm " , " mout_kfc " , DIV_ISP , 20 , 2 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_gate_clock isp_gate_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
GATE ( ISP_CLK_GIC , " clk_isp_gic " , " mout_aclk_isp1_266 " ,
EN_IP_ISP0 , 15 , 0 , 0 ) ,
GATE ( ISP_CLK_CA5 , " clk_isp_ca5 " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 1 , 0 , 0 ) ,
GATE ( ISP_CLK_FIMC_DRC , " clk_isp_fimc_drc " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 2 , 0 , 0 ) ,
GATE ( ISP_CLK_FIMC_FD , " clk_isp_fimc_fd " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 3 , 0 , 0 ) ,
GATE ( ISP_CLK_FIMC , " clk_isp_fimc " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 4 , 0 , 0 ) ,
GATE ( ISP_CLK_FIMC_SCALERC , " clk_isp_fimc_scalerc " ,
" mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 5 , 0 , 0 ) ,
GATE ( ISP_CLK_FIMC_SCALERP , " clk_isp_fimc_scalerp " ,
" mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 6 , 0 , 0 ) ,
GATE ( ISP_CLK_I2C0 , " clk_isp_i2c0 " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 7 , 0 , 0 ) ,
GATE ( ISP_CLK_I2C1 , " clk_isp_i2c1 " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 8 , 0 , 0 ) ,
GATE ( ISP_CLK_MCUCTL , " clk_isp_mcuctl " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 9 , 0 , 0 ) ,
GATE ( ISP_CLK_MPWM , " clk_isp_mpwm " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 10 , 0 , 0 ) ,
GATE ( ISP_CLK_MTCADC , " clk_isp_mtcadc " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 11 , 0 , 0 ) ,
GATE ( ISP_CLK_PWM , " clk_isp_pwm " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 14 , 0 , 0 ) ,
GATE ( ISP_CLK_SMMU_DRC , " clk_smmu_drc " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 21 , 0 , 0 ) ,
GATE ( ISP_CLK_SMMU_FD , " clk_smmu_fd " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 22 , 0 , 0 ) ,
GATE ( ISP_CLK_SMMU_ISP , " clk_smmu_isp " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 23 , 0 , 0 ) ,
GATE ( ISP_CLK_SMMU_ISPCX , " clk_smmu_ispcx " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 24 , 0 , 0 ) ,
GATE ( ISP_CLK_SMMU_SCALERC , " clk_isp_smmu_scalerc " ,
" mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 25 , 0 , 0 ) ,
GATE ( ISP_CLK_SMMU_SCALERP , " clk_isp_smmu_scalerp " ,
" mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 26 , 0 , 0 ) ,
GATE ( ISP_CLK_SPI0 , " clk_isp_spi0 " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 27 , 0 , 0 ) ,
GATE ( ISP_CLK_SPI1 , " clk_isp_spi1 " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 28 , 0 , 0 ) ,
GATE ( ISP_CLK_WDT , " clk_isp_wdt " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 31 , 0 , 0 ) ,
GATE ( ISP_CLK_UART , " clk_isp_uart " , " mout_aclk_isp1_266 " ,
EN_IP_ISP1 , 30 , 0 , 0 ) ,
GATE ( ISP_SCLK_UART_EXT , " sclk_isp_uart_ext " , " fin_pll " ,
EN_SCLK_ISP , 7 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( ISP_SCLK_SPI1_EXT , " sclk_isp_spi1_ext " , " fin_pll " ,
EN_SCLK_ISP , 8 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( ISP_SCLK_SPI0_EXT , " sclk_isp_spi0_ext " , " fin_pll " ,
EN_SCLK_ISP , 9 , CLK_SET_RATE_PARENT , 0 ) ,
} ;
2016-08-22 11:49:44 +09:00
static const struct samsung_cmu_info isp_cmu __initconst = {
. mux_clks = isp_mux_clks ,
. nr_mux_clks = ARRAY_SIZE ( isp_mux_clks ) ,
. div_clks = isp_div_clks ,
. nr_div_clks = ARRAY_SIZE ( isp_div_clks ) ,
. gate_clks = isp_gate_clks ,
. nr_gate_clks = ARRAY_SIZE ( isp_gate_clks ) ,
. nr_clk_ids = ISP_NR_CLK ,
. clk_regs = isp_clk_regs ,
. nr_clk_regs = ARRAY_SIZE ( isp_clk_regs ) ,
} ;
2014-03-24 02:15:54 +05:30
static void __init exynos5260_clk_isp_init ( struct device_node * np )
{
2016-08-22 11:49:44 +09:00
samsung_cmu_register_one ( np , & isp_cmu ) ;
2014-03-24 02:15:54 +05:30
}
CLK_OF_DECLARE ( exynos5260_clk_isp , " samsung,exynos5260-clock-isp " ,
exynos5260_clk_isp_init ) ;
/* CMU_KFC */
2016-05-11 14:02:05 +02:00
static const unsigned long kfc_clk_regs [ ] __initconst = {
2014-03-24 02:15:54 +05:30
KFC_PLL_LOCK ,
KFC_PLL_CON0 ,
KFC_PLL_CON1 ,
KFC_PLL_FDET ,
MUX_SEL_KFC0 ,
MUX_SEL_KFC2 ,
DIV_KFC ,
DIV_KFC_PLL_FDET ,
EN_ACLK_KFC ,
EN_PCLK_KFC ,
EN_SCLK_KFC ,
EN_IP_KFC ,
} ;
PNAME ( mout_kfc_pll_p ) = { " fin_pll " , " fout_kfc_pll " } ;
PNAME ( mout_kfc_p ) = { " mout_kfc_pll " , " dout_media_pll " } ;
2016-05-11 14:02:05 +02:00
static const struct samsung_mux_clock kfc_mux_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX ( KFC_MOUT_KFC_PLL , " mout_kfc_pll " , mout_kfc_pll_p ,
MUX_SEL_KFC0 , 0 , 1 ) ,
MUX ( KFC_MOUT_KFC , " mout_kfc " , mout_kfc_p , MUX_SEL_KFC2 , 0 , 1 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_div_clock kfc_div_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
DIV ( KFC_DOUT_KFC1 , " dout_kfc1 " , " mout_kfc " , DIV_KFC , 0 , 3 ) ,
DIV ( KFC_DOUT_KFC2 , " dout_kfc2 " , " dout_kfc1 " , DIV_KFC , 4 , 3 ) ,
DIV ( KFC_DOUT_KFC_ATCLK , " dout_kfc_atclk " , " dout_kfc2 " , DIV_KFC , 8 , 3 ) ,
DIV ( KFC_DOUT_KFC_PCLK_DBG , " dout_kfc_pclk_dbg " , " dout_kfc2 " ,
DIV_KFC , 12 , 3 ) ,
DIV ( KFC_DOUT_ACLK_KFC , " dout_aclk_kfc " , " dout_kfc2 " , DIV_KFC , 16 , 3 ) ,
DIV ( KFC_DOUT_PCLK_KFC , " dout_pclk_kfc " , " dout_kfc2 " , DIV_KFC , 20 , 3 ) ,
DIV ( KFC_DOUT_KFC_PLL , " dout_kfc_pll " , " mout_kfc " , DIV_KFC , 24 , 3 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_pll_clock kfc_pll_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
PLL ( pll_2550xx , KFC_FOUT_KFC_PLL , " fout_kfc_pll " , " fin_pll " ,
KFC_PLL_LOCK , KFC_PLL_CON0 ,
pll2550_24mhz_tbl ) ,
} ;
2016-08-22 11:49:44 +09:00
static const struct samsung_cmu_info kfc_cmu __initconst = {
. pll_clks = kfc_pll_clks ,
. nr_pll_clks = ARRAY_SIZE ( kfc_pll_clks ) ,
. mux_clks = kfc_mux_clks ,
. nr_mux_clks = ARRAY_SIZE ( kfc_mux_clks ) ,
. div_clks = kfc_div_clks ,
. nr_div_clks = ARRAY_SIZE ( kfc_div_clks ) ,
. nr_clk_ids = KFC_NR_CLK ,
. clk_regs = kfc_clk_regs ,
. nr_clk_regs = ARRAY_SIZE ( kfc_clk_regs ) ,
} ;
2014-03-24 02:15:54 +05:30
static void __init exynos5260_clk_kfc_init ( struct device_node * np )
{
2016-08-22 11:49:44 +09:00
samsung_cmu_register_one ( np , & kfc_cmu ) ;
2014-03-24 02:15:54 +05:30
}
CLK_OF_DECLARE ( exynos5260_clk_kfc , " samsung,exynos5260-clock-kfc " ,
exynos5260_clk_kfc_init ) ;
/* CMU_MFC */
2016-05-11 14:02:05 +02:00
static const unsigned long mfc_clk_regs [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX_SEL_MFC ,
DIV_MFC ,
EN_ACLK_MFC ,
EN_ACLK_SECURE_SMMU2_MFC ,
EN_PCLK_MFC ,
EN_PCLK_SECURE_SMMU2_MFC ,
EN_IP_MFC ,
EN_IP_MFC_SECURE_SMMU2_MFC ,
} ;
PNAME ( mout_aclk_mfc_333_user_p ) = { " fin_pll " , " dout_aclk_mfc_333 " } ;
2016-05-11 14:02:05 +02:00
static const struct samsung_mux_clock mfc_mux_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX ( MFC_MOUT_ACLK_MFC_333_USER , " mout_aclk_mfc_333_user " ,
mout_aclk_mfc_333_user_p ,
MUX_SEL_MFC , 0 , 1 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_div_clock mfc_div_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
DIV ( MFC_DOUT_PCLK_MFC_83 , " dout_pclk_mfc_83 " , " mout_aclk_mfc_333_user " ,
DIV_MFC , 0 , 3 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_gate_clock mfc_gate_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
GATE ( MFC_CLK_MFC , " clk_mfc " , " mout_aclk_mfc_333_user " ,
EN_IP_MFC , 1 , 0 , 0 ) ,
GATE ( MFC_CLK_SMMU2_MFCM0 , " clk_smmu2_mfcm0 " , " mout_aclk_mfc_333_user " ,
EN_IP_MFC_SECURE_SMMU2_MFC , 6 , 0 , 0 ) ,
GATE ( MFC_CLK_SMMU2_MFCM1 , " clk_smmu2_mfcm1 " , " mout_aclk_mfc_333_user " ,
EN_IP_MFC_SECURE_SMMU2_MFC , 7 , 0 , 0 ) ,
} ;
2016-08-22 11:49:44 +09:00
static const struct samsung_cmu_info mfc_cmu __initconst = {
. mux_clks = mfc_mux_clks ,
. nr_mux_clks = ARRAY_SIZE ( mfc_mux_clks ) ,
. div_clks = mfc_div_clks ,
. nr_div_clks = ARRAY_SIZE ( mfc_div_clks ) ,
. gate_clks = mfc_gate_clks ,
. nr_gate_clks = ARRAY_SIZE ( mfc_gate_clks ) ,
. nr_clk_ids = MFC_NR_CLK ,
. clk_regs = mfc_clk_regs ,
. nr_clk_regs = ARRAY_SIZE ( mfc_clk_regs ) ,
} ;
2014-03-24 02:15:54 +05:30
static void __init exynos5260_clk_mfc_init ( struct device_node * np )
{
2016-08-22 11:49:44 +09:00
samsung_cmu_register_one ( np , & mfc_cmu ) ;
2014-03-24 02:15:54 +05:30
}
CLK_OF_DECLARE ( exynos5260_clk_mfc , " samsung,exynos5260-clock-mfc " ,
exynos5260_clk_mfc_init ) ;
/* CMU_MIF */
2016-05-11 14:02:05 +02:00
static const unsigned long mif_clk_regs [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MEM_PLL_LOCK ,
BUS_PLL_LOCK ,
MEDIA_PLL_LOCK ,
MEM_PLL_CON0 ,
MEM_PLL_CON1 ,
MEM_PLL_FDET ,
BUS_PLL_CON0 ,
BUS_PLL_CON1 ,
BUS_PLL_FDET ,
MEDIA_PLL_CON0 ,
MEDIA_PLL_CON1 ,
MEDIA_PLL_FDET ,
MUX_SEL_MIF ,
DIV_MIF ,
DIV_MIF_PLL_FDET ,
EN_ACLK_MIF ,
EN_ACLK_MIF_SECURE_DREX1_TZ ,
EN_ACLK_MIF_SECURE_DREX0_TZ ,
EN_ACLK_MIF_SECURE_INTMEM ,
EN_PCLK_MIF ,
EN_PCLK_MIF_SECURE_MONOCNT ,
EN_PCLK_MIF_SECURE_RTC_APBIF ,
EN_PCLK_MIF_SECURE_DREX1_TZ ,
EN_PCLK_MIF_SECURE_DREX0_TZ ,
EN_SCLK_MIF ,
EN_IP_MIF ,
EN_IP_MIF_SECURE_MONOCNT ,
EN_IP_MIF_SECURE_RTC_APBIF ,
EN_IP_MIF_SECURE_DREX1_TZ ,
EN_IP_MIF_SECURE_DREX0_TZ ,
EN_IP_MIF_SECURE_INTEMEM ,
} ;
PNAME ( mout_mem_pll_p ) = { " fin_pll " , " fout_mem_pll " } ;
PNAME ( mout_bus_pll_p ) = { " fin_pll " , " fout_bus_pll " } ;
PNAME ( mout_media_pll_p ) = { " fin_pll " , " fout_media_pll " } ;
PNAME ( mout_mif_drex_p ) = { " dout_mem_pll " , " dout_bus_pll " } ;
PNAME ( mout_mif_drex2x_p ) = { " dout_mem_pll " , " dout_bus_pll " } ;
PNAME ( mout_clkm_phy_p ) = { " mout_mif_drex " , " dout_media_pll " } ;
PNAME ( mout_clk2x_phy_p ) = { " mout_mif_drex2x " , " dout_media_pll " } ;
2016-05-11 14:02:05 +02:00
static const struct samsung_mux_clock mif_mux_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX ( MIF_MOUT_MEM_PLL , " mout_mem_pll " , mout_mem_pll_p ,
MUX_SEL_MIF , 0 , 1 ) ,
MUX ( MIF_MOUT_BUS_PLL , " mout_bus_pll " , mout_bus_pll_p ,
MUX_SEL_MIF , 4 , 1 ) ,
MUX ( MIF_MOUT_MEDIA_PLL , " mout_media_pll " , mout_media_pll_p ,
MUX_SEL_MIF , 8 , 1 ) ,
MUX ( MIF_MOUT_MIF_DREX , " mout_mif_drex " , mout_mif_drex_p ,
MUX_SEL_MIF , 12 , 1 ) ,
MUX ( MIF_MOUT_CLKM_PHY , " mout_clkm_phy " , mout_clkm_phy_p ,
MUX_SEL_MIF , 16 , 1 ) ,
MUX ( MIF_MOUT_MIF_DREX2X , " mout_mif_drex2x " , mout_mif_drex2x_p ,
MUX_SEL_MIF , 20 , 1 ) ,
MUX ( MIF_MOUT_CLK2X_PHY , " mout_clk2x_phy " , mout_clk2x_phy_p ,
MUX_SEL_MIF , 24 , 1 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_div_clock mif_div_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
DIV ( MIF_DOUT_MEDIA_PLL , " dout_media_pll " , " mout_media_pll " ,
DIV_MIF , 0 , 3 ) ,
DIV ( MIF_DOUT_MEM_PLL , " dout_mem_pll " , " mout_mem_pll " ,
DIV_MIF , 4 , 3 ) ,
DIV ( MIF_DOUT_BUS_PLL , " dout_bus_pll " , " mout_bus_pll " ,
DIV_MIF , 8 , 3 ) ,
DIV ( MIF_DOUT_CLKM_PHY , " dout_clkm_phy " , " mout_clkm_phy " ,
DIV_MIF , 12 , 3 ) ,
DIV ( MIF_DOUT_CLK2X_PHY , " dout_clk2x_phy " , " mout_clk2x_phy " ,
DIV_MIF , 16 , 4 ) ,
DIV ( MIF_DOUT_ACLK_MIF_466 , " dout_aclk_mif_466 " , " dout_clk2x_phy " ,
DIV_MIF , 20 , 3 ) ,
DIV ( MIF_DOUT_ACLK_BUS_200 , " dout_aclk_bus_200 " , " dout_bus_pll " ,
DIV_MIF , 24 , 3 ) ,
DIV ( MIF_DOUT_ACLK_BUS_100 , " dout_aclk_bus_100 " , " dout_bus_pll " ,
DIV_MIF , 28 , 4 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_gate_clock mif_gate_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
GATE ( MIF_CLK_LPDDR3PHY_WRAP0 , " clk_lpddr3phy_wrap0 " , " dout_clk2x_phy " ,
EN_IP_MIF , 12 , CLK_IGNORE_UNUSED , 0 ) ,
GATE ( MIF_CLK_LPDDR3PHY_WRAP1 , " clk_lpddr3phy_wrap1 " , " dout_clk2x_phy " ,
EN_IP_MIF , 13 , CLK_IGNORE_UNUSED , 0 ) ,
GATE ( MIF_CLK_MONOCNT , " clk_monocnt " , " dout_aclk_bus_100 " ,
EN_IP_MIF_SECURE_MONOCNT , 22 ,
CLK_IGNORE_UNUSED , 0 ) ,
GATE ( MIF_CLK_MIF_RTC , " clk_mif_rtc " , " dout_aclk_bus_100 " ,
EN_IP_MIF_SECURE_RTC_APBIF , 23 ,
CLK_IGNORE_UNUSED , 0 ) ,
GATE ( MIF_CLK_DREX1 , " clk_drex1 " , " dout_aclk_mif_466 " ,
EN_IP_MIF_SECURE_DREX1_TZ , 9 ,
CLK_IGNORE_UNUSED , 0 ) ,
GATE ( MIF_CLK_DREX0 , " clk_drex0 " , " dout_aclk_mif_466 " ,
EN_IP_MIF_SECURE_DREX0_TZ , 9 ,
CLK_IGNORE_UNUSED , 0 ) ,
GATE ( MIF_CLK_INTMEM , " clk_intmem " , " dout_aclk_bus_200 " ,
EN_IP_MIF_SECURE_INTEMEM , 11 ,
CLK_IGNORE_UNUSED , 0 ) ,
GATE ( MIF_SCLK_LPDDR3PHY_WRAP_U0 , " sclk_lpddr3phy_wrap_u0 " ,
" dout_clkm_phy " , EN_SCLK_MIF , 0 ,
CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT , 0 ) ,
GATE ( MIF_SCLK_LPDDR3PHY_WRAP_U1 , " sclk_lpddr3phy_wrap_u1 " ,
" dout_clkm_phy " , EN_SCLK_MIF , 1 ,
CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT , 0 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_pll_clock mif_pll_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
PLL ( pll_2550xx , MIF_FOUT_MEM_PLL , " fout_mem_pll " , " fin_pll " ,
MEM_PLL_LOCK , MEM_PLL_CON0 ,
pll2550_24mhz_tbl ) ,
PLL ( pll_2550xx , MIF_FOUT_BUS_PLL , " fout_bus_pll " , " fin_pll " ,
BUS_PLL_LOCK , BUS_PLL_CON0 ,
pll2550_24mhz_tbl ) ,
PLL ( pll_2550xx , MIF_FOUT_MEDIA_PLL , " fout_media_pll " , " fin_pll " ,
MEDIA_PLL_LOCK , MEDIA_PLL_CON0 ,
pll2550_24mhz_tbl ) ,
} ;
2016-08-22 11:49:44 +09:00
static const struct samsung_cmu_info mif_cmu __initconst = {
. pll_clks = mif_pll_clks ,
. nr_pll_clks = ARRAY_SIZE ( mif_pll_clks ) ,
. mux_clks = mif_mux_clks ,
. nr_mux_clks = ARRAY_SIZE ( mif_mux_clks ) ,
. div_clks = mif_div_clks ,
. nr_div_clks = ARRAY_SIZE ( mif_div_clks ) ,
. gate_clks = mif_gate_clks ,
. nr_gate_clks = ARRAY_SIZE ( mif_gate_clks ) ,
. nr_clk_ids = MIF_NR_CLK ,
. clk_regs = mif_clk_regs ,
. nr_clk_regs = ARRAY_SIZE ( mif_clk_regs ) ,
} ;
2014-03-24 02:15:54 +05:30
static void __init exynos5260_clk_mif_init ( struct device_node * np )
{
2016-08-22 11:49:44 +09:00
samsung_cmu_register_one ( np , & mif_cmu ) ;
2014-03-24 02:15:54 +05:30
}
CLK_OF_DECLARE ( exynos5260_clk_mif , " samsung,exynos5260-clock-mif " ,
exynos5260_clk_mif_init ) ;
/* CMU_PERI */
2016-05-11 14:02:05 +02:00
static const unsigned long peri_clk_regs [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX_SEL_PERI ,
MUX_SEL_PERI1 ,
DIV_PERI ,
EN_PCLK_PERI0 ,
EN_PCLK_PERI1 ,
EN_PCLK_PERI2 ,
EN_PCLK_PERI3 ,
EN_PCLK_PERI_SECURE_CHIPID ,
EN_PCLK_PERI_SECURE_PROVKEY0 ,
EN_PCLK_PERI_SECURE_PROVKEY1 ,
EN_PCLK_PERI_SECURE_SECKEY ,
EN_PCLK_PERI_SECURE_ANTIRBKCNT ,
EN_PCLK_PERI_SECURE_TOP_RTC ,
EN_PCLK_PERI_SECURE_TZPC ,
EN_SCLK_PERI ,
EN_SCLK_PERI_SECURE_TOP_RTC ,
EN_IP_PERI0 ,
EN_IP_PERI1 ,
EN_IP_PERI2 ,
EN_IP_PERI_SECURE_CHIPID ,
EN_IP_PERI_SECURE_PROVKEY0 ,
EN_IP_PERI_SECURE_PROVKEY1 ,
EN_IP_PERI_SECURE_SECKEY ,
EN_IP_PERI_SECURE_ANTIRBKCNT ,
EN_IP_PERI_SECURE_TOP_RTC ,
EN_IP_PERI_SECURE_TZPC ,
} ;
PNAME ( mout_sclk_pcm_p ) = { " ioclk_pcm_extclk " , " fin_pll " , " dout_aclk_peri_aud " ,
" phyclk_hdmi_phy_ref_cko " } ;
PNAME ( mout_sclk_i2scod_p ) = { " ioclk_i2s_cdclk " , " fin_pll " , " dout_aclk_peri_aud " ,
" phyclk_hdmi_phy_ref_cko " } ;
PNAME ( mout_sclk_spdif_p ) = { " ioclk_spdif_extclk " , " fin_pll " ,
" dout_aclk_peri_aud " , " phyclk_hdmi_phy_ref_cko " } ;
2016-05-11 14:02:05 +02:00
static const struct samsung_mux_clock peri_mux_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX ( PERI_MOUT_SCLK_PCM , " mout_sclk_pcm " , mout_sclk_pcm_p ,
MUX_SEL_PERI1 , 4 , 2 ) ,
MUX ( PERI_MOUT_SCLK_I2SCOD , " mout_sclk_i2scod " , mout_sclk_i2scod_p ,
MUX_SEL_PERI1 , 12 , 2 ) ,
MUX ( PERI_MOUT_SCLK_SPDIF , " mout_sclk_spdif " , mout_sclk_spdif_p ,
MUX_SEL_PERI1 , 20 , 2 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_div_clock peri_div_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
DIV ( PERI_DOUT_PCM , " dout_pcm " , " mout_sclk_pcm " , DIV_PERI , 0 , 8 ) ,
DIV ( PERI_DOUT_I2S , " dout_i2s " , " mout_sclk_i2scod " , DIV_PERI , 8 , 6 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_gate_clock peri_gate_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
GATE ( PERI_SCLK_PCM1 , " sclk_pcm1 " , " dout_pcm " , EN_SCLK_PERI , 0 ,
CLK_SET_RATE_PARENT , 0 ) ,
GATE ( PERI_SCLK_I2S , " sclk_i2s " , " dout_i2s " , EN_SCLK_PERI , 1 ,
CLK_SET_RATE_PARENT , 0 ) ,
GATE ( PERI_SCLK_SPDIF , " sclk_spdif " , " dout_sclk_peri_spi0_b " ,
EN_SCLK_PERI , 2 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( PERI_SCLK_SPI0 , " sclk_spi0 " , " dout_sclk_peri_spi0_b " ,
EN_SCLK_PERI , 7 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( PERI_SCLK_SPI1 , " sclk_spi1 " , " dout_sclk_peri_spi1_b " ,
EN_SCLK_PERI , 8 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( PERI_SCLK_SPI2 , " sclk_spi2 " , " dout_sclk_peri_spi2_b " ,
EN_SCLK_PERI , 9 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( PERI_SCLK_UART0 , " sclk_uart0 " , " dout_sclk_peri_uart0 " ,
EN_SCLK_PERI , 10 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( PERI_SCLK_UART1 , " sclk_uart1 " , " dout_sclk_peri_uart1 " ,
EN_SCLK_PERI , 11 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( PERI_SCLK_UART2 , " sclk_uart2 " , " dout_sclk_peri_uart2 " ,
EN_SCLK_PERI , 12 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( PERI_CLK_ABB , " clk_abb " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 1 , 0 , 0 ) ,
GATE ( PERI_CLK_EFUSE_WRITER , " clk_efuse_writer " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 5 , 0 , 0 ) ,
GATE ( PERI_CLK_HDMICEC , " clk_hdmicec " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 6 , 0 , 0 ) ,
GATE ( PERI_CLK_I2C10 , " clk_i2c10 " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 7 , 0 , 0 ) ,
GATE ( PERI_CLK_I2C11 , " clk_i2c11 " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 8 , 0 , 0 ) ,
GATE ( PERI_CLK_I2C8 , " clk_i2c8 " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 9 , 0 , 0 ) ,
GATE ( PERI_CLK_I2C9 , " clk_i2c9 " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 10 , 0 , 0 ) ,
GATE ( PERI_CLK_I2C4 , " clk_i2c4 " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 11 , 0 , 0 ) ,
GATE ( PERI_CLK_I2C5 , " clk_i2c5 " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 12 , 0 , 0 ) ,
GATE ( PERI_CLK_I2C6 , " clk_i2c6 " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 13 , 0 , 0 ) ,
GATE ( PERI_CLK_I2C7 , " clk_i2c7 " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 14 , 0 , 0 ) ,
GATE ( PERI_CLK_I2CHDMI , " clk_i2chdmi " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 15 , 0 , 0 ) ,
GATE ( PERI_CLK_I2S , " clk_peri_i2s " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 16 , 0 , 0 ) ,
GATE ( PERI_CLK_MCT , " clk_mct " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 17 , 0 , 0 ) ,
GATE ( PERI_CLK_PCM , " clk_peri_pcm " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 18 , 0 , 0 ) ,
GATE ( PERI_CLK_HSIC0 , " clk_hsic0 " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 20 , 0 , 0 ) ,
GATE ( PERI_CLK_HSIC1 , " clk_hsic1 " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 21 , 0 , 0 ) ,
GATE ( PERI_CLK_HSIC2 , " clk_hsic2 " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 22 , 0 , 0 ) ,
GATE ( PERI_CLK_HSIC3 , " clk_hsic3 " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 23 , 0 , 0 ) ,
GATE ( PERI_CLK_WDT_EGL , " clk_wdt_egl " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 24 , 0 , 0 ) ,
GATE ( PERI_CLK_WDT_KFC , " clk_wdt_kfc " , " dout_aclk_peri_66 " ,
EN_IP_PERI0 , 25 , 0 , 0 ) ,
GATE ( PERI_CLK_UART4 , " clk_uart4 " , " dout_aclk_peri_66 " ,
EN_IP_PERI2 , 0 , 0 , 0 ) ,
GATE ( PERI_CLK_PWM , " clk_pwm " , " dout_aclk_peri_66 " ,
EN_IP_PERI2 , 3 , 0 , 0 ) ,
GATE ( PERI_CLK_SPDIF , " clk_spdif " , " dout_aclk_peri_66 " ,
EN_IP_PERI2 , 6 , 0 , 0 ) ,
GATE ( PERI_CLK_SPI0 , " clk_spi0 " , " dout_aclk_peri_66 " ,
EN_IP_PERI2 , 7 , 0 , 0 ) ,
GATE ( PERI_CLK_SPI1 , " clk_spi1 " , " dout_aclk_peri_66 " ,
EN_IP_PERI2 , 8 , 0 , 0 ) ,
GATE ( PERI_CLK_SPI2 , " clk_spi2 " , " dout_aclk_peri_66 " ,
EN_IP_PERI2 , 9 , 0 , 0 ) ,
GATE ( PERI_CLK_TMU0 , " clk_tmu0 " , " dout_aclk_peri_66 " ,
EN_IP_PERI2 , 10 , 0 , 0 ) ,
GATE ( PERI_CLK_TMU1 , " clk_tmu1 " , " dout_aclk_peri_66 " ,
EN_IP_PERI2 , 11 , 0 , 0 ) ,
GATE ( PERI_CLK_TMU2 , " clk_tmu2 " , " dout_aclk_peri_66 " ,
EN_IP_PERI2 , 12 , 0 , 0 ) ,
GATE ( PERI_CLK_TMU3 , " clk_tmu3 " , " dout_aclk_peri_66 " ,
EN_IP_PERI2 , 13 , 0 , 0 ) ,
GATE ( PERI_CLK_TMU4 , " clk_tmu4 " , " dout_aclk_peri_66 " ,
EN_IP_PERI2 , 14 , 0 , 0 ) ,
GATE ( PERI_CLK_ADC , " clk_adc " , " dout_aclk_peri_66 " ,
EN_IP_PERI2 , 18 , 0 , 0 ) ,
GATE ( PERI_CLK_UART0 , " clk_uart0 " , " dout_aclk_peri_66 " ,
EN_IP_PERI2 , 19 , 0 , 0 ) ,
GATE ( PERI_CLK_UART1 , " clk_uart1 " , " dout_aclk_peri_66 " ,
EN_IP_PERI2 , 20 , 0 , 0 ) ,
GATE ( PERI_CLK_UART2 , " clk_uart2 " , " dout_aclk_peri_66 " ,
EN_IP_PERI2 , 21 , 0 , 0 ) ,
GATE ( PERI_CLK_CHIPID , " clk_chipid " , " dout_aclk_peri_66 " ,
EN_IP_PERI_SECURE_CHIPID , 2 , 0 , 0 ) ,
GATE ( PERI_CLK_PROVKEY0 , " clk_provkey0 " , " dout_aclk_peri_66 " ,
EN_IP_PERI_SECURE_PROVKEY0 , 1 , 0 , 0 ) ,
GATE ( PERI_CLK_PROVKEY1 , " clk_provkey1 " , " dout_aclk_peri_66 " ,
EN_IP_PERI_SECURE_PROVKEY1 , 2 , 0 , 0 ) ,
GATE ( PERI_CLK_SECKEY , " clk_seckey " , " dout_aclk_peri_66 " ,
EN_IP_PERI_SECURE_SECKEY , 5 , 0 , 0 ) ,
GATE ( PERI_CLK_TOP_RTC , " clk_top_rtc " , " dout_aclk_peri_66 " ,
EN_IP_PERI_SECURE_TOP_RTC , 5 , 0 , 0 ) ,
GATE ( PERI_CLK_TZPC0 , " clk_tzpc0 " , " dout_aclk_peri_66 " ,
EN_IP_PERI_SECURE_TZPC , 10 , 0 , 0 ) ,
GATE ( PERI_CLK_TZPC1 , " clk_tzpc1 " , " dout_aclk_peri_66 " ,
EN_IP_PERI_SECURE_TZPC , 11 , 0 , 0 ) ,
GATE ( PERI_CLK_TZPC2 , " clk_tzpc2 " , " dout_aclk_peri_66 " ,
EN_IP_PERI_SECURE_TZPC , 12 , 0 , 0 ) ,
GATE ( PERI_CLK_TZPC3 , " clk_tzpc3 " , " dout_aclk_peri_66 " ,
EN_IP_PERI_SECURE_TZPC , 13 , 0 , 0 ) ,
GATE ( PERI_CLK_TZPC4 , " clk_tzpc4 " , " dout_aclk_peri_66 " ,
EN_IP_PERI_SECURE_TZPC , 14 , 0 , 0 ) ,
GATE ( PERI_CLK_TZPC5 , " clk_tzpc5 " , " dout_aclk_peri_66 " ,
EN_IP_PERI_SECURE_TZPC , 15 , 0 , 0 ) ,
GATE ( PERI_CLK_TZPC6 , " clk_tzpc6 " , " dout_aclk_peri_66 " ,
EN_IP_PERI_SECURE_TZPC , 16 , 0 , 0 ) ,
GATE ( PERI_CLK_TZPC7 , " clk_tzpc7 " , " dout_aclk_peri_66 " ,
EN_IP_PERI_SECURE_TZPC , 17 , 0 , 0 ) ,
GATE ( PERI_CLK_TZPC8 , " clk_tzpc8 " , " dout_aclk_peri_66 " ,
EN_IP_PERI_SECURE_TZPC , 18 , 0 , 0 ) ,
GATE ( PERI_CLK_TZPC9 , " clk_tzpc9 " , " dout_aclk_peri_66 " ,
EN_IP_PERI_SECURE_TZPC , 19 , 0 , 0 ) ,
GATE ( PERI_CLK_TZPC10 , " clk_tzpc10 " , " dout_aclk_peri_66 " ,
EN_IP_PERI_SECURE_TZPC , 20 , 0 , 0 ) ,
} ;
2016-08-22 11:49:44 +09:00
static const struct samsung_cmu_info peri_cmu __initconst = {
. mux_clks = peri_mux_clks ,
. nr_mux_clks = ARRAY_SIZE ( peri_mux_clks ) ,
. div_clks = peri_div_clks ,
. nr_div_clks = ARRAY_SIZE ( peri_div_clks ) ,
. gate_clks = peri_gate_clks ,
. nr_gate_clks = ARRAY_SIZE ( peri_gate_clks ) ,
. nr_clk_ids = PERI_NR_CLK ,
. clk_regs = peri_clk_regs ,
. nr_clk_regs = ARRAY_SIZE ( peri_clk_regs ) ,
} ;
2014-03-24 02:15:54 +05:30
static void __init exynos5260_clk_peri_init ( struct device_node * np )
{
2016-08-22 11:49:44 +09:00
samsung_cmu_register_one ( np , & peri_cmu ) ;
2014-03-24 02:15:54 +05:30
}
CLK_OF_DECLARE ( exynos5260_clk_peri , " samsung,exynos5260-clock-peri " ,
exynos5260_clk_peri_init ) ;
/* CMU_TOP */
2016-05-11 14:02:05 +02:00
static const unsigned long top_clk_regs [ ] __initconst = {
2014-03-24 02:15:54 +05:30
DISP_PLL_LOCK ,
AUD_PLL_LOCK ,
DISP_PLL_CON0 ,
DISP_PLL_CON1 ,
DISP_PLL_FDET ,
AUD_PLL_CON0 ,
AUD_PLL_CON1 ,
AUD_PLL_CON2 ,
AUD_PLL_FDET ,
MUX_SEL_TOP_PLL0 ,
MUX_SEL_TOP_MFC ,
MUX_SEL_TOP_G2D ,
MUX_SEL_TOP_GSCL ,
MUX_SEL_TOP_ISP10 ,
MUX_SEL_TOP_ISP11 ,
MUX_SEL_TOP_DISP0 ,
MUX_SEL_TOP_DISP1 ,
MUX_SEL_TOP_BUS ,
MUX_SEL_TOP_PERI0 ,
MUX_SEL_TOP_PERI1 ,
MUX_SEL_TOP_FSYS ,
DIV_TOP_G2D_MFC ,
DIV_TOP_GSCL_ISP0 ,
DIV_TOP_ISP10 ,
DIV_TOP_ISP11 ,
DIV_TOP_DISP ,
DIV_TOP_BUS ,
DIV_TOP_PERI0 ,
DIV_TOP_PERI1 ,
DIV_TOP_PERI2 ,
DIV_TOP_FSYS0 ,
DIV_TOP_FSYS1 ,
DIV_TOP_HPM ,
DIV_TOP_PLL_FDET ,
EN_ACLK_TOP ,
EN_SCLK_TOP ,
EN_IP_TOP ,
} ;
/* fixed rate clocks generated inside the soc */
2016-05-11 14:02:05 +02:00
static const struct samsung_fixed_rate_clock fixed_rate_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
FRATE ( PHYCLK_DPTX_PHY_CH3_TXD_CLK , " phyclk_dptx_phy_ch3_txd_clk " , NULL ,
2016-03-01 10:59:58 -08:00
0 , 270000000 ) ,
2014-03-24 02:15:54 +05:30
FRATE ( PHYCLK_DPTX_PHY_CH2_TXD_CLK , " phyclk_dptx_phy_ch2_txd_clk " , NULL ,
2016-03-01 10:59:58 -08:00
0 , 270000000 ) ,
2014-03-24 02:15:54 +05:30
FRATE ( PHYCLK_DPTX_PHY_CH1_TXD_CLK , " phyclk_dptx_phy_ch1_txd_clk " , NULL ,
2016-03-01 10:59:58 -08:00
0 , 270000000 ) ,
2014-03-24 02:15:54 +05:30
FRATE ( PHYCLK_DPTX_PHY_CH0_TXD_CLK , " phyclk_dptx_phy_ch0_txd_clk " , NULL ,
2016-03-01 10:59:58 -08:00
0 , 270000000 ) ,
2014-03-24 02:15:54 +05:30
FRATE ( phyclk_hdmi_phy_tmds_clko , " phyclk_hdmi_phy_tmds_clko " , NULL ,
2016-03-01 10:59:58 -08:00
0 , 250000000 ) ,
2014-03-24 02:15:54 +05:30
FRATE ( PHYCLK_HDMI_PHY_PIXEL_CLKO , " phyclk_hdmi_phy_pixel_clko " , NULL ,
2016-03-01 10:59:58 -08:00
0 , 1660000000 ) ,
2014-03-24 02:15:54 +05:30
FRATE ( PHYCLK_HDMI_LINK_O_TMDS_CLKHI , " phyclk_hdmi_link_o_tmds_clkhi " ,
2016-03-01 10:59:58 -08:00
NULL , 0 , 125000000 ) ,
2014-03-24 02:15:54 +05:30
FRATE ( PHYCLK_MIPI_DPHY_4L_M_TXBYTECLKHS ,
2014-09-10 11:26:05 +05:30
" phyclk_mipi_dphy_4l_m_txbyte_clkhs " , NULL ,
2016-03-01 10:59:58 -08:00
0 , 187500000 ) ,
2014-03-24 02:15:54 +05:30
FRATE ( PHYCLK_DPTX_PHY_O_REF_CLK_24M , " phyclk_dptx_phy_o_ref_clk_24m " ,
2016-03-01 10:59:58 -08:00
NULL , 0 , 24000000 ) ,
2014-03-24 02:15:54 +05:30
FRATE ( PHYCLK_DPTX_PHY_CLK_DIV2 , " phyclk_dptx_phy_clk_div2 " , NULL ,
2016-03-01 10:59:58 -08:00
0 , 135000000 ) ,
2014-03-24 02:15:54 +05:30
FRATE ( PHYCLK_MIPI_DPHY_4L_M_RXCLKESC0 ,
2016-03-01 10:59:58 -08:00
" phyclk_mipi_dphy_4l_m_rxclkesc0 " , NULL , 0 , 20000000 ) ,
2014-03-24 02:15:54 +05:30
FRATE ( PHYCLK_USBHOST20_PHY_PHYCLOCK , " phyclk_usbhost20_phy_phyclock " ,
2016-03-01 10:59:58 -08:00
NULL , 0 , 60000000 ) ,
2014-03-24 02:15:54 +05:30
FRATE ( PHYCLK_USBHOST20_PHY_FREECLK , " phyclk_usbhost20_phy_freeclk " ,
2016-03-01 10:59:58 -08:00
NULL , 0 , 60000000 ) ,
2014-03-24 02:15:54 +05:30
FRATE ( PHYCLK_USBHOST20_PHY_CLK48MOHCI ,
2016-03-01 10:59:58 -08:00
" phyclk_usbhost20_phy_clk48mohci " , NULL , 0 , 48000000 ) ,
2014-03-24 02:15:54 +05:30
FRATE ( PHYCLK_USBDRD30_UDRD30_PIPE_PCLK ,
2016-03-01 10:59:58 -08:00
" phyclk_usbdrd30_udrd30_pipe_pclk " , NULL , 0 , 125000000 ) ,
2014-03-24 02:15:54 +05:30
FRATE ( PHYCLK_USBDRD30_UDRD30_PHYCLOCK ,
2016-03-01 10:59:58 -08:00
" phyclk_usbdrd30_udrd30_phyclock " , NULL , 0 , 60000000 ) ,
2014-03-24 02:15:54 +05:30
} ;
PNAME ( mout_memtop_pll_user_p ) = { " fin_pll " , " dout_mem_pll " } ;
PNAME ( mout_bustop_pll_user_p ) = { " fin_pll " , " dout_bus_pll " } ;
PNAME ( mout_mediatop_pll_user_p ) = { " fin_pll " , " dout_media_pll " } ;
PNAME ( mout_audtop_pll_user_p ) = { " fin_pll " , " mout_aud_pll " } ;
PNAME ( mout_aud_pll_p ) = { " fin_pll " , " fout_aud_pll " } ;
PNAME ( mout_disp_pll_p ) = { " fin_pll " , " fout_disp_pll " } ;
PNAME ( mout_mfc_bustop_333_p ) = { " mout_bustop_pll_user " , " mout_disp_pll " } ;
PNAME ( mout_aclk_mfc_333_p ) = { " mout_mediatop_pll_user " , " mout_mfc_bustop_333 " } ;
PNAME ( mout_g2d_bustop_333_p ) = { " mout_bustop_pll_user " , " mout_disp_pll " } ;
PNAME ( mout_aclk_g2d_333_p ) = { " mout_mediatop_pll_user " , " mout_g2d_bustop_333 " } ;
PNAME ( mout_gscl_bustop_333_p ) = { " mout_bustop_pll_user " , " mout_disp_pll " } ;
PNAME ( mout_aclk_gscl_333_p ) = { " mout_mediatop_pll_user " ,
" mout_gscl_bustop_333 " } ;
PNAME ( mout_m2m_mediatop_400_p ) = { " mout_mediatop_pll_user " , " mout_disp_pll " } ;
PNAME ( mout_aclk_gscl_400_p ) = { " mout_bustop_pll_user " ,
" mout_m2m_mediatop_400 " } ;
PNAME ( mout_gscl_bustop_fimc_p ) = { " mout_bustop_pll_user " , " mout_disp_pll " } ;
PNAME ( mout_aclk_gscl_fimc_p ) = { " mout_mediatop_pll_user " ,
" mout_gscl_bustop_fimc " } ;
PNAME ( mout_isp1_media_266_p ) = { " mout_mediatop_pll_user " ,
" mout_memtop_pll_user " } ;
PNAME ( mout_aclk_isp1_266_p ) = { " mout_bustop_pll_user " , " mout_isp1_media_266 " } ;
PNAME ( mout_isp1_media_400_p ) = { " mout_mediatop_pll_user " , " mout_disp_pll " } ;
PNAME ( mout_aclk_isp1_400_p ) = { " mout_bustop_pll_user " , " mout_isp1_media_400 " } ;
PNAME ( mout_sclk_isp_spi_p ) = { " fin_pll " , " mout_bustop_pll_user " } ;
PNAME ( mout_sclk_isp_uart_p ) = { " fin_pll " , " mout_bustop_pll_user " } ;
PNAME ( mout_sclk_isp_sensor_p ) = { " fin_pll " , " mout_bustop_pll_user " } ;
PNAME ( mout_disp_disp_333_p ) = { " mout_disp_pll " , " mout_bustop_pll_user " } ;
PNAME ( mout_aclk_disp_333_p ) = { " mout_mediatop_pll_user " , " mout_disp_disp_333 " } ;
PNAME ( mout_disp_disp_222_p ) = { " mout_disp_pll " , " mout_bustop_pll_user " } ;
PNAME ( mout_aclk_disp_222_p ) = { " mout_mediatop_pll_user " , " mout_disp_disp_222 " } ;
PNAME ( mout_disp_media_pixel_p ) = { " mout_mediatop_pll_user " ,
" mout_bustop_pll_user " } ;
PNAME ( mout_sclk_disp_pixel_p ) = { " mout_disp_pll " , " mout_disp_media_pixel " } ;
PNAME ( mout_bus_bustop_400_p ) = { " mout_bustop_pll_user " , " mout_memtop_pll_user " } ;
PNAME ( mout_bus_bustop_100_p ) = { " mout_bustop_pll_user " , " mout_memtop_pll_user " } ;
PNAME ( mout_sclk_peri_spi_clk_p ) = { " fin_pll " , " mout_bustop_pll_user " } ;
PNAME ( mout_sclk_peri_uart_uclk_p ) = { " fin_pll " , " mout_bustop_pll_user " } ;
PNAME ( mout_sclk_fsys_usb_p ) = { " fin_pll " , " mout_bustop_pll_user " } ;
PNAME ( mout_sclk_fsys_mmc_sdclkin_a_p ) = { " fin_pll " , " mout_bustop_pll_user " } ;
PNAME ( mout_sclk_fsys_mmc0_sdclkin_b_p ) = { " mout_sclk_fsys_mmc0_sdclkin_a " ,
" mout_mediatop_pll_user " } ;
PNAME ( mout_sclk_fsys_mmc1_sdclkin_b_p ) = { " mout_sclk_fsys_mmc1_sdclkin_a " ,
" mout_mediatop_pll_user " } ;
PNAME ( mout_sclk_fsys_mmc2_sdclkin_b_p ) = { " mout_sclk_fsys_mmc2_sdclkin_a " ,
" mout_mediatop_pll_user " } ;
2016-05-11 14:02:05 +02:00
static const struct samsung_mux_clock top_mux_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
MUX ( TOP_MOUT_MEDIATOP_PLL_USER , " mout_mediatop_pll_user " ,
mout_mediatop_pll_user_p ,
MUX_SEL_TOP_PLL0 , 0 , 1 ) ,
MUX ( TOP_MOUT_MEMTOP_PLL_USER , " mout_memtop_pll_user " ,
mout_memtop_pll_user_p ,
MUX_SEL_TOP_PLL0 , 4 , 1 ) ,
MUX ( TOP_MOUT_BUSTOP_PLL_USER , " mout_bustop_pll_user " ,
mout_bustop_pll_user_p ,
MUX_SEL_TOP_PLL0 , 8 , 1 ) ,
MUX ( TOP_MOUT_DISP_PLL , " mout_disp_pll " , mout_disp_pll_p ,
MUX_SEL_TOP_PLL0 , 12 , 1 ) ,
MUX ( TOP_MOUT_AUD_PLL , " mout_aud_pll " , mout_aud_pll_p ,
MUX_SEL_TOP_PLL0 , 16 , 1 ) ,
MUX ( TOP_MOUT_AUDTOP_PLL_USER , " mout_audtop_pll_user " ,
mout_audtop_pll_user_p ,
MUX_SEL_TOP_PLL0 , 24 , 1 ) ,
MUX ( TOP_MOUT_DISP_DISP_333 , " mout_disp_disp_333 " , mout_disp_disp_333_p ,
MUX_SEL_TOP_DISP0 , 0 , 1 ) ,
MUX ( TOP_MOUT_ACLK_DISP_333 , " mout_aclk_disp_333 " , mout_aclk_disp_333_p ,
MUX_SEL_TOP_DISP0 , 8 , 1 ) ,
MUX ( TOP_MOUT_DISP_DISP_222 , " mout_disp_disp_222 " , mout_disp_disp_222_p ,
MUX_SEL_TOP_DISP0 , 12 , 1 ) ,
MUX ( TOP_MOUT_ACLK_DISP_222 , " mout_aclk_disp_222 " , mout_aclk_disp_222_p ,
MUX_SEL_TOP_DISP0 , 20 , 1 ) ,
MUX ( TOP_MOUT_FIMD1 , " mout_sclk_disp_pixel " , mout_sclk_disp_pixel_p ,
MUX_SEL_TOP_DISP1 , 0 , 1 ) ,
MUX ( TOP_MOUT_DISP_MEDIA_PIXEL , " mout_disp_media_pixel " ,
mout_disp_media_pixel_p ,
MUX_SEL_TOP_DISP1 , 8 , 1 ) ,
MUX ( TOP_MOUT_SCLK_PERI_SPI2_CLK , " mout_sclk_peri_spi2_clk " ,
mout_sclk_peri_spi_clk_p ,
MUX_SEL_TOP_PERI1 , 0 , 1 ) ,
MUX ( TOP_MOUT_SCLK_PERI_SPI1_CLK , " mout_sclk_peri_spi1_clk " ,
mout_sclk_peri_spi_clk_p ,
MUX_SEL_TOP_PERI1 , 4 , 1 ) ,
MUX ( TOP_MOUT_SCLK_PERI_SPI0_CLK , " mout_sclk_peri_spi0_clk " ,
mout_sclk_peri_spi_clk_p ,
MUX_SEL_TOP_PERI1 , 8 , 1 ) ,
MUX ( TOP_MOUT_SCLK_PERI_UART1_UCLK , " mout_sclk_peri_uart1_uclk " ,
mout_sclk_peri_uart_uclk_p ,
MUX_SEL_TOP_PERI1 , 12 , 1 ) ,
MUX ( TOP_MOUT_SCLK_PERI_UART2_UCLK , " mout_sclk_peri_uart2_uclk " ,
mout_sclk_peri_uart_uclk_p ,
MUX_SEL_TOP_PERI1 , 16 , 1 ) ,
MUX ( TOP_MOUT_SCLK_PERI_UART0_UCLK , " mout_sclk_peri_uart0_uclk " ,
mout_sclk_peri_uart_uclk_p ,
MUX_SEL_TOP_PERI1 , 20 , 1 ) ,
MUX ( TOP_MOUT_BUS1_BUSTOP_400 , " mout_bus1_bustop_400 " ,
mout_bus_bustop_400_p ,
MUX_SEL_TOP_BUS , 0 , 1 ) ,
MUX ( TOP_MOUT_BUS1_BUSTOP_100 , " mout_bus1_bustop_100 " ,
mout_bus_bustop_100_p ,
MUX_SEL_TOP_BUS , 4 , 1 ) ,
MUX ( TOP_MOUT_BUS2_BUSTOP_100 , " mout_bus2_bustop_100 " ,
mout_bus_bustop_100_p ,
MUX_SEL_TOP_BUS , 8 , 1 ) ,
MUX ( TOP_MOUT_BUS2_BUSTOP_400 , " mout_bus2_bustop_400 " ,
mout_bus_bustop_400_p ,
MUX_SEL_TOP_BUS , 12 , 1 ) ,
MUX ( TOP_MOUT_BUS3_BUSTOP_400 , " mout_bus3_bustop_400 " ,
mout_bus_bustop_400_p ,
MUX_SEL_TOP_BUS , 16 , 1 ) ,
MUX ( TOP_MOUT_BUS3_BUSTOP_100 , " mout_bus3_bustop_100 " ,
mout_bus_bustop_100_p ,
MUX_SEL_TOP_BUS , 20 , 1 ) ,
MUX ( TOP_MOUT_BUS4_BUSTOP_400 , " mout_bus4_bustop_400 " ,
mout_bus_bustop_400_p ,
MUX_SEL_TOP_BUS , 24 , 1 ) ,
MUX ( TOP_MOUT_BUS4_BUSTOP_100 , " mout_bus4_bustop_100 " ,
mout_bus_bustop_100_p ,
MUX_SEL_TOP_BUS , 28 , 1 ) ,
MUX ( TOP_MOUT_SCLK_FSYS_USB , " mout_sclk_fsys_usb " ,
mout_sclk_fsys_usb_p ,
MUX_SEL_TOP_FSYS , 0 , 1 ) ,
MUX ( TOP_MOUT_SCLK_FSYS_MMC2_SDCLKIN_A , " mout_sclk_fsys_mmc2_sdclkin_a " ,
mout_sclk_fsys_mmc_sdclkin_a_p ,
MUX_SEL_TOP_FSYS , 4 , 1 ) ,
MUX ( TOP_MOUT_SCLK_FSYS_MMC2_SDCLKIN_B , " mout_sclk_fsys_mmc2_sdclkin_b " ,
mout_sclk_fsys_mmc2_sdclkin_b_p ,
MUX_SEL_TOP_FSYS , 8 , 1 ) ,
MUX ( TOP_MOUT_SCLK_FSYS_MMC1_SDCLKIN_A , " mout_sclk_fsys_mmc1_sdclkin_a " ,
mout_sclk_fsys_mmc_sdclkin_a_p ,
MUX_SEL_TOP_FSYS , 12 , 1 ) ,
MUX ( TOP_MOUT_SCLK_FSYS_MMC1_SDCLKIN_B , " mout_sclk_fsys_mmc1_sdclkin_b " ,
mout_sclk_fsys_mmc1_sdclkin_b_p ,
MUX_SEL_TOP_FSYS , 16 , 1 ) ,
MUX ( TOP_MOUT_SCLK_FSYS_MMC0_SDCLKIN_A , " mout_sclk_fsys_mmc0_sdclkin_a " ,
mout_sclk_fsys_mmc_sdclkin_a_p ,
MUX_SEL_TOP_FSYS , 20 , 1 ) ,
MUX ( TOP_MOUT_SCLK_FSYS_MMC0_SDCLKIN_B , " mout_sclk_fsys_mmc0_sdclkin_b " ,
mout_sclk_fsys_mmc0_sdclkin_b_p ,
MUX_SEL_TOP_FSYS , 24 , 1 ) ,
MUX ( TOP_MOUT_ISP1_MEDIA_400 , " mout_isp1_media_400 " ,
mout_isp1_media_400_p ,
MUX_SEL_TOP_ISP10 , 4 , 1 ) ,
MUX ( TOP_MOUT_ACLK_ISP1_400 , " mout_aclk_isp1_400 " , mout_aclk_isp1_400_p ,
MUX_SEL_TOP_ISP10 , 8 , 1 ) ,
MUX ( TOP_MOUT_ISP1_MEDIA_266 , " mout_isp1_media_266 " ,
mout_isp1_media_266_p ,
MUX_SEL_TOP_ISP10 , 16 , 1 ) ,
MUX ( TOP_MOUT_ACLK_ISP1_266 , " mout_aclk_isp1_266 " , mout_aclk_isp1_266_p ,
MUX_SEL_TOP_ISP10 , 20 , 1 ) ,
MUX ( TOP_MOUT_SCLK_ISP1_SPI0 , " mout_sclk_isp1_spi0 " , mout_sclk_isp_spi_p ,
MUX_SEL_TOP_ISP11 , 4 , 1 ) ,
MUX ( TOP_MOUT_SCLK_ISP1_SPI1 , " mout_sclk_isp1_spi1 " , mout_sclk_isp_spi_p ,
MUX_SEL_TOP_ISP11 , 8 , 1 ) ,
MUX ( TOP_MOUT_SCLK_ISP1_UART , " mout_sclk_isp1_uart " ,
mout_sclk_isp_uart_p ,
MUX_SEL_TOP_ISP11 , 12 , 1 ) ,
MUX ( TOP_MOUT_SCLK_ISP1_SENSOR0 , " mout_sclk_isp1_sensor0 " ,
mout_sclk_isp_sensor_p ,
MUX_SEL_TOP_ISP11 , 16 , 1 ) ,
MUX ( TOP_MOUT_SCLK_ISP1_SENSOR1 , " mout_sclk_isp1_sensor1 " ,
mout_sclk_isp_sensor_p ,
MUX_SEL_TOP_ISP11 , 20 , 1 ) ,
MUX ( TOP_MOUT_SCLK_ISP1_SENSOR2 , " mout_sclk_isp1_sensor2 " ,
mout_sclk_isp_sensor_p ,
MUX_SEL_TOP_ISP11 , 24 , 1 ) ,
MUX ( TOP_MOUT_MFC_BUSTOP_333 , " mout_mfc_bustop_333 " ,
mout_mfc_bustop_333_p ,
MUX_SEL_TOP_MFC , 4 , 1 ) ,
MUX ( TOP_MOUT_ACLK_MFC_333 , " mout_aclk_mfc_333 " , mout_aclk_mfc_333_p ,
MUX_SEL_TOP_MFC , 8 , 1 ) ,
MUX ( TOP_MOUT_G2D_BUSTOP_333 , " mout_g2d_bustop_333 " ,
mout_g2d_bustop_333_p ,
MUX_SEL_TOP_G2D , 4 , 1 ) ,
MUX ( TOP_MOUT_ACLK_G2D_333 , " mout_aclk_g2d_333 " , mout_aclk_g2d_333_p ,
MUX_SEL_TOP_G2D , 8 , 1 ) ,
MUX ( TOP_MOUT_M2M_MEDIATOP_400 , " mout_m2m_mediatop_400 " ,
mout_m2m_mediatop_400_p ,
MUX_SEL_TOP_GSCL , 0 , 1 ) ,
MUX ( TOP_MOUT_ACLK_GSCL_400 , " mout_aclk_gscl_400 " ,
mout_aclk_gscl_400_p ,
MUX_SEL_TOP_GSCL , 4 , 1 ) ,
MUX ( TOP_MOUT_GSCL_BUSTOP_333 , " mout_gscl_bustop_333 " ,
mout_gscl_bustop_333_p ,
MUX_SEL_TOP_GSCL , 8 , 1 ) ,
MUX ( TOP_MOUT_ACLK_GSCL_333 , " mout_aclk_gscl_333 " ,
mout_aclk_gscl_333_p ,
MUX_SEL_TOP_GSCL , 12 , 1 ) ,
MUX ( TOP_MOUT_GSCL_BUSTOP_FIMC , " mout_gscl_bustop_fimc " ,
mout_gscl_bustop_fimc_p ,
MUX_SEL_TOP_GSCL , 16 , 1 ) ,
MUX ( TOP_MOUT_ACLK_GSCL_FIMC , " mout_aclk_gscl_fimc " ,
mout_aclk_gscl_fimc_p ,
MUX_SEL_TOP_GSCL , 20 , 1 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_div_clock top_div_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
DIV ( TOP_DOUT_ACLK_G2D_333 , " dout_aclk_g2d_333 " , " mout_aclk_g2d_333 " ,
DIV_TOP_G2D_MFC , 0 , 3 ) ,
DIV ( TOP_DOUT_ACLK_MFC_333 , " dout_aclk_mfc_333 " , " mout_aclk_mfc_333 " ,
DIV_TOP_G2D_MFC , 4 , 3 ) ,
DIV ( TOP_DOUT_ACLK_GSCL_333 , " dout_aclk_gscl_333 " , " mout_aclk_gscl_333 " ,
DIV_TOP_GSCL_ISP0 , 0 , 3 ) ,
DIV ( TOP_DOUT_ACLK_GSCL_400 , " dout_aclk_gscl_400 " , " mout_aclk_gscl_400 " ,
DIV_TOP_GSCL_ISP0 , 4 , 3 ) ,
DIV ( TOP_DOUT_ACLK_GSCL_FIMC , " dout_aclk_gscl_fimc " ,
" mout_aclk_gscl_fimc " , DIV_TOP_GSCL_ISP0 , 8 , 3 ) ,
DIV ( TOP_DOUT_SCLK_ISP1_SENSOR0_A , " dout_sclk_isp1_sensor0_a " ,
" mout_aclk_gscl_fimc " , DIV_TOP_GSCL_ISP0 , 16 , 4 ) ,
DIV ( TOP_DOUT_SCLK_ISP1_SENSOR1_A , " dout_sclk_isp1_sensor1_a " ,
" mout_aclk_gscl_400 " , DIV_TOP_GSCL_ISP0 , 20 , 4 ) ,
DIV ( TOP_DOUT_SCLK_ISP1_SENSOR2_A , " dout_sclk_isp1_sensor2_a " ,
" mout_aclk_gscl_fimc " , DIV_TOP_GSCL_ISP0 , 24 , 4 ) ,
DIV ( TOP_DOUT_ACLK_ISP1_266 , " dout_aclk_isp1_266 " , " mout_aclk_isp1_266 " ,
DIV_TOP_ISP10 , 0 , 3 ) ,
DIV ( TOP_DOUT_ACLK_ISP1_400 , " dout_aclk_isp1_400 " , " mout_aclk_isp1_400 " ,
DIV_TOP_ISP10 , 4 , 3 ) ,
DIV ( TOP_DOUT_SCLK_ISP1_SPI0_A , " dout_sclk_isp1_spi0_a " ,
" mout_sclk_isp1_spi0 " , DIV_TOP_ISP10 , 12 , 4 ) ,
DIV ( TOP_DOUT_SCLK_ISP1_SPI0_B , " dout_sclk_isp1_spi0_b " ,
" dout_sclk_isp1_spi0_a " , DIV_TOP_ISP10 , 16 , 8 ) ,
DIV ( TOP_DOUT_SCLK_ISP1_SPI1_A , " dout_sclk_isp1_spi1_a " ,
" mout_sclk_isp1_spi1 " , DIV_TOP_ISP11 , 0 , 4 ) ,
DIV ( TOP_DOUT_SCLK_ISP1_SPI1_B , " dout_sclk_isp1_spi1_b " ,
" dout_sclk_isp1_spi1_a " , DIV_TOP_ISP11 , 4 , 8 ) ,
DIV ( TOP_DOUT_SCLK_ISP1_UART , " dout_sclk_isp1_uart " ,
" mout_sclk_isp1_uart " , DIV_TOP_ISP11 , 12 , 4 ) ,
DIV ( TOP_DOUT_SCLK_ISP1_SENSOR0_B , " dout_sclk_isp1_sensor0_b " ,
" dout_sclk_isp1_sensor0_a " , DIV_TOP_ISP11 , 16 , 4 ) ,
DIV ( TOP_DOUT_SCLK_ISP1_SENSOR1_B , " dout_sclk_isp1_sensor1_b " ,
" dout_sclk_isp1_sensor1_a " , DIV_TOP_ISP11 , 20 , 4 ) ,
DIV ( TOP_DOUT_SCLK_ISP1_SENSOR2_B , " dout_sclk_isp1_sensor2_b " ,
" dout_sclk_isp1_sensor2_a " , DIV_TOP_ISP11 , 24 , 4 ) ,
DIV ( TOP_DOUTTOP__SCLK_HPM_TARGETCLK , " dout_sclk_hpm_targetclk " ,
" mout_bustop_pll_user " , DIV_TOP_HPM , 0 , 3 ) ,
DIV ( TOP_DOUT_ACLK_DISP_333 , " dout_aclk_disp_333 " , " mout_aclk_disp_333 " ,
DIV_TOP_DISP , 0 , 3 ) ,
DIV ( TOP_DOUT_ACLK_DISP_222 , " dout_aclk_disp_222 " , " mout_aclk_disp_222 " ,
DIV_TOP_DISP , 4 , 3 ) ,
DIV ( TOP_DOUT_SCLK_DISP_PIXEL , " dout_sclk_disp_pixel " ,
" mout_sclk_disp_pixel " , DIV_TOP_DISP , 8 , 3 ) ,
DIV ( TOP_DOUT_ACLK_BUS1_400 , " dout_aclk_bus1_400 " ,
" mout_bus1_bustop_400 " , DIV_TOP_BUS , 0 , 3 ) ,
DIV ( TOP_DOUT_ACLK_BUS1_100 , " dout_aclk_bus1_100 " ,
" mout_bus1_bustop_100 " , DIV_TOP_BUS , 4 , 4 ) ,
DIV ( TOP_DOUT_ACLK_BUS2_400 , " dout_aclk_bus2_400 " ,
" mout_bus2_bustop_400 " , DIV_TOP_BUS , 8 , 3 ) ,
DIV ( TOP_DOUT_ACLK_BUS2_100 , " dout_aclk_bus2_100 " ,
" mout_bus2_bustop_100 " , DIV_TOP_BUS , 12 , 4 ) ,
DIV ( TOP_DOUT_ACLK_BUS3_400 , " dout_aclk_bus3_400 " ,
" mout_bus3_bustop_400 " , DIV_TOP_BUS , 16 , 3 ) ,
DIV ( TOP_DOUT_ACLK_BUS3_100 , " dout_aclk_bus3_100 " ,
" mout_bus3_bustop_100 " , DIV_TOP_BUS , 20 , 4 ) ,
DIV ( TOP_DOUT_ACLK_BUS4_400 , " dout_aclk_bus4_400 " ,
" mout_bus4_bustop_400 " , DIV_TOP_BUS , 24 , 3 ) ,
DIV ( TOP_DOUT_ACLK_BUS4_100 , " dout_aclk_bus4_100 " ,
" mout_bus4_bustop_100 " , DIV_TOP_BUS , 28 , 4 ) ,
DIV ( TOP_DOUT_SCLK_PERI_SPI0_A , " dout_sclk_peri_spi0_a " ,
" mout_sclk_peri_spi0_clk " , DIV_TOP_PERI0 , 4 , 4 ) ,
DIV ( TOP_DOUT_SCLK_PERI_SPI0_B , " dout_sclk_peri_spi0_b " ,
" dout_sclk_peri_spi0_a " , DIV_TOP_PERI0 , 8 , 8 ) ,
DIV ( TOP_DOUT_SCLK_PERI_SPI1_A , " dout_sclk_peri_spi1_a " ,
" mout_sclk_peri_spi1_clk " , DIV_TOP_PERI0 , 16 , 4 ) ,
DIV ( TOP_DOUT_SCLK_PERI_SPI1_B , " dout_sclk_peri_spi1_b " ,
" dout_sclk_peri_spi1_a " , DIV_TOP_PERI0 , 20 , 8 ) ,
DIV ( TOP_DOUT_SCLK_PERI_SPI2_A , " dout_sclk_peri_spi2_a " ,
" mout_sclk_peri_spi2_clk " , DIV_TOP_PERI1 , 0 , 4 ) ,
DIV ( TOP_DOUT_SCLK_PERI_SPI2_B , " dout_sclk_peri_spi2_b " ,
" dout_sclk_peri_spi2_a " , DIV_TOP_PERI1 , 4 , 8 ) ,
DIV ( TOP_DOUT_SCLK_PERI_UART1 , " dout_sclk_peri_uart1 " ,
" mout_sclk_peri_uart1_uclk " , DIV_TOP_PERI1 , 16 , 4 ) ,
DIV ( TOP_DOUT_SCLK_PERI_UART2 , " dout_sclk_peri_uart2 " ,
" mout_sclk_peri_uart2_uclk " , DIV_TOP_PERI1 , 20 , 4 ) ,
DIV ( TOP_DOUT_SCLK_PERI_UART0 , " dout_sclk_peri_uart0 " ,
" mout_sclk_peri_uart0_uclk " , DIV_TOP_PERI1 , 24 , 4 ) ,
DIV ( TOP_DOUT_ACLK_PERI_66 , " dout_aclk_peri_66 " , " mout_bustop_pll_user " ,
DIV_TOP_PERI2 , 20 , 4 ) ,
DIV ( TOP_DOUT_ACLK_PERI_AUD , " dout_aclk_peri_aud " ,
" mout_audtop_pll_user " , DIV_TOP_PERI2 , 24 , 3 ) ,
DIV ( TOP_DOUT_ACLK_FSYS_200 , " dout_aclk_fsys_200 " ,
" mout_bustop_pll_user " , DIV_TOP_FSYS0 , 0 , 3 ) ,
DIV ( TOP_DOUT_SCLK_FSYS_USBDRD30_SUSPEND_CLK ,
" dout_sclk_fsys_usbdrd30_suspend_clk " ,
" mout_sclk_fsys_usb " , DIV_TOP_FSYS0 , 4 , 4 ) ,
DIV ( TOP_DOUT_SCLK_FSYS_MMC0_SDCLKIN_A , " dout_sclk_fsys_mmc0_sdclkin_a " ,
" mout_sclk_fsys_mmc0_sdclkin_b " ,
DIV_TOP_FSYS0 , 12 , 4 ) ,
DIV ( TOP_DOUT_SCLK_FSYS_MMC0_SDCLKIN_B , " dout_sclk_fsys_mmc0_sdclkin_b " ,
" dout_sclk_fsys_mmc0_sdclkin_a " ,
DIV_TOP_FSYS0 , 16 , 8 ) ,
DIV ( TOP_DOUT_SCLK_FSYS_MMC1_SDCLKIN_A , " dout_sclk_fsys_mmc1_sdclkin_a " ,
" mout_sclk_fsys_mmc1_sdclkin_b " ,
DIV_TOP_FSYS1 , 0 , 4 ) ,
DIV ( TOP_DOUT_SCLK_FSYS_MMC1_SDCLKIN_B , " dout_sclk_fsys_mmc1_sdclkin_b " ,
" dout_sclk_fsys_mmc1_sdclkin_a " ,
DIV_TOP_FSYS1 , 4 , 8 ) ,
DIV ( TOP_DOUT_SCLK_FSYS_MMC2_SDCLKIN_A , " dout_sclk_fsys_mmc2_sdclkin_a " ,
" mout_sclk_fsys_mmc2_sdclkin_b " ,
DIV_TOP_FSYS1 , 12 , 4 ) ,
DIV ( TOP_DOUT_SCLK_FSYS_MMC2_SDCLKIN_B , " dout_sclk_fsys_mmc2_sdclkin_b " ,
" dout_sclk_fsys_mmc2_sdclkin_a " ,
DIV_TOP_FSYS1 , 16 , 8 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_gate_clock top_gate_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
GATE ( TOP_SCLK_MMC0 , " sclk_fsys_mmc0_sdclkin " ,
" dout_sclk_fsys_mmc0_sdclkin_b " ,
EN_SCLK_TOP , 7 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( TOP_SCLK_MMC1 , " sclk_fsys_mmc1_sdclkin " ,
" dout_sclk_fsys_mmc1_sdclkin_b " ,
EN_SCLK_TOP , 8 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( TOP_SCLK_MMC2 , " sclk_fsys_mmc2_sdclkin " ,
" dout_sclk_fsys_mmc2_sdclkin_b " ,
EN_SCLK_TOP , 9 , CLK_SET_RATE_PARENT , 0 ) ,
GATE ( TOP_SCLK_FIMD1 , " sclk_disp_pixel " , " dout_sclk_disp_pixel " ,
EN_ACLK_TOP , 10 , CLK_IGNORE_UNUSED |
CLK_SET_RATE_PARENT , 0 ) ,
} ;
2016-05-11 14:02:05 +02:00
static const struct samsung_pll_clock top_pll_clks [ ] __initconst = {
2014-03-24 02:15:54 +05:30
PLL ( pll_2550xx , TOP_FOUT_DISP_PLL , " fout_disp_pll " , " fin_pll " ,
DISP_PLL_LOCK , DISP_PLL_CON0 ,
pll2550_24mhz_tbl ) ,
PLL ( pll_2650xx , TOP_FOUT_AUD_PLL , " fout_aud_pll " , " fin_pll " ,
AUD_PLL_LOCK , AUD_PLL_CON0 ,
pll2650_24mhz_tbl ) ,
} ;
2016-08-22 11:49:44 +09:00
static const struct samsung_cmu_info top_cmu __initconst = {
. pll_clks = top_pll_clks ,
. nr_pll_clks = ARRAY_SIZE ( top_pll_clks ) ,
. mux_clks = top_mux_clks ,
. nr_mux_clks = ARRAY_SIZE ( top_mux_clks ) ,
. div_clks = top_div_clks ,
. nr_div_clks = ARRAY_SIZE ( top_div_clks ) ,
. gate_clks = top_gate_clks ,
. nr_gate_clks = ARRAY_SIZE ( top_gate_clks ) ,
. fixed_clks = fixed_rate_clks ,
. nr_fixed_clks = ARRAY_SIZE ( fixed_rate_clks ) ,
. nr_clk_ids = TOP_NR_CLK ,
. clk_regs = top_clk_regs ,
. nr_clk_regs = ARRAY_SIZE ( top_clk_regs ) ,
} ;
2014-03-24 02:15:54 +05:30
static void __init exynos5260_clk_top_init ( struct device_node * np )
{
2016-08-22 11:49:44 +09:00
samsung_cmu_register_one ( np , & top_cmu ) ;
2014-03-24 02:15:54 +05:30
}
CLK_OF_DECLARE ( exynos5260_clk_top , " samsung,exynos5260-clock-top " ,
exynos5260_clk_top_init ) ;