1c942fddfSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-or-later 2734d82f4SMasahiro Yamada /* 3734d82f4SMasahiro Yamada * Copyright (C) 2016 Socionext Inc. 4734d82f4SMasahiro Yamada * Author: Masahiro Yamada <yamada.masahiro@socionext.com> 5734d82f4SMasahiro Yamada */ 6734d82f4SMasahiro Yamada 7734d82f4SMasahiro Yamada #include <linux/clk-provider.h> 8734d82f4SMasahiro Yamada #include <linux/device.h> 9734d82f4SMasahiro Yamada 10734d82f4SMasahiro Yamada #include "clk-uniphier.h" 11734d82f4SMasahiro Yamada uniphier_clk_register_fixed_rate(struct device * dev,const char * name,const struct uniphier_clk_fixed_rate_data * data)12734d82f4SMasahiro Yamadastruct clk_hw *uniphier_clk_register_fixed_rate(struct device *dev, 13734d82f4SMasahiro Yamada const char *name, 14734d82f4SMasahiro Yamada const struct uniphier_clk_fixed_rate_data *data) 15734d82f4SMasahiro Yamada { 16734d82f4SMasahiro Yamada struct clk_fixed_rate *fixed; 17734d82f4SMasahiro Yamada struct clk_init_data init; 18734d82f4SMasahiro Yamada int ret; 19734d82f4SMasahiro Yamada 20734d82f4SMasahiro Yamada /* allocate fixed-rate clock */ 21734d82f4SMasahiro Yamada fixed = devm_kzalloc(dev, sizeof(*fixed), GFP_KERNEL); 22734d82f4SMasahiro Yamada if (!fixed) 23734d82f4SMasahiro Yamada return ERR_PTR(-ENOMEM); 24734d82f4SMasahiro Yamada 25734d82f4SMasahiro Yamada init.name = name; 26734d82f4SMasahiro Yamada init.ops = &clk_fixed_rate_ops; 27*ca85a667SKunihiko Hayashi init.flags = 0; 28734d82f4SMasahiro Yamada init.parent_names = NULL; 29734d82f4SMasahiro Yamada init.num_parents = 0; 30734d82f4SMasahiro Yamada 31734d82f4SMasahiro Yamada fixed->fixed_rate = data->fixed_rate; 32734d82f4SMasahiro Yamada fixed->hw.init = &init; 33734d82f4SMasahiro Yamada 34734d82f4SMasahiro Yamada ret = devm_clk_hw_register(dev, &fixed->hw); 35734d82f4SMasahiro Yamada if (ret) 36734d82f4SMasahiro Yamada return ERR_PTR(ret); 37734d82f4SMasahiro Yamada 38734d82f4SMasahiro Yamada return &fixed->hw; 39734d82f4SMasahiro Yamada } 40