forked from mirrors/linux
		
	gpiolib: of: Correct error handling in of_get_named_gpiod_flags
of_get_named_gpiod_flags fails with -EPROBE_DEFER in cases where the gpio chip is available and the GPIO translation fails. This causes drivers to be re-probed erroneusly, and hides the real problem(i.e. the GPIO number being out of range). Cc: Stable <stable@vger.kernel.org> Signed-off-by: Hans Holmberg <hans.holmberg@intel.com> Reviewed-by: Alexandre Courbot <acourbot@nvidia.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
		
							parent
							
								
									ebbeba120a
								
							
						
					
					
						commit
						7b8792bbdf
					
				
					 1 changed files with 8 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -45,8 +45,14 @@ static int of_gpiochip_find_and_xlate(struct gpio_chip *gc, void *data)
 | 
			
		|||
		return false;
 | 
			
		||||
 | 
			
		||||
	ret = gc->of_xlate(gc, &gg_data->gpiospec, gg_data->flags);
 | 
			
		||||
	if (ret < 0)
 | 
			
		||||
		return false;
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
		/* We've found the gpio chip, but the translation failed.
 | 
			
		||||
		 * Return true to stop looking and return the translation
 | 
			
		||||
		 * error via out_gpio
 | 
			
		||||
		 */
 | 
			
		||||
		gg_data->out_gpio = ERR_PTR(ret);
 | 
			
		||||
		return true;
 | 
			
		||||
	 }
 | 
			
		||||
 | 
			
		||||
	gg_data->out_gpio = gpiochip_get_desc(gc, ret);
 | 
			
		||||
	return true;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue