Commit 92e61c2e authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files
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
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -233,7 +233,7 @@ struct devfreq_event_dev *devfreq_event_get_edev_by_phandle(struct device *dev,

	mutex_lock(&devfreq_event_list_lock);
	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;
	}

+3 −5
Original line number Diff line number Diff line
@@ -776,8 +776,7 @@ static void remove_sysfs_files(struct devfreq *devfreq,
 * @dev:	the device to add devfreq feature.
 * @profile:	device-specific profile to run devfreq.
 * @governor_name:	name of the policy to choose frequency.
 * @data:	private data for the governor. The devfreq framework does not
 *		touch this value.
 * @data:	devfreq driver pass to governors, governor should not change it.
 */
struct devfreq *devfreq_add_device(struct device *dev,
				   struct devfreq_dev_profile *profile,
@@ -1011,8 +1010,7 @@ static void devm_devfreq_dev_release(struct device *dev, void *res)
 * @dev:	the device to add devfreq feature.
 * @profile:	device-specific profile to run devfreq.
 * @governor_name:	name of the policy to choose frequency.
 * @data:	private data for the governor. The devfreq framework does not
 *		touch this value.
 * @data:	 devfreq driver pass to governors, governor should not change it.
 *
 * This function manages automatically the memory of devfreq device using device
 * 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)
	mutex_lock(&devfreq_list_lock);
	list_for_each_entry(devfreq, &devfreq_list, node) {
		if (devfreq->dev.parent
			&& devfreq->dev.parent->of_node == node) {
			&& device_match_of_node(devfreq->dev.parent, node)) {
			mutex_unlock(&devfreq_list_lock);
			return devfreq;
		}
+1 −2
Original line number Diff line number Diff line
@@ -214,8 +214,7 @@ static int exynos_nocp_parse_dt(struct platform_device *pdev,
		nocp->clk = NULL;

	/* Maps the memory mapped IO to control nocp register */
	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	base = devm_ioremap_resource(dev, res);
	base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
	if (IS_ERR(base))
		return PTR_ERR(base);

+6 −6
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ struct userspace_data {

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)
		*freq = data->user_frequency;
@@ -40,7 +40,7 @@ static ssize_t set_freq_store(struct device *dev, struct device_attribute *attr,
	int err = 0;

	mutex_lock(&devfreq->lock);
	data = devfreq->data;
	data = devfreq->governor_data;

	sscanf(buf, "%lu", &wanted);
	data->user_frequency = wanted;
@@ -60,7 +60,7 @@ static ssize_t set_freq_show(struct device *dev,
	int err = 0;

	mutex_lock(&devfreq->lock);
	data = devfreq->data;
	data = devfreq->governor_data;

	if (data->valid)
		err = sprintf(buf, "%lu\n", data->user_frequency);
@@ -91,7 +91,7 @@ static int userspace_init(struct devfreq *devfreq)
		goto out;
	}
	data->valid = false;
	devfreq->data = data;
	devfreq->governor_data = data;

	err = sysfs_create_group(&devfreq->dev.kobj, &dev_attr_group);
out:
@@ -107,8 +107,8 @@ static void userspace_exit(struct devfreq *devfreq)
	if (devfreq->dev.kobj.sd)
		sysfs_remove_group(&devfreq->dev.kobj, &dev_attr_group);

	kfree(devfreq->data);
	devfreq->data = NULL;
	kfree(devfreq->governor_data);
	devfreq->governor_data = NULL;
}

static int devfreq_userspace_handler(struct devfreq *devfreq,
+4 −3
Original line number Diff line number Diff line
@@ -152,8 +152,8 @@ struct devfreq_stats {
 * @max_state:		count of entry present in the frequency table.
 * @previous_freq:	previously configured frequency value.
 * @last_status:	devfreq user device info, performance statistics
 * @data:	Private data of the governor. The devfreq framework does not
 *		touch this.
 * @data:	devfreq driver pass to governors, governor should not change it.
 * @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_max_freq_req:	PM QoS maximum frequency request from user (via sysfs)
 * @scaling_min_freq:	Limit minimum frequency requested by OPP interface
@@ -193,7 +193,8 @@ struct devfreq {
	unsigned long previous_freq;
	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_max_freq_req;