From patchwork Tue Jan 24 20:00:43 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: William Breathitt Gray X-Patchwork-Id: 719367 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3v7Jx03lNmz9ssP for ; Wed, 25 Jan 2017 07:01:56 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="U/lwZn7c"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750974AbdAXUA5 (ORCPT ); Tue, 24 Jan 2017 15:00:57 -0500 Received: from mail-yw0-f193.google.com ([209.85.161.193]:34596 "EHLO mail-yw0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750943AbdAXUA4 (ORCPT ); Tue, 24 Jan 2017 15:00:56 -0500 Received: by mail-yw0-f193.google.com with SMTP id v73so21766390ywg.1; Tue, 24 Jan 2017 12:00:51 -0800 (PST) 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=7R3jbOhBBd0hyQQLXsNBEtdvQm4bMGYLo+nCDD+qKdQ=; b=U/lwZn7ccK8vvPSN9+iA5kIfAnZuMI4MTGDkjvsKHmzVJfr6FRqNyR5o4r+en4ANr9 oyBeQEhtpdw7f7qTKLw0TfDVOTHFCe3VHSKIy/7b92jamS5WLulUchIhDwn+mno2eKRM kwOS+bQ9BSl3S0UeMJB58lbNSRFEZ+XntEvm+zPj7i0WCZzdYHmJylNvfenBI0lkaFar 3h5YFRxTxuq2UkdmNPMNp/J3V2j3EBp3iEZAMadySeY6S7HUeu8QTnspaMIt7ndPn7ya IJ1TmR3NMt8cfbZF39B4lHom2u4eSEOJd8YSDyTF9J/4J+MSFpVGagRw7aRBPQMzbtJr TBCw== 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=7R3jbOhBBd0hyQQLXsNBEtdvQm4bMGYLo+nCDD+qKdQ=; b=IGuqh5CU+Opb0rsQpy+MgIRNGr40buTHEKLelxMzWie6sNd8ysabRQcY11n9Wlolyl koQeNEnpwGMaOJBYZlxiq+aZJO7J+QUVKOVKcN8kakvgLFZVHKIwHFI1q+RkG0MXU/TP 7F/ts0m+xXEN1NqhzhlbHzAz657h1cTayhMiU+88S8M233FESPO0dklMdxiDp4oCdl8T Bss4KbJBv7k1tgmO8UKyNn+aE7iW82s6thIgNgwcIdGb4wOUubhR7pLOoZSp1t82yAWh PmOTX10r2LkjZYiMoqEcx47vTM0bgch+sVPgXF2+2+Wt8xeP/VgMFkSKLDiEOh98zx1I 4oTw== X-Gm-Message-State: AIkVDXLaP3c3opKrtjcvljiboH1Qnurv+x7aVAb2LO7ic2OIa50tgsiRWaYL+W0DQ563mQ== X-Received: by 10.129.85.211 with SMTP id j202mr26599908ywb.287.1485288049305; Tue, 24 Jan 2017 12:00:49 -0800 (PST) Received: from localhost (50-88-177-90.res.bhn.net. [50.88.177.90]) by smtp.gmail.com with ESMTPSA id u67sm7007908ywd.9.2017.01.24.12.00.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Jan 2017 12:00:48 -0800 (PST) From: William Breathitt Gray To: linus.walleij@linaro.org, gnurou@gmail.com Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, William Breathitt Gray Subject: [PATCH 2/5] gpio: 104-idi-48: Utilize devm_ functions in driver probe callback Date: Tue, 24 Jan 2017 15:00:43 -0500 Message-Id: <9867e73be56728749f123534b6ef144269cdac9c.1485287208.git.vilhelm.gray@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: References: Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org The devm_ resource manager functions allow memory to be automatically released when a device is unbound. This patch takes advantage of the resource manager functions and replaces the gpiochip_add_data call and request_irq call with the devm_gpiochip_add_data call and devm_request_irq call respectively. In addition, the idi_48_remove function has been removed as no longer necessary due to the use of the relevant devm_ resource manager functions. Signed-off-by: William Breathitt Gray --- drivers/gpio/gpio-104-idi-48.c | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/drivers/gpio/gpio-104-idi-48.c b/drivers/gpio/gpio-104-idi-48.c index 2d2763ea1a68..eafbf053f3e8 100644 --- a/drivers/gpio/gpio-104-idi-48.c +++ b/drivers/gpio/gpio-104-idi-48.c @@ -47,7 +47,6 @@ MODULE_PARM_DESC(irq, "ACCES 104-IDI-48 interrupt line numbers"); * @ack_lock: synchronization lock to prevent IRQ handler race conditions * @irq_mask: input bits affected by interrupts * @base: base port address of the GPIO device - * @irq: Interrupt line number * @cos_enb: Change-Of-State IRQ enable boundaries mask */ struct idi_48_gpio { @@ -56,7 +55,6 @@ struct idi_48_gpio { spinlock_t ack_lock; unsigned char irq_mask[6]; unsigned base; - unsigned irq; unsigned char cos_enb; }; @@ -244,14 +242,13 @@ static int idi_48_probe(struct device *dev, unsigned int id) idi48gpio->chip.direction_input = idi_48_gpio_direction_input; idi48gpio->chip.get = idi_48_gpio_get; idi48gpio->base = base[id]; - idi48gpio->irq = irq[id]; spin_lock_init(&idi48gpio->lock); spin_lock_init(&idi48gpio->ack_lock); dev_set_drvdata(dev, idi48gpio); - err = gpiochip_add_data(&idi48gpio->chip, idi48gpio); + err = devm_gpiochip_add_data(dev, &idi48gpio->chip, idi48gpio); if (err) { dev_err(dev, "GPIO registering failed (%d)\n", err); return err; @@ -265,31 +262,17 @@ static int idi_48_probe(struct device *dev, unsigned int id) handle_edge_irq, IRQ_TYPE_NONE); if (err) { dev_err(dev, "Could not add irqchip (%d)\n", err); - goto err_gpiochip_remove; + return err; } - err = request_irq(irq[id], idi_48_irq_handler, IRQF_SHARED, name, - idi48gpio); + err = devm_request_irq(dev, irq[id], idi_48_irq_handler, IRQF_SHARED, + name, idi48gpio); if (err) { dev_err(dev, "IRQ handler registering failed (%d)\n", err); - goto err_gpiochip_remove; + return err; } return 0; - -err_gpiochip_remove: - gpiochip_remove(&idi48gpio->chip); - return err; -} - -static int idi_48_remove(struct device *dev, unsigned int id) -{ - struct idi_48_gpio *const idi48gpio = dev_get_drvdata(dev); - - free_irq(idi48gpio->irq, idi48gpio); - gpiochip_remove(&idi48gpio->chip); - - return 0; } static struct isa_driver idi_48_driver = { @@ -297,7 +280,6 @@ static struct isa_driver idi_48_driver = { .driver = { .name = "104-idi-48" }, - .remove = idi_48_remove }; module_isa_driver(idi_48_driver, num_idi_48);