Commit 92e61c2e authored by Rafael J. Wysocki's avatar Rafael J. Wysocki

Merge tag 'devfreq-next-for-6.2' of git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/linux

Pull devfreq updates for 6.2 from Chanwoo Choi:

"- Add a private governor_data for governor.

  The private governor_data is allocated and handled by governor
  regardless of passing the data from devfreq driver via
  devfreq_add_device. The added private governor data keeps the
  governor own data when switching from userspace
  governor and other governors.

- Replace code by using defined functions of
  device_match_of_node() and devm_platform_get_and_ioremap_resource()."

* tag 'devfreq-next-for-6.2' of git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/linux:
  PM / devfreq: event: use devm_platform_get_and_ioremap_resource()
  PM / devfreq: event: Use device_match_of_node()
  PM / devfreq: Use device_match_of_node()
  PM/devfreq: governor: Add a private governor_data for governor
parents 76dcd734 7fc7f254
...@@ -233,7 +233,7 @@ struct devfreq_event_dev *devfreq_event_get_edev_by_phandle(struct device *dev, ...@@ -233,7 +233,7 @@ struct devfreq_event_dev *devfreq_event_get_edev_by_phandle(struct device *dev,
mutex_lock(&devfreq_event_list_lock); mutex_lock(&devfreq_event_list_lock);
list_for_each_entry(edev, &devfreq_event_list, node) { list_for_each_entry(edev, &devfreq_event_list, node) {
if (edev->dev.parent && edev->dev.parent->of_node == node) if (edev->dev.parent && device_match_of_node(edev->dev.parent, node))
goto out; goto out;
} }
......
...@@ -776,8 +776,7 @@ static void remove_sysfs_files(struct devfreq *devfreq, ...@@ -776,8 +776,7 @@ static void remove_sysfs_files(struct devfreq *devfreq,
* @dev: the device to add devfreq feature. * @dev: the device to add devfreq feature.
* @profile: device-specific profile to run devfreq. * @profile: device-specific profile to run devfreq.
* @governor_name: name of the policy to choose frequency. * @governor_name: name of the policy to choose frequency.
* @data: private data for the governor. The devfreq framework does not * @data: devfreq driver pass to governors, governor should not change it.
* touch this value.
*/ */
struct devfreq *devfreq_add_device(struct device *dev, struct devfreq *devfreq_add_device(struct device *dev,
struct devfreq_dev_profile *profile, struct devfreq_dev_profile *profile,
...@@ -1011,8 +1010,7 @@ static void devm_devfreq_dev_release(struct device *dev, void *res) ...@@ -1011,8 +1010,7 @@ static void devm_devfreq_dev_release(struct device *dev, void *res)
* @dev: the device to add devfreq feature. * @dev: the device to add devfreq feature.
* @profile: device-specific profile to run devfreq. * @profile: device-specific profile to run devfreq.
* @governor_name: name of the policy to choose frequency. * @governor_name: name of the policy to choose frequency.
* @data: private data for the governor. The devfreq framework does not * @data: devfreq driver pass to governors, governor should not change it.
* touch this value.
* *
* This function manages automatically the memory of devfreq device using device * This function manages automatically the memory of devfreq device using device
* resource management and simplify the free operation for memory of devfreq * resource management and simplify the free operation for memory of devfreq
...@@ -1059,7 +1057,7 @@ struct devfreq *devfreq_get_devfreq_by_node(struct device_node *node) ...@@ -1059,7 +1057,7 @@ struct devfreq *devfreq_get_devfreq_by_node(struct device_node *node)
mutex_lock(&devfreq_list_lock); mutex_lock(&devfreq_list_lock);
list_for_each_entry(devfreq, &devfreq_list, node) { list_for_each_entry(devfreq, &devfreq_list, node) {
if (devfreq->dev.parent if (devfreq->dev.parent
&& devfreq->dev.parent->of_node == node) { && device_match_of_node(devfreq->dev.parent, node)) {
mutex_unlock(&devfreq_list_lock); mutex_unlock(&devfreq_list_lock);
return devfreq; return devfreq;
} }
......
...@@ -214,8 +214,7 @@ static int exynos_nocp_parse_dt(struct platform_device *pdev, ...@@ -214,8 +214,7 @@ static int exynos_nocp_parse_dt(struct platform_device *pdev,
nocp->clk = NULL; nocp->clk = NULL;
/* Maps the memory mapped IO to control nocp register */ /* Maps the memory mapped IO to control nocp register */
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
base = devm_ioremap_resource(dev, res);
if (IS_ERR(base)) if (IS_ERR(base))
return PTR_ERR(base); return PTR_ERR(base);
......
...@@ -21,7 +21,7 @@ struct userspace_data { ...@@ -21,7 +21,7 @@ struct userspace_data {
static int devfreq_userspace_func(struct devfreq *df, unsigned long *freq) static int devfreq_userspace_func(struct devfreq *df, unsigned long *freq)
{ {
struct userspace_data *data = df->data; struct userspace_data *data = df->governor_data;
if (data->valid) if (data->valid)
*freq = data->user_frequency; *freq = data->user_frequency;
...@@ -40,7 +40,7 @@ static ssize_t set_freq_store(struct device *dev, struct device_attribute *attr, ...@@ -40,7 +40,7 @@ static ssize_t set_freq_store(struct device *dev, struct device_attribute *attr,
int err = 0; int err = 0;
mutex_lock(&devfreq->lock); mutex_lock(&devfreq->lock);
data = devfreq->data; data = devfreq->governor_data;
sscanf(buf, "%lu", &wanted); sscanf(buf, "%lu", &wanted);
data->user_frequency = wanted; data->user_frequency = wanted;
...@@ -60,7 +60,7 @@ static ssize_t set_freq_show(struct device *dev, ...@@ -60,7 +60,7 @@ static ssize_t set_freq_show(struct device *dev,
int err = 0; int err = 0;
mutex_lock(&devfreq->lock); mutex_lock(&devfreq->lock);
data = devfreq->data; data = devfreq->governor_data;
if (data->valid) if (data->valid)
err = sprintf(buf, "%lu\n", data->user_frequency); err = sprintf(buf, "%lu\n", data->user_frequency);
...@@ -91,7 +91,7 @@ static int userspace_init(struct devfreq *devfreq) ...@@ -91,7 +91,7 @@ static int userspace_init(struct devfreq *devfreq)
goto out; goto out;
} }
data->valid = false; data->valid = false;
devfreq->data = data; devfreq->governor_data = data;
err = sysfs_create_group(&devfreq->dev.kobj, &dev_attr_group); err = sysfs_create_group(&devfreq->dev.kobj, &dev_attr_group);
out: out:
...@@ -107,8 +107,8 @@ static void userspace_exit(struct devfreq *devfreq) ...@@ -107,8 +107,8 @@ static void userspace_exit(struct devfreq *devfreq)
if (devfreq->dev.kobj.sd) if (devfreq->dev.kobj.sd)
sysfs_remove_group(&devfreq->dev.kobj, &dev_attr_group); sysfs_remove_group(&devfreq->dev.kobj, &dev_attr_group);
kfree(devfreq->data); kfree(devfreq->governor_data);
devfreq->data = NULL; devfreq->governor_data = NULL;
} }
static int devfreq_userspace_handler(struct devfreq *devfreq, static int devfreq_userspace_handler(struct devfreq *devfreq,
......
...@@ -152,8 +152,8 @@ struct devfreq_stats { ...@@ -152,8 +152,8 @@ struct devfreq_stats {
* @max_state: count of entry present in the frequency table. * @max_state: count of entry present in the frequency table.
* @previous_freq: previously configured frequency value. * @previous_freq: previously configured frequency value.
* @last_status: devfreq user device info, performance statistics * @last_status: devfreq user device info, performance statistics
* @data: Private data of the governor. The devfreq framework does not * @data: devfreq driver pass to governors, governor should not change it.
* touch this. * @governor_data: private data for governors, devfreq core doesn't touch it.
* @user_min_freq_req: PM QoS minimum frequency request from user (via sysfs) * @user_min_freq_req: PM QoS minimum frequency request from user (via sysfs)
* @user_max_freq_req: PM QoS maximum frequency request from user (via sysfs) * @user_max_freq_req: PM QoS maximum frequency request from user (via sysfs)
* @scaling_min_freq: Limit minimum frequency requested by OPP interface * @scaling_min_freq: Limit minimum frequency requested by OPP interface
...@@ -193,7 +193,8 @@ struct devfreq { ...@@ -193,7 +193,8 @@ struct devfreq {
unsigned long previous_freq; unsigned long previous_freq;
struct devfreq_dev_status last_status; struct devfreq_dev_status last_status;
void *data; /* private data for governors */ void *data;
void *governor_data;
struct dev_pm_qos_request user_min_freq_req; struct dev_pm_qos_request user_min_freq_req;
struct dev_pm_qos_request user_max_freq_req; struct dev_pm_qos_request user_max_freq_req;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment