1f26c8a8eSSimon Glass /* 2f26c8a8eSSimon Glass * Copyright (c) 2015 Google, Inc 3f26c8a8eSSimon Glass * Written by Simon Glass <sjg@chromium.org> 4f26c8a8eSSimon Glass * 5f26c8a8eSSimon Glass * SPDX-License-Identifier: GPL-2.0+ 6f26c8a8eSSimon Glass */ 7f26c8a8eSSimon Glass 808d0d6f3SMichal Simek #ifndef _CLK_H_ 908d0d6f3SMichal Simek #define _CLK_H_ 1008d0d6f3SMichal Simek 11ad1cf785SMasahiro Yamada #include <linux/types.h> 12ad1cf785SMasahiro Yamada 13ad1cf785SMasahiro Yamada struct udevice; 14ad1cf785SMasahiro Yamada 1508d0d6f3SMichal Simek int soc_clk_dump(void); 1608d0d6f3SMichal Simek 17f26c8a8eSSimon Glass struct clk_ops { 18f26c8a8eSSimon Glass /** 19f26c8a8eSSimon Glass * get_rate() - Get current clock rate 20f26c8a8eSSimon Glass * 21f26c8a8eSSimon Glass * @dev: Device to check (UCLASS_CLK) 22f26c8a8eSSimon Glass * @return clock rate in Hz, or -ve error code 23f26c8a8eSSimon Glass */ 24f26c8a8eSSimon Glass ulong (*get_rate)(struct udevice *dev); 25f26c8a8eSSimon Glass 26f26c8a8eSSimon Glass /** 27f26c8a8eSSimon Glass * set_rate() - Set current clock rate 28f26c8a8eSSimon Glass * 29f26c8a8eSSimon Glass * @dev: Device to adjust 30f26c8a8eSSimon Glass * @rate: New clock rate in Hz 31f26c8a8eSSimon Glass * @return new rate, or -ve error code 32f26c8a8eSSimon Glass */ 33f26c8a8eSSimon Glass ulong (*set_rate)(struct udevice *dev, ulong rate); 34f26c8a8eSSimon Glass 35f26c8a8eSSimon Glass /** 36*f0e07516SMasahiro Yamada * enable() - Enable the clock for a peripheral 37*f0e07516SMasahiro Yamada * 38*f0e07516SMasahiro Yamada * @dev: clock provider 39*f0e07516SMasahiro Yamada * @periph: Peripheral ID to enable 40*f0e07516SMasahiro Yamada * @return zero on success, or -ve error code 41*f0e07516SMasahiro Yamada */ 42*f0e07516SMasahiro Yamada int (*enable)(struct udevice *dev, int periph); 43*f0e07516SMasahiro Yamada 44*f0e07516SMasahiro Yamada /** 458bdf9cfdSMasahiro Yamada * get_periph_rate() - Get clock rate for a peripheral 46f26c8a8eSSimon Glass * 478bdf9cfdSMasahiro Yamada * @dev: Device to check (UCLASS_CLK) 488bdf9cfdSMasahiro Yamada * @periph: Peripheral ID to check 498bdf9cfdSMasahiro Yamada * @return clock rate in Hz, or -ve error code 50f26c8a8eSSimon Glass */ 51f26c8a8eSSimon Glass ulong (*get_periph_rate)(struct udevice *dev, int periph); 52f26c8a8eSSimon Glass 53f26c8a8eSSimon Glass /** 548bdf9cfdSMasahiro Yamada * set_periph_rate() - Set current clock rate for a peripheral 55f26c8a8eSSimon Glass * 56f26c8a8eSSimon Glass * @dev: Device to update (UCLASS_CLK) 578bdf9cfdSMasahiro Yamada * @periph: Peripheral ID to update 58f26c8a8eSSimon Glass * @return new clock rate in Hz, or -ve error code 59f26c8a8eSSimon Glass */ 60f26c8a8eSSimon Glass ulong (*set_periph_rate)(struct udevice *dev, int periph, ulong rate); 61f26c8a8eSSimon Glass }; 62f26c8a8eSSimon Glass 63f26c8a8eSSimon Glass #define clk_get_ops(dev) ((struct clk_ops *)(dev)->driver->ops) 64f26c8a8eSSimon Glass 65f26c8a8eSSimon Glass /** 66f26c8a8eSSimon Glass * clk_get_rate() - Get current clock rate 67f26c8a8eSSimon Glass * 68f26c8a8eSSimon Glass * @dev: Device to check (UCLASS_CLK) 69f26c8a8eSSimon Glass * @return clock rate in Hz, or -ve error code 70f26c8a8eSSimon Glass */ 71f26c8a8eSSimon Glass ulong clk_get_rate(struct udevice *dev); 72f26c8a8eSSimon Glass 73f26c8a8eSSimon Glass /** 748bdf9cfdSMasahiro Yamada * clk_set_rate() - Set current clock rate 75f26c8a8eSSimon Glass * 76f26c8a8eSSimon Glass * @dev: Device to adjust 77f26c8a8eSSimon Glass * @rate: New clock rate in Hz 78f26c8a8eSSimon Glass * @return new rate, or -ve error code 79f26c8a8eSSimon Glass */ 80f26c8a8eSSimon Glass ulong clk_set_rate(struct udevice *dev, ulong rate); 81f26c8a8eSSimon Glass 82f26c8a8eSSimon Glass /** 83*f0e07516SMasahiro Yamada * clk_enable() - Enable the clock for a peripheral 84*f0e07516SMasahiro Yamada * 85*f0e07516SMasahiro Yamada * @dev: clock provider 86*f0e07516SMasahiro Yamada * @periph: Peripheral ID to enable 87*f0e07516SMasahiro Yamada * @return zero on success, or -ve error code 88*f0e07516SMasahiro Yamada */ 89*f0e07516SMasahiro Yamada int clk_enable(struct udevice *dev, int periph); 90*f0e07516SMasahiro Yamada 91*f0e07516SMasahiro Yamada /** 92f26c8a8eSSimon Glass * clk_get_periph_rate() - Get current clock rate for a peripheral 93f26c8a8eSSimon Glass * 94f26c8a8eSSimon Glass * @dev: Device to check (UCLASS_CLK) 95f26c8a8eSSimon Glass * @return clock rate in Hz, -ve error code 96f26c8a8eSSimon Glass */ 97f26c8a8eSSimon Glass ulong clk_get_periph_rate(struct udevice *dev, int periph); 98f26c8a8eSSimon Glass 99f26c8a8eSSimon Glass /** 100f26c8a8eSSimon Glass * clk_set_periph_rate() - Set current clock rate for a peripheral 101f26c8a8eSSimon Glass * 102f26c8a8eSSimon Glass * @dev: Device to update (UCLASS_CLK) 1038bdf9cfdSMasahiro Yamada * @periph: Peripheral ID to update 104f26c8a8eSSimon Glass * @return new clock rate in Hz, or -ve error code 105f26c8a8eSSimon Glass */ 106f26c8a8eSSimon Glass ulong clk_set_periph_rate(struct udevice *dev, int periph, ulong rate); 107f26c8a8eSSimon Glass 10808d0d6f3SMichal Simek #endif /* _CLK_H_ */ 109