Loading drivers/devfreq/devfreq.c +9 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ #include <linux/kmod.h> #include <linux/sched.h> #include <linux/debugfs.h> #include <linux/devfreq_cooling.h> #include <linux/errno.h> #include <linux/err.h> #include <linux/init.h> Loading Loading @@ -935,6 +936,12 @@ struct devfreq *devfreq_add_device(struct device *dev, mutex_unlock(&devfreq_list_lock); if (devfreq->profile->is_cooling_device) { devfreq->cdev = devfreq_cooling_em_register(devfreq, NULL); if (IS_ERR(devfreq->cdev)) devfreq->cdev = NULL; } return devfreq; err_init: Loading @@ -960,6 +967,8 @@ int devfreq_remove_device(struct devfreq *devfreq) if (!devfreq) return -EINVAL; devfreq_cooling_unregister(devfreq->cdev); if (devfreq->governor) { devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_STOP, NULL); Loading include/linux/devfreq.h +9 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ enum devfreq_timer { struct devfreq; struct devfreq_governor; struct thermal_cooling_device; /** * struct devfreq_dev_status - Data given from devfreq user device to Loading Loading @@ -98,11 +99,15 @@ struct devfreq_dev_status { * @freq_table: Optional list of frequencies to support statistics * and freq_table must be generated in ascending order. * @max_state: The size of freq_table. * * @is_cooling_device: A self-explanatory boolean giving the device a * cooling effect property. */ struct devfreq_dev_profile { unsigned long initial_freq; unsigned int polling_ms; enum devfreq_timer timer; bool is_cooling_device; int (*target)(struct device *dev, unsigned long *freq, u32 flags); int (*get_dev_status)(struct device *dev, Loading Loading @@ -156,6 +161,7 @@ struct devfreq_stats { * @suspend_count: suspend requests counter for a device. * @stats: Statistics of devfreq device behavior * @transition_notifier_list: list head of DEVFREQ_TRANSITION_NOTIFIER notifier * @cdev: Cooling device pointer if the devfreq has cooling property * @nb_min: Notifier block for DEV_PM_QOS_MIN_FREQUENCY * @nb_max: Notifier block for DEV_PM_QOS_MAX_FREQUENCY * Loading Loading @@ -198,6 +204,9 @@ struct devfreq { struct srcu_notifier_head transition_notifier_list; /* Pointer to the cooling device if used for thermal mitigation */ struct thermal_cooling_device *cdev; struct notifier_block nb_min; struct notifier_block nb_max; }; Loading Loading
drivers/devfreq/devfreq.c +9 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ #include <linux/kmod.h> #include <linux/sched.h> #include <linux/debugfs.h> #include <linux/devfreq_cooling.h> #include <linux/errno.h> #include <linux/err.h> #include <linux/init.h> Loading Loading @@ -935,6 +936,12 @@ struct devfreq *devfreq_add_device(struct device *dev, mutex_unlock(&devfreq_list_lock); if (devfreq->profile->is_cooling_device) { devfreq->cdev = devfreq_cooling_em_register(devfreq, NULL); if (IS_ERR(devfreq->cdev)) devfreq->cdev = NULL; } return devfreq; err_init: Loading @@ -960,6 +967,8 @@ int devfreq_remove_device(struct devfreq *devfreq) if (!devfreq) return -EINVAL; devfreq_cooling_unregister(devfreq->cdev); if (devfreq->governor) { devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_STOP, NULL); Loading
include/linux/devfreq.h +9 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ enum devfreq_timer { struct devfreq; struct devfreq_governor; struct thermal_cooling_device; /** * struct devfreq_dev_status - Data given from devfreq user device to Loading Loading @@ -98,11 +99,15 @@ struct devfreq_dev_status { * @freq_table: Optional list of frequencies to support statistics * and freq_table must be generated in ascending order. * @max_state: The size of freq_table. * * @is_cooling_device: A self-explanatory boolean giving the device a * cooling effect property. */ struct devfreq_dev_profile { unsigned long initial_freq; unsigned int polling_ms; enum devfreq_timer timer; bool is_cooling_device; int (*target)(struct device *dev, unsigned long *freq, u32 flags); int (*get_dev_status)(struct device *dev, Loading Loading @@ -156,6 +161,7 @@ struct devfreq_stats { * @suspend_count: suspend requests counter for a device. * @stats: Statistics of devfreq device behavior * @transition_notifier_list: list head of DEVFREQ_TRANSITION_NOTIFIER notifier * @cdev: Cooling device pointer if the devfreq has cooling property * @nb_min: Notifier block for DEV_PM_QOS_MIN_FREQUENCY * @nb_max: Notifier block for DEV_PM_QOS_MAX_FREQUENCY * Loading Loading @@ -198,6 +204,9 @@ struct devfreq { struct srcu_notifier_head transition_notifier_list; /* Pointer to the cooling device if used for thermal mitigation */ struct thermal_cooling_device *cdev; struct notifier_block nb_min; struct notifier_block nb_max; }; Loading