#include <linux/err.h>
#include <linux/init.h>
#include <linux/clk-provider.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/io-64-nonatomic-lo-hi.h>
#include <dt-bindings/clock/loongson,ls2k-clk.h>
static const struct clk_parent_data pdata[] = …;
enum loongson2_clk_type { … };
struct loongson2_clk_provider { … };
struct loongson2_clk_data { … };
struct loongson2_clk_board_info { … };
#define CLK_DIV(_id, _name, _pname, _offset, _dshift, _dwidth) …
#define CLK_PLL(_id, _name, _offset, _mshift, _mwidth, \
_dshift, _dwidth) …
#define CLK_SCALE(_id, _name, _pname, _offset, \
_dshift, _dwidth) …
#define CLK_GATE(_id, _name, _pname, _offset, _bidx) …
#define CLK_FIXED(_id, _name, _pname, _rate) …
static const struct loongson2_clk_board_info ls2k0500_clks[] = …;
static const struct loongson2_clk_board_info ls2k1000_clks[] = …;
static const struct loongson2_clk_board_info ls2k2000_clks[] = …;
static inline struct loongson2_clk_data *to_loongson2_clk(struct clk_hw *hw)
{ … }
static inline unsigned long loongson2_rate_part(u64 val, u8 shift, u8 width)
{ … }
static unsigned long loongson2_pll_recalc_rate(struct clk_hw *hw,
unsigned long parent_rate)
{ … }
static const struct clk_ops loongson2_pll_recalc_ops = …;
static unsigned long loongson2_freqscale_recalc_rate(struct clk_hw *hw,
unsigned long parent_rate)
{ … }
static const struct clk_ops loongson2_freqscale_recalc_ops = …;
static struct clk_hw *loongson2_clk_register(struct loongson2_clk_provider *clp,
const struct loongson2_clk_board_info *cld,
const struct clk_ops *ops)
{ … }
static int loongson2_clk_probe(struct platform_device *pdev)
{ … }
static const struct of_device_id loongson2_clk_match_table[] = …;
MODULE_DEVICE_TABLE(of, loongson2_clk_match_table);
static struct platform_driver loongson2_clk_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;