From patchwork Fri May 18 21:09:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 10412195 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 38327602C2 for ; Fri, 18 May 2018 21:11:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 279F228AEF for ; Fri, 18 May 2018 21:11:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1BB7528AB7; Fri, 18 May 2018 21:11:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A9B2728AEF for ; Fri, 18 May 2018 21:11:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752375AbeERVLN (ORCPT ); Fri, 18 May 2018 17:11:13 -0400 Received: from mail-lf0-f68.google.com ([209.85.215.68]:43463 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752168AbeERVKL (ORCPT ); Fri, 18 May 2018 17:10:11 -0400 Received: by mail-lf0-f68.google.com with SMTP id n18-v6so15848403lfh.10; Fri, 18 May 2018 14:10:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=LFcczNLbf/ZY1wQoa2RXWSmVimkH8VU7wDjHsgBj7HY=; b=qvV/HxR9Kxukc5P+ynzGmFuwpqf6WsiMHjOdqxvu6ZrNHqixivWMIOCHHM5ixNCDSO jD89gLMbtcBXHTiqAPyj4hMxSJ3h2Ggr3WcdpMkA0HGUFsX071lb1DZl0n1zeiCD1IHB Eu7SCDVYwPgUQ6f4kxVoOv5mI8JkQeu20qHPkbtMm/9KjpMDWUzypItSJ4zdnf/beaY5 +83VZ9lXKnbX8gEvRkQEZmkGl/KWNoKDN8aL0wZsXU0Le1NjIIUHn8AmwQbLN3u09J+d RzFhdzmbNaEXP81xl7eV52EO0BGcWXLo5HwINYOs+vlx0N2HwMp7dc1uMrDcrS201zuy K8NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=LFcczNLbf/ZY1wQoa2RXWSmVimkH8VU7wDjHsgBj7HY=; b=NKZnrxRnz05zQoWBP7VuRdeuZWyV0y3sKmzj9wXYaIFHk2hJGLBbDexl3b8pQofyYo XorNhuR/OZEDHmpOCzgQ+bUOrk4B/6Pw7zOLqTJBvB4Fa1cpEdeKDBUol2GSkX6ceS3x MBRNqib8SBeHnbtMvHE7qKgHUXk74XtstbvykkHG2HMtnVtoM+bsag/fimrGjMPbK6Sx bjrdGjAl3zKD8C60FE9ekx9Ngs5ki2AxNkMADPihyM6Ru+dkENcJvluKBjGCha8TMUJo fUT745t2XDqzhWhS+So55DcqXhxEJR5k3NRMvYa7a3tCtGf5nALU66GanF+VULLDG+BS Y6vg== X-Gm-Message-State: ALKqPwfSaEDkddqLNfQ/Be+NIib+ICN2ncFqnfWHi9WKF0Cibzo58mPr mWnpcDjuoc2B+9XsYxysBVc= X-Google-Smtp-Source: AB8JxZrkVRW7+IY5gjeTcDQ4H1FwsSeE73QGDuuT+HEeaaOO1AE0RKGDbyhTSFx0H0idsnz9SLUumg== X-Received: by 2002:a19:7d05:: with SMTP id y5-v6mr2931512lfc.95.1526677809448; Fri, 18 May 2018 14:10:09 -0700 (PDT) Received: from localhost.localdomain (apn-31-0-34-132.dynamic.gprs.plus.pl. [31.0.34.132]) by smtp.gmail.com with ESMTPSA id 23-v6sm2057026lfw.64.2018.05.18.14.10.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 May 2018 14:10:08 -0700 (PDT) From: Janusz Krzysztofik To: Tony Lindgren , Dmitry Torokhov , Boris Brezillon , Tomi Valkeinen , Mark Brown Cc: Aaro Koskinen , Richard Weinberger , Peter Ujfalusi , Jarkko Nikula , Liam Girdwood , linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org, linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, linux-mtd@lists.infradead.org, linux-fbdev@vger.kernel.org, alsa-devel@alsa-project.org, Janusz Krzysztofik Subject: [PATCH 4/6] fbdev: omapfb: lcd_ams_delta: use GPIO lookup table Date: Fri, 18 May 2018 23:09:52 +0200 Message-Id: <20180518210954.29044-4-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180518210954.29044-1-jmkrzyszt@gmail.com> References: <20180518210954.29044-1-jmkrzyszt@gmail.com> Sender: linux-fbdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fbdev@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Now as the Amstrad Delta board provides GPIO lookup tables, switch from GPIO numbers to GPIO descriptors and use the table to locate required GPIO pins. Declare static variables for storing GPIO descriptors and replace gpio_ functions with their gpiod_ equivalents. Move GPIO lookup to the driver probe function so device initialization can be postponed instead of aborted if the GPIO pin is not yet available. Pin naming used by the driver should be followed while respective GPIO lookup table is initialized by a board init code. Created and tested against linux-4.17-rc3, on top of patch 1/6 "ARM: OMAP1: ams-delta: add GPIO lookup tables" Signed-off-by: Janusz Krzysztofik --- drivers/video/fbdev/omap/lcd_ams_delta.c | 59 ++++++++++++++------------------ 1 file changed, 26 insertions(+), 33 deletions(-) diff --git a/drivers/video/fbdev/omap/lcd_ams_delta.c b/drivers/video/fbdev/omap/lcd_ams_delta.c index a4ee947006c7..19b6425b54be 100644 --- a/drivers/video/fbdev/omap/lcd_ams_delta.c +++ b/drivers/video/fbdev/omap/lcd_ams_delta.c @@ -24,11 +24,10 @@ #include #include #include +#include #include -#include #include -#include #include "omapfb.h" @@ -41,6 +40,8 @@ /* LCD class device section */ static int ams_delta_lcd; +static struct gpio_desc *gpiod_vblen; +static struct gpio_desc *gpiod_ndisp; static int ams_delta_lcd_set_power(struct lcd_device *dev, int power) { @@ -99,41 +100,17 @@ static struct lcd_ops ams_delta_lcd_ops = { /* omapfb panel section */ -static const struct gpio _gpios[] = { - { - .gpio = AMS_DELTA_GPIO_PIN_LCD_VBLEN, - .flags = GPIOF_OUT_INIT_LOW, - .label = "lcd_vblen", - }, - { - .gpio = AMS_DELTA_GPIO_PIN_LCD_NDISP, - .flags = GPIOF_OUT_INIT_LOW, - .label = "lcd_ndisp", - }, -}; - -static int ams_delta_panel_init(struct lcd_panel *panel, - struct omapfb_device *fbdev) -{ - return gpio_request_array(_gpios, ARRAY_SIZE(_gpios)); -} - -static void ams_delta_panel_cleanup(struct lcd_panel *panel) -{ - gpio_free_array(_gpios, ARRAY_SIZE(_gpios)); -} - static int ams_delta_panel_enable(struct lcd_panel *panel) { - gpio_set_value(AMS_DELTA_GPIO_PIN_LCD_NDISP, 1); - gpio_set_value(AMS_DELTA_GPIO_PIN_LCD_VBLEN, 1); + gpiod_set_value(gpiod_ndisp, 1); + gpiod_set_value(gpiod_vblen, 1); return 0; } static void ams_delta_panel_disable(struct lcd_panel *panel) { - gpio_set_value(AMS_DELTA_GPIO_PIN_LCD_VBLEN, 0); - gpio_set_value(AMS_DELTA_GPIO_PIN_LCD_NDISP, 0); + gpiod_set_value(gpiod_vblen, 0); + gpiod_set_value(gpiod_ndisp, 0); } static struct lcd_panel ams_delta_panel = { @@ -154,8 +131,6 @@ static struct lcd_panel ams_delta_panel = { .pcd = 0, .acb = 37, - .init = ams_delta_panel_init, - .cleanup = ams_delta_panel_cleanup, .enable = ams_delta_panel_enable, .disable = ams_delta_panel_disable, }; @@ -166,9 +141,27 @@ static struct lcd_panel ams_delta_panel = { static int ams_delta_panel_probe(struct platform_device *pdev) { struct lcd_device *lcd_device = NULL; -#ifdef CONFIG_LCD_CLASS_DEVICE int ret; + gpiod_vblen = devm_gpiod_get(&pdev->dev, "vblen", GPIOD_OUT_LOW); + if (IS_ERR(gpiod_vblen)) { + ret = PTR_ERR(gpiod_vblen); + dev_err(&pdev->dev, "VBLEN GPIO request failed (%d)\n", ret); + if (ret == -ENODEV || ret == -ENOENT) + ret = -EPROBE_DEFER; + return ret; + } + + gpiod_ndisp = devm_gpiod_get(&pdev->dev, "ndisp", GPIOD_OUT_LOW); + if (IS_ERR(gpiod_ndisp)) { + ret = PTR_ERR(gpiod_ndisp); + dev_err(&pdev->dev, "NDISP GPIO request failed (%d)\n", ret); + if (ret == -ENODEV || ret == -ENOENT) + ret = -EPROBE_DEFER; + return ret; + } + +#ifdef CONFIG_LCD_CLASS_DEVICE lcd_device = lcd_device_register("omapfb", &pdev->dev, NULL, &ams_delta_lcd_ops);