1*f26c8a8eSSimon Glass /* 2*f26c8a8eSSimon Glass * Copyright (C) 2015 Google, Inc 3*f26c8a8eSSimon Glass * Written by Simon Glass <sjg@chromium.org> 4*f26c8a8eSSimon Glass * 5*f26c8a8eSSimon Glass * SPDX-License-Identifier: GPL-2.0+ 6*f26c8a8eSSimon Glass */ 7*f26c8a8eSSimon Glass 8*f26c8a8eSSimon Glass #include <common.h> 9*f26c8a8eSSimon Glass #include <clk.h> 10*f26c8a8eSSimon Glass #include <dm.h> 11*f26c8a8eSSimon Glass #include <errno.h> 12*f26c8a8eSSimon Glass #include <dm/lists.h> 13*f26c8a8eSSimon Glass #include <dm/root.h> 14*f26c8a8eSSimon Glass 15*f26c8a8eSSimon Glass ulong clk_get_rate(struct udevice *dev) 16*f26c8a8eSSimon Glass { 17*f26c8a8eSSimon Glass struct clk_ops *ops = clk_get_ops(dev); 18*f26c8a8eSSimon Glass 19*f26c8a8eSSimon Glass if (!ops->get_rate) 20*f26c8a8eSSimon Glass return -ENOSYS; 21*f26c8a8eSSimon Glass 22*f26c8a8eSSimon Glass return ops->get_rate(dev); 23*f26c8a8eSSimon Glass } 24*f26c8a8eSSimon Glass 25*f26c8a8eSSimon Glass ulong clk_set_rate(struct udevice *dev, ulong rate) 26*f26c8a8eSSimon Glass { 27*f26c8a8eSSimon Glass struct clk_ops *ops = clk_get_ops(dev); 28*f26c8a8eSSimon Glass 29*f26c8a8eSSimon Glass if (!ops->set_rate) 30*f26c8a8eSSimon Glass return -ENOSYS; 31*f26c8a8eSSimon Glass 32*f26c8a8eSSimon Glass return ops->set_rate(dev, rate); 33*f26c8a8eSSimon Glass } 34*f26c8a8eSSimon Glass 35*f26c8a8eSSimon Glass ulong clk_get_periph_rate(struct udevice *dev, int periph) 36*f26c8a8eSSimon Glass { 37*f26c8a8eSSimon Glass struct clk_ops *ops = clk_get_ops(dev); 38*f26c8a8eSSimon Glass 39*f26c8a8eSSimon Glass if (!ops->get_periph_rate) 40*f26c8a8eSSimon Glass return -ENOSYS; 41*f26c8a8eSSimon Glass 42*f26c8a8eSSimon Glass return ops->get_periph_rate(dev, periph); 43*f26c8a8eSSimon Glass } 44*f26c8a8eSSimon Glass 45*f26c8a8eSSimon Glass ulong clk_set_periph_rate(struct udevice *dev, int periph, ulong rate) 46*f26c8a8eSSimon Glass { 47*f26c8a8eSSimon Glass struct clk_ops *ops = clk_get_ops(dev); 48*f26c8a8eSSimon Glass 49*f26c8a8eSSimon Glass if (!ops->set_periph_rate) 50*f26c8a8eSSimon Glass return -ENOSYS; 51*f26c8a8eSSimon Glass 52*f26c8a8eSSimon Glass return ops->set_periph_rate(dev, periph, rate); 53*f26c8a8eSSimon Glass } 54*f26c8a8eSSimon Glass 55*f26c8a8eSSimon Glass UCLASS_DRIVER(clk) = { 56*f26c8a8eSSimon Glass .id = UCLASS_CLK, 57*f26c8a8eSSimon Glass .name = "clk", 58*f26c8a8eSSimon Glass }; 59