diff options
| -rw-r--r-- | drivers/video/backlight/hx8357.c | 52 | 
1 files changed, 31 insertions, 21 deletions
| diff --git a/drivers/video/backlight/hx8357.c b/drivers/video/backlight/hx8357.c index a0482b567bfe..47237fa73b0c 100644 --- a/drivers/video/backlight/hx8357.c +++ b/drivers/video/backlight/hx8357.c @@ -76,6 +76,7 @@ struct hx8357_data {  	unsigned		reset;  	struct spi_device	*spi;  	int			state; +	bool			use_im_pins;  };  static u8 hx8357_seq_power[] = { @@ -250,9 +251,11 @@ static int hx8357_lcd_init(struct lcd_device *lcdev)  	 * Set the interface selection pins to SPI mode, with three  	 * wires  	 */ -	gpio_set_value_cansleep(lcd->im_pins[0], 1); -	gpio_set_value_cansleep(lcd->im_pins[1], 0); -	gpio_set_value_cansleep(lcd->im_pins[2], 1); +	if (lcd->use_im_pins) { +		gpio_set_value_cansleep(lcd->im_pins[0], 1); +		gpio_set_value_cansleep(lcd->im_pins[1], 0); +		gpio_set_value_cansleep(lcd->im_pins[2], 1); +	}  	/* Reset the screen */  	gpio_set_value(lcd->reset, 1); @@ -424,25 +427,32 @@ static int hx8357_probe(struct spi_device *spi)  		return -EINVAL;  	} -	for (i = 0; i < HX8357_NUM_IM_PINS; i++) { -		lcd->im_pins[i] = of_get_named_gpio(spi->dev.of_node, -						"im-gpios", i); -		if (lcd->im_pins[i] == -EPROBE_DEFER) { -			dev_info(&spi->dev, "GPIO requested is not here yet, deferring the probe\n"); -			return -EPROBE_DEFER; -		} -		if (!gpio_is_valid(lcd->im_pins[i])) { -			dev_err(&spi->dev, "Missing dt property: im-gpios\n"); -			return -EINVAL; -		} - -		ret = devm_gpio_request_one(&spi->dev, lcd->im_pins[i], -					GPIOF_OUT_INIT_LOW, "im_pins"); -		if (ret) { -			dev_err(&spi->dev, "failed to request gpio %d: %d\n", -				lcd->im_pins[i], ret); -			return -EINVAL; +	if (of_find_property(spi->dev.of_node, "im-gpios", NULL)) { +		lcd->use_im_pins = 1; + +		for (i = 0; i < HX8357_NUM_IM_PINS; i++) { +			lcd->im_pins[i] = of_get_named_gpio(spi->dev.of_node, +							    "im-gpios", i); +			if (lcd->im_pins[i] == -EPROBE_DEFER) { +				dev_info(&spi->dev, "GPIO requested is not here yet, deferring the probe\n"); +				return -EPROBE_DEFER; +			} +			if (!gpio_is_valid(lcd->im_pins[i])) { +				dev_err(&spi->dev, "Missing dt property: im-gpios\n"); +				return -EINVAL; +			} + +			ret = devm_gpio_request_one(&spi->dev, lcd->im_pins[i], +						    GPIOF_OUT_INIT_LOW, +						    "im_pins"); +			if (ret) { +				dev_err(&spi->dev, "failed to request gpio %d: %d\n", +					lcd->im_pins[i], ret); +				return -EINVAL; +			}  		} +	} else { +		lcd->use_im_pins = 0;  	}  	lcdev = lcd_device_register("mxsfb", &spi->dev, lcd, &hx8357_ops); | 
