Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1233601imu; Wed, 16 Jan 2019 15:20:01 -0800 (PST) X-Google-Smtp-Source: ALg8bN5AeZrTxxB3V3HZIAMlUKxTjyTifWa49WVNFaXyhkrmaXwIPvJuc4LPWDJI7yHALtP18DHG X-Received: by 2002:a62:e704:: with SMTP id s4mr12599872pfh.124.1547680800891; Wed, 16 Jan 2019 15:20:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547680800; cv=none; d=google.com; s=arc-20160816; b=fvacT1/ng1ZJQkcRvInkQIS+wjdCXkeKLAzd6bulCDg7obuh52hc6TZQfc4ijKEIbI gD7PwWJ5J/lOi0hYNreIyskFF33WCqrkKRI8EZ/5Chg5OtzRkQOjzJG8KkhtoNytn8KH WRK+bPwsSqGOgfuGjAgb5vP6xHfga60X3edMsVYcoOTooKUuM5b4c7cILXazYWTaaomW TXDyf1LMyLYQlgOr2zpz9drBqjuP1NbkRU6VIutePXHynYdGd8CeM7dKatdOr2qgmaB7 5NRpZgCfDyW2w22C6JPivmrX5lWRhcZiB3goEyRwtutpZc4Z4sE7VlOvkThgUkCHta4I QX7w== 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=4LLzXlg3UaVDc+zcq57zNOixD8+IZ5TRHX3mYfB23Mg=; b=IPggwIhznVto0PX0gjTlDzoYeo3GjHstYxy1s5xKdWuuhLhQ/2UDR42e9VGKdysrMn PAwJ3m/8eAc1wSdN5iidrAhwkqN8VS9GKeJcnGXMJHVbxwtZLcjGW9dzpmLzv/op51Ms rqhyZovfQLK5uI7Ig/lwR6DpVnBj+Ovv/s5FMVbvz9R6MbHGdfPMXeSo4CWFmVuj9/s2 n6nHjPoA4maNxRvbe6o4I9HEQu4JAEeK/f1j2SJdMfI0OqhDjOEkcXPkxMAdtEHw51Nz cmifZCKLgXfEZULckIRtx45ycQtFlgrF7wfH6fkpkRunQ21s/ZQYdJdbxQiy9ivA2hqM qb3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Ly8+9+ic; 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 r59si7902785plb.247.2019.01.16.15.19.42; Wed, 16 Jan 2019 15:20:00 -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=Ly8+9+ic; 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 S1727334AbfAPRbF (ORCPT + 99 others); Wed, 16 Jan 2019 12:31:05 -0500 Received: from mail-pl1-f194.google.com ([209.85.214.194]:47010 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727068AbfAPRbE (ORCPT ); Wed, 16 Jan 2019 12:31:04 -0500 Received: by mail-pl1-f194.google.com with SMTP id t13so3306093ply.13; Wed, 16 Jan 2019 09:31:02 -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=4LLzXlg3UaVDc+zcq57zNOixD8+IZ5TRHX3mYfB23Mg=; b=Ly8+9+icXgiYg2JXIlMQPIoPHT+pDGwSkW09da0n+BFa1JJWxFxSXVyjdlsMprFNga ANF9KUFogXaI4T+F85cPiLDR9Asr/M9rUqshdHURXHcq55vDRKomYxT6ecIvtMnevj5t Jc6c+XMM5rOjq9y9bwj/XbZ64hjXbUMPBoatNL3q7dwDSUBv178rR9ZnwhocpF77kw7P /o+t/F7kSrUX91CXimNfK5UrLmyBq+SezSdjVMtkWKzfEFUs3YHwXaLa4tk25rOHFaq5 w1MO7Xb2H6E7I2aP0lj1MpOFL4q71njDmCe+nKR5uS7BnOovUuykBowFTfm6J6yj/R0F Ah9Q== 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=4LLzXlg3UaVDc+zcq57zNOixD8+IZ5TRHX3mYfB23Mg=; b=D3EZ9YaX7y0FZpwx9p+lcrGwYIrSh0WM/I5vuAEP+rryazU2fN977LIcnXD/AXB5Sw e4Xhm8AVxzOL24ISFgcxFlwoaXQjNuoc7QIX7Ouv8wkG04nxRTl9ExeCBdBbN8sPsCvH jTJStTbiRBy/fAD0uarAsby0P1hiI3Xpuydk1fiqoFH1qHRoWXMdcvdsJHnVyYfrcDmy WMgYNwmBK25pLxQujYzb57O6xOwxv7j62Gu52HgHrTRu++6EWiiV/ymX7WpEJ3nliMne hAKetJwpVBpqzmHBjYgQA72lp2jSgMLTsfP+hkIU5t1SmCqeJ5xfoB0LEkbp5SsSSAhT l3yA== X-Gm-Message-State: AJcUukdJEU/zMaEReepEamhOubspuHFHexVQkNNO3CXou2dQgPyUhlIy /a6PdKnZc7NWKhSMegOXXbc= X-Received: by 2002:a17:902:fa2:: with SMTP id 31mr11041038plz.75.1547659860957; Wed, 16 Jan 2019 09:31:00 -0800 (PST) Received: from nishad ([106.51.25.107]) by smtp.gmail.com with ESMTPSA id h185sm9170605pfg.143.2019.01.16.09.30.54 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 16 Jan 2019 09:31:00 -0800 (PST) Date: Wed, 16 Jan 2019 23:00:50 +0530 From: Nishad Kamdar To: Greg Kroah-Hartman Cc: devel@driverdev.osuosl.org, Leonardo =?utf-8?B?QnLDoXM=?= , linux-fbdev@vger.kernel.org, YueHaibing , Jani Nikula , Daniel Vetter , Felix Siegel , Matthias Wolf , linux-kernel@vger.kernel.org, Mamta Shukla , Radek =?utf-8?Q?Dost=C3=A1l?= , Renato Soma , dri-devel@lists.freedesktop.org, Tim Cofala , Lee Jones Subject: [PATCH v3] Staging: fbtft: Switch to the gpio descriptor interface Message-ID: <20190116173045.GA30656@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 v3: - Correct the changelog position. Changes in v2: - Merge all patches in a single patch. This is because the first patch changes 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