in drivers/clk/rockchip/clk_rk3568.c [2317:2487]
static ulong rk3568_clk_get_rate(struct clk *clk)
{
struct rk3568_clk_priv *priv = dev_get_priv(clk->dev);
ulong rate = 0;
if (!priv->gpll_hz) {
printf("%s gpll=%lu\n", __func__, priv->gpll_hz);
return -ENOENT;
}
switch (clk->id) {
case PLL_APLL:
case ARMCLK:
rate = rockchip_pll_get_rate(&rk3568_pll_clks[APLL], priv->cru,
APLL);
break;
case PLL_CPLL:
rate = rockchip_pll_get_rate(&rk3568_pll_clks[CPLL], priv->cru,
CPLL);
break;
case PLL_GPLL:
rate = rockchip_pll_get_rate(&rk3568_pll_clks[GPLL], priv->cru,
GPLL);
break;
case PLL_NPLL:
rate = rockchip_pll_get_rate(&rk3568_pll_clks[NPLL], priv->cru,
NPLL);
break;
case PLL_VPLL:
rate = rockchip_pll_get_rate(&rk3568_pll_clks[VPLL], priv->cru,
VPLL);
break;
case PLL_DPLL:
rate = rockchip_pll_get_rate(&rk3568_pll_clks[DPLL], priv->cru,
DPLL);
break;
case ACLK_BUS:
case PCLK_BUS:
case PCLK_WDT_NS:
rate = rk3568_bus_get_clk(priv, clk->id);
break;
case ACLK_PERIMID:
case HCLK_PERIMID:
rate = rk3568_perimid_get_clk(priv, clk->id);
break;
case ACLK_TOP_HIGH:
case ACLK_TOP_LOW:
case HCLK_TOP:
case PCLK_TOP:
rate = rk3568_top_get_clk(priv, clk->id);
break;
case CLK_I2C1:
case CLK_I2C2:
case CLK_I2C3:
case CLK_I2C4:
case CLK_I2C5:
rate = rk3568_i2c_get_clk(priv, clk->id);
break;
case CLK_SPI0:
case CLK_SPI1:
case CLK_SPI2:
case CLK_SPI3:
rate = rk3568_spi_get_clk(priv, clk->id);
break;
case CLK_PWM1:
case CLK_PWM2:
case CLK_PWM3:
rate = rk3568_pwm_get_clk(priv, clk->id);
break;
case CLK_SARADC:
case CLK_TSADC_TSEN:
case CLK_TSADC:
rate = rk3568_adc_get_clk(priv, clk->id);
break;
case HCLK_SDMMC0:
case CLK_SDMMC0:
case CLK_SDMMC1:
case CLK_SDMMC2:
rate = rk3568_sdmmc_get_clk(priv, clk->id);
break;
case SCLK_SFC:
rate = rk3568_sfc_get_clk(priv);
break;
case NCLK_NANDC:
rate = rk3568_nand_get_clk(priv);
break;
case CCLK_EMMC:
rate = rk3568_emmc_get_clk(priv);
break;
case BCLK_EMMC:
rate = rk3568_emmc_get_bclk(priv);
break;
#ifndef CONFIG_SPL_BUILD
case ACLK_VOP:
rate = rk3568_aclk_vop_get_clk(priv);
break;
case DCLK_VOP0:
case DCLK_VOP1:
case DCLK_VOP2:
rate = rk3568_dclk_vop_get_clk(priv, clk->id);
break;
case SCLK_GMAC0:
case CLK_MAC0_2TOP:
case CLK_MAC0_REFOUT:
rate = rk3568_gmac_src_get_clk(priv, 0);
break;
case CLK_MAC0_OUT:
rate = rk3568_gmac_out_get_clk(priv, 0);
break;
case CLK_GMAC0_PTP_REF:
rate = rk3568_gmac_ptp_ref_get_clk(priv, 0);
break;
case SCLK_GMAC1:
case CLK_MAC1_2TOP:
case CLK_MAC1_REFOUT:
rate = rk3568_gmac_src_get_clk(priv, 1);
break;
case CLK_MAC1_OUT:
rate = rk3568_gmac_out_get_clk(priv, 1);
break;
case CLK_GMAC1_PTP_REF:
rate = rk3568_gmac_ptp_ref_get_clk(priv, 1);
break;
case DCLK_EBC:
rate = rk3568_ebc_get_clk(priv);
break;
case ACLK_RKVDEC_PRE:
case ACLK_RKVDEC:
case CLK_RKVDEC_CORE:
rate = rk3568_rkvdec_get_clk(priv, clk->id);
break;
case TCLK_WDT_NS:
rate = OSC_HZ;
break;
case SCLK_UART1:
case SCLK_UART2:
case SCLK_UART3:
case SCLK_UART4:
case SCLK_UART5:
case SCLK_UART6:
case SCLK_UART7:
case SCLK_UART8:
case SCLK_UART9:
rate = rk3568_uart_get_rate(priv, clk->id);
break;
#endif
case ACLK_SECURE_FLASH:
case ACLK_CRYPTO_NS:
case HCLK_SECURE_FLASH:
case HCLK_CRYPTO_NS:
case CLK_CRYPTO_NS_RNG:
case CLK_CRYPTO_NS_CORE:
case CLK_CRYPTO_NS_PKA:
rate = rk3568_crypto_get_rate(priv, clk->id);
break;
case CPLL_500M:
case CPLL_333M:
case CPLL_250M:
case CPLL_125M:
case CPLL_100M:
case CPLL_62P5M:
case CPLL_50M:
case CPLL_25M:
rate = rk3568_cpll_div_get_rate(priv, clk->id);
break;
default:
return -ENOENT;
}
return rate;
};