#include <linux/clk.h>
#include <linux/clk-provider.h>
#include <linux/delay.h>
#include <linux/i2c.h>
#include <linux/interrupt.h>
#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/rational.h>
#include <linux/regmap.h>
#include <linux/slab.h>
#define CDCE706_CLKIN_CLOCK …
#define CDCE706_CLKIN_SOURCE …
#define CDCE706_PLL_M_LOW(pll) …
#define CDCE706_PLL_N_LOW(pll) …
#define CDCE706_PLL_HI(pll) …
#define CDCE706_PLL_MUX …
#define CDCE706_PLL_FVCO …
#define CDCE706_DIVIDER(div) …
#define CDCE706_CLKOUT(out) …
#define CDCE706_CLKIN_CLOCK_MASK …
#define CDCE706_CLKIN_SOURCE_SHIFT …
#define CDCE706_CLKIN_SOURCE_MASK …
#define CDCE706_CLKIN_SOURCE_LVCMOS …
#define CDCE706_PLL_MUX_MASK(pll) …
#define CDCE706_PLL_LOW_M_MASK …
#define CDCE706_PLL_LOW_N_MASK …
#define CDCE706_PLL_HI_M_MASK …
#define CDCE706_PLL_HI_N_MASK …
#define CDCE706_PLL_HI_N_SHIFT …
#define CDCE706_PLL_M_MAX …
#define CDCE706_PLL_N_MAX …
#define CDCE706_PLL_FVCO_MASK(pll) …
#define CDCE706_PLL_FREQ_MIN …
#define CDCE706_PLL_FREQ_MAX …
#define CDCE706_PLL_FREQ_HI …
#define CDCE706_DIVIDER_PLL(div) …
#define CDCE706_DIVIDER_PLL_SHIFT(div) …
#define CDCE706_DIVIDER_PLL_MASK(div) …
#define CDCE706_DIVIDER_DIVIDER_MASK …
#define CDCE706_DIVIDER_DIVIDER_MAX …
#define CDCE706_CLKOUT_DIVIDER_MASK …
#define CDCE706_CLKOUT_ENABLE_MASK …
static const struct regmap_config cdce706_regmap_config = …;
#define to_hw_data(phw) …
struct cdce706_hw_data { … };
struct cdce706_dev_data { … };
static const char * const cdce706_source_name[] = …;
static const char * const cdce706_clkin_name[] = …;
static const char * const cdce706_pll_name[] = …;
static const char * const cdce706_divider_parent_name[] = …;
static const char *cdce706_divider_name[] = …;
static const char * const cdce706_clkout_name[] = …;
static int cdce706_reg_read(struct cdce706_dev_data *dev_data, unsigned reg,
unsigned *val)
{ … }
static int cdce706_reg_write(struct cdce706_dev_data *dev_data, unsigned reg,
unsigned val)
{ … }
static int cdce706_reg_update(struct cdce706_dev_data *dev_data, unsigned reg,
unsigned mask, unsigned val)
{ … }
static int cdce706_clkin_set_parent(struct clk_hw *hw, u8 index)
{ … }
static u8 cdce706_clkin_get_parent(struct clk_hw *hw)
{ … }
static const struct clk_ops cdce706_clkin_ops = …;
static unsigned long cdce706_pll_recalc_rate(struct clk_hw *hw,
unsigned long parent_rate)
{ … }
static long cdce706_pll_round_rate(struct clk_hw *hw, unsigned long rate,
unsigned long *parent_rate)
{ … }
static int cdce706_pll_set_rate(struct clk_hw *hw, unsigned long rate,
unsigned long parent_rate)
{ … }
static const struct clk_ops cdce706_pll_ops = …;
static int cdce706_divider_set_parent(struct clk_hw *hw, u8 index)
{ … }
static u8 cdce706_divider_get_parent(struct clk_hw *hw)
{ … }
static unsigned long cdce706_divider_recalc_rate(struct clk_hw *hw,
unsigned long parent_rate)
{ … }
static int cdce706_divider_determine_rate(struct clk_hw *hw,
struct clk_rate_request *req)
{ … }
static int cdce706_divider_set_rate(struct clk_hw *hw, unsigned long rate,
unsigned long parent_rate)
{ … }
static const struct clk_ops cdce706_divider_ops = …;
static int cdce706_clkout_prepare(struct clk_hw *hw)
{ … }
static void cdce706_clkout_unprepare(struct clk_hw *hw)
{ … }
static int cdce706_clkout_set_parent(struct clk_hw *hw, u8 index)
{ … }
static u8 cdce706_clkout_get_parent(struct clk_hw *hw)
{ … }
static unsigned long cdce706_clkout_recalc_rate(struct clk_hw *hw,
unsigned long parent_rate)
{ … }
static int cdce706_clkout_determine_rate(struct clk_hw *hw,
struct clk_rate_request *req)
{ … }
static int cdce706_clkout_set_rate(struct clk_hw *hw, unsigned long rate,
unsigned long parent_rate)
{ … }
static const struct clk_ops cdce706_clkout_ops = …;
static int cdce706_register_hw(struct cdce706_dev_data *cdce,
struct cdce706_hw_data *hw, unsigned num_hw,
const char * const *clk_names,
struct clk_init_data *init)
{ … }
static int cdce706_register_clkin(struct cdce706_dev_data *cdce)
{ … }
static int cdce706_register_plls(struct cdce706_dev_data *cdce)
{ … }
static int cdce706_register_dividers(struct cdce706_dev_data *cdce)
{ … }
static int cdce706_register_clkouts(struct cdce706_dev_data *cdce)
{ … }
static struct clk_hw *
of_clk_cdce_get(struct of_phandle_args *clkspec, void *data)
{ … }
static int cdce706_probe(struct i2c_client *client)
{ … }
#ifdef CONFIG_OF
static const struct of_device_id cdce706_dt_match[] = …;
MODULE_DEVICE_TABLE(of, cdce706_dt_match);
#endif
static const struct i2c_device_id cdce706_id[] = …;
MODULE_DEVICE_TABLE(i2c, cdce706_id);
static struct i2c_driver cdce706_i2c_driver = …;
module_i2c_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;