#include <linux/clk.h>
#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/property.h>
#include <linux/regmap.h>
#include <linux/suspend.h>
#include <linux/devfreq-event.h>
#include "exynos-ppmu.h"
enum exynos_ppmu_type { … };
struct exynos_ppmu_data { … };
struct exynos_ppmu { … };
#define PPMU_EVENT(name) …
static struct __exynos_ppmu_events { … } ppmu_events[] = …;
static int __exynos_ppmu_find_ppmu_id(const char *edev_name)
{ … }
static int exynos_ppmu_find_ppmu_id(struct devfreq_event_dev *edev)
{ … }
static int exynos_ppmu_disable(struct devfreq_event_dev *edev)
{ … }
static int exynos_ppmu_set_event(struct devfreq_event_dev *edev)
{ … }
static int exynos_ppmu_get_event(struct devfreq_event_dev *edev,
struct devfreq_event_data *edata)
{ … }
static const struct devfreq_event_ops exynos_ppmu_ops = …;
static int exynos_ppmu_v2_disable(struct devfreq_event_dev *edev)
{ … }
static int exynos_ppmu_v2_set_event(struct devfreq_event_dev *edev)
{ … }
static int exynos_ppmu_v2_get_event(struct devfreq_event_dev *edev,
struct devfreq_event_data *edata)
{ … }
static const struct devfreq_event_ops exynos_ppmu_v2_ops = …;
static const struct of_device_id exynos_ppmu_id_match[] = …;
MODULE_DEVICE_TABLE(of, exynos_ppmu_id_match);
static int of_get_devfreq_events(struct device_node *np,
struct exynos_ppmu *info)
{ … }
static struct regmap_config exynos_ppmu_regmap_config = …;
static int exynos_ppmu_parse_dt(struct platform_device *pdev,
struct exynos_ppmu *info)
{ … }
static int exynos_ppmu_probe(struct platform_device *pdev)
{ … }
static void exynos_ppmu_remove(struct platform_device *pdev)
{ … }
static struct platform_driver exynos_ppmu_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;