All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chanwoo Choi <cw00.choi@samsung.com>
To: myungjoo.ham@samsung.com, kyungmin.park@samsung.com,
	cw00.choi@samsung.com
Cc: rafael.j.wysocki@intel.com, chanwoo@kernel.org,
	inki.dae@samsung.com, linux-kernel@vger.kernel.org,
	linux-pm@vger.kernel.org
Subject: [PATCH v5 1/7] PM / devfreq: Set min/max_freq when adding the devfreq device
Date: Mon, 23 Oct 2017 10:32:06 +0900	[thread overview]
Message-ID: <1508722332-10628-2-git-send-email-cw00.choi@samsung.com> (raw)
In-Reply-To: <1508722332-10628-1-git-send-email-cw00.choi@samsung.com>

Prior to that, the min/max_freq of the devfreq device are always zero
before the user changes the min/max_freq through sysfs entries.
It might make the confusion for the min/max_freq.

This patch initializes the available min/max_freq by using the OPP
during adding the devfreq device.

Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com>
---
 drivers/devfreq/devfreq.c | 42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
index a1c4ee818614..6a6f88bccdee 100644
--- a/drivers/devfreq/devfreq.c
+++ b/drivers/devfreq/devfreq.c
@@ -69,6 +69,34 @@ static struct devfreq *find_device_devfreq(struct device *dev)
 	return ERR_PTR(-ENODEV);
 }
 
+static unsigned long find_available_min_freq(struct devfreq *devfreq)
+{
+	struct dev_pm_opp *opp;
+	unsigned long min_freq = 0;
+
+	opp = dev_pm_opp_find_freq_ceil(devfreq->dev.parent, &min_freq);
+	if (IS_ERR(opp))
+		min_freq = 0;
+	else
+		dev_pm_opp_put(opp);
+
+	return min_freq;
+}
+
+static unsigned long find_available_max_freq(struct devfreq *devfreq)
+{
+	struct dev_pm_opp *opp;
+	unsigned long max_freq = ULONG_MAX;
+
+	opp = dev_pm_opp_find_freq_floor(devfreq->dev.parent, &max_freq);
+	if (IS_ERR(opp))
+		max_freq = 0;
+	else
+		dev_pm_opp_put(opp);
+
+	return max_freq;
+}
+
 /**
  * devfreq_get_freq_level() - Lookup freq_table for the frequency
  * @devfreq:	the devfreq instance
@@ -559,6 +587,20 @@ struct devfreq *devfreq_add_device(struct device *dev,
 		mutex_lock(&devfreq->lock);
 	}
 
+	devfreq->min_freq = find_available_min_freq(devfreq);
+	if (!devfreq->min_freq) {
+		mutex_unlock(&devfreq->lock);
+		err = -EINVAL;
+		goto err_dev;
+	}
+
+	devfreq->max_freq = find_available_max_freq(devfreq);
+	if (!devfreq->max_freq) {
+		mutex_unlock(&devfreq->lock);
+		err = -EINVAL;
+		goto err_dev;
+	}
+
 	dev_set_name(&devfreq->dev, "devfreq%d",
 				atomic_inc_return(&devfreq_no));
 	err = device_register(&devfreq->dev);
-- 
1.9.1

  parent reply	other threads:[~2017-10-23  1:35 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20171023013213epcas1p165faa416f69659b60ec4c3f18ea251d8@epcas1p1.samsung.com>
2017-10-23  1:32 ` [PATCH v5 0/7] PM / devfreq: Use OPP interface to handle the frequency Chanwoo Choi
     [not found]   ` <CGME20171023013214epcas1p4f0652eceade1e3812ed7781d60b18367@epcas1p4.samsung.com>
2017-10-23  1:32     ` Chanwoo Choi [this message]
     [not found]   ` <CGME20171023013214epcas1p341c10076a9dfdea26510c12fac0d723a@epcas1p3.samsung.com>
2017-10-23  1:32     ` [PATCH v5 2/7] Revert "PM / devfreq: Add show_one macro to delete the duplicate code" Chanwoo Choi
     [not found]   ` <CGME20171023013214epcas1p353a430282734319c904ea2edaa737dce@epcas1p3.samsung.com>
2017-10-23  1:32     ` [PATCH v5 3/7] PM / devfreq: Use the available min/max frequency Chanwoo Choi
     [not found]   ` <CGME20171023013215epcas1p3e43fa1b26d20fcb7d7d5d89fd28f9166@epcas1p3.samsung.com>
2017-10-23  1:32     ` [PATCH v5 4/7] PM / devfreq: Change return type of devfreq_set_freq_table() Chanwoo Choi
     [not found]   ` <CGME20171023013215epcas2p1abdf1f948cc704f113d741e08d42a15b@epcas2p1.samsung.com>
2017-10-23  1:32     ` [PATCH v5 5/7] PM / devfreq: Show the all available frequencies Chanwoo Choi
     [not found]   ` <CGME20171023013215epcas1p1d25606a511fb6dc2c037cc978ad5dd5a@epcas1p1.samsung.com>
2017-10-23  1:32     ` [PATCH v5 6/7] PM / devfreq: Remove unneeded conditional statement Chanwoo Choi
     [not found]   ` <CGME20171023013216epcas2p4be3855bdb37dbaf4b5b9b9fdd6f65289@epcas2p4.samsung.com>
2017-10-23  1:32     ` [PATCH v5 7/7] PM / devfreq: Define the constant governor name Chanwoo Choi
2017-10-23  1:32       ` Chanwoo Choi
2017-10-23  1:32       ` Chanwoo Choi
     [not found]   ` <CGME20171023013214epcas1p353a430282734319c904ea2edaa737dce@epcms1p6>
2017-10-23  5:10     ` [PATCH v5 3/7] PM / devfreq: Use the available min/max frequency MyungJoo Ham
2017-11-06 18:11   ` [PATCH v5 0/7] PM / devfreq: Use OPP interface to handle the frequency Bjorn Andersson
     [not found]   ` <CGME20171023013213epcas1p165faa416f69659b60ec4c3f18ea251d8@epcms1p2>
2017-11-09 23:56     ` MyungJoo Ham
2017-11-09 23:56       ` MyungJoo Ham
2017-11-10  0:12       ` Bjorn Andersson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1508722332-10628-2-git-send-email-cw00.choi@samsung.com \
    --to=cw00.choi@samsung.com \
    --cc=chanwoo@kernel.org \
    --cc=inki.dae@samsung.com \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=myungjoo.ham@samsung.com \
    --cc=rafael.j.wysocki@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.