mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-18 22:14:16 +00:00 
			
		
		
		
	regulator: Convert pcap-regulator to set_voltage_sel
After converting to set_voltage_sel, we can remove the workaroud of getting the best match voltage for V1. The core will iterate through the whole voltage table and find the best match for us. Signed-off-by: Axel Lin <axel.lin@gmail.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
		
							parent
							
								
									24c896f548
								
							
						
					
					
						commit
						d5ec96357d
					
				
					 1 changed files with 6 additions and 27 deletions
				
			
		|  | @ -150,40 +150,19 @@ static struct pcap_regulator vreg_table[] = { | |||
| 	VREG_INFO(SW2S,  PCAP_REG_LOWPWR,  NA, 20, NA, NA), */ | ||||
| }; | ||||
| 
 | ||||
| static int pcap_regulator_set_voltage(struct regulator_dev *rdev, | ||||
| 				      int min_uV, int max_uV, | ||||
| 				      unsigned *selector) | ||||
| static int pcap_regulator_set_voltage_sel(struct regulator_dev *rdev, | ||||
| 					  unsigned selector) | ||||
| { | ||||
| 	struct pcap_regulator *vreg = &vreg_table[rdev_get_id(rdev)]; | ||||
| 	void *pcap = rdev_get_drvdata(rdev); | ||||
| 	int uV; | ||||
| 	u8 i; | ||||
| 
 | ||||
| 	/* the regulator doesn't support voltage switching */ | ||||
| 	if (vreg->n_voltages == 1) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	for (i = 0; i < vreg->n_voltages; i++) { | ||||
| 		/* For V1 the first is not the best match */ | ||||
| 		if (i == 0 && rdev_get_id(rdev) == V1) | ||||
| 			i = 1; | ||||
| 		else if (i + 1 == vreg->n_voltages && rdev_get_id(rdev) == V1) | ||||
| 			i = 0; | ||||
| 
 | ||||
| 		uV = vreg->voltage_table[i] * 1000; | ||||
| 		if (min_uV <= uV && uV <= max_uV) { | ||||
| 			*selector = i; | ||||
| 			return ezx_pcap_set_bits(pcap, vreg->reg, | ||||
| 					(vreg->n_voltages - 1) << vreg->index, | ||||
| 					i << vreg->index); | ||||
| 		} | ||||
| 
 | ||||
| 		if (i == 0 && rdev_get_id(rdev) == V1) | ||||
| 			i = vreg->n_voltages - 1; | ||||
| 	} | ||||
| 
 | ||||
| 	/* the requested voltage range is not supported by this regulator */ | ||||
| 	return -EINVAL; | ||||
| 	return ezx_pcap_set_bits(pcap, vreg->reg, | ||||
| 				 (vreg->n_voltages - 1) << vreg->index, | ||||
| 				 selector << vreg->index); | ||||
| } | ||||
| 
 | ||||
| static int pcap_regulator_get_voltage(struct regulator_dev *rdev) | ||||
|  | @ -248,7 +227,7 @@ static int pcap_regulator_list_voltage(struct regulator_dev *rdev, | |||
| 
 | ||||
| static struct regulator_ops pcap_regulator_ops = { | ||||
| 	.list_voltage	= pcap_regulator_list_voltage, | ||||
| 	.set_voltage	= pcap_regulator_set_voltage, | ||||
| 	.set_voltage_sel = pcap_regulator_set_voltage_sel, | ||||
| 	.get_voltage	= pcap_regulator_get_voltage, | ||||
| 	.enable		= pcap_regulator_enable, | ||||
| 	.disable	= pcap_regulator_disable, | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Axel Lin
						Axel Lin