|  | @@ -257,3 +257,73 @@ int clkdm_register_platform_funcs(struct clkdm_ops *co)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if (arch_clkdm)
 | 
	
		
			
				|  |  |  		return -EEXIST;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	arch_clkdm = co;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return 0;
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * clkdm_register_clkdms - register SoC clockdomains
 | 
	
		
			
				|  |  | + * @cs: pointer to an array of struct clockdomain to register
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * Register the clockdomains available on a particular OMAP SoC.  Must
 | 
	
		
			
				|  |  | + * be called after clkdm_register_platform_funcs().  May be called
 | 
	
		
			
				|  |  | + * multiple times.  Returns -EACCES if called before
 | 
	
		
			
				|  |  | + * clkdm_register_platform_funcs(); -EINVAL if the argument @cs is
 | 
	
		
			
				|  |  | + * null; or 0 upon success.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +int clkdm_register_clkdms(struct clockdomain **cs)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	struct clockdomain **c = NULL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!arch_clkdm)
 | 
	
		
			
				|  |  | +		return -EACCES;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!cs)
 | 
	
		
			
				|  |  | +		return -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	for (c = cs; *c; c++)
 | 
	
		
			
				|  |  | +		_clkdm_register(*c);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return 0;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * clkdm_register_autodeps - register autodeps (if required)
 | 
	
		
			
				|  |  | + * @ia: pointer to a static array of struct clkdm_autodep to register
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * Register clockdomain "automatic dependencies."  These are
 | 
	
		
			
				|  |  | + * clockdomain wakeup and sleep dependencies that are automatically
 | 
	
		
			
				|  |  | + * added whenever the first clock inside a clockdomain is enabled, and
 | 
	
		
			
				|  |  | + * removed whenever the last clock inside a clockdomain is disabled.
 | 
	
		
			
				|  |  | + * These are currently only used on OMAP3 devices, and are deprecated,
 | 
	
		
			
				|  |  | + * since they waste energy.  However, until the OMAP2/3 IP block
 | 
	
		
			
				|  |  | + * enable/disable sequence can be converted to match the OMAP4
 | 
	
		
			
				|  |  | + * sequence, they are needed.
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * Must be called only after all of the SoC clockdomains are
 | 
	
		
			
				|  |  | + * registered, since the function will resolve autodep clockdomain
 | 
	
		
			
				|  |  | + * names into clockdomain pointers.
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * The struct clkdm_autodep @ia array must be static, as this function
 | 
	
		
			
				|  |  | + * does not copy the array elements.
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * Returns -EACCES if called before any clockdomains have been
 | 
	
		
			
				|  |  | + * registered, -EINVAL if called with a null @ia argument, -EEXIST if
 | 
	
		
			
				|  |  | + * autodeps have already been registered, or 0 upon success.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +int clkdm_register_autodeps(struct clkdm_autodep *ia)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	struct clkdm_autodep *a = NULL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (list_empty(&clkdm_list))
 | 
	
		
			
				|  |  | +		return -EACCES;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!ia)
 | 
	
		
			
				|  |  | +		return -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (autodeps)
 | 
	
		
			
				|  |  | +		return -EEXIST;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	autodeps = ia;
 |