From patchwork Thu Aug 9 12:33:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Ben Whitten X-Patchwork-Id: 955525 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="JbsvEUuy"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41mSPS743jz9s1x for ; Thu, 9 Aug 2018 22:34:36 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731041AbeHIO7Q (ORCPT ); Thu, 9 Aug 2018 10:59:16 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:35265 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727786AbeHIO7Q (ORCPT ); Thu, 9 Aug 2018 10:59:16 -0400 Received: by mail-wr1-f68.google.com with SMTP id g1-v6so5022200wru.2 for ; Thu, 09 Aug 2018 05:34:33 -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 :mime-version:content-transfer-encoding; bh=L8qmrLLhBmovNagxfE4M6tIf6Kbw+/5IQVtHXBIaQso=; b=JbsvEUuyVlzwkziuUz3+Eo0y9DJk+7rcwfrepGUEPmU1NLdc5Stkz84kPygwEpNEU4 mnq2GH8qcpgkOHipG547LRLNUvyWISjpfp8HcpuEk47EMDrFDUhoDwL0S8DiFg+qi8rE ewDdP3aHoIlV8JsxGQiysS5XECFlTNqtVrbJ7OcnTAVPrUmlIE8Y0vw5CGJ0rWm5n/fz 6hCdsa/bQzkbYgkm44jzXqd3nhEFMky4+Dg1dDVvuXm1+X73DzCLzV+9IO0n75YcGmYg B7z7ti3o/UQ5huDIf974O+FwycJ3OZNstvu1gxtU0IX/mNAxcThzKVu0RAkDhHNT7k2e L/gg== 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:mime-version:content-transfer-encoding; bh=L8qmrLLhBmovNagxfE4M6tIf6Kbw+/5IQVtHXBIaQso=; b=ecEI56VE6FMcuTsSh2ztamHle+mcql1/95Z2Vn+cfBLIh5dCgIugL/569chO1p9uvG wX2YxJPYtGd5tF6ub45qFN0f//6uPzXsR0vewz7YZmX2j1FQRzI90MqLjCaxw5BRzdq1 VJdMt07fQUOY+TqldHDhaNiJBzK4xp8zlHa3rHhc0h5aVu0WSTaTHy6Qvl+8kbXGzXLb wkm7eZRlclW6a/bkx9I2A2nkLhZ4EySS5qEuJR0aMqOEs9DTn1Y3zbH/ph99WBPK7VVp hFVbbT3TQrx+WqQEnAGV84x6pO7smveHK0RZzFf93eJPmBXzmTWg355kRMtvNsetT5rc +8kg== X-Gm-Message-State: AOUpUlFqt5zJPn2FYfTQKWVdyyPBq0X+UWfuWgr7axCV+FR1RT4HQleq 8XcWnFd5YnZdhGsORMgOWlA= X-Google-Smtp-Source: AA+uWPw7/1Bfbn184ReS2TAr+iXQ59qoaRqypDo66QPdyS7p2NCNJoY2k7MjosrhyROV5BxyhBt6WA== X-Received: by 2002:a5d:6250:: with SMTP id m16-v6mr1400218wrv.179.1533818072903; Thu, 09 Aug 2018 05:34:32 -0700 (PDT) Received: from Sarah.corp.lairdtech.com ([109.174.151.67]) by smtp.gmail.com with ESMTPSA id g125-v6sm8596848wmf.16.2018.08.09.05.34.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 09 Aug 2018 05:34:31 -0700 (PDT) From: Ben Whitten X-Google-Original-From: Ben Whitten To: afaerber@suse.de Cc: starnight@g.ncu.edu.tw, hasnain.virk@arm.com, netdev@vger.kernel.org, liuxuenetmail@gmail.com, shess@hessware.de, Ben Whitten Subject: [PATCH lora-next v2 2/8] net: lora: sx1301: convert to devm registration of netdev Date: Thu, 9 Aug 2018 13:33:32 +0100 Message-Id: <1533818018-29005-2-git-send-email-ben.whitten@lairdtech.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1533818018-29005-1-git-send-email-ben.whitten@lairdtech.com> References: <1533818018-29005-1-git-send-email-ben.whitten@lairdtech.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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, 27 insertions(+), 60 deletions(-) diff --git a/drivers/net/lora/sx1301.c b/drivers/net/lora/sx1301.c index 5342b61..3c09f5a 100644 --- a/drivers/net/lora/sx1301.c +++ b/drivers/net/lora/sx1301.c @@ -3,6 +3,7 @@ * Semtech SX1301 LoRa concentrator * * Copyright (c) 2018 Andreas Färber + * Copyright (c) 2018 Ben Whitten * * Based on SX1301 HAL code: * Copyright (c) 2013 Semtech-Cycleo @@ -637,20 +638,17 @@ static int sx1301_probe(struct spi_device *spi) ret = sx1301_read(spi, REG_VERSION, &val); if (ret) { dev_err(&spi->dev, "version read failed\n"); - goto err_version; + return ret; } if (val != 103) { dev_err(&spi->dev, "unexpected version: %u\n", val); - ret = -ENXIO; - goto err_version; + return -ENXIO; } - netdev = alloc_loradev(sizeof(*priv)); - if (!netdev) { - ret = -ENOMEM; - goto err_alloc_loradev; - } + netdev = devm_alloc_loradev(&spi->dev, sizeof(*priv)); + if (!netdev) + return -ENOMEM; priv = netdev_priv(netdev); priv->rst_gpio = rst; @@ -662,19 +660,19 @@ static int sx1301_probe(struct spi_device *spi) 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; @@ -682,13 +680,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; @@ -696,7 +694,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); @@ -749,8 +747,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); @@ -765,15 +762,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); @@ -788,7 +784,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 */ @@ -796,7 +792,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); @@ -804,13 +800,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); @@ -819,7 +815,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 */ @@ -827,7 +823,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; @@ -835,13 +831,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; @@ -849,58 +845,28 @@ 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: - free_loradev(netdev); -err_alloc_loradev: -err_version: - return ret; } static int sx1301_remove(struct spi_device *spi) { - struct net_device *netdev = spi_get_drvdata(spi); - - //unregister_loradev(netdev); - free_loradev(netdev); - dev_info(&spi->dev, "SX1301 module removed\n"); return 0; @@ -927,4 +893,5 @@ module_spi_driver(sx1301_spi_driver); MODULE_DESCRIPTION("SX1301 SPI driver"); MODULE_AUTHOR("Andreas Färber "); +MODULE_AUTHOR("Ben Whitten "); MODULE_LICENSE("GPL");