From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932482AbdJKDJz (ORCPT ); Tue, 10 Oct 2017 23:09:55 -0400 Received: from mailout2.samsung.com ([203.254.224.25]:50120 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755039AbdJKDJt (ORCPT ); Tue, 10 Oct 2017 23:09:49 -0400 X-AuditID: b6c32a39-a57ff7000000109f-87-59dd8b7b27b1 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 4/8] PM / devfreq: Show the all available frequencies Date: Wed, 11 Oct 2017 12:09:20 +0900 Message-id: <1507691364-3899-5-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+NgFlrBKsWRmVeSWpSXmKPExsWy7bCmgW51991Ig8sPeC0m3rjCYnH9y3NW i0n3J7BYnG16w25xedccNovPvUcYLW43rmCzeLziLbsDh8fiPS+ZPDat6mTz6NuyitHj8ya5 AJaoVJuM1MSU1CKF1Lzk/JTMvHRbJe/geOd4UzMDQ11DSwtzJYW8xNxUWyUXnwBdt8wcoDOU FMoSc0qBQgGJxcVK+nY2RfmlJakKGfnFJbZK0YaGRnqGBuZ6RkZGeibGsVZGpkAlCakZe09F FewRqGhfeJCpgXEVbxcjJ4eEgInEsm/z2LsYuTiEBHYwSizbe5QVwvnOKPH5bysbTNXztS3M ILaQwG5GibnLfSCKfjBK9LTMZQdJsAloSex/cQOsQUQgQKJz7SomkCJmgSZGif33boAVCQt4 SPzcchesiEVAVeLC79NAUzk4eAVcJOZu54ZYJifxYc8jsHJOAVeJybNOgZ0nIdDDJnFjXTfU RS4Shx6fY4SwhSVeHd/CDjJHQkBa4tJRW4j6dkaJzXPusUA4HYwS91c2skI0GEuc6mpkArGZ Bfgk3n3tYYVo5pXoaBOCKPGQeHbjDzuE7Sjx5vVnJoiPZzBKbF1znnkCo9QCRoZVjGKpBcW5 6anFhgWmesWJucWleel6yfm5mxjBqUTLcgfjsXM+hxgFOBiVeHh3XLkTKcSaWFZcmXuIUYKD WUmE16LwbqQQb0piZVVqUX58UWlOavEhRlNg2ExklhJNzgemubySeEMTSwMTMyNgWrA0NFQS 5xVdfy1CSCA9sSQ1OzW1ILUIpo+Jg1OqgXHZvIbDJnIzRQvU4vhdjj/s8Qs4LJhxsWmd+9K2 hHLOq9Ecb7pa/4mc2vJUdubWQp8SbU7Pr6aeHm+X6yXJOC++uLitg9/PRc0yXC/hT03nJ279 +ayTz1lNNPcUXr11zXW+KaeY3fL+9h/OvP1eN15oP//N5M/W9RKxq813K/1n2x1S/eLSdSWW 4oxEQy3mouJEAIw+mfc7AwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupmluLIzCtJLcpLzFFi42I5/e+xgG5V991Ig6vXTCwm3rjCYnH9y3NW i0n3J7BYnG16w25xedccNovPvUcYLW43rmCzeLziLbsDh8fiPS+ZPDat6mTz6NuyitHj8ya5 AJYoLpuU1JzMstQifbsEroy9p6IK9ghUtC88yNTAuIq3i5GTQ0LAROL52hbmLkYuDiGBnYwS l/e9YIJwfjBKbHk8nQmkik1AS2L/ixtsILaIgJ/E9vnrGUGKmAWaGCWW998CSwgLeEj83HIX zGYRUJW48Ps00FgODl4BF4m527khtslJfNjziB3E5hRwlZg86xSYLQRU8mP1S8YJjDwLGBlW MUqmFhTnpucWGxUY5qWW6xUn5haX5qXrJefnbmIEBtG2w1p9OxjvL4k/xCjAwajEwytw/U6k EGtiWXFl7iFGCQ5mJRFei8K7kUK8KYmVValF+fFFpTmpxYcYpTlYlMR5b+cdixQSSE8sSc1O TS1ILYLJMnFwSjUwij1IvmfYYP7r03MtvZ81dctrEhWqpOseJlYsr5isdeiV9HueY2ufTgrc waunX6F577aC10UuNo5Vp64lTm6eP9Pyz67QvUaa18Mkfh/8OLHPI2JX3wzZdd3pmz1OujYW rBWae6Hdb322j3/PJafVju/rJqp2fyuLVeFUEuW5Z6uSpjN94osHSizFGYmGWsxFxYkA2eug cx4CAAA= X-CMS-MailID: 20171011030946epcas1p30ca5f54e1dd4df92cefd19a385423a41 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: 20171011030946epcas1p30ca5f54e1dd4df92cefd19a385423a41 X-RootMTR: 20171011030946epcas1p30ca5f54e1dd4df92cefd19a385423a41 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 The commit a76caf55e5b35 ("thermal: Add devfreq cooling") allows the devfreq device to use the cooling device. When the cooling down are required, the devfreq_cooling.c disables the OPP entry with the dev_pm_opp_disable(). In result, 'available_frequencies'[1] sysfs node never came to show the all available frequencies. [1] /sys/class/devfreq/.../available_frequencies So, this patch uses the 'freq_table' in the 'struct devfreq_dev_profile' in order to show the all available frequencies. - If 'freq_table' is NULL, devfreq core initializes them by using OPP values. - If 'freq_table' is initialized, devfreq core just uses the 'freq_table'. Signed-off-by: Chanwoo Choi --- drivers/devfreq/devfreq.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c index 799a0cf75d39..1c4b377cacfb 100644 --- a/drivers/devfreq/devfreq.c +++ b/drivers/devfreq/devfreq.c @@ -1185,22 +1185,26 @@ static ssize_t available_frequencies_show(struct device *d, char *buf) { struct devfreq *df = to_devfreq(d); - struct device *dev = df->dev.parent; - struct dev_pm_opp *opp; ssize_t count = 0; - unsigned long freq = 0; + unsigned long *freq_table; + int i, max_state; - do { - opp = dev_pm_opp_find_freq_ceil(dev, &freq); - if (IS_ERR(opp)) - break; + mutex_lock(&df->lock); - dev_pm_opp_put(opp); - count += scnprintf(&buf[count], (PAGE_SIZE - count - 2), - "%lu ", freq); - freq++; - } while (1); + freq_table = df->profile->freq_table; + max_state = df->profile->max_state; + if (freq_table[0] < freq_table[max_state - 1]) { + for (i = 0; i < max_state; i++) + count += scnprintf(&buf[count], (PAGE_SIZE - count - 2), + "%lu ", freq_table[i]); + } else { + for (i = max_state - 1; i >= 0 ; i--) + count += scnprintf(&buf[count], (PAGE_SIZE - count - 2), + "%lu ", freq_table[i]); + } + + mutex_unlock(&df->lock); /* Truncate the trailing space */ if (count) count--; -- 1.9.1