Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003  * Copyright (c) 2012-2016 Zhang, Keguang <keguang.zhang@gmail.com>
0004  */
0005 
0006 #include <linux/clk-provider.h>
0007 #include <linux/slab.h>
0008 
0009 #include "clk.h"
0010 
0011 struct clk_hw *__init clk_hw_register_pll(struct device *dev,
0012                       const char *name,
0013                       const char *parent_name,
0014                       const struct clk_ops *ops,
0015                       unsigned long flags)
0016 {
0017     int ret;
0018     struct clk_hw *hw;
0019     struct clk_init_data init;
0020 
0021     /* allocate the divider */
0022     hw = kzalloc(sizeof(*hw), GFP_KERNEL);
0023     if (!hw)
0024         return ERR_PTR(-ENOMEM);
0025 
0026     init.name = name;
0027     init.ops = ops;
0028     init.flags = flags;
0029     init.parent_names = parent_name ? &parent_name : NULL;
0030     init.num_parents = parent_name ? 1 : 0;
0031     hw->init = &init;
0032 
0033     /* register the clock */
0034     ret = clk_hw_register(dev, hw);
0035     if (ret) {
0036         kfree(hw);
0037         hw = ERR_PTR(ret);
0038     }
0039 
0040     return hw;
0041 }