From patchwork Tue Jan 24 20:00:31 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: 719368 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 3v7JxH2sRcz9ryk for ; Wed, 25 Jan 2017 07:02:11 +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="M9xvp7Qz"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750888AbdAXUAm (ORCPT ); Tue, 24 Jan 2017 15:00:42 -0500 Received: from mail-yw0-f194.google.com ([209.85.161.194]:34561 "EHLO mail-yw0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750871AbdAXUAl (ORCPT ); Tue, 24 Jan 2017 15:00:41 -0500 Received: by mail-yw0-f194.google.com with SMTP id v73so21766042ywg.1; Tue, 24 Jan 2017 12:00:40 -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=WgPfVHy9pJrbMhoXl77RMCPSze+gLn1uqPx4ePBW+Eg=; b=M9xvp7QzcTG7l5Ru1DTj+m68UwZSps7/nIbVOdFy3cMLiNF/XOSA5xVz68sNTImdwj snEtx5Q/adRIEXvKn6iJCRICxp26y1KnGv8d9TMtTWMkTf44JWizrIrWVautPXKBzVrz 6hkc9a6GunRbZyxD/S2lw0N6S08TOeDqz27nZ0PyI2bj6WrBrUiAZ5YmDrMil/waz51g 97JFqZJ6gqjMWCECeyiYte3TZErUSPeOTwVao1+m6iMX8HqD/jw1R6ivc1JFz0JQs74A jYIrIL0pL4EyC8SAOtB0vuED9Zw+3yci3tWxmWtIMGUbAOJh96ah+clL2V5I4r0Qt+f6 wZ0Q== 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=WgPfVHy9pJrbMhoXl77RMCPSze+gLn1uqPx4ePBW+Eg=; b=JLEDyshfamiQmaQXVGTW4uvVUKFWNdlQtbsihBKV9LojjAuxpr9EqBqo66kE62CZtc kFyCMzGaiBzDb2aHvx5VXb8jILv51Ubj++Eu9Or3iMVoL+WDSpESa2q8rv/kTRYiZTtI 7S8Kp2ekz5bDHsQXMRIIcKt0TrVb+zsgygAlCzqzqANPElAdoWV/eYcIIIily6kLAVtF Ar7iL3RY4JjWzTLS/9wiTuOuUQDfzVaKYHCkDOy+hh8izqRpkku/QQpXSrWpMAl9W1h0 HzBoFgmkOQ7WlWj8YUuReSkSTIB2r/kBOpBjvo7fni1Tcq+6zAGYFNXYpRIGGIqE3agQ ltMA== X-Gm-Message-State: AIkVDXJIC8gTPV55V7Ul5c9L6gLEqok2SV9mTYOYZ/PRsp4RNO9lwFvsCPSbqG00kMokAA== X-Received: by 10.13.242.135 with SMTP id b129mr26517477ywf.118.1485288039006; Tue, 24 Jan 2017 12:00:39 -0800 (PST) Received: from localhost (50-88-177-90.res.bhn.net. [50.88.177.90]) by smtp.gmail.com with ESMTPSA id u67sm7007669ywd.9.2017.01.24.12.00.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Jan 2017 12:00:38 -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 1/5] gpio: 104-dio-48e: Utilize devm_ functions in driver probe callback Date: Tue, 24 Jan 2017 15:00:31 -0500 Message-Id: <282c88e9bee6c5edc16637e37cecb4b4b4c80898.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 dio48e_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-dio-48e.c | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/drivers/gpio/gpio-104-dio-48e.c b/drivers/gpio/gpio-104-dio-48e.c index fcf776971ca9..b6d756b09979 100644 --- a/drivers/gpio/gpio-104-dio-48e.c +++ b/drivers/gpio/gpio-104-dio-48e.c @@ -48,7 +48,6 @@ MODULE_PARM_DESC(irq, "ACCES 104-DIO-48E interrupt line numbers"); * @control: Control registers state * @lock: synchronization lock to prevent I/O race conditions * @base: base port address of the GPIO device - * @irq: Interrupt line number * @irq_mask: I/O bits affected by interrupts */ struct dio48e_gpio { @@ -58,7 +57,6 @@ struct dio48e_gpio { unsigned char control[2]; spinlock_t lock; unsigned base; - unsigned irq; unsigned char irq_mask; }; @@ -329,13 +327,12 @@ static int dio48e_probe(struct device *dev, unsigned int id) dio48egpio->chip.get = dio48e_gpio_get; dio48egpio->chip.set = dio48e_gpio_set; dio48egpio->base = base[id]; - dio48egpio->irq = irq[id]; spin_lock_init(&dio48egpio->lock); dev_set_drvdata(dev, dio48egpio); - err = gpiochip_add_data(&dio48egpio->chip, dio48egpio); + err = devm_gpiochip_add_data(dev, &dio48egpio->chip, dio48egpio); if (err) { dev_err(dev, "GPIO registering failed (%d)\n", err); return err; @@ -360,30 +357,17 @@ static int dio48e_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], dio48e_irq_handler, 0, name, dio48egpio); + err = devm_request_irq(dev, irq[id], dio48e_irq_handler, 0, name, + dio48egpio); 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(&dio48egpio->chip); - return err; -} - -static int dio48e_remove(struct device *dev, unsigned int id) -{ - struct dio48e_gpio *const dio48egpio = dev_get_drvdata(dev); - - free_irq(dio48egpio->irq, dio48egpio); - gpiochip_remove(&dio48egpio->chip); - - return 0; } static struct isa_driver dio48e_driver = { @@ -391,7 +375,6 @@ static struct isa_driver dio48e_driver = { .driver = { .name = "104-dio-48e" }, - .remove = dio48e_remove }; module_isa_driver(dio48e_driver, num_dio48e);