From patchwork Tue Aug 7 17:32:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Whitten X-Patchwork-Id: 954598 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="KH6pM6fs"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41lM6B0jZYz9ryt for ; Wed, 8 Aug 2018 03:32:34 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390046AbeHGTry (ORCPT ); Tue, 7 Aug 2018 15:47:54 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:52408 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727194AbeHGTry (ORCPT ); Tue, 7 Aug 2018 15:47:54 -0400 Received: by mail-wm0-f66.google.com with SMTP id o11-v6so18128465wmh.2 for ; Tue, 07 Aug 2018 10:32:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=lKWx+yST+ffaoUkr97j17RwOsy1uyXtUQ2DbexhBE2E=; b=KH6pM6fsSD74+e/e4/+qiYpAk5UKbr2sCM75pFGrWxrKUXksEwAdoQONwSdyzjdJwa ytA0bKxPM7C4Tgsdr2OvIuoU2tw9VOMjMFhehfBUigGMCZap/9ODeL6TI0jm9MhwNhrt rT33PtbasHLWcsjLzT0BGZGS5aVnQPvJVhu/XAW/TucOKArcsbGWTvXctUniisLvgaWW MlYuXU9KKRbJ4jFGJ0Fo0hiGYVHy3+nsD1y33C+yuH4zHSNOpvfM6lKzNHLkg2E0mnvS EqdU+6smujd5xkghgrjlbYeFhEX8/mBCc0FrG/1D+Eh7i4ICzHuzv82jg0iidDd15FoV r73Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=lKWx+yST+ffaoUkr97j17RwOsy1uyXtUQ2DbexhBE2E=; b=AVxYdyS96E1tCouU/cfBsYkAQwOcKc2C0dXgrW5C/qGM2zbVbL+hrXltngLwLm4mLL Ey3L2U5XkYK3PGZ0NrYOPXLKmTuUtvbKTH7N5f4Kp26FbH6xurw7qNfLrK2SoHKgWlRK ZqokcfGJV8T+4fXN7DKrwFIEPVSlgIsxpyX2jfHHNl7Jy7ts410cwkdkwVuEtCXGsFy5 3Zt31gMR3Wb/iBTKBmkG7aOtRUvHL6S7r/etFCscp8VeBLaUQRfiJR1og8PXLDfmCfNq jzxAx4B19CrPwjw65QRb3IpNSHhJanwRiC+pNx1ri/pRFyKISNk9F9WGprTZbUaL+hMj QahQ== X-Gm-Message-State: AOUpUlFLAkzI1I/UKOMW1pxysKqZ0b9Nlm5TCyQ9H/d31nJXC13FRZjP FDsEqkKDqQWYaSMHBqeydkk= X-Google-Smtp-Source: AA+uWPyyXQA9uKgAbFfyugV9FnALseZe3ZAxm56zNaVx2ebL9BfjoqqVrzqS2Z1bv0b+NZEOpQJuBg== X-Received: by 2002:a1c:889:: with SMTP id 131-v6mr2201044wmi.142.1533663150250; Tue, 07 Aug 2018 10:32:30 -0700 (PDT) Received: from Lappy.lan (196.98.125.91.dyn.plus.net. [91.125.98.196]) by smtp.gmail.com with ESMTPSA id m207-v6sm3234263wma.31.2018.08.07.10.32.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 07 Aug 2018 10:32:29 -0700 (PDT) From: Ben Whitten To: afaerber@suse.de, starnight@g.ncu.edu.tw, hasnain.virk@arm.com Cc: netdev@vger.kernel.org, Ben Whitten Subject: [PATCH lora-next 03/10] net: lora: sx1301: convert to devm registration of netdev Date: Tue, 7 Aug 2018 18:32:04 +0100 Message-Id: <1533663131-16313-5-git-send-email-ben.whitten@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1533663131-16313-1-git-send-email-ben.whitten@gmail.com> References: <1533663131-16313-1-git-send-email-ben.whitten@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Ben Whitten We allow the devres framework handle the clean removal of resources on teardown of the device, in this case the SPI device, saving lengthy unwind code and improving clarity. Signed-off-by: Ben Whitten --- drivers/net/lora/sx1301.c | 87 +++++++++++++++++------------------------------ 1 file changed, 31 insertions(+), 56 deletions(-) diff --git a/drivers/net/lora/sx1301.c b/drivers/net/lora/sx1301.c index 49958f0..54bfc31 100644 --- a/drivers/net/lora/sx1301.c +++ b/drivers/net/lora/sx1301.c @@ -869,9 +869,13 @@ static int sx1301_probe(struct spi_device *spi) spi_setup(spi); netdev = alloc_loradev(sizeof(*priv)); - if (!netdev) { - ret = -ENOMEM; - goto err_alloc_loradev; + if (!netdev) + return -ENOMEM; + + ret = devm_lora_register_netdev(&spi->dev, netdev); + if (ret) { + free_loradev(netdev); + return ret; } priv = netdev_priv(netdev); @@ -885,7 +889,7 @@ static int sx1301_probe(struct spi_device *spi) if (IS_ERR(priv->regmap)) { ret = PTR_ERR(priv->regmap); dev_err(&spi->dev, "Regmap allocation failed: %d\n", ret); - return err_regmap; + return ret; } for (i = 0; i < ARRAY_SIZE(sx1301_reg_fields); i++) { @@ -897,38 +901,37 @@ static int sx1301_probe(struct spi_device *spi) if (IS_ERR(priv->regmap_fields[i])) { ret = PTR_ERR(priv->regmap_fields[i]); dev_err(&spi->dev, "Cannot allocate regmap field: %d\n", ret); - goto err_regmap; + return ret; } } ret = regmap_read(priv->regmap, SX1301_VER, &ver); if (ret) { dev_err(&spi->dev, "version read failed\n"); - goto err_version; + return ret; } if (ver != 103) { dev_err(&spi->dev, "unexpected version: %u\n", ver); - ret = -ENXIO; - goto err_version; + return -ENXIO; } ret = sx1301_write(spi, REG_PAGE_RESET, 0); if (ret) { dev_err(&spi->dev, "page/reset write failed\n"); - goto err_init_page; + return ret; } ret = sx1301_soft_reset(spi); if (ret) { dev_err(&spi->dev, "soft reset failed\n"); - goto err_soft_reset; + return ret; } ret = sx1301_read(spi, 16, &val); if (ret) { dev_err(&spi->dev, "16 read failed\n"); - goto err_read_global_en_0; + return ret; } val &= ~REG_16_GLOBAL_EN; @@ -936,13 +939,13 @@ static int sx1301_probe(struct spi_device *spi) ret = sx1301_write(spi, 16, val); if (ret) { dev_err(&spi->dev, "16 write failed\n"); - goto err_write_global_en_0; + return ret; } ret = sx1301_read(spi, 17, &val); if (ret) { dev_err(&spi->dev, "17 read failed\n"); - goto err_read_clk32m_0; + return ret; } val &= ~REG_17_CLK32M_EN; @@ -950,7 +953,7 @@ static int sx1301_probe(struct spi_device *spi) ret = sx1301_write(spi, 17, val); if (ret) { dev_err(&spi->dev, "17 write failed\n"); - goto err_write_clk32m_0; + return ret; } ret = sx1301_page_read(spi, 2, 43, &val); @@ -1003,8 +1006,7 @@ static int sx1301_probe(struct spi_device *spi) priv->radio_a_ctrl = spi_alloc_master(&spi->dev, sizeof(*radio)); if (!priv->radio_a_ctrl) { - ret = -ENOMEM; - goto err_radio_a_alloc; + return -ENOMEM; } sx1301_radio_setup(priv->radio_a_ctrl); @@ -1019,15 +1021,14 @@ static int sx1301_probe(struct spi_device *spi) if (ret) { dev_err(&spi->dev, "radio A SPI register failed\n"); spi_controller_put(priv->radio_a_ctrl); - goto err_radio_a_register; + return ret; } /* radio B */ priv->radio_b_ctrl = spi_alloc_master(&spi->dev, sizeof(*radio)); if (!priv->radio_b_ctrl) { - ret = -ENOMEM; - goto err_radio_b_alloc; + return -ENOMEM; } sx1301_radio_setup(priv->radio_b_ctrl); @@ -1042,7 +1043,7 @@ static int sx1301_probe(struct spi_device *spi) if (ret) { dev_err(&spi->dev, "radio B SPI register failed\n"); spi_controller_put(priv->radio_b_ctrl); - goto err_radio_b_register; + return ret; } /* GPIO */ @@ -1050,7 +1051,7 @@ static int sx1301_probe(struct spi_device *spi) ret = sx1301_read(spi, REG_GPIO_MODE, &val); if (ret) { dev_err(&spi->dev, "GPIO mode read failed\n"); - goto err_read_gpio_mode; + return ret; } val |= GENMASK(4, 0); @@ -1058,13 +1059,13 @@ static int sx1301_probe(struct spi_device *spi) ret = sx1301_write(spi, REG_GPIO_MODE, val); if (ret) { dev_err(&spi->dev, "GPIO mode write failed\n"); - goto err_write_gpio_mode; + return ret; } ret = sx1301_read(spi, REG_GPIO_SELECT_OUTPUT, &val); if (ret) { dev_err(&spi->dev, "GPIO select output read failed\n"); - goto err_read_gpio_select_output; + return ret; } val &= ~GENMASK(3, 0); @@ -1073,7 +1074,7 @@ static int sx1301_probe(struct spi_device *spi) ret = sx1301_write(spi, REG_GPIO_SELECT_OUTPUT, val); if (ret) { dev_err(&spi->dev, "GPIO select output write failed\n"); - goto err_write_gpio_select_output; + return ret; } /* TODO LBT */ @@ -1081,7 +1082,7 @@ static int sx1301_probe(struct spi_device *spi) ret = sx1301_read(spi, 16, &val); if (ret) { dev_err(&spi->dev, "16 read (1) failed\n"); - goto err_read_global_en_1; + return ret; } val |= REG_16_GLOBAL_EN; @@ -1089,13 +1090,13 @@ static int sx1301_probe(struct spi_device *spi) ret = sx1301_write(spi, 16, val); if (ret) { dev_err(&spi->dev, "16 write (1) failed\n"); - goto err_write_global_en_1; + return ret; } ret = sx1301_read(spi, 17, &val); if (ret) { dev_err(&spi->dev, "17 read (1) failed\n"); - goto err_read_clk32m_1; + return ret; } val |= REG_17_CLK32M_EN; @@ -1103,50 +1104,24 @@ static int sx1301_probe(struct spi_device *spi) ret = sx1301_write(spi, 17, val); if (ret) { dev_err(&spi->dev, "17 write (1) failed\n"); - goto err_write_clk32m_1; + return ret; } /* calibration */ ret = sx1301_agc_calibrate(spi); if (ret) - goto err_agc_calibrate; + return ret; /* TODO */ ret = sx1301_load_all_firmware(spi); if (ret) - goto err_load_firmware; + return ret; dev_info(&spi->dev, "SX1301 module probed\n"); return 0; - -err_load_firmware: -err_agc_calibrate: -err_write_clk32m_1: -err_read_clk32m_1: -err_write_global_en_1: -err_read_global_en_1: -err_write_gpio_select_output: -err_read_gpio_select_output: -err_write_gpio_mode: -err_read_gpio_mode: -err_radio_b_register: -err_radio_b_alloc: -err_radio_a_register: -err_radio_a_alloc: -err_write_clk32m_0: -err_read_clk32m_0: -err_write_global_en_0: -err_read_global_en_0: -err_soft_reset: -err_init_page: -err_version: -err_regmap: - free_loradev(netdev); -err_alloc_loradev: - return ret; } static int sx1301_remove(struct spi_device *spi)