Staging: fbtft: Fix probing of gpio descriptor
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.
Fixes: c440eee1a7
("Staging: fbtft: Switch to the gpio descriptor interface")
Reviewed-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
Tested-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
Tested-by: Jan Sebastian Götte <linux@jaseg.net>
Signed-off-by: Phil Reid <preid@electromag.com.au>
Cc: stable <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/1563236677-5045-2-git-send-email-preid@electromag.com.au
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
5f9e832c13
commit
dbc4f989c8
1 changed files with 18 additions and 21 deletions
|
@ -76,21 +76,18 @@ static int fbtft_request_one_gpio(struct fbtft_par *par,
|
||||||
struct gpio_desc **gpiop)
|
struct gpio_desc **gpiop)
|
||||||
{
|
{
|
||||||
struct device *dev = par->info->device;
|
struct device *dev = par->info->device;
|
||||||
struct device_node *node = dev->of_node;
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (of_find_property(node, name, NULL)) {
|
*gpiop = devm_gpiod_get_index_optional(dev, name, index,
|
||||||
*gpiop = devm_gpiod_get_index(dev, dev->driver->name, index,
|
|
||||||
GPIOD_OUT_HIGH);
|
GPIOD_OUT_HIGH);
|
||||||
if (IS_ERR(*gpiop)) {
|
if (IS_ERR(*gpiop)) {
|
||||||
ret = PTR_ERR(*gpiop);
|
ret = PTR_ERR(*gpiop);
|
||||||
dev_err(dev,
|
dev_err(dev,
|
||||||
"Failed to request %s GPIO:%d\n", name, ret);
|
"Failed to request %s GPIO: %d\n", name, ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
fbtft_par_dbg(DEBUG_REQUEST_GPIOS, par, "%s: '%s' GPIO\n",
|
fbtft_par_dbg(DEBUG_REQUEST_GPIOS, par, "%s: '%s' GPIO\n",
|
||||||
__func__, name);
|
__func__, name);
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -103,34 +100,34 @@ static int fbtft_request_gpios_dt(struct fbtft_par *par)
|
||||||
if (!par->info->device->of_node)
|
if (!par->info->device->of_node)
|
||||||
return -EINVAL;
|
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)
|
if (ret)
|
||||||
return 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)
|
if (ret)
|
||||||
return 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)
|
if (ret)
|
||||||
return 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)
|
if (ret)
|
||||||
return 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)
|
if (ret)
|
||||||
return 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)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
for (i = 0; i < 16; i++) {
|
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]);
|
&par->gpio.db[i]);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = fbtft_request_one_gpio(par, "led-gpios", i,
|
ret = fbtft_request_one_gpio(par, "led", i,
|
||||||
&par->gpio.led[i]);
|
&par->gpio.led[i]);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = fbtft_request_one_gpio(par, "aux-gpios", i,
|
ret = fbtft_request_one_gpio(par, "aux", i,
|
||||||
&par->gpio.aux[i]);
|
&par->gpio.aux[i]);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Add table
Reference in a new issue