From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932636AbdJKDKv (ORCPT ); Tue, 10 Oct 2017 23:10:51 -0400 Received: from mailout2.samsung.com ([203.254.224.25]:50117 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754273AbdJKDJt (ORCPT ); Tue, 10 Oct 2017 23:09:49 -0400 X-AuditID: b6c32a36-c09ff70000018158-3c-59dd8b7a568c From: Chanwoo Choi 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 v3 1/8] PM / devfreq: Set min/max_freq when adding the devfreq device Date: Wed, 11 Oct 2017 12:09:17 +0900 Message-id: <1507691364-3899-2-git-send-email-cw00.choi@samsung.com> X-Mailer: git-send-email 1.8.0 In-reply-to: <1507691364-3899-1-git-send-email-cw00.choi@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrJKsWRmVeSWpSXmKPExsWy7bCmnm5V991IgzkPdC0m3rjCYnH9y3NW i0n3J7BYnG16w25xedccNovPvUcYLW43rmCzeLziLbsDh8fiPS+ZPDat6mTz6NuyitHj8ya5 AJaoVJuM1MSU1CKF1Lzk/JTMvHRbJe/geOd4UzMDQ11DSwtzJYW8xNxUWyUXnwBdt8wcoDOU FMoSc0qBQgGJxcVK+nY2RfmlJakKGfnFJbZK0YaGRnqGBuZ6RkZGeibGsVZGpkAlCakZB5dm FVwRqPj1dT1LA+ML3i5GTg4JAROJrbc/sYDYQgI7GCWeTUrvYuQCsr8zSpxZuZYFpujfvvOs EIndjBJ3Lh1hhnB+MEr0tMxlB6liE9CS2P/iBhuILSIQING5dhUTSBGzQBOjxP57N8CKhAXC JY6t38AMYrMIqEpcnXoVLM4r4CLRefMqM8Q6OYkPex6BxTkFXCUmzzrFDjJIQqCHTeJKcxPU TS4SC38fYYOwhSVeHd8CVMQBZEtLXDpqC1Hfziixec49Fging1Hi/spGVogGY4lTXY1MIDaz AJ/Eu689rBDNvBIdbUIQJR4S26eeZoSwHSU2TtjECPHyDEaJEy3d7BMYpRYwMqxiFEstKM5N Ty02LDDSK07MLS7NS9dLzs/dxAhOJlpmOxgXnfM5xCjAwajEw7vjyp1IIdbEsuLK3EOMEhzM SiK8FoV3I4V4UxIrq1KL8uOLSnNSiw8xmgIDZyKzlGhyPjDR5ZXEG5pYGpiYGQETg6WhoZI4 r+j6axFCAumJJanZqakFqUUwfUwcnFINjJtW1esqfBOWFPGcqP9a4PvnhYtOtS7nqlm4g7f7 R15Iqw7zfzH2qyncd9M+tb7K/FP/VpX5pNird2Ybtf3Y7oR8E/6lqHjg3b0ngSafb77TVbG7 bl3ZujTjkCKb+PKF2znVF/I86dqlkJ+inbC36M13t7RlDzk1j1jVx4QUP/+m3ZOS/T3yuhJL cUaioRZzUXEiADV+VlU8AwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFuphluLIzCtJLcpLzFFi42I5/e+xgG5V991Ig1t35Cwm3rjCYnH9y3NW i0n3J7BYnG16w25xedccNovPvUcYLW43rmCzeLziLbsDh8fiPS+ZPDat6mTz6NuyitHj8ya5 AJYoLpuU1JzMstQifbsEroyDS7MKrghU/Pq6nqWB8QVvFyMnh4SAicS/fedZuxi5OIQEdjJK /N3TwgLh/GCU2PJ4OhNIFZuAlsT+FzfYQGwRAT+J7fPXM4IUMQs0MUos778FlhAWCJfYtqgf zGYRUJW4OvUqO4jNK+Ai0XnzKjPEOjmJD3segcU5BVwlJs86BWYLAdX8WP2ScQIjzwJGhlWM kqkFxbnpucVGBYZ5qeV6xYm5xaV56XrJ+bmbGIFhtO2wVt8OxvtL4g8xCnAwKvHwCly/EynE mlhWXJl7iFGCg1lJhNei8G6kEG9KYmVValF+fFFpTmrxIUZpDhYlcd7beccihQTSE0tSs1NT C1KLYLJMHJxSDYxzL/JHxj242uX+KihoR+UsR9fcTgbJpCkreg/KTvLiPsIifvf0VR6pdG2+ LYz5+xtVFsrfT9VVljn2N/L8twd2l3jWMn2tOMV112iplXpWxvw1m2taFnh92JJ1pld3jtrj 3jkGh6s3nnfSUdOJ/ZsbUn00cII9S7t8sfq77R9dhOc3Wca39yuxFGckGmoxFxUnAgAOeQFK HwIAAA== X-CMS-MailID: 20171011030946epcas1p156d133af4c065453eb8afde9e0e6869d X-Msg-Generator: CA X-Sender-IP: 182.195.42.142 X-Local-Sender: =?UTF-8?B?7LWc7LCs7JqwG1RpemVuIFBsYXRmb3JtIExhYihTL1fshLw=?= =?UTF-8?B?7YSwKRvsgrzshLHsoITsnpAbU2VuaW9yIEVuZ2luZWVy?= X-Global-Sender: =?UTF-8?B?Q2hhbndvbyBDaG9pG1RpemVuIFBsYXRmb3JtIExhYi4bU2Ft?= =?UTF-8?B?c3VuZyBFbGVjdHJvbmljcxtTZW5pb3IgRW5naW5lZXI=?= X-Sender-Code: =?UTF-8?B?QzEwG1RFTEUbQzEwVjgxMTE=?= CMS-TYPE: 101P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20171011030946epcas1p156d133af4c065453eb8afde9e0e6869d X-RootMTR: 20171011030946epcas1p156d133af4c065453eb8afde9e0e6869d References: <1507691364-3899-1-git-send-email-cw00.choi@samsung.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- drivers/devfreq/devfreq.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c index a1c4ee818614..ae8717a6eee1 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,21 @@ struct devfreq *devfreq_add_device(struct device *dev, mutex_lock(&devfreq->lock); } + /* Set the scaling available min_freq and max_freq */ + 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