|  | @@ -230,3 +230,70 @@ int __init omap_mux_get_by_name(const char *muxname,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		*found_partition = partition;
 | 
	
		
			
				|  |  |  		*found_mux = mux;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		return mux_mode;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return -ENODEV;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +int __init omap_mux_init_signal(const char *muxname, int val)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	struct omap_mux_partition *partition = NULL;
 | 
	
		
			
				|  |  | +	struct omap_mux *mux = NULL;
 | 
	
		
			
				|  |  | +	u16 old_mode;
 | 
	
		
			
				|  |  | +	int mux_mode;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	mux_mode = omap_mux_get_by_name(muxname, &partition, &mux);
 | 
	
		
			
				|  |  | +	if (mux_mode < 0 || !mux)
 | 
	
		
			
				|  |  | +		return mux_mode;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	old_mode = omap_mux_read(partition, mux->reg_offset);
 | 
	
		
			
				|  |  | +	mux_mode |= val;
 | 
	
		
			
				|  |  | +	pr_debug("%s: Setting signal %s 0x%04x -> 0x%04x\n",
 | 
	
		
			
				|  |  | +			 __func__, muxname, old_mode, mux_mode);
 | 
	
		
			
				|  |  | +	omap_mux_write(partition, mux_mode, mux->reg_offset);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return 0;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +struct omap_hwmod_mux_info * __init
 | 
	
		
			
				|  |  | +omap_hwmod_mux_init(struct omap_device_pad *bpads, int nr_pads)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	struct omap_hwmod_mux_info *hmux;
 | 
	
		
			
				|  |  | +	int i, nr_pads_dynamic = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!bpads || nr_pads < 1)
 | 
	
		
			
				|  |  | +		return NULL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	hmux = kzalloc(sizeof(struct omap_hwmod_mux_info), GFP_KERNEL);
 | 
	
		
			
				|  |  | +	if (!hmux)
 | 
	
		
			
				|  |  | +		goto err1;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	hmux->nr_pads = nr_pads;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	hmux->pads = kzalloc(sizeof(struct omap_device_pad) *
 | 
	
		
			
				|  |  | +				nr_pads, GFP_KERNEL);
 | 
	
		
			
				|  |  | +	if (!hmux->pads)
 | 
	
		
			
				|  |  | +		goto err2;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	for (i = 0; i < hmux->nr_pads; i++) {
 | 
	
		
			
				|  |  | +		struct omap_mux_partition *partition;
 | 
	
		
			
				|  |  | +		struct omap_device_pad *bpad = &bpads[i], *pad = &hmux->pads[i];
 | 
	
		
			
				|  |  | +		struct omap_mux *mux;
 | 
	
		
			
				|  |  | +		int mux_mode;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		mux_mode = omap_mux_get_by_name(bpad->name, &partition, &mux);
 | 
	
		
			
				|  |  | +		if (mux_mode < 0)
 | 
	
		
			
				|  |  | +			goto err3;
 | 
	
		
			
				|  |  | +		if (!pad->partition)
 | 
	
		
			
				|  |  | +			pad->partition = partition;
 | 
	
		
			
				|  |  | +		if (!pad->mux)
 | 
	
		
			
				|  |  | +			pad->mux = mux;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		pad->name = kzalloc(strlen(bpad->name) + 1, GFP_KERNEL);
 | 
	
		
			
				|  |  | +		if (!pad->name) {
 | 
	
		
			
				|  |  | +			int j;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			for (j = i - 1; j >= 0; j--)
 | 
	
		
			
				|  |  | +				kfree(hmux->pads[j].name);
 |