patch "Staging: fbtft: Fix probing of gpio descriptor" added to staging-linus
Subsystems (3)
This is a note to let you know that I've just added the patch titled
Staging: fbtft: Fix probing of gpio descriptor
to my staging git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
in the staging-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From dbc4f989c878fe101fb7920e9609e8ec44e097cd Mon Sep 17 00:00:00 2001
From: Phil Reid <[email protected]>
Date: Tue, 16 Jul 2019 08:24:36 +0800
Subject: Staging: fbtft: Fix probing of gpio descriptor
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Conversion to use gpio descriptors broke all gpio lookups as devm_gpiod_get_index was converted to use dev->driver->name for the gpio name lookup. Fix this by using the name param. In addition gpiod_get post-fixes the -gpios to the name so that shouldn't be included in the call. However this then breaks the of_find_property call to see if the gpio entry exists as all fbtft treats all gpios as optional. So use devm_gpiod_get_index_optional instead which achieves the same thing and is simpler.
Nishad confirmed the changes where only ever compile tested.
--- drivers/staging/fbtft/fbtft-core.c | 39 ++++++++++++++---------------- 1 file changed, 18 insertions(+), 21 deletions(-)
drivers/staging/fbtft/fbtft-core.c +18 -21
@@ -76,21 +76,18 @@ static int fbtft_request_one_gpio(struct fbtft_par *par, struct gpio_desc **gpiop) {struct device *dev = par->info->device; -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 +100,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;
Signature · 1 line
2.22.0