#include <linux/clk-provider.h>
#include <linux/delay.h>
#include <linux/clk.h>
#include <linux/i2c.h>
#include <linux/of.h>
#include <linux/module.h>
#include <linux/regmap.h>
#define CH_MAX …
#define RATIO_REG_SIZE …
#define DEVICE_ID …
#define DEVICE_CTRL …
#define DEVICE_CFG1 …
#define DEVICE_CFG2 …
#define GLOBAL_CFG …
#define Ratio_Add(x, nth) …
#define Ratio_Val(x, nth) …
#define Val_Ratio(x, nth) …
#define FUNC_CFG1 …
#define FUNC_CFG2 …
#define REVISION_MASK …
#define REVISION_B2_B3 …
#define REVISION_C1 …
#define PLL_UNLOCK …
#define AUXOUTDIS …
#define CLKOUTDIS …
#define RSEL(x) …
#define RSEL_MASK …
#define AUXOUTSRC(x) …
#define AUXOUTSRC_MASK …
#define ENDEV1 …
#define AUTORMOD …
#define LOCKCLK(x) …
#define LOCKCLK_MASK …
#define FRACNSRC_MASK …
#define FRACNSRC_STATIC …
#define FRACNSRC_DYNAMIC …
#define FREEZE …
#define ENDEV2 …
#define CLKSKIPEN …
#define REFCLKDIV(x) …
#define REFCLKDIV_MASK …
#define LFRATIO_MASK …
#define LFRATIO_20_12 …
#define LFRATIO_12_20 …
#define CH_SIZE_ERR(ch) …
#define hw_to_priv(_hw) …
#define priv_to_client(priv) …
#define priv_to_dev(priv) …
#define CLK_IN …
#define REF_CLK …
#define CLK_MAX …
static bool cs2000_readable_reg(struct device *dev, unsigned int reg)
{ … }
static bool cs2000_writeable_reg(struct device *dev, unsigned int reg)
{ … }
static bool cs2000_volatile_reg(struct device *dev, unsigned int reg)
{ … }
static const struct regmap_config cs2000_regmap_config = …;
struct cs2000_priv { … };
static const struct of_device_id cs2000_of_match[] = …;
MODULE_DEVICE_TABLE(of, cs2000_of_match);
static const struct i2c_device_id cs2000_id[] = …;
MODULE_DEVICE_TABLE(i2c, cs2000_id);
static int cs2000_enable_dev_config(struct cs2000_priv *priv, bool enable)
{ … }
static int cs2000_ref_clk_bound_rate(struct cs2000_priv *priv,
u32 rate_in)
{ … }
static int cs2000_wait_pll_lock(struct cs2000_priv *priv)
{ … }
static int cs2000_clk_out_enable(struct cs2000_priv *priv, bool enable)
{ … }
static u32 cs2000_rate_to_ratio(u32 rate_in, u32 rate_out, bool lf_ratio)
{ … }
static unsigned long cs2000_ratio_to_rate(u32 ratio, u32 rate_in, bool lf_ratio)
{ … }
static int cs2000_ratio_set(struct cs2000_priv *priv,
int ch, u32 rate_in, u32 rate_out)
{ … }
static u32 cs2000_ratio_get(struct cs2000_priv *priv, int ch)
{ … }
static int cs2000_ratio_select(struct cs2000_priv *priv, int ch)
{ … }
static unsigned long cs2000_recalc_rate(struct clk_hw *hw,
unsigned long parent_rate)
{ … }
static long cs2000_round_rate(struct clk_hw *hw, unsigned long rate,
unsigned long *parent_rate)
{ … }
static int cs2000_select_ratio_mode(struct cs2000_priv *priv,
unsigned long rate,
unsigned long parent_rate)
{ … }
static int __cs2000_set_rate(struct cs2000_priv *priv, int ch,
unsigned long rate, unsigned long parent_rate)
{ … }
static int cs2000_set_rate(struct clk_hw *hw,
unsigned long rate, unsigned long parent_rate)
{ … }
static int cs2000_set_saved_rate(struct cs2000_priv *priv)
{ … }
static int cs2000_enable(struct clk_hw *hw)
{ … }
static void cs2000_disable(struct clk_hw *hw)
{ … }
static u8 cs2000_get_parent(struct clk_hw *hw)
{ … }
static const struct clk_ops cs2000_ops = …;
static int cs2000_clk_get(struct cs2000_priv *priv)
{ … }
static int cs2000_clk_register(struct cs2000_priv *priv)
{ … }
static int cs2000_version_print(struct cs2000_priv *priv)
{ … }
static void cs2000_remove(struct i2c_client *client)
{ … }
static int cs2000_probe(struct i2c_client *client)
{ … }
static int __maybe_unused cs2000_resume(struct device *dev)
{ … }
static const struct dev_pm_ops cs2000_pm_ops = …;
static struct i2c_driver cs2000_driver = …;
module_i2c_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;