Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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;
}