#define pr_fmt(fmt) …
#include <linux/clk-provider.h>
#include <linux/cpu.h>
#include <linux/cpufreq.h>
#include <linux/cpumask.h>
#include <linux/energy_model.h>
#include <linux/export.h>
#include <linux/module.h>
#include <linux/pm_opp.h>
#include <linux/slab.h>
#include <linux/scmi_protocol.h>
#include <linux/types.h>
#include <linux/units.h>
struct scmi_data { … };
static struct scmi_protocol_handle *ph;
static const struct scmi_perf_proto_ops *perf_ops;
static struct cpufreq_driver scmi_cpufreq_driver;
static unsigned int scmi_cpufreq_get_rate(unsigned int cpu)
{ … }
static int
scmi_cpufreq_set_target(struct cpufreq_policy *policy, unsigned int index)
{ … }
static unsigned int scmi_cpufreq_fast_switch(struct cpufreq_policy *policy,
unsigned int target_freq)
{ … }
static int scmi_cpu_domain_id(struct device *cpu_dev)
{ … }
static int
scmi_get_sharing_cpus(struct device *cpu_dev, int domain,
struct cpumask *cpumask)
{ … }
static int __maybe_unused
scmi_get_cpu_power(struct device *cpu_dev, unsigned long *power,
unsigned long *KHz)
{ … }
static int
scmi_get_rate_limit(u32 domain, bool has_fast_switch)
{ … }
static struct freq_attr *scmi_cpufreq_hw_attr[] = …;
static int scmi_cpufreq_init(struct cpufreq_policy *policy)
{ … }
static void scmi_cpufreq_exit(struct cpufreq_policy *policy)
{ … }
static void scmi_cpufreq_register_em(struct cpufreq_policy *policy)
{ … }
static struct cpufreq_driver scmi_cpufreq_driver = …;
static int scmi_cpufreq_probe(struct scmi_device *sdev)
{ … }
static void scmi_cpufreq_remove(struct scmi_device *sdev)
{ … }
static const struct scmi_device_id scmi_id_table[] = …;
MODULE_DEVICE_TABLE(scmi, scmi_id_table);
static struct scmi_driver scmi_cpufreq_drv = …;
module_scmi_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;