From patchwork Tue Jan 24 20:00:54 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: 719363 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 3v7JwM4wwSz9ryk for ; Wed, 25 Jan 2017 07:01:23 +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="oBT+hLtf"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751026AbdAXUBH (ORCPT ); Tue, 24 Jan 2017 15:01:07 -0500 Received: from mail-yw0-f195.google.com ([209.85.161.195]:36086 "EHLO mail-yw0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751021AbdAXUBG (ORCPT ); Tue, 24 Jan 2017 15:01:06 -0500 Received: by mail-yw0-f195.google.com with SMTP id q71so16846807ywg.3; Tue, 24 Jan 2017 12:01:00 -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=xvlJ/BuivljXrbELYSRIGPrvI67ebcdke2bbWObtjag=; b=oBT+hLtfBDq1/r91zThECEn737CYK7YZAgqxNtnD5/0bDy/zZsJ9LnQ7cDPmVqhF6o PvMlSgvrNmqYr/z3sdU3K5dqXUhjTcH3OXGZHoZbAyMt/GJNzZwcoSjc4DiSf0iQ6xPc GlwxvrC4LsXBKMHLowwcUycD8UThI7j4ayoPAYwUpCnpDX/n0yLFjyhh3eSrZOxRUtLR S6qx8pUuX7nvuJS18dZ1Oucj8sg+rnM4tY95uLXIt/qeEIT1+UKU0jujRfQKGNyGyJf8 K61tPdBRsW0KSHhF/vvGZfWUwuo+T3UN77MF3yEs3vZopA7/r1ZNeCfDm3RZzYs6yjmi RmqQ== 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=xvlJ/BuivljXrbELYSRIGPrvI67ebcdke2bbWObtjag=; b=EUbDaJoHXNW62ScXAhf9JZS81os07yxTfbwXjl/sveYqvX8Tgys3mgAy9vIbHqsMHz LVePYokhwxPKFE6So423IXw3sJ/M3PwhOsqaMfkWzD+fmdYoCHLpdrlqr9wwxgmraasH 6M24/DF/rKkiQZEHjWJFQQs7MLSiuEmgxVuJZmTLitGkU0WD6b9Sb+bKnt0tJVIIgeYy kYgtZI4Z5q2SneShWNrQ/LocC1fKRoXZWXhA9rsZWeRMHVcwAz/AqpfboeA9XLPg0mmx s9OFVU0E6vsz180VnQ7hvOuWh84DYwtn7u3xyciieGmhj8pfRbVJ68Hahqw1k9pvssJF yd7g== X-Gm-Message-State: AIkVDXIs8jlhugT3SUfysR9zZY6DumHFusmqm7T3t+fG7CTrZpppXcVhvToSt4KWGJe02Q== X-Received: by 10.129.115.9 with SMTP id o9mr31133289ywc.312.1485288060103; Tue, 24 Jan 2017 12:01:00 -0800 (PST) Received: from localhost (50-88-177-90.res.bhn.net. [50.88.177.90]) by smtp.gmail.com with ESMTPSA id x185sm10354383ywe.35.2017.01.24.12.00.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Jan 2017 12:00:59 -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 3/5] gpio: 104-idio-16: Utilize devm_ functions in driver probe callback Date: Tue, 24 Jan 2017 15:00:54 -0500 Message-Id: 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 idio_16_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-idio-16.c | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/drivers/gpio/gpio-104-idio-16.c b/drivers/gpio/gpio-104-idio-16.c index 6787b8fcf0d8..277e52b56a39 100644 --- a/drivers/gpio/gpio-104-idio-16.c +++ b/drivers/gpio/gpio-104-idio-16.c @@ -46,7 +46,6 @@ MODULE_PARM_DESC(irq, "ACCES 104-IDIO-16 interrupt line numbers"); * @lock: synchronization lock to prevent I/O race conditions * @irq_mask: I/O bits affected by interrupts * @base: base port address of the GPIO device - * @irq: Interrupt line number * @out_state: output bits state */ struct idio_16_gpio { @@ -54,7 +53,6 @@ struct idio_16_gpio { spinlock_t lock; unsigned long irq_mask; unsigned base; - unsigned irq; unsigned out_state; }; @@ -220,14 +218,13 @@ static int idio_16_probe(struct device *dev, unsigned int id) idio16gpio->chip.get = idio_16_gpio_get; idio16gpio->chip.set = idio_16_gpio_set; idio16gpio->base = base[id]; - idio16gpio->irq = irq[id]; idio16gpio->out_state = 0xFFFF; spin_lock_init(&idio16gpio->lock); dev_set_drvdata(dev, idio16gpio); - err = gpiochip_add_data(&idio16gpio->chip, idio16gpio); + err = devm_gpiochip_add_data(dev, &idio16gpio->chip, idio16gpio); if (err) { dev_err(dev, "GPIO registering failed (%d)\n", err); return err; @@ -241,30 +238,17 @@ static int idio_16_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], idio_16_irq_handler, 0, name, idio16gpio); + err = devm_request_irq(dev, irq[id], idio_16_irq_handler, 0, name, + idio16gpio); 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(&idio16gpio->chip); - return err; -} - -static int idio_16_remove(struct device *dev, unsigned int id) -{ - struct idio_16_gpio *const idio16gpio = dev_get_drvdata(dev); - - free_irq(idio16gpio->irq, idio16gpio); - gpiochip_remove(&idio16gpio->chip); - - return 0; } static struct isa_driver idio_16_driver = { @@ -272,7 +256,6 @@ static struct isa_driver idio_16_driver = { .driver = { .name = "104-idio-16" }, - .remove = idio_16_remove }; module_isa_driver(idio_16_driver, num_idio_16);