BUG: Staging: fbtft: Switch to the gpio descriptor interface

Phil Reid preid at electromag.com.au
Wed Jul 10 09:27:41 UTC 2019


On 10/07/2019 17:05, Nicolas Saenz Julienne wrote:
> On Wed, 2019-07-10 at 16:31 +0800, Phil Reid wrote:
>> G'day Nishad,
>>
>> I'm just wondering if the commit
>> c440eee1a7a1d0f "Staging: fbtft: Switch to the gpio descriptor interface"
>> was tested on anything.
>>
>> I've had to apply the following patch to get my display functioning again.
>>
>> in particular the devm_gpiod_get_index using dev->driver->name for the gpio
>> lookup seems
>> wrong.
> 
> FYI We've seen the same issue this week in opensuse's bugzilla and was testing
> something very similar to the patch below. Phil do you plan on submitting your
> fix?
> 

Yes I can submit a patch tomorrow.

I just wasn't sure if it was working for anyone.



> 
>> Also I've had to invert the polarity of the reset-gpios in the DT file for the
>> display to function.
>>
>> this code:
>> 	gpiod_set_value_cansleep(par->gpio.reset, 0);
>> 	usleep_range(20, 40);
>> 	gpiod_set_value_cansleep(par->gpio.reset, 1);
>>
>> could be read as deasserting the reset line and then asserting it.
>> So I've had to specify and active high reset line in the DT.
>>
>> Regards
>> Phil
>>
>>
>>
>>
>>
>> diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-
>> core.c
>> index 9b07bad..6fe7cb5 100644
>> --- a/drivers/staging/fbtft/fbtft-core.c
>> +++ b/drivers/staging/fbtft/fbtft-core.c
>> @@ -79,18 +79,16 @@ static int fbtft_request_one_gpio(struct fbtft_par *par,
>>    	struct device_node *node = dev->of_node;
>>    	int ret = 0;
>>
>> -	if (of_find_property(node, name, NULL)) {
>> -		*gpiop = devm_gpiod_get_index(dev, dev->driver->name, index,
>> -					      GPIOD_OUT_HIGH);
>> -		if (IS_ERR(*gpiop)) {
>> -			ret = PTR_ERR(*gpiop);
>> -			dev_err(dev,
>> -				"Failed to request %s GPIO:%d\n", name, ret);
>> -			return ret;
>> -		}
>> -		fbtft_par_dbg(DEBUG_REQUEST_GPIOS, par, "%s: '%s' GPIO\n",
>> -			      __func__, name);
>> +	*gpiop = devm_gpiod_get_index_optional(dev, name, index,
>> +				      GPIOD_OUT_HIGH);
>> +	if (IS_ERR(*gpiop)) {
>> +		ret = PTR_ERR(*gpiop);
>> +		dev_err(dev,
>> +			"Failed to request %s GPIO: (%d)\n", name, ret);
>> +		return ret;
>>    	}
>> +	fbtft_par_dbg(DEBUG_REQUEST_GPIOS, par, "%s: '%s' GPIO\n",
>> +		      __func__, name);
>>
>>    	return ret;
>>    }
>> @@ -103,34 +101,34 @@ static int fbtft_request_gpios_dt(struct fbtft_par *par)
>>    	if (!par->info->device->of_node)
>>    		return -EINVAL;
>>
>> -	ret = fbtft_request_one_gpio(par, "reset-gpios", 0, &par->gpio.reset);
>> +	ret = fbtft_request_one_gpio(par, "reset", 0, &par->gpio.reset);
>>    	if (ret)
>>    		return ret;
>> -	ret = fbtft_request_one_gpio(par, "dc-gpios", 0, &par->gpio.dc);
>> +	ret = fbtft_request_one_gpio(par, "dc", 0, &par->gpio.dc);
>>    	if (ret)
>>    		return ret;
>> -	ret = fbtft_request_one_gpio(par, "rd-gpios", 0, &par->gpio.rd);
>> +	ret = fbtft_request_one_gpio(par, "rd", 0, &par->gpio.rd);
>>    	if (ret)
>>    		return ret;
>> -	ret = fbtft_request_one_gpio(par, "wr-gpios", 0, &par->gpio.wr);
>> +	ret = fbtft_request_one_gpio(par, "wr", 0, &par->gpio.wr);
>>    	if (ret)
>>    		return ret;
>> -	ret = fbtft_request_one_gpio(par, "cs-gpios", 0, &par->gpio.cs);
>> +	ret = fbtft_request_one_gpio(par, "cs", 0, &par->gpio.cs);
>>    	if (ret)
>>    		return ret;
>> -	ret = fbtft_request_one_gpio(par, "latch-gpios", 0, &par->gpio.latch);
>> +	ret = fbtft_request_one_gpio(par, "latch", 0, &par->gpio.latch);
>>    	if (ret)
>>    		return ret;
>>    	for (i = 0; i < 16; i++) {
>> -		ret = fbtft_request_one_gpio(par, "db-gpios", i,
>> +		ret = fbtft_request_one_gpio(par, "db", i,
>>    					     &par->gpio.db[i]);
>>    		if (ret)
>>    			return ret;
>> -		ret = fbtft_request_one_gpio(par, "led-gpios", i,
>> +		ret = fbtft_request_one_gpio(par, "led", i,
>>    					     &par->gpio.led[i]);
>>    		if (ret)
>>    			return ret;
>> -		ret = fbtft_request_one_gpio(par, "aux-gpios", i,
>> +		ret = fbtft_request_one_gpio(par, "aux", i,
>>    					     &par->gpio.aux[i]);
>>    		if (ret)
>>    			return ret;
>>
>>
>>


-- 
Regards
Phil Reid


More information about the dri-devel mailing list