linux/drivers/devfreq/governor.h
<<
>>
Prefs
   1/*
   2 * governor.h - internal header for devfreq governors.
   3 *
   4 * Copyright (C) 2011 Samsung Electronics
   5 *      MyungJoo Ham <myungjoo.ham@samsung.com>
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License version 2 as
   9 * published by the Free Software Foundation.
  10 *
  11 * This header is for devfreq governors in drivers/devfreq/
  12 */
  13
  14#ifndef _GOVERNOR_H
  15#define _GOVERNOR_H
  16
  17#include <linux/devfreq.h>
  18
  19#define to_devfreq(DEV) container_of((DEV), struct devfreq, dev)
  20
  21/* Devfreq events */
  22#define DEVFREQ_GOV_START                       0x1
  23#define DEVFREQ_GOV_STOP                        0x2
  24#define DEVFREQ_GOV_INTERVAL                    0x3
  25#define DEVFREQ_GOV_SUSPEND                     0x4
  26#define DEVFREQ_GOV_RESUME                      0x5
  27
  28#define DEVFREQ_MIN_FREQ                        0
  29#define DEVFREQ_MAX_FREQ                        ULONG_MAX
  30
  31/**
  32 * struct devfreq_governor - Devfreq policy governor
  33 * @node:               list node - contains registered devfreq governors
  34 * @name:               Governor's name
  35 * @immutable:          Immutable flag for governor. If the value is 1,
  36 *                      this govenror is never changeable to other governor.
  37 * @get_target_freq:    Returns desired operating frequency for the device.
  38 *                      Basically, get_target_freq will run
  39 *                      devfreq_dev_profile.get_dev_status() to get the
  40 *                      status of the device (load = busy_time / total_time).
  41 *                      If no_central_polling is set, this callback is called
  42 *                      only with update_devfreq() notified by OPP.
  43 * @event_handler:      Callback for devfreq core framework to notify events
  44 *                      to governors. Events include per device governor
  45 *                      init and exit, opp changes out of devfreq, suspend
  46 *                      and resume of per device devfreq during device idle.
  47 *
  48 * Note that the callbacks are called with devfreq->lock locked by devfreq.
  49 */
  50struct devfreq_governor {
  51        struct list_head node;
  52
  53        const char name[DEVFREQ_NAME_LEN];
  54        const unsigned int immutable;
  55        int (*get_target_freq)(struct devfreq *this, unsigned long *freq);
  56        int (*event_handler)(struct devfreq *devfreq,
  57                                unsigned int event, void *data);
  58};
  59
  60extern void devfreq_monitor_start(struct devfreq *devfreq);
  61extern void devfreq_monitor_stop(struct devfreq *devfreq);
  62extern void devfreq_monitor_suspend(struct devfreq *devfreq);
  63extern void devfreq_monitor_resume(struct devfreq *devfreq);
  64extern void devfreq_interval_update(struct devfreq *devfreq,
  65                                        unsigned int *delay);
  66
  67extern int devfreq_add_governor(struct devfreq_governor *governor);
  68extern int devfreq_remove_governor(struct devfreq_governor *governor);
  69
  70extern int devfreq_update_status(struct devfreq *devfreq, unsigned long freq);
  71
  72static inline int devfreq_update_stats(struct devfreq *df)
  73{
  74        return df->profile->get_dev_status(df->dev.parent, &df->last_status);
  75}
  76#endif /* _GOVERNOR_H */
  77