#include <linux/of_address.h>
#include <linux/platform_device.h>
#include <linux/bitfield.h>
#include <linux/seq_file.h>
#include <linux/debugfs.h>
#include <linux/regmap.h>
#include <linux/module.h>
static DEFINE_MUTEX(measure_lock);
#define MSR_CLK_DUTY …
#define MSR_CLK_REG0 …
#define MSR_CLK_REG1 …
#define MSR_CLK_REG2 …
#define MSR_DURATION …
#define MSR_ENABLE …
#define MSR_CONT …
#define MSR_INTR …
#define MSR_RUN …
#define MSR_CLK_SRC …
#define MSR_BUSY …
#define MSR_VAL_MASK …
#define DIV_MIN …
#define DIV_STEP …
#define DIV_MAX …
#define CLK_MSR_MAX …
struct meson_msr_id { … };
struct meson_msr { … };
#define CLK_MSR_ID(__id, __name) …
static struct meson_msr_id clk_msr_m8[CLK_MSR_MAX] = …;
static struct meson_msr_id clk_msr_gx[CLK_MSR_MAX] = …;
static struct meson_msr_id clk_msr_axg[CLK_MSR_MAX] = …;
static struct meson_msr_id clk_msr_g12a[CLK_MSR_MAX] = …;
static struct meson_msr_id clk_msr_sm1[CLK_MSR_MAX] = …;
static int meson_measure_id(struct meson_msr_id *clk_msr_id,
unsigned int duration)
{ … }
static int meson_measure_best_id(struct meson_msr_id *clk_msr_id,
unsigned int *precision)
{ … }
static int clk_msr_show(struct seq_file *s, void *data)
{ … }
DEFINE_SHOW_ATTRIBUTE(…);
static int clk_msr_summary_show(struct seq_file *s, void *data)
{ … }
DEFINE_SHOW_ATTRIBUTE(…);
static const struct regmap_config meson_clk_msr_regmap_config = …;
static int meson_msr_probe(struct platform_device *pdev)
{ … }
static const struct of_device_id meson_msr_match_table[] = …;
MODULE_DEVICE_TABLE(of, meson_msr_match_table);
static struct platform_driver meson_msr_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;