Skip to content

Commit 4285027

Browse files
committed
Merge tag 'devfreq-next-for-5.10' of git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/linux into pm-devfreq
Pull devfreq updates for 5.10 from Chanwoo Choi: "1. Update devfreq core - Until now, devfreq and devfreq-event framework defined the fixed 'devfreq' and 'devfreq-event' property to get the devfreq/devfreq-event phandle. But, these property names are not expressing the h/w. So, deprecate the fixed property names 'devfreq' and 'devfreq-event'. But, in order to keep the backward compatibility of devicetree, don't change the property name on devfreq device drivers and devicetree. 2. Update devfreq driver - Replace reset_control_(assert|dessert) fucntions with reset_control_reset() for reseting the h/w during probe on tegra30-devfreq.c." * tag 'devfreq-next-for-5.10' of git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/linux: PM / devfreq: tegra30: Improve initial hardware resetting PM / devfreq: event: Change prototype of devfreq_event_get_edev_by_phandle function PM / devfreq: Change prototype of devfreq_get_devfreq_by_phandle function PM / devfreq: Add devfreq_get_devfreq_by_node function
2 parents a1b8638 + d353d12 commit 4285027

8 files changed

Lines changed: 83 additions & 36 deletions

File tree

drivers/devfreq/devfreq-event.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -213,20 +213,21 @@ EXPORT_SYMBOL_GPL(devfreq_event_reset_event);
213213
* devfreq_event_get_edev_by_phandle() - Get the devfreq-event dev from
214214
* devicetree.
215215
* @dev : the pointer to the given device
216+
* @phandle_name: name of property holding a phandle value
216217
* @index : the index into list of devfreq-event device
217218
*
218219
* Note that this function return the pointer of devfreq-event device.
219220
*/
220221
struct devfreq_event_dev *devfreq_event_get_edev_by_phandle(struct device *dev,
221-
int index)
222+
const char *phandle_name, int index)
222223
{
223224
struct device_node *node;
224225
struct devfreq_event_dev *edev;
225226

226-
if (!dev->of_node)
227+
if (!dev->of_node || !phandle_name)
227228
return ERR_PTR(-EINVAL);
228229

229-
node = of_parse_phandle(dev->of_node, "devfreq-events", index);
230+
node = of_parse_phandle(dev->of_node, phandle_name, index);
230231
if (!node)
231232
return ERR_PTR(-ENODEV);
232233

@@ -258,19 +259,20 @@ EXPORT_SYMBOL_GPL(devfreq_event_get_edev_by_phandle);
258259
/**
259260
* devfreq_event_get_edev_count() - Get the count of devfreq-event dev
260261
* @dev : the pointer to the given device
262+
* @phandle_name: name of property holding a phandle value
261263
*
262264
* Note that this function return the count of devfreq-event devices.
263265
*/
264-
int devfreq_event_get_edev_count(struct device *dev)
266+
int devfreq_event_get_edev_count(struct device *dev, const char *phandle_name)
265267
{
266268
int count;
267269

268-
if (!dev->of_node) {
270+
if (!dev->of_node || !phandle_name) {
269271
dev_err(dev, "device does not have a device node entry\n");
270272
return -EINVAL;
271273
}
272274

273-
count = of_property_count_elems_of_size(dev->of_node, "devfreq-events",
275+
count = of_property_count_elems_of_size(dev->of_node, phandle_name,
274276
sizeof(u32));
275277
if (count < 0) {
276278
dev_err(dev,

drivers/devfreq/devfreq.c

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -983,48 +983,75 @@ struct devfreq *devm_devfreq_add_device(struct device *dev,
983983
EXPORT_SYMBOL(devm_devfreq_add_device);
984984

985985
#ifdef CONFIG_OF
986+
/*
987+
* devfreq_get_devfreq_by_node - Get the devfreq device from devicetree
988+
* @node - pointer to device_node
989+
*
990+
* return the instance of devfreq device
991+
*/
992+
struct devfreq *devfreq_get_devfreq_by_node(struct device_node *node)
993+
{
994+
struct devfreq *devfreq;
995+
996+
if (!node)
997+
return ERR_PTR(-EINVAL);
998+
999+
mutex_lock(&devfreq_list_lock);
1000+
list_for_each_entry(devfreq, &devfreq_list, node) {
1001+
if (devfreq->dev.parent
1002+
&& devfreq->dev.parent->of_node == node) {
1003+
mutex_unlock(&devfreq_list_lock);
1004+
return devfreq;
1005+
}
1006+
}
1007+
mutex_unlock(&devfreq_list_lock);
1008+
1009+
return ERR_PTR(-ENODEV);
1010+
}
1011+
9861012
/*
9871013
* devfreq_get_devfreq_by_phandle - Get the devfreq device from devicetree
9881014
* @dev - instance to the given device
1015+
* @phandle_name - name of property holding a phandle value
9891016
* @index - index into list of devfreq
9901017
*
9911018
* return the instance of devfreq device
9921019
*/
993-
struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, int index)
1020+
struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev,
1021+
const char *phandle_name, int index)
9941022
{
9951023
struct device_node *node;
9961024
struct devfreq *devfreq;
9971025

998-
if (!dev)
1026+
if (!dev || !phandle_name)
9991027
return ERR_PTR(-EINVAL);
10001028

10011029
if (!dev->of_node)
10021030
return ERR_PTR(-EINVAL);
10031031

1004-
node = of_parse_phandle(dev->of_node, "devfreq", index);
1032+
node = of_parse_phandle(dev->of_node, phandle_name, index);
10051033
if (!node)
10061034
return ERR_PTR(-ENODEV);
10071035

1008-
mutex_lock(&devfreq_list_lock);
1009-
list_for_each_entry(devfreq, &devfreq_list, node) {
1010-
if (devfreq->dev.parent
1011-
&& devfreq->dev.parent->of_node == node) {
1012-
mutex_unlock(&devfreq_list_lock);
1013-
of_node_put(node);
1014-
return devfreq;
1015-
}
1016-
}
1017-
mutex_unlock(&devfreq_list_lock);
1036+
devfreq = devfreq_get_devfreq_by_node(node);
10181037
of_node_put(node);
10191038

1020-
return ERR_PTR(-EPROBE_DEFER);
1039+
return devfreq;
10211040
}
1041+
10221042
#else
1023-
struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, int index)
1043+
struct devfreq *devfreq_get_devfreq_by_node(struct device_node *node)
1044+
{
1045+
return ERR_PTR(-ENODEV);
1046+
}
1047+
1048+
struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev,
1049+
const char *phandle_name, int index)
10241050
{
10251051
return ERR_PTR(-ENODEV);
10261052
}
10271053
#endif /* CONFIG_OF */
1054+
EXPORT_SYMBOL_GPL(devfreq_get_devfreq_by_node);
10281055
EXPORT_SYMBOL_GPL(devfreq_get_devfreq_by_phandle);
10291056

10301057
/**

drivers/devfreq/exynos-bus.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ static int exynos_bus_parent_parse_of(struct device_node *np,
193193
* Get the devfreq-event devices to get the current utilization of
194194
* buses. This raw data will be used in devfreq ondemand governor.
195195
*/
196-
count = devfreq_event_get_edev_count(dev);
196+
count = devfreq_event_get_edev_count(dev, "devfreq-events");
197197
if (count < 0) {
198198
dev_err(dev, "failed to get the count of devfreq-event dev\n");
199199
ret = count;
@@ -209,7 +209,8 @@ static int exynos_bus_parent_parse_of(struct device_node *np,
209209
}
210210

211211
for (i = 0; i < count; i++) {
212-
bus->edev[i] = devfreq_event_get_edev_by_phandle(dev, i);
212+
bus->edev[i] = devfreq_event_get_edev_by_phandle(dev,
213+
"devfreq-events", i);
213214
if (IS_ERR(bus->edev[i])) {
214215
ret = -EPROBE_DEFER;
215216
goto err_regulator;
@@ -360,7 +361,7 @@ static int exynos_bus_profile_init_passive(struct exynos_bus *bus,
360361
profile->exit = exynos_bus_passive_exit;
361362

362363
/* Get the instance of parent devfreq device */
363-
parent_devfreq = devfreq_get_devfreq_by_phandle(dev, 0);
364+
parent_devfreq = devfreq_get_devfreq_by_phandle(dev, "devfreq", 0);
364365
if (IS_ERR(parent_devfreq))
365366
return -EPROBE_DEFER;
366367

drivers/devfreq/rk3399_dmc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ static int rk3399_dmcfreq_probe(struct platform_device *pdev)
341341
return PTR_ERR(data->dmc_clk);
342342
}
343343

344-
data->edev = devfreq_event_get_edev_by_phandle(dev, 0);
344+
data->edev = devfreq_event_get_edev_by_phandle(dev, "devfreq-events", 0);
345345
if (IS_ERR(data->edev))
346346
return -EPROBE_DEFER;
347347

drivers/devfreq/tegra30-devfreq.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -822,16 +822,18 @@ static int tegra_devfreq_probe(struct platform_device *pdev)
822822
return err;
823823
}
824824

825-
reset_control_assert(tegra->reset);
826-
827825
err = clk_prepare_enable(tegra->clock);
828826
if (err) {
829827
dev_err(&pdev->dev,
830828
"Failed to prepare and enable ACTMON clock\n");
831829
return err;
832830
}
833831

834-
reset_control_deassert(tegra->reset);
832+
err = reset_control_reset(tegra->reset);
833+
if (err) {
834+
dev_err(&pdev->dev, "Failed to reset hardware: %d\n", err);
835+
goto disable_clk;
836+
}
835837

836838
rate = clk_round_rate(tegra->emc_clock, ULONG_MAX);
837839
if (rate < 0) {

drivers/memory/samsung/exynos5422-dmc.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1293,7 +1293,8 @@ static int exynos5_performance_counters_init(struct exynos5_dmc *dmc)
12931293
int counters_size;
12941294
int ret, i;
12951295

1296-
dmc->num_counters = devfreq_event_get_edev_count(dmc->dev);
1296+
dmc->num_counters = devfreq_event_get_edev_count(dmc->dev,
1297+
"devfreq-events");
12971298
if (dmc->num_counters < 0) {
12981299
dev_err(dmc->dev, "could not get devfreq-event counters\n");
12991300
return dmc->num_counters;
@@ -1306,7 +1307,8 @@ static int exynos5_performance_counters_init(struct exynos5_dmc *dmc)
13061307

13071308
for (i = 0; i < dmc->num_counters; i++) {
13081309
dmc->counter[i] =
1309-
devfreq_event_get_edev_by_phandle(dmc->dev, i);
1310+
devfreq_event_get_edev_by_phandle(dmc->dev,
1311+
"devfreq-events", i);
13101312
if (IS_ERR_OR_NULL(dmc->counter[i]))
13111313
return -EPROBE_DEFER;
13121314
}

include/linux/devfreq-event.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,11 @@ extern int devfreq_event_get_event(struct devfreq_event_dev *edev,
106106
struct devfreq_event_data *edata);
107107
extern int devfreq_event_reset_event(struct devfreq_event_dev *edev);
108108
extern struct devfreq_event_dev *devfreq_event_get_edev_by_phandle(
109-
struct device *dev, int index);
110-
extern int devfreq_event_get_edev_count(struct device *dev);
109+
struct device *dev,
110+
const char *phandle_name,
111+
int index);
112+
extern int devfreq_event_get_edev_count(struct device *dev,
113+
const char *phandle_name);
111114
extern struct devfreq_event_dev *devfreq_event_add_edev(struct device *dev,
112115
struct devfreq_event_desc *desc);
113116
extern int devfreq_event_remove_edev(struct devfreq_event_dev *edev);
@@ -152,12 +155,15 @@ static inline int devfreq_event_reset_event(struct devfreq_event_dev *edev)
152155
}
153156

154157
static inline struct devfreq_event_dev *devfreq_event_get_edev_by_phandle(
155-
struct device *dev, int index)
158+
struct device *dev,
159+
const char *phandle_name,
160+
int index)
156161
{
157162
return ERR_PTR(-EINVAL);
158163
}
159164

160-
static inline int devfreq_event_get_edev_count(struct device *dev)
165+
static inline int devfreq_event_get_edev_count(struct device *dev,
166+
const char *phandle_name)
161167
{
162168
return -EINVAL;
163169
}

include/linux/devfreq.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,9 @@ void devm_devfreq_unregister_notifier(struct device *dev,
261261
struct devfreq *devfreq,
262262
struct notifier_block *nb,
263263
unsigned int list);
264-
struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, int index);
264+
struct devfreq *devfreq_get_devfreq_by_node(struct device_node *node);
265+
struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev,
266+
const char *phandle_name, int index);
265267

266268
#if IS_ENABLED(CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND)
267269
/**
@@ -414,8 +416,13 @@ static inline void devm_devfreq_unregister_notifier(struct device *dev,
414416
{
415417
}
416418

419+
static inline struct devfreq *devfreq_get_devfreq_by_node(struct device_node *node)
420+
{
421+
return ERR_PTR(-ENODEV);
422+
}
423+
417424
static inline struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev,
418-
int index)
425+
const char *phandle_name, int index)
419426
{
420427
return ERR_PTR(-ENODEV);
421428
}

0 commit comments

Comments
 (0)