162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Ingenic JZ4755 SoC CGU driver 462306a36Sopenharmony_ci * Heavily based on JZ4725b CGU driver 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) 2022 Siarhei Volkau 762306a36Sopenharmony_ci * Author: Siarhei Volkau <lis8215@gmail.com> 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include <linux/clk-provider.h> 1162306a36Sopenharmony_ci#include <linux/delay.h> 1262306a36Sopenharmony_ci#include <linux/of.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include <dt-bindings/clock/ingenic,jz4755-cgu.h> 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include "cgu.h" 1762306a36Sopenharmony_ci#include "pm.h" 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci/* CGU register offsets */ 2062306a36Sopenharmony_ci#define CGU_REG_CPCCR 0x00 2162306a36Sopenharmony_ci#define CGU_REG_CPPCR 0x10 2262306a36Sopenharmony_ci#define CGU_REG_CLKGR 0x20 2362306a36Sopenharmony_ci#define CGU_REG_OPCR 0x24 2462306a36Sopenharmony_ci#define CGU_REG_I2SCDR 0x60 2562306a36Sopenharmony_ci#define CGU_REG_LPCDR 0x64 2662306a36Sopenharmony_ci#define CGU_REG_MSCCDR 0x68 2762306a36Sopenharmony_ci#define CGU_REG_SSICDR 0x74 2862306a36Sopenharmony_ci#define CGU_REG_CIMCDR 0x7C 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cistatic struct ingenic_cgu *cgu; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_cistatic const s8 pll_od_encoding[4] = { 3362306a36Sopenharmony_ci 0x0, 0x1, -1, 0x3, 3462306a36Sopenharmony_ci}; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_cistatic const u8 jz4755_cgu_cpccr_div_table[] = { 3762306a36Sopenharmony_ci 1, 2, 3, 4, 6, 8, 3862306a36Sopenharmony_ci}; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cistatic const u8 jz4755_cgu_pll_half_div_table[] = { 4162306a36Sopenharmony_ci 2, 1, 4262306a36Sopenharmony_ci}; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_cistatic const struct ingenic_cgu_clk_info jz4755_cgu_clocks[] = { 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci /* External clocks */ 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci [JZ4755_CLK_EXT] = { "ext", CGU_CLK_EXT }, 4962306a36Sopenharmony_ci [JZ4755_CLK_OSC32K] = { "osc32k", CGU_CLK_EXT }, 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci [JZ4755_CLK_PLL] = { 5262306a36Sopenharmony_ci "pll", CGU_CLK_PLL, 5362306a36Sopenharmony_ci .parents = { JZ4755_CLK_EXT, }, 5462306a36Sopenharmony_ci .pll = { 5562306a36Sopenharmony_ci .reg = CGU_REG_CPPCR, 5662306a36Sopenharmony_ci .rate_multiplier = 1, 5762306a36Sopenharmony_ci .m_shift = 23, 5862306a36Sopenharmony_ci .m_bits = 9, 5962306a36Sopenharmony_ci .m_offset = 2, 6062306a36Sopenharmony_ci .n_shift = 18, 6162306a36Sopenharmony_ci .n_bits = 5, 6262306a36Sopenharmony_ci .n_offset = 2, 6362306a36Sopenharmony_ci .od_shift = 16, 6462306a36Sopenharmony_ci .od_bits = 2, 6562306a36Sopenharmony_ci .od_max = 4, 6662306a36Sopenharmony_ci .od_encoding = pll_od_encoding, 6762306a36Sopenharmony_ci .stable_bit = 10, 6862306a36Sopenharmony_ci .bypass_reg = CGU_REG_CPPCR, 6962306a36Sopenharmony_ci .bypass_bit = 9, 7062306a36Sopenharmony_ci .enable_bit = 8, 7162306a36Sopenharmony_ci }, 7262306a36Sopenharmony_ci }, 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci /* Muxes & dividers */ 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci [JZ4755_CLK_PLL_HALF] = { 7762306a36Sopenharmony_ci "pll half", CGU_CLK_DIV, 7862306a36Sopenharmony_ci .parents = { JZ4755_CLK_PLL, }, 7962306a36Sopenharmony_ci .div = { 8062306a36Sopenharmony_ci CGU_REG_CPCCR, 21, 1, 1, -1, -1, -1, 0, 8162306a36Sopenharmony_ci jz4755_cgu_pll_half_div_table, 8262306a36Sopenharmony_ci }, 8362306a36Sopenharmony_ci }, 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci [JZ4755_CLK_EXT_HALF] = { 8662306a36Sopenharmony_ci "ext half", CGU_CLK_DIV, 8762306a36Sopenharmony_ci .parents = { JZ4755_CLK_EXT, }, 8862306a36Sopenharmony_ci .div = { 8962306a36Sopenharmony_ci CGU_REG_CPCCR, 30, 1, 1, -1, -1, -1, 0, 9062306a36Sopenharmony_ci NULL, 9162306a36Sopenharmony_ci }, 9262306a36Sopenharmony_ci }, 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci [JZ4755_CLK_CCLK] = { 9562306a36Sopenharmony_ci "cclk", CGU_CLK_DIV, 9662306a36Sopenharmony_ci .parents = { JZ4755_CLK_PLL, }, 9762306a36Sopenharmony_ci .div = { 9862306a36Sopenharmony_ci CGU_REG_CPCCR, 0, 1, 4, 22, -1, -1, 0, 9962306a36Sopenharmony_ci jz4755_cgu_cpccr_div_table, 10062306a36Sopenharmony_ci }, 10162306a36Sopenharmony_ci }, 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci [JZ4755_CLK_H0CLK] = { 10462306a36Sopenharmony_ci "hclk", CGU_CLK_DIV, 10562306a36Sopenharmony_ci .parents = { JZ4755_CLK_PLL, }, 10662306a36Sopenharmony_ci .div = { 10762306a36Sopenharmony_ci CGU_REG_CPCCR, 4, 1, 4, 22, -1, -1, 0, 10862306a36Sopenharmony_ci jz4755_cgu_cpccr_div_table, 10962306a36Sopenharmony_ci }, 11062306a36Sopenharmony_ci }, 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci [JZ4755_CLK_PCLK] = { 11362306a36Sopenharmony_ci "pclk", CGU_CLK_DIV, 11462306a36Sopenharmony_ci .parents = { JZ4755_CLK_PLL, }, 11562306a36Sopenharmony_ci .div = { 11662306a36Sopenharmony_ci CGU_REG_CPCCR, 8, 1, 4, 22, -1, -1, 0, 11762306a36Sopenharmony_ci jz4755_cgu_cpccr_div_table, 11862306a36Sopenharmony_ci }, 11962306a36Sopenharmony_ci }, 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci [JZ4755_CLK_MCLK] = { 12262306a36Sopenharmony_ci "mclk", CGU_CLK_DIV, 12362306a36Sopenharmony_ci .parents = { JZ4755_CLK_PLL, }, 12462306a36Sopenharmony_ci .div = { 12562306a36Sopenharmony_ci CGU_REG_CPCCR, 12, 1, 4, 22, -1, -1, 0, 12662306a36Sopenharmony_ci jz4755_cgu_cpccr_div_table, 12762306a36Sopenharmony_ci }, 12862306a36Sopenharmony_ci }, 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci [JZ4755_CLK_H1CLK] = { 13162306a36Sopenharmony_ci "h1clk", CGU_CLK_DIV, 13262306a36Sopenharmony_ci .parents = { JZ4755_CLK_PLL, }, 13362306a36Sopenharmony_ci .div = { 13462306a36Sopenharmony_ci CGU_REG_CPCCR, 16, 1, 4, 22, -1, -1, 0, 13562306a36Sopenharmony_ci jz4755_cgu_cpccr_div_table, 13662306a36Sopenharmony_ci }, 13762306a36Sopenharmony_ci }, 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ci [JZ4755_CLK_UDC] = { 14062306a36Sopenharmony_ci "udc", CGU_CLK_MUX | CGU_CLK_DIV | CGU_CLK_GATE, 14162306a36Sopenharmony_ci .parents = { JZ4755_CLK_EXT_HALF, JZ4755_CLK_PLL_HALF, }, 14262306a36Sopenharmony_ci .mux = { CGU_REG_CPCCR, 29, 1 }, 14362306a36Sopenharmony_ci .div = { CGU_REG_CPCCR, 23, 1, 6, -1, -1, -1 }, 14462306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 10 }, 14562306a36Sopenharmony_ci }, 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ci [JZ4755_CLK_LCD] = { 14862306a36Sopenharmony_ci "lcd", CGU_CLK_DIV | CGU_CLK_GATE, 14962306a36Sopenharmony_ci .parents = { JZ4755_CLK_PLL_HALF, }, 15062306a36Sopenharmony_ci .div = { CGU_REG_LPCDR, 0, 1, 11, -1, -1, -1 }, 15162306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 9 }, 15262306a36Sopenharmony_ci }, 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ci [JZ4755_CLK_MMC] = { 15562306a36Sopenharmony_ci "mmc", CGU_CLK_DIV, 15662306a36Sopenharmony_ci .parents = { JZ4755_CLK_PLL_HALF, }, 15762306a36Sopenharmony_ci .div = { CGU_REG_MSCCDR, 0, 1, 5, -1, -1, -1 }, 15862306a36Sopenharmony_ci }, 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci [JZ4755_CLK_I2S] = { 16162306a36Sopenharmony_ci "i2s", CGU_CLK_MUX | CGU_CLK_DIV, 16262306a36Sopenharmony_ci .parents = { JZ4755_CLK_EXT_HALF, JZ4755_CLK_PLL_HALF, }, 16362306a36Sopenharmony_ci .mux = { CGU_REG_CPCCR, 31, 1 }, 16462306a36Sopenharmony_ci .div = { CGU_REG_I2SCDR, 0, 1, 9, -1, -1, -1 }, 16562306a36Sopenharmony_ci }, 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_ci [JZ4755_CLK_SPI] = { 16862306a36Sopenharmony_ci "spi", CGU_CLK_DIV | CGU_CLK_GATE, 16962306a36Sopenharmony_ci .parents = { JZ4755_CLK_PLL_HALF, }, 17062306a36Sopenharmony_ci .div = { CGU_REG_SSICDR, 0, 1, 4, -1, -1, -1 }, 17162306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 4 }, 17262306a36Sopenharmony_ci }, 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ci [JZ4755_CLK_TVE] = { 17562306a36Sopenharmony_ci "tve", CGU_CLK_MUX | CGU_CLK_GATE, 17662306a36Sopenharmony_ci .parents = { JZ4755_CLK_LCD, JZ4755_CLK_EXT, }, 17762306a36Sopenharmony_ci .mux = { CGU_REG_LPCDR, 31, 1 }, 17862306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 18 }, 17962306a36Sopenharmony_ci }, 18062306a36Sopenharmony_ci 18162306a36Sopenharmony_ci [JZ4755_CLK_RTC] = { 18262306a36Sopenharmony_ci "rtc", CGU_CLK_MUX | CGU_CLK_GATE, 18362306a36Sopenharmony_ci .parents = { JZ4755_CLK_EXT512, JZ4755_CLK_OSC32K, }, 18462306a36Sopenharmony_ci .mux = { CGU_REG_OPCR, 2, 1}, 18562306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 2 }, 18662306a36Sopenharmony_ci }, 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci [JZ4755_CLK_CIM] = { 18962306a36Sopenharmony_ci "cim", CGU_CLK_DIV | CGU_CLK_GATE, 19062306a36Sopenharmony_ci .parents = { JZ4755_CLK_PLL_HALF, }, 19162306a36Sopenharmony_ci .div = { CGU_REG_CIMCDR, 0, 1, 8, -1, -1, -1 }, 19262306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 8 }, 19362306a36Sopenharmony_ci }, 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ci /* Gate-only clocks */ 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ci [JZ4755_CLK_UART0] = { 19862306a36Sopenharmony_ci "uart0", CGU_CLK_GATE, 19962306a36Sopenharmony_ci .parents = { JZ4755_CLK_EXT_HALF, }, 20062306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 0 }, 20162306a36Sopenharmony_ci }, 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_ci [JZ4755_CLK_UART1] = { 20462306a36Sopenharmony_ci "uart1", CGU_CLK_GATE, 20562306a36Sopenharmony_ci .parents = { JZ4755_CLK_EXT_HALF, }, 20662306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 14 }, 20762306a36Sopenharmony_ci }, 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ci [JZ4755_CLK_UART2] = { 21062306a36Sopenharmony_ci "uart2", CGU_CLK_GATE, 21162306a36Sopenharmony_ci .parents = { JZ4755_CLK_EXT_HALF, }, 21262306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 15 }, 21362306a36Sopenharmony_ci }, 21462306a36Sopenharmony_ci 21562306a36Sopenharmony_ci [JZ4755_CLK_ADC] = { 21662306a36Sopenharmony_ci "adc", CGU_CLK_GATE, 21762306a36Sopenharmony_ci .parents = { JZ4755_CLK_EXT_HALF, }, 21862306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 7 }, 21962306a36Sopenharmony_ci }, 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_ci [JZ4755_CLK_AIC] = { 22262306a36Sopenharmony_ci "aic", CGU_CLK_GATE, 22362306a36Sopenharmony_ci .parents = { JZ4755_CLK_EXT_HALF, }, 22462306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 5 }, 22562306a36Sopenharmony_ci }, 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_ci [JZ4755_CLK_I2C] = { 22862306a36Sopenharmony_ci "i2c", CGU_CLK_GATE, 22962306a36Sopenharmony_ci .parents = { JZ4755_CLK_EXT_HALF, }, 23062306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 3 }, 23162306a36Sopenharmony_ci }, 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_ci [JZ4755_CLK_BCH] = { 23462306a36Sopenharmony_ci "bch", CGU_CLK_GATE, 23562306a36Sopenharmony_ci .parents = { JZ4755_CLK_H1CLK, }, 23662306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 11 }, 23762306a36Sopenharmony_ci }, 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_ci [JZ4755_CLK_TCU] = { 24062306a36Sopenharmony_ci "tcu", CGU_CLK_GATE, 24162306a36Sopenharmony_ci .parents = { JZ4755_CLK_EXT, }, 24262306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 1 }, 24362306a36Sopenharmony_ci }, 24462306a36Sopenharmony_ci 24562306a36Sopenharmony_ci [JZ4755_CLK_DMA] = { 24662306a36Sopenharmony_ci "dma", CGU_CLK_GATE, 24762306a36Sopenharmony_ci .parents = { JZ4755_CLK_PCLK, }, 24862306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 12 }, 24962306a36Sopenharmony_ci }, 25062306a36Sopenharmony_ci 25162306a36Sopenharmony_ci [JZ4755_CLK_MMC0] = { 25262306a36Sopenharmony_ci "mmc0", CGU_CLK_GATE, 25362306a36Sopenharmony_ci .parents = { JZ4755_CLK_MMC, }, 25462306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 6 }, 25562306a36Sopenharmony_ci }, 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_ci [JZ4755_CLK_MMC1] = { 25862306a36Sopenharmony_ci "mmc1", CGU_CLK_GATE, 25962306a36Sopenharmony_ci .parents = { JZ4755_CLK_MMC, }, 26062306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 16 }, 26162306a36Sopenharmony_ci }, 26262306a36Sopenharmony_ci 26362306a36Sopenharmony_ci [JZ4755_CLK_AUX_CPU] = { 26462306a36Sopenharmony_ci "aux_cpu", CGU_CLK_GATE, 26562306a36Sopenharmony_ci .parents = { JZ4755_CLK_H1CLK, }, 26662306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 24 }, 26762306a36Sopenharmony_ci }, 26862306a36Sopenharmony_ci 26962306a36Sopenharmony_ci [JZ4755_CLK_AHB1] = { 27062306a36Sopenharmony_ci "ahb1", CGU_CLK_GATE, 27162306a36Sopenharmony_ci .parents = { JZ4755_CLK_H1CLK, }, 27262306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 23 }, 27362306a36Sopenharmony_ci }, 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_ci [JZ4755_CLK_IDCT] = { 27662306a36Sopenharmony_ci "idct", CGU_CLK_GATE, 27762306a36Sopenharmony_ci .parents = { JZ4755_CLK_H1CLK, }, 27862306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 22 }, 27962306a36Sopenharmony_ci }, 28062306a36Sopenharmony_ci 28162306a36Sopenharmony_ci [JZ4755_CLK_DB] = { 28262306a36Sopenharmony_ci "db", CGU_CLK_GATE, 28362306a36Sopenharmony_ci .parents = { JZ4755_CLK_H1CLK, }, 28462306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 21 }, 28562306a36Sopenharmony_ci }, 28662306a36Sopenharmony_ci 28762306a36Sopenharmony_ci [JZ4755_CLK_ME] = { 28862306a36Sopenharmony_ci "me", CGU_CLK_GATE, 28962306a36Sopenharmony_ci .parents = { JZ4755_CLK_H1CLK, }, 29062306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 20 }, 29162306a36Sopenharmony_ci }, 29262306a36Sopenharmony_ci 29362306a36Sopenharmony_ci [JZ4755_CLK_MC] = { 29462306a36Sopenharmony_ci "mc", CGU_CLK_GATE, 29562306a36Sopenharmony_ci .parents = { JZ4755_CLK_H1CLK, }, 29662306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 19 }, 29762306a36Sopenharmony_ci }, 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_ci [JZ4755_CLK_TSSI] = { 30062306a36Sopenharmony_ci "tssi", CGU_CLK_GATE, 30162306a36Sopenharmony_ci .parents = { JZ4755_CLK_EXT_HALF/* not sure */, }, 30262306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 17 }, 30362306a36Sopenharmony_ci }, 30462306a36Sopenharmony_ci 30562306a36Sopenharmony_ci [JZ4755_CLK_IPU] = { 30662306a36Sopenharmony_ci "ipu", CGU_CLK_GATE, 30762306a36Sopenharmony_ci .parents = { JZ4755_CLK_PLL_HALF/* not sure */, }, 30862306a36Sopenharmony_ci .gate = { CGU_REG_CLKGR, 13 }, 30962306a36Sopenharmony_ci }, 31062306a36Sopenharmony_ci 31162306a36Sopenharmony_ci [JZ4755_CLK_EXT512] = { 31262306a36Sopenharmony_ci "ext/512", CGU_CLK_FIXDIV, 31362306a36Sopenharmony_ci .parents = { JZ4755_CLK_EXT, }, 31462306a36Sopenharmony_ci 31562306a36Sopenharmony_ci .fixdiv = { 512 }, 31662306a36Sopenharmony_ci }, 31762306a36Sopenharmony_ci 31862306a36Sopenharmony_ci [JZ4755_CLK_UDC_PHY] = { 31962306a36Sopenharmony_ci "udc_phy", CGU_CLK_GATE, 32062306a36Sopenharmony_ci .parents = { JZ4755_CLK_EXT_HALF, }, 32162306a36Sopenharmony_ci .gate = { CGU_REG_OPCR, 6, true }, 32262306a36Sopenharmony_ci }, 32362306a36Sopenharmony_ci}; 32462306a36Sopenharmony_ci 32562306a36Sopenharmony_cistatic void __init jz4755_cgu_init(struct device_node *np) 32662306a36Sopenharmony_ci{ 32762306a36Sopenharmony_ci int retval; 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_ci cgu = ingenic_cgu_new(jz4755_cgu_clocks, 33062306a36Sopenharmony_ci ARRAY_SIZE(jz4755_cgu_clocks), np); 33162306a36Sopenharmony_ci if (!cgu) { 33262306a36Sopenharmony_ci pr_err("%s: failed to initialise CGU\n", __func__); 33362306a36Sopenharmony_ci return; 33462306a36Sopenharmony_ci } 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_ci retval = ingenic_cgu_register_clocks(cgu); 33762306a36Sopenharmony_ci if (retval) 33862306a36Sopenharmony_ci pr_err("%s: failed to register CGU Clocks\n", __func__); 33962306a36Sopenharmony_ci 34062306a36Sopenharmony_ci ingenic_cgu_register_syscore_ops(cgu); 34162306a36Sopenharmony_ci} 34262306a36Sopenharmony_ci/* 34362306a36Sopenharmony_ci * CGU has some children devices, this is useful for probing children devices 34462306a36Sopenharmony_ci * in the case where the device node is compatible with "simple-mfd". 34562306a36Sopenharmony_ci */ 34662306a36Sopenharmony_ciCLK_OF_DECLARE_DRIVER(jz4755_cgu, "ingenic,jz4755-cgu", jz4755_cgu_init); 347