44 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (c) 2012-2016 Zhang, Keguang <keguang.zhang@gmail.com>
 | 
						|
 *
 | 
						|
 * This program is free software; you can redistribute  it and/or modify it
 | 
						|
 * under  the terms of  the GNU General  Public License as published by the
 | 
						|
 * Free Software Foundation;  either version 2 of the  License, or (at your
 | 
						|
 * option) any later version.
 | 
						|
 */
 | 
						|
 | 
						|
#include <linux/clk-provider.h>
 | 
						|
#include <linux/slab.h>
 | 
						|
 | 
						|
struct clk_hw *__init clk_hw_register_pll(struct device *dev,
 | 
						|
					  const char *name,
 | 
						|
					  const char *parent_name,
 | 
						|
					  const struct clk_ops *ops,
 | 
						|
					  unsigned long flags)
 | 
						|
{
 | 
						|
	int ret;
 | 
						|
	struct clk_hw *hw;
 | 
						|
	struct clk_init_data init;
 | 
						|
 | 
						|
	/* allocate the divider */
 | 
						|
	hw = kzalloc(sizeof(*hw), GFP_KERNEL);
 | 
						|
	if (!hw)
 | 
						|
		return ERR_PTR(-ENOMEM);
 | 
						|
 | 
						|
	init.name = name;
 | 
						|
	init.ops = ops;
 | 
						|
	init.flags = flags | CLK_IS_BASIC;
 | 
						|
	init.parent_names = (parent_name ? &parent_name : NULL);
 | 
						|
	init.num_parents = (parent_name ? 1 : 0);
 | 
						|
	hw->init = &init;
 | 
						|
 | 
						|
	/* register the clock */
 | 
						|
	ret = clk_hw_register(dev, hw);
 | 
						|
	if (ret) {
 | 
						|
		kfree(hw);
 | 
						|
		hw = ERR_PTR(ret);
 | 
						|
	}
 | 
						|
 | 
						|
	return hw;
 | 
						|
}
 |