int fbtft_request_gpios(struct fbtft_par *par) { struct fbtft_platform_data *pdata = par->pdata; const struct fbtft_gpio *gpio; unsigned long flags; int i; int ret; /* Initialize gpios to disabled */ par->gpio.reset = -1; par->gpio.dc = -1; par->gpio.rd = -1; par->gpio.wr = -1; par->gpio.cs = -1; par->gpio.latch = -1; for (i = 0; i < 16; i++) { par->gpio.db[i] = -1; par->gpio.led[i] = -1; par->gpio.aux[i] = -1; } if (pdata && pdata->gpios) { gpio = pdata->gpios; while (gpio->name[0]) { flags = FBTFT_GPIO_NO_MATCH; /* if driver provides match function, try it first, if no match use our own */ if (par->fbtftops.request_gpios_match) flags = par->fbtftops.request_gpios_match(par, gpio); if (flags == FBTFT_GPIO_NO_MATCH) flags = fbtft_request_gpios_match(par, gpio); if (flags != FBTFT_GPIO_NO_MATCH) { ret = gpio_request_one(gpio->gpio, flags, par->info->device->driver->name); if (ret < 0) { dev_err(par->info->device, "%s: gpio_request_one('%s'=%d) failed with %d\n", __func__, gpio->name, gpio->gpio, ret); return ret; } fbtft_par_dbg(DEBUG_REQUEST_GPIOS, par, "%s: '%s' = GPIO%d\n", __func__, gpio->name, gpio->gpio); } gpio++; } } return 0; }
static int fbtft_request_gpios(struct fbtft_par *par) { struct fbtft_platform_data *pdata = par->pdata; const struct fbtft_gpio *gpio; unsigned long flags; int ret; if (!(pdata && pdata->gpios)) return 0; gpio = pdata->gpios; while (gpio->name[0]) { flags = FBTFT_GPIO_NO_MATCH; /* if driver provides match function, try it first, * if no match use our own */ if (par->fbtftops.request_gpios_match) flags = par->fbtftops.request_gpios_match(par, gpio); if (flags == FBTFT_GPIO_NO_MATCH) flags = fbtft_request_gpios_match(par, gpio); if (flags != FBTFT_GPIO_NO_MATCH) { ret = devm_gpio_request_one(par->info->device, gpio->gpio, flags, par->info->device->driver->name); if (ret < 0) { dev_err(par->info->device, "%s: gpio_request_one('%s'=%d) failed with %d\n", __func__, gpio->name, gpio->gpio, ret); return ret; } fbtft_par_dbg(DEBUG_REQUEST_GPIOS, par, "%s: '%s' = GPIO%d\n", __func__, gpio->name, gpio->gpio); } gpio++; } return 0; }