Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp8470221imu; Tue, 4 Dec 2018 08:52:30 -0800 (PST) X-Google-Smtp-Source: AFSGD/WV9tOMbbEHjL3d3OYziPWuo63dLhRAllXDAvyL7gczmDQb/FSJ0vzdtv3gvwAo0oA3mete X-Received: by 2002:a17:902:2c03:: with SMTP id m3mr19707522plb.6.1543942350885; Tue, 04 Dec 2018 08:52:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543942350; cv=none; d=google.com; s=arc-20160816; b=tBRI819LJFxwIXbG4BsQ8l0TxLBysMuj/9bxBAAzDKIo+MhGpOpwZ1+0AgEVaGUti+ HnyCjCV9jcWe3P211mdQdh0QMXk7b0ZmgrEN8EKL89QGxbcMANost/9IzdwY5t+Nsz8x 5Hb3AzOWFPRwLeXNgb3uBKGqla9cGWcdstgqP6G2eiJvHl7zg9lVe25bTBAckfw4TNQG Ug1Ny5vz6s3AJTnsvo3OSNS45xl/vjew7lyvuo0iZF5ovAANI4YCNOx3q6wo5I1OAAvS MWi+a0RXWuUDrVJ19uEuJxZfb9dTc5vBvgD97I/NHtM7qtVsc54wPvUkla3CjrxJAr4x iwEg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:content-disposition :mime-version:message-id:subject:cc:to:from:date:dkim-signature; bh=mBcTTh/3QOepNAWRxoUieHt9IMdAD0r59E984HRpyms=; b=ojDG+iSJHlOAfNKp+lFT/UZwPxuSWR7qMK9r8OOE/4oZ7PD+bO+2G8GttOwxNEb9a5 C4tbMKCZimR2X8Q+rEO2mdGEi1PKv2JJBAdWr0rVsttgqmgNhV48P3xe+1O52BdE0z5e 1ydwtwqxeUhPvzgcWLcn9GnSo43ZwXOOyNOEbCFCih7r5U2M6p3nbz8ovgTxChjDN0Um pwCI/IzNU5bg4psT+0Jjm4I84lLkQ2fdlVOOLPrbhlGrxlEI5Iryo49IcQ2VjV1SZTUl 1nKQNkjAF9VrSrzWWtf9cxdYdQjt6/YKR+kxUG4SrtiokqFJwU0seIgjF8uGgoBMIzy5 mZnA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=TqdIVvjz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p22si15553856pgl.340.2018.12.04.08.52.14; Tue, 04 Dec 2018 08:52:30 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=TqdIVvjz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727135AbeLDQvY (ORCPT + 99 others); Tue, 4 Dec 2018 11:51:24 -0500 Received: from mail-pl1-f194.google.com ([209.85.214.194]:44811 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726960AbeLDQvX (ORCPT ); Tue, 4 Dec 2018 11:51:23 -0500 Received: by mail-pl1-f194.google.com with SMTP id k8so8568034pls.11; Tue, 04 Dec 2018 08:51:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:mime-version:content-disposition :user-agent; bh=mBcTTh/3QOepNAWRxoUieHt9IMdAD0r59E984HRpyms=; b=TqdIVvjz1QImNEQWR+fhK0NruQRCtPV+ArxIjWGATk91bIhWGpQDMm1y41T0AbcMLp DtyodtJLeUIYmlU9/kmtaRo8VRBNJULtJw805hLVCB08pB2bQco6j34qoPeY50X8Zacu Nc7Q8FGimw1JJbF0Eu1Hni0ONrmVkXBWkUKDmuL2HYf2atVzlGfW9XgsftB54eBcYuqU 8ZL8zivZju03lDTJMXCmYHA3JKw6uw6Fkx2JlNCSEONuWDEZ8YO27M0LNQGTBCi79O7N 2hHMcNFhKauwJGRaIQe5cZkbrmaMuYsQM6wrP7iU59NyUtFPwSr8r6uLoCX4oxRXBdHM e18Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition:user-agent; bh=mBcTTh/3QOepNAWRxoUieHt9IMdAD0r59E984HRpyms=; b=IODyIS7/5a37sU7Oni2pE8wd92118ByQzkbfaDXnn+O/ZF25n8g0lnlNFgflvLtjEb 13WYrNaB7Gkqpa6+SbSqWy6OAD0zOY5sOaIkD/mACbL4mWdvmPxTuUMJkXQMDyxMlSXa 1pkKcb8zj5y1v4P84NTlC1otyxYLePkvqex3Gmth2w7Sa9xhP2njZ7Ysueum4aGm+C4H EVQDT/9ozeQl2vcEHbicMgYD3e2bH7HR6hBIEzpfUNYdECfJ33Em0ab3AHztVKwWmzNF 7cRymGAY1oUHLx6SrNRRPWyfYsRxiF9NOdo+KxZn/H/7v04ZdRWVHUP94jRDCQLLHjPU Rdpg== X-Gm-Message-State: AA+aEWY3LaPKraLrhSQV4LDFZYTfpj98vx2cndKbVTcSNrHGFifA9rKg qNMz9zXfi3dS7JC+sw8xhjQ= X-Received: by 2002:a17:902:6848:: with SMTP id f8mr20204461pln.300.1543942280958; Tue, 04 Dec 2018 08:51:20 -0800 (PST) Received: from nishad ([106.51.27.228]) by smtp.gmail.com with ESMTPSA id s37sm20028842pgm.19.2018.12.04.08.51.17 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 04 Dec 2018 08:51:20 -0800 (PST) Date: Tue, 4 Dec 2018 22:21:12 +0530 From: Nishad Kamdar To: Greg Kroah-Hartman , Dan Carpenter Cc: devel@driverdev.osuosl.org, linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH v2] Staging: fbtft: Switch to the gpio descriptor interface Message-ID: <20181204165105.GA16291@nishad> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.9.4 (2018-02-28) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This switches the fbtft driver to use GPIO descriptors rather than numerical gpios: Utilize the GPIO library's intrinsic handling of OF GPIOs and polarity. If the line is flagged active low, gpiolib will deal with this. Remove gpios from platform device structure. Neither assign statically numbers to gpios in platform device nor allow gpios to be parsed as module parameters. Signed-off-by: Nishad Kamdar Changes in v2: - Merge all patches in a single patch. This is because the first patch changed par->gpio from an int to a pointer so all the checks have to be updated in the same patch. Otherwie it breaks 'git bisect'. --- drivers/staging/fbtft/fb_agm1264k-fl.c | 52 ++-- drivers/staging/fbtft/fb_bd663474.c | 6 +- drivers/staging/fbtft/fb_ili9163.c | 6 +- drivers/staging/fbtft/fb_ili9320.c | 2 +- drivers/staging/fbtft/fb_ili9325.c | 6 +- drivers/staging/fbtft/fb_ili9340.c | 2 +- drivers/staging/fbtft/fb_pcd8544.c | 4 +- drivers/staging/fbtft/fb_ra8875.c | 4 +- drivers/staging/fbtft/fb_s6d1121.c | 6 +- drivers/staging/fbtft/fb_sh1106.c | 2 +- drivers/staging/fbtft/fb_ssd1289.c | 6 +- drivers/staging/fbtft/fb_ssd1305.c | 4 +- drivers/staging/fbtft/fb_ssd1306.c | 4 +- drivers/staging/fbtft/fb_ssd1325.c | 6 +- drivers/staging/fbtft/fb_ssd1331.c | 10 +- drivers/staging/fbtft/fb_ssd1351.c | 2 +- drivers/staging/fbtft/fb_tls8204.c | 6 +- drivers/staging/fbtft/fb_uc1611.c | 4 +- drivers/staging/fbtft/fb_uc1701.c | 6 +- drivers/staging/fbtft/fb_upd161704.c | 6 +- drivers/staging/fbtft/fb_watterott.c | 4 +- drivers/staging/fbtft/fbtft-bus.c | 6 +- drivers/staging/fbtft/fbtft-core.c | 173 +++---------- drivers/staging/fbtft/fbtft-io.c | 26 +- drivers/staging/fbtft/fbtft.h | 21 +- drivers/staging/fbtft/fbtft_device.c | 344 +------------------------ drivers/staging/fbtft/flexfb.c | 12 +- 27 files changed, 143 insertions(+), 587 deletions(-) diff --git a/drivers/staging/fbtft/fb_agm1264k-fl.c b/drivers/staging/fbtft/fb_agm1264k-fl.c index f6f30f5bf15a..8f27bd8da17d 100644 --- a/drivers/staging/fbtft/fb_agm1264k-fl.c +++ b/drivers/staging/fbtft/fb_agm1264k-fl.c @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include @@ -79,14 +79,14 @@ static int init_display(struct fbtft_par *par) static void reset(struct fbtft_par *par) { - if (par->gpio.reset == -1) + if (!par->gpio.reset) return; dev_dbg(par->info->device, "%s()\n", __func__); - gpio_set_value(par->gpio.reset, 0); + gpiod_set_value(par->gpio.reset, 0); udelay(20); - gpio_set_value(par->gpio.reset, 1); + gpiod_set_value(par->gpio.reset, 1); mdelay(120); } @@ -98,30 +98,30 @@ static int verify_gpios(struct fbtft_par *par) dev_dbg(par->info->device, "%s()\n", __func__); - if (par->EPIN < 0) { + if (!par->EPIN) { dev_err(par->info->device, "Missing info about 'wr' (aka E) gpio. Aborting.\n"); return -EINVAL; } for (i = 0; i < 8; ++i) { - if (par->gpio.db[i] < 0) { + if (!par->gpio.db[i]) { dev_err(par->info->device, "Missing info about 'db[%i]' gpio. Aborting.\n", i); return -EINVAL; } } - if (par->CS0 < 0) { + if (!par->CS0) { dev_err(par->info->device, "Missing info about 'cs0' gpio. Aborting.\n"); return -EINVAL; } - if (par->CS1 < 0) { + if (!par->CS1) { dev_err(par->info->device, "Missing info about 'cs1' gpio. Aborting.\n"); return -EINVAL; } - if (par->RW < 0) { + if (!par->RW) { dev_err(par->info->device, "Missing info about 'rw' gpio. Aborting.\n"); return -EINVAL; @@ -139,22 +139,22 @@ request_gpios_match(struct fbtft_par *par, const struct fbtft_gpio *gpio) if (strcasecmp(gpio->name, "wr") == 0) { /* left ks0108 E pin */ par->EPIN = gpio->gpio; - return GPIOF_OUT_INIT_LOW; + return GPIOD_OUT_LOW; } else if (strcasecmp(gpio->name, "cs0") == 0) { /* left ks0108 controller pin */ par->CS0 = gpio->gpio; - return GPIOF_OUT_INIT_HIGH; + return GPIOD_OUT_HIGH; } else if (strcasecmp(gpio->name, "cs1") == 0) { /* right ks0108 controller pin */ par->CS1 = gpio->gpio; - return GPIOF_OUT_INIT_HIGH; + return GPIOD_OUT_HIGH; } /* if write (rw = 0) e(1->0) perform write */ /* if read (rw = 1) e(0->1) set data on D0-7*/ else if (strcasecmp(gpio->name, "rw") == 0) { par->RW = gpio->gpio; - return GPIOF_OUT_INIT_LOW; + return GPIOD_OUT_LOW; } return FBTFT_GPIO_NO_MATCH; @@ -194,15 +194,15 @@ static void write_reg8_bus8(struct fbtft_par *par, int len, ...) /* select chip */ if (*buf) { /* cs1 */ - gpio_set_value(par->CS0, 1); - gpio_set_value(par->CS1, 0); + gpiod_set_value(par->CS0, 1); + gpiod_set_value(par->CS1, 0); } else { /* cs0 */ - gpio_set_value(par->CS0, 0); - gpio_set_value(par->CS1, 1); + gpiod_set_value(par->CS0, 0); + gpiod_set_value(par->CS1, 1); } - gpio_set_value(par->RS, 0); /* RS->0 (command mode) */ + gpiod_set_value(par->RS, 0); /* RS->0 (command mode) */ len--; if (len) { @@ -364,7 +364,7 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len) write_reg(par, 0x00, (0x17 << 3) | (u8)y); /* write bitmap */ - gpio_set_value(par->RS, 1); /* RS->1 (data mode) */ + gpiod_set_value(par->RS, 1); /* RS->1 (data mode) */ ret = par->fbtftops.write(par, buf, len); if (ret < 0) dev_err(par->info->device, @@ -387,7 +387,7 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len) write_reg(par, 0x01, (0x17 << 3) | (u8)y); /* write bitmap */ - gpio_set_value(par->RS, 1); /* RS->1 (data mode) */ + gpiod_set_value(par->RS, 1); /* RS->1 (data mode) */ par->fbtftops.write(par, buf, len); if (ret < 0) dev_err(par->info->device, @@ -397,8 +397,8 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len) } kfree(convert_buf); - gpio_set_value(par->CS0, 1); - gpio_set_value(par->CS1, 1); + gpiod_set_value(par->CS0, 1); + gpiod_set_value(par->CS1, 1); return ret; } @@ -408,7 +408,7 @@ static int write(struct fbtft_par *par, void *buf, size_t len) fbtft_par_dbg_hex(DEBUG_WRITE, par, par->info->device, u8, buf, len, "%s(len=%d): ", __func__, len); - gpio_set_value(par->RW, 0); /* set write mode */ + gpiod_set_value(par->RW, 0); /* set write mode */ while (len--) { u8 i, data; @@ -417,12 +417,12 @@ static int write(struct fbtft_par *par, void *buf, size_t len) /* set data bus */ for (i = 0; i < 8; ++i) - gpio_set_value(par->gpio.db[i], data & (1 << i)); + gpiod_set_value(par->gpio.db[i], data & (1 << i)); /* set E */ - gpio_set_value(par->EPIN, 1); + gpiod_set_value(par->EPIN, 1); udelay(5); /* unset E - write */ - gpio_set_value(par->EPIN, 0); + gpiod_set_value(par->EPIN, 0); udelay(1); } diff --git a/drivers/staging/fbtft/fb_bd663474.c b/drivers/staging/fbtft/fb_bd663474.c index a58c514f4721..b6c6d66e4eb1 100644 --- a/drivers/staging/fbtft/fb_bd663474.c +++ b/drivers/staging/fbtft/fb_bd663474.c @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include #include "fbtft.h" @@ -24,8 +24,8 @@ static int init_display(struct fbtft_par *par) { - if (par->gpio.cs != -1) - gpio_set_value(par->gpio.cs, 0); /* Activate chip */ + if (!par->gpio.cs) + gpiod_set_value(par->gpio.cs, 0); /* Activate chip */ par->fbtftops.reset(par); diff --git a/drivers/staging/fbtft/fb_ili9163.c b/drivers/staging/fbtft/fb_ili9163.c index 86e140244aab..d609a2b67db9 100644 --- a/drivers/staging/fbtft/fb_ili9163.c +++ b/drivers/staging/fbtft/fb_ili9163.c @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include