14c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie/* 24c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie * mmp2 clock framework source file 34c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie * 44c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie * Copyright (C) 2012 Marvell 54c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie * Chao Xie <xiechao.mail@gmail.com> 64c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie * 74c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie * This file is licensed under the terms of the GNU General Public 84c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie * License version 2. This program is licensed "as is" without any 94c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie * warranty of any kind, whether express or implied. 104c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie */ 114c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 124c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#include <linux/module.h> 134c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#include <linux/kernel.h> 144c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#include <linux/spinlock.h> 154c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#include <linux/io.h> 164c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#include <linux/delay.h> 174c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#include <linux/err.h> 184c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 194c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#include <mach/addr-map.h> 204c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 214c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#include "clk.h" 224c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 234c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_RTC 0x0 244c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_TWSI0 0x4 254c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_TWSI1 0x8 264c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_TWSI2 0xc 274c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_TWSI3 0x10 284c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_TWSI4 0x7c 294c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_TWSI5 0x80 304c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_KPC 0x18 314c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_UART0 0x2c 324c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_UART1 0x30 334c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_UART2 0x34 344c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_UART3 0x88 354c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_GPIO 0x38 364c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_PWM0 0x3c 374c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_PWM1 0x40 384c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_PWM2 0x44 394c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_PWM3 0x48 404c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_SSP0 0x50 414c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_SSP1 0x54 424c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_SSP2 0x58 434c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APBC_SSP3 0x5c 444c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APMU_SDH0 0x54 454c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APMU_SDH1 0x58 464c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APMU_SDH2 0xe8 474c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APMU_SDH3 0xec 484c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APMU_USB 0x5c 494c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APMU_DISP0 0x4c 504c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APMU_DISP1 0x110 514c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APMU_CCIC0 0x50 524c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define APMU_CCIC1 0xf4 534c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie#define MPMU_UART_PLL 0x14 544c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 554c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xiestatic DEFINE_SPINLOCK(clk_lock); 564c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 574c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xiestatic struct clk_factor_masks uart_factor_masks = { 584c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie .factor = 2, 594c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie .num_mask = 0x1fff, 604c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie .den_mask = 0x1fff, 614c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie .num_shift = 16, 624c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie .den_shift = 0, 634c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie}; 644c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 654c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xiestatic struct clk_factor_tbl uart_factor_tbl[] = { 664c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie {.num = 14634, .den = 2165}, /*14.745MHZ */ 674c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie {.num = 3521, .den = 689}, /*19.23MHZ */ 684c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie {.num = 9679, .den = 5728}, /*58.9824MHZ */ 694c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie {.num = 15850, .den = 9451}, /*59.429MHZ */ 704c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie}; 714c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 724c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xiestatic const char *uart_parent[] = {"uart_pll", "vctcxo"}; 734c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xiestatic const char *ssp_parent[] = {"vctcxo_4", "vctcxo_2", "vctcxo", "pll1_16"}; 744c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xiestatic const char *sdh_parent[] = {"pll1_4", "pll2", "usb_pll", "pll1"}; 754c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xiestatic const char *disp_parent[] = {"pll1", "pll1_16", "pll2", "vctcxo"}; 764c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xiestatic const char *ccic_parent[] = {"pll1_2", "pll1_16", "vctcxo"}; 774c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 784c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xievoid __init mmp2_clk_init(void) 794c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie{ 804c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie struct clk *clk; 814c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie struct clk *vctcxo; 824c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie void __iomem *mpmu_base; 834c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie void __iomem *apmu_base; 844c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie void __iomem *apbc_base; 854c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 864c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie mpmu_base = ioremap(APB_PHYS_BASE + 0x50000, SZ_4K); 874c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie if (mpmu_base == NULL) { 884c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie pr_err("error to ioremap MPMU base\n"); 894c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie return; 904c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie } 914c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 924c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base = ioremap(AXI_PHYS_BASE + 0x82800, SZ_4K); 934c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie if (apmu_base == NULL) { 944c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie pr_err("error to ioremap APMU base\n"); 954c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie return; 964c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie } 974c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 984c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base = ioremap(APB_PHYS_BASE + 0x15000, SZ_4K); 994c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie if (apbc_base == NULL) { 1004c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie pr_err("error to ioremap APBC base\n"); 1014c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie return; 1024c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie } 1034c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1044c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_rate(NULL, "clk32", NULL, CLK_IS_ROOT, 3200); 1054c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "clk32", NULL); 1064c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1074c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie vctcxo = clk_register_fixed_rate(NULL, "vctcxo", NULL, CLK_IS_ROOT, 1084c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 26000000); 1094c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(vctcxo, "vctcxo", NULL); 1104c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1114c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_rate(NULL, "pll1", NULL, CLK_IS_ROOT, 1124c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 800000000); 1134c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll1", NULL); 1144c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1154c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_rate(NULL, "usb_pll", NULL, CLK_IS_ROOT, 1164c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 480000000); 1174c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "usb_pll", NULL); 1184c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1194c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_rate(NULL, "pll2", NULL, CLK_IS_ROOT, 1204c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 960000000); 1214c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll2", NULL); 1224c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1234c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "pll1_2", "pll1", 1244c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 2); 1254c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll1_2", NULL); 1264c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1274c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "pll1_4", "pll1_2", 1284c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 2); 1294c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll1_4", NULL); 1304c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1314c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "pll1_8", "pll1_4", 1324c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 2); 1334c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll1_8", NULL); 1344c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1354c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "pll1_16", "pll1_8", 1364c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 2); 1374c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll1_16", NULL); 1384c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1394c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "pll1_20", "pll1_4", 1404c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 5); 1414c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll1_20", NULL); 1424c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1434c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "pll1_3", "pll1", 1444c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 3); 1454c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll1_3", NULL); 1464c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1474c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "pll1_6", "pll1_3", 1484c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 2); 1494c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll1_6", NULL); 1504c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1514c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "pll1_12", "pll1_6", 1524c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 2); 1534c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll1_12", NULL); 1544c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1554c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "pll2_2", "pll2", 1564c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 2); 1574c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll2_2", NULL); 1584c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1594c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "pll2_4", "pll2_2", 1604c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 2); 1614c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll2_4", NULL); 1624c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1634c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "pll2_8", "pll2_4", 1644c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 2); 1654c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll2_8", NULL); 1664c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1674c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "pll2_16", "pll2_8", 1684c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 2); 1694c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll2_16", NULL); 1704c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1714c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "pll2_3", "pll2", 1724c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 3); 1734c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll2_3", NULL); 1744c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1754c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "pll2_6", "pll2_3", 1764c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 2); 1774c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll2_6", NULL); 1784c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1794c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "pll2_12", "pll2_6", 1804c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 2); 1814c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "pll2_12", NULL); 1824c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1834c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "vctcxo_2", "vctcxo", 1844c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 2); 1854c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "vctcxo_2", NULL); 1864c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1874c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_fixed_factor(NULL, "vctcxo_4", "vctcxo_2", 1884c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, 1, 2); 1894c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "vctcxo_4", NULL); 1904c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1914c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_factor("uart_pll", "pll1_4", 0, 1924c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie mpmu_base + MPMU_UART_PLL, 1934c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie &uart_factor_masks, uart_factor_tbl, 1944c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie ARRAY_SIZE(uart_factor_tbl)); 1954c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_set_rate(clk, 14745600); 1964c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "uart_pll", NULL); 1974c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 1984c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("twsi0", "vctcxo", 1994c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_TWSI0, 10, 0, &clk_lock); 2004c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "pxa2xx-i2c.0"); 2014c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2024c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("twsi1", "vctcxo", 2034c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_TWSI1, 10, 0, &clk_lock); 2044c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "pxa2xx-i2c.1"); 2054c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2064c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("twsi2", "vctcxo", 2074c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_TWSI2, 10, 0, &clk_lock); 2084c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "pxa2xx-i2c.2"); 2094c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2104c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("twsi3", "vctcxo", 2114c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_TWSI3, 10, 0, &clk_lock); 2124c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "pxa2xx-i2c.3"); 2134c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2144c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("twsi4", "vctcxo", 2154c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_TWSI4, 10, 0, &clk_lock); 2164c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "pxa2xx-i2c.4"); 2174c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2184c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("twsi5", "vctcxo", 2194c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_TWSI5, 10, 0, &clk_lock); 2204c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "pxa2xx-i2c.5"); 2214c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2224c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("gpio", "vctcxo", 2234c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_GPIO, 10, 0, &clk_lock); 2242cab0292285ce3180224c130d2fb1104aee44ff1Haojian Zhuang clk_register_clkdev(clk, NULL, "mmp2-gpio"); 2254c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2264c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("kpc", "clk32", 2274c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_KPC, 10, 0, &clk_lock); 2284c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "pxa27x-keypad"); 2294c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2304c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("rtc", "clk32", 2314c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_RTC, 10, 0, &clk_lock); 2324c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "mmp-rtc"); 2334c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2344c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("pwm0", "vctcxo", 2354c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_PWM0, 10, 0, &clk_lock); 2364c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "mmp2-pwm.0"); 2374c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2384c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("pwm1", "vctcxo", 2394c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_PWM1, 10, 0, &clk_lock); 2404c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "mmp2-pwm.1"); 2414c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2424c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("pwm2", "vctcxo", 2434c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_PWM2, 10, 0, &clk_lock); 2444c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "mmp2-pwm.2"); 2454c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2464c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("pwm3", "vctcxo", 2474c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_PWM3, 10, 0, &clk_lock); 2484c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "mmp2-pwm.3"); 2494c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2504c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_mux(NULL, "uart0_mux", uart_parent, 251819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan ARRAY_SIZE(uart_parent), 252819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 2534c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_UART0, 4, 3, 0, &clk_lock); 2544c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_set_parent(clk, vctcxo); 2554c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "uart_mux.0", NULL); 2564c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2574c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("uart0", "uart0_mux", 2584c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_UART0, 10, 0, &clk_lock); 2594c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "pxa2xx-uart.0"); 2604c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2614c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_mux(NULL, "uart1_mux", uart_parent, 262819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan ARRAY_SIZE(uart_parent), 263819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 2644c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_UART1, 4, 3, 0, &clk_lock); 2654c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_set_parent(clk, vctcxo); 2664c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "uart_mux.1", NULL); 2674c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2684c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("uart1", "uart1_mux", 2694c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_UART1, 10, 0, &clk_lock); 2704c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "pxa2xx-uart.1"); 2714c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2724c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_mux(NULL, "uart2_mux", uart_parent, 273819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan ARRAY_SIZE(uart_parent), 274819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 2754c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_UART2, 4, 3, 0, &clk_lock); 2764c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_set_parent(clk, vctcxo); 2774c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "uart_mux.2", NULL); 2784c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2794c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("uart2", "uart2_mux", 2804c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_UART2, 10, 0, &clk_lock); 2814c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "pxa2xx-uart.2"); 2824c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2834c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_mux(NULL, "uart3_mux", uart_parent, 284819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan ARRAY_SIZE(uart_parent), 285819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 2864c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_UART3, 4, 3, 0, &clk_lock); 2874c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_set_parent(clk, vctcxo); 2884c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "uart_mux.3", NULL); 2894c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2904c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("uart3", "uart3_mux", 2914c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_UART3, 10, 0, &clk_lock); 2924c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "pxa2xx-uart.3"); 2934c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 2944c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_mux(NULL, "ssp0_mux", ssp_parent, 295819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan ARRAY_SIZE(ssp_parent), 296819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 2974c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_SSP0, 4, 3, 0, &clk_lock); 2984c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "uart_mux.0", NULL); 2994c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3004c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("ssp0", "ssp0_mux", 3014c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_SSP0, 10, 0, &clk_lock); 3024c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "mmp-ssp.0"); 3034c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3044c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_mux(NULL, "ssp1_mux", ssp_parent, 305819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan ARRAY_SIZE(ssp_parent), 306819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 3074c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_SSP1, 4, 3, 0, &clk_lock); 3084c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "ssp_mux.1", NULL); 3094c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3104c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("ssp1", "ssp1_mux", 3114c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_SSP1, 10, 0, &clk_lock); 3124c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "mmp-ssp.1"); 3134c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3144c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_mux(NULL, "ssp2_mux", ssp_parent, 315819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan ARRAY_SIZE(ssp_parent), 316819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 3174c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_SSP2, 4, 3, 0, &clk_lock); 3184c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "ssp_mux.2", NULL); 3194c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3204c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("ssp2", "ssp2_mux", 3214c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_SSP2, 10, 0, &clk_lock); 3224c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "mmp-ssp.2"); 3234c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3244c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_mux(NULL, "ssp3_mux", ssp_parent, 325819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan ARRAY_SIZE(ssp_parent), 326819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 3274c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_SSP3, 4, 3, 0, &clk_lock); 3284c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "ssp_mux.3", NULL); 3294c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3304c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apbc("ssp3", "ssp3_mux", 3314c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apbc_base + APBC_SSP3, 10, 0, &clk_lock); 3324c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "mmp-ssp.3"); 3334c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3344c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_mux(NULL, "sdh_mux", sdh_parent, 335819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan ARRAY_SIZE(sdh_parent), 336819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 3374c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base + APMU_SDH0, 8, 2, 0, &clk_lock); 3384c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "sdh_mux", NULL); 3394c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3404c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_divider(NULL, "sdh_div", "sdh_mux", 3414c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, apmu_base + APMU_SDH0, 3424c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 10, 4, CLK_DIVIDER_ONE_BASED, &clk_lock); 3434c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "sdh_div", NULL); 3444c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3454c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apmu("sdh0", "sdh_div", apmu_base + APMU_SDH0, 3464c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 0x1b, &clk_lock); 3474c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "sdhci-pxav3.0"); 3484c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3494c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apmu("sdh1", "sdh_div", apmu_base + APMU_SDH1, 3504c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 0x1b, &clk_lock); 3514c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "sdhci-pxav3.1"); 3524c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3534c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apmu("sdh2", "sdh_div", apmu_base + APMU_SDH2, 3544c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 0x1b, &clk_lock); 3554c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "sdhci-pxav3.2"); 3564c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3574c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apmu("sdh3", "sdh_div", apmu_base + APMU_SDH3, 3584c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 0x1b, &clk_lock); 3594c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "sdhci-pxav3.3"); 3604c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3614c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apmu("usb", "usb_pll", apmu_base + APMU_USB, 3624c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 0x9, &clk_lock); 3634c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "usb_clk", NULL); 3644c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3654c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_mux(NULL, "disp0_mux", disp_parent, 366819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan ARRAY_SIZE(disp_parent), 367819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 3684c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base + APMU_DISP0, 6, 2, 0, &clk_lock); 3694c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "disp_mux.0", NULL); 3704c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3714c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_divider(NULL, "disp0_div", "disp0_mux", 3724c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, apmu_base + APMU_DISP0, 3734c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 8, 4, CLK_DIVIDER_ONE_BASED, &clk_lock); 3744c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "disp_div.0", NULL); 3754c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3764c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apmu("disp0", "disp0_div", 3774c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base + APMU_DISP0, 0x1b, &clk_lock); 3784c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "mmp-disp.0"); 3794c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3804c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_divider(NULL, "disp0_sphy_div", "disp0_mux", 0, 3814c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base + APMU_DISP0, 15, 5, 0, &clk_lock); 3824c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "disp_sphy_div.0", NULL); 3834c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3844c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apmu("disp0_sphy", "disp0_sphy_div", 3854c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base + APMU_DISP0, 0x1024, &clk_lock); 3864c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "disp_sphy.0", NULL); 3874c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3884c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_mux(NULL, "disp1_mux", disp_parent, 389819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan ARRAY_SIZE(disp_parent), 390819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 3914c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base + APMU_DISP1, 6, 2, 0, &clk_lock); 3924c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "disp_mux.1", NULL); 3934c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3944c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_divider(NULL, "disp1_div", "disp1_mux", 3954c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, apmu_base + APMU_DISP1, 3964c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 8, 4, CLK_DIVIDER_ONE_BASED, &clk_lock); 3974c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "disp_div.1", NULL); 3984c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 3994c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apmu("disp1", "disp1_div", 4004c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base + APMU_DISP1, 0x1b, &clk_lock); 4014c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, NULL, "mmp-disp.1"); 4024c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 4034c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apmu("ccic_arbiter", "vctcxo", 4044c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base + APMU_CCIC0, 0x1800, &clk_lock); 4054c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "ccic_arbiter", NULL); 4064c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 4074c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_mux(NULL, "ccic0_mux", ccic_parent, 408819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan ARRAY_SIZE(ccic_parent), 409819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 4104c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base + APMU_CCIC0, 6, 2, 0, &clk_lock); 4114c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "ccic_mux.0", NULL); 4124c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 4134c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_divider(NULL, "ccic0_div", "ccic0_mux", 4144c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, apmu_base + APMU_CCIC0, 4154c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 17, 4, CLK_DIVIDER_ONE_BASED, &clk_lock); 4164c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "ccic_div.0", NULL); 4174c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 4184c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apmu("ccic0", "ccic0_div", 4194c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base + APMU_CCIC0, 0x1b, &clk_lock); 4204c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "fnclk", "mmp-ccic.0"); 4214c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 4224c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apmu("ccic0_phy", "ccic0_div", 4234c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base + APMU_CCIC0, 0x24, &clk_lock); 4244c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "phyclk", "mmp-ccic.0"); 4254c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 4264c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_divider(NULL, "ccic0_sphy_div", "ccic0_div", 4274c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, apmu_base + APMU_CCIC0, 4284c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 10, 5, 0, &clk_lock); 4294c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "sphyclk_div", "mmp-ccic.0"); 4304c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 4314c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apmu("ccic0_sphy", "ccic0_sphy_div", 4324c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base + APMU_CCIC0, 0x300, &clk_lock); 4334c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "sphyclk", "mmp-ccic.0"); 4344c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 4354c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_mux(NULL, "ccic1_mux", ccic_parent, 436819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan ARRAY_SIZE(ccic_parent), 437819c1de344c5b8350bffd35be9a0fa74541292d3James Hogan CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 4384c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base + APMU_CCIC1, 6, 2, 0, &clk_lock); 4394c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "ccic_mux.1", NULL); 4404c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 4414c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_divider(NULL, "ccic1_div", "ccic1_mux", 4424c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, apmu_base + APMU_CCIC1, 4434c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 16, 4, CLK_DIVIDER_ONE_BASED, &clk_lock); 4444c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "ccic_div.1", NULL); 4454c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 4464c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apmu("ccic1", "ccic1_div", 4474c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base + APMU_CCIC1, 0x1b, &clk_lock); 4484c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "fnclk", "mmp-ccic.1"); 4494c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 4504c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apmu("ccic1_phy", "ccic1_div", 4514c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base + APMU_CCIC1, 0x24, &clk_lock); 4524c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "phyclk", "mmp-ccic.1"); 4534c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 4544c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = clk_register_divider(NULL, "ccic1_sphy_div", "ccic1_div", 4554c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie CLK_SET_RATE_PARENT, apmu_base + APMU_CCIC1, 4564c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 10, 5, 0, &clk_lock); 4574c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "sphyclk_div", "mmp-ccic.1"); 4584c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie 4594c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk = mmp_clk_register_apmu("ccic1_sphy", "ccic1_sphy_div", 4604c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie apmu_base + APMU_CCIC1, 0x300, &clk_lock); 4614c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie clk_register_clkdev(clk, "sphyclk", "mmp-ccic.1"); 4624c5bca3419527f5efde68771e791dd7bee5f19b9Chao Xie} 463