Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp4980978imm; Fri, 18 May 2018 14:12:03 -0700 (PDT) X-Google-Smtp-Source: AB8JxZosjP2EgaN68LHKzC/s11I9YFYTFxk0zVmsIz6Ax1hFsrRqsic9uchPIAfnCJL7afukRnbK X-Received: by 2002:a65:6510:: with SMTP id x16-v6mr8862776pgv.204.1526677923322; Fri, 18 May 2018 14:12:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526677923; cv=none; d=google.com; s=arc-20160816; b=aAqvmeQL3jTcgy+9nVZtfpqLrvUnJIifAfPbrVXwebgZnRTnFkQSg7j3bV/uymUaM0 L/JGQjPXLZ98ofXPpHksI3zA/SvkLmBR4kzGN6/nbTj2vIF/OVpG5VBckfL1KUgZn4z3 0OVrS0yJz++4lGc9dCl092NVmn0OLalW0ifgpGEUOXqPGGo3a50WkEwJX4oO5Pw+nfUK RgXGgn2Iqw2xDOKCpXTZxN3ng2/6w/0M5ONtei9xdDOvZC7cK/eyTbIM3fN8RqEtz9fX gFJ3chIOM7OfQEKxe9dhH3pqr6//ezpWON7emj7I43EBICeygYXl/HfVbEFQswdlSVtF HeJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=LFcczNLbf/ZY1wQoa2RXWSmVimkH8VU7wDjHsgBj7HY=; b=SSppI7lRJahDxYxypNZkLSOzoshM8yn+CZ/99TfFjQJuNfP6x42PXP4damBjHoS3du mVM51tnIi/Rw+uUo2TyjqpAXxuv39vEEStWpPzm7nFrcNLfJggl6lIotEW0l2nUlpulP fRqWgp1YQw0hnWWLwfsDIuhLHBiAy2cDNhX7Hoq817SbHjhj4yQuX8hrwiduQYfV99PS 4R453Zfcz7ae7vAm7Bys6SJh/rdiLYxECOclzPwSzr61CRwaOh+NJ1xumQdpGL/S+yvz xdTw/oKdDgViQz4105DxtsHDnhg4O4t/yFzLk7FpVIBNT/X/Wf2TiS2pQe5pOiv2ivnG VJgA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=qvV/HxR9; 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 m13-v6si6511575pgu.237.2018.05.18.14.11.48; Fri, 18 May 2018 14:12:03 -0700 (PDT) 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=qvV/HxR9; 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 S1752530AbeERVLN (ORCPT + 99 others); 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-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-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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); -- 2.16.1