xref: /rk3399_rockchip-uboot/drivers/power/dvfs/dvfs-uclass.c (revision c5449fd30c8bd2024331ddf912fa467e4487c20b)
10eea0d25SJoseph Chen // SPDX-License-Identifier: GPL-2.0
20eea0d25SJoseph Chen /*
30eea0d25SJoseph Chen  * Copyright (c) 2018 Fuzhou Rockchip Electronics Co., Ltd
40eea0d25SJoseph Chen  */
50eea0d25SJoseph Chen 
60eea0d25SJoseph Chen #include <common.h>
70eea0d25SJoseph Chen #include <console.h>
80eea0d25SJoseph Chen #include <dvfs.h>
90eea0d25SJoseph Chen 
dvfs_apply(struct udevice * dev)100eea0d25SJoseph Chen int dvfs_apply(struct udevice *dev)
110eea0d25SJoseph Chen {
120eea0d25SJoseph Chen 	const struct dm_dvfs_ops *ops = device_get_ops(dev);
130eea0d25SJoseph Chen 
140eea0d25SJoseph Chen 	if (!ops->apply)
150eea0d25SJoseph Chen 		return -ENOSYS;
160eea0d25SJoseph Chen 
170eea0d25SJoseph Chen 	return ops->apply(dev);
180eea0d25SJoseph Chen }
190eea0d25SJoseph Chen 
dvfs_repeat_apply(struct udevice * dev)200eea0d25SJoseph Chen int dvfs_repeat_apply(struct udevice *dev)
210eea0d25SJoseph Chen {
220eea0d25SJoseph Chen 	const struct dm_dvfs_ops *ops = device_get_ops(dev);
230eea0d25SJoseph Chen 
240eea0d25SJoseph Chen 	if (!ops->repeat_apply)
250eea0d25SJoseph Chen 		return -ENOSYS;
260eea0d25SJoseph Chen 
270eea0d25SJoseph Chen 	return ops->repeat_apply(dev);
280eea0d25SJoseph Chen }
290eea0d25SJoseph Chen 
dvfs_init(bool apply)300eea0d25SJoseph Chen int dvfs_init(bool apply)
310eea0d25SJoseph Chen {
320eea0d25SJoseph Chen 	struct udevice *dev;
330eea0d25SJoseph Chen 	int ret;
340eea0d25SJoseph Chen 
350eea0d25SJoseph Chen 	ret = uclass_get_device(UCLASS_DVFS, 0, &dev);
360eea0d25SJoseph Chen 	if (ret) {
37*c5449fd3SJoseph Chen 		if (ret != -ENODEV)
380eea0d25SJoseph Chen 			printf("DVFS: Get dvfs device failed, ret=%d\n", ret);
390eea0d25SJoseph Chen 		return ret;
400eea0d25SJoseph Chen 	}
410eea0d25SJoseph Chen 
420eea0d25SJoseph Chen 	if (apply)
430eea0d25SJoseph Chen 		return dvfs_apply(dev);
440eea0d25SJoseph Chen 
450eea0d25SJoseph Chen 	return 0;
460eea0d25SJoseph Chen }
470eea0d25SJoseph Chen 
480eea0d25SJoseph Chen UCLASS_DRIVER(dvfs) = {
490eea0d25SJoseph Chen 	.id	= UCLASS_DVFS,
500eea0d25SJoseph Chen 	.name	= "dvfs",
510eea0d25SJoseph Chen };
52