From patchwork Tue Jan 24 20:01:15 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: 719365 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 3v7Jwl5Mqhz9ssP for ; Wed, 25 Jan 2017 07:01:43 +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="jqnMmraj"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751077AbdAXUBZ (ORCPT ); Tue, 24 Jan 2017 15:01:25 -0500 Received: from mail-yb0-f196.google.com ([209.85.213.196]:34516 "EHLO mail-yb0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751085AbdAXUBW (ORCPT ); Tue, 24 Jan 2017 15:01:22 -0500 Received: by mail-yb0-f196.google.com with SMTP id w194so13702970ybe.1; Tue, 24 Jan 2017 12:01:22 -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=fjQHM9gNV1ZxAC8XyGj0Ewa5KL/pgUbqyaV+ehh1Tk8=; b=jqnMmrajzRFJ1vjhZ3Nr5T05Ue9l5BbwgPogC94IcxPKTbEUl4y6e+4oPrXYkMeCi9 rwZhi3JlqjSEGcjJMWxaD3X0pfvPKdOgkr9wnQbxWl/8d9fBGZFTTvqidvlQkIxH7OM9 XCjIzFTRyafbVKJQNkMhHrsnjqPeZAYP9Cvh0j8LemrRSGZSbEOlOJgBWoiTh5cHmMuW bFeJrvukxRZlDgsepKmPOOELTBGwOY8v10zhx9mnIvuSLm0YGrwUWXD0xSQrORxfx1dk Dm/p49XmEZtTnTBQx3GjxyDEpd/wcYIqRkOyEOZ4TiLYVUTjXGWcXJKB/HuPSSBhPytE LdUw== 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=fjQHM9gNV1ZxAC8XyGj0Ewa5KL/pgUbqyaV+ehh1Tk8=; b=uRxUABgVsYXShxWf2xrQb3lvoILsjUhIljYoVW9nhC2iRCkltUZJ0+IyDD7G74CzAV XwVZQN/jUm9RfxenIDSNLpaYi5XiWn3xjVaAHfzqKaigvNmEJIEybFtn9OHRhmdD4hmF uKAfsdlzxgQ8y8AC3nk0VxXIVcfHQF/l62BerHOJhofQB7kajxzvS0ggKK2EbhID8y5k bjNqyuskpoJLM3D7w2MwC8+1rbrJo63iQn8NEupzyt8o4qRJS3w0ztXAiXS5dsGGYVqi Tuv4XeO2jRnkZDHfwZa7z/e3QmqzRjjIPvfjOc47C6HQsOc202Z9u+jZxpswKFXUHNPa HUWw== X-Gm-Message-State: AIkVDXLPVmy/GvorvMuMRzxmwsu+EqGZv3MQOiUPlhIJ7qf4+xUa5sfdwOguRxzSuHFS0A== X-Received: by 10.37.172.204 with SMTP id x12mr27187029ybd.31.1485288081346; Tue, 24 Jan 2017 12:01:21 -0800 (PST) Received: from localhost (50-88-177-90.res.bhn.net. [50.88.177.90]) by smtp.gmail.com with ESMTPSA id o184sm10340092ywo.50.2017.01.24.12.01.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Jan 2017 12:01:20 -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 5/5] gpio: ws16c48: Utilize devm_ functions in driver probe callback Date: Tue, 24 Jan 2017 15:01:15 -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 ws16c48_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-ws16c48.c | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/drivers/gpio/gpio-ws16c48.c b/drivers/gpio/gpio-ws16c48.c index eaa71d440ccf..66129355e3a3 100644 --- a/drivers/gpio/gpio-ws16c48.c +++ b/drivers/gpio/gpio-ws16c48.c @@ -46,7 +46,6 @@ MODULE_PARM_DESC(irq, "WinSystems WS16C48 interrupt line numbers"); * @irq_mask: I/O bits affected by interrupts * @flow_mask: IRQ flow type mask for the respective I/O bits * @base: base port address of the GPIO device - * @irq: Interrupt line number */ struct ws16c48_gpio { struct gpio_chip chip; @@ -56,7 +55,6 @@ struct ws16c48_gpio { unsigned long irq_mask; unsigned long flow_mask; unsigned base; - unsigned irq; }; static int ws16c48_gpio_get_direction(struct gpio_chip *chip, unsigned offset) @@ -330,13 +328,12 @@ static int ws16c48_probe(struct device *dev, unsigned int id) ws16c48gpio->chip.get = ws16c48_gpio_get; ws16c48gpio->chip.set = ws16c48_gpio_set; ws16c48gpio->base = base[id]; - ws16c48gpio->irq = irq[id]; spin_lock_init(&ws16c48gpio->lock); dev_set_drvdata(dev, ws16c48gpio); - err = gpiochip_add_data(&ws16c48gpio->chip, ws16c48gpio); + err = devm_gpiochip_add_data(dev, &ws16c48gpio->chip, ws16c48gpio); if (err) { dev_err(dev, "GPIO registering failed (%d)\n", err); return err; @@ -353,31 +350,17 @@ static int ws16c48_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], ws16c48_irq_handler, IRQF_SHARED, name, - ws16c48gpio); + err = devm_request_irq(dev, irq[id], ws16c48_irq_handler, IRQF_SHARED, + name, ws16c48gpio); 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(&ws16c48gpio->chip); - return err; -} - -static int ws16c48_remove(struct device *dev, unsigned int id) -{ - struct ws16c48_gpio *const ws16c48gpio = dev_get_drvdata(dev); - - free_irq(ws16c48gpio->irq, ws16c48gpio); - gpiochip_remove(&ws16c48gpio->chip); - - return 0; } static struct isa_driver ws16c48_driver = { @@ -385,7 +368,6 @@ static struct isa_driver ws16c48_driver = { .driver = { .name = "ws16c48" }, - .remove = ws16c48_remove }; module_isa_driver(ws16c48_driver, num_ws16c48);