Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp10061176imu; Sun, 30 Dec 2018 11:45:57 -0800 (PST) X-Google-Smtp-Source: AFSGD/VTMBs5iJo4FkSPqkkAudc5MdAiEnk9L8sOuF5g//9imvtmwKhDXDJ1kNs8iBp+bKrvNNVM X-Received: by 2002:a62:7c47:: with SMTP id x68mr36143671pfc.209.1546199157610; Sun, 30 Dec 2018 11:45:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1546199157; cv=none; d=google.com; s=arc-20160816; b=Qz9z9zOmXy0xkxenjXj+m4ctEmy/P/4x0IskQTCj/O5ljGegs5782IRTFogwYoln1e gEE5IOSCg4S9LtBFVotxQpsYiBK3CCMS+VUCDew41L8lOJ7Oa1gkjub34sfQkocPaZCI pF3jEhlbvn8IrigvH9hL9/yV25LHaLBDAIc0Pd5BXHK870hLHofdKAKW5ovAgJKSiemc ATtvfohbTB5WACxSMoV0qmCujh3bAeTZtk6V/R/knL03wsL+qLim0bZzlYWDnhkiXHT/ zpv1OjsNYeysy+a5oVvQHxaf/kthPN1BmzZJpb1mj//FQltpsaGLT9FPmXVbPkvZNNIr VcPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=PmVCL8IyoURhXwSXOJMHV9eDgEiFaq+vwDhdEcwxZvY=; b=DpAw3PWGniUBEQtPA4cI2tOAnhfLjhEioWERGg6GVqRgVgEMm7Jt1roAa8aFLQ9ISD KgJ5yyYmiJPsPt2Vf4qGpTcxccTEyW8nUX76535kOghGwdAWMxkP/+9gTVrIT6ig4FrR js2js0mxgqMcxFCKMGskU2+f6MmgecDztbilCAzanoPzpzBfm3b4SSwiG5ZRMUMZ0P8k uEaWqjFnNU3/zicXUIjmh2nuroYZyRlAM4I3LdDPERNBCC9eg07eLCmXzDbXT58X1dnb YQHluArWKb/EYi02PZBlrL35VSCCTiBpw0fisfoT5KzXHfCukAJFRR0Ug8Axa9QxrRik j+Hw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j2si5737654plt.93.2018.12.30.11.45.42; Sun, 30 Dec 2018 11:45:57 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726744AbeL3Tox (ORCPT + 99 others); Sun, 30 Dec 2018 14:44:53 -0500 Received: from mx2.suse.de ([195.135.220.15]:39338 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726432AbeL3Tox (ORCPT ); Sun, 30 Dec 2018 14:44:53 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id BDA13AE1D; Sun, 30 Dec 2018 19:44:51 +0000 (UTC) From: =?UTF-8?q?Andreas=20F=C3=A4rber?= To: linux-lpwan@lists.infradead.org Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Ben Whitten , Ben Whitten , =?UTF-8?q?Andreas=20F=C3=A4rber?= Subject: [PATCH lora-next] net: lora: sx1301: Fix clk32m handling Date: Sun, 30 Dec 2018 20:44:44 +0100 Message-Id: <20181230194444.11970-1-afaerber@suse.de> X-Mailer: git-send-email 2.16.4 In-Reply-To: <491d1a46-c112-1106-9f25-14149f0dcbd0@suse.de> References: <491d1a46-c112-1106-9f25-14149f0dcbd0@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We can't get the clk32m during probe because the radio is not yet probed then. When doing it during netdev open we also need to undo that during netdev stop. Revamp the error handling for open and tidy our debug output while at it. Signed-off-by: Andreas Färber --- drivers/net/lora/sx1301.c | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/drivers/net/lora/sx1301.c b/drivers/net/lora/sx1301.c index 23cbddc364e5..533fd37c350d 100644 --- a/drivers/net/lora/sx1301.c +++ b/drivers/net/lora/sx1301.c @@ -379,58 +379,73 @@ static int sx130x_loradev_open(struct net_device *netdev) return -ENXIO; } - priv->clk32m = devm_clk_get(priv->dev, "clk32m"); + priv->clk32m = clk_get(priv->dev, "clk32m"); if (IS_ERR(priv->clk32m)) { - dev_err(priv->dev, "failed to get clk32m\n"); + dev_err(priv->dev, "failed to get clk32m (%ld)\n", PTR_ERR(priv->clk32m)); return PTR_ERR(priv->clk32m); } ret = clk_prepare_enable(priv->clk32m); if (ret) { - dev_err(priv->dev, "failed to enable clk32m: %d\n", ret); - return ret; + dev_err(priv->dev, "failed to enable clk32m (%d)\n", ret); + goto err_clk_enable; } ret = sx1301_field_write(priv, F_GLOBAL_EN, 1); if (ret) { - dev_err(priv->dev, "enable global clocks failed\n"); - return ret; + dev_err(priv->dev, "enable global clocks failed (%d)\n", ret); + goto err_reg; } ret = sx1301_field_write(priv, F_CLK32M_EN, 1); if (ret) { - dev_err(priv->dev, "enable 32M clock failed\n"); - return ret; + dev_err(priv->dev, "enable 32M clock failed (%d)\n", ret); + goto err_reg; } /* calibration */ ret = sx1301_agc_calibrate(priv); if (ret) - return ret; + goto err_calibrate; /* TODO */ ret = sx1301_load_all_firmware(priv); if (ret) - return ret; + goto err_firmware; ret = open_loradev(netdev); if (ret) - return ret; + goto err_open; netif_start_queue(netdev); return 0; + +err_open: +err_firmware: +err_calibrate: +err_reg: + clk_disable_unprepare(priv->clk32m); +err_clk_enable: + clk_put(priv->clk32m); + return ret; } static int sx130x_loradev_stop(struct net_device *netdev) { + struct sx1301_priv *priv = netdev_priv(netdev); + netdev_dbg(netdev, "%s", __func__); netif_stop_queue(netdev); close_loradev(netdev); + clk_disable_unprepare(priv->clk32m); + clk_put(priv->clk32m); + priv->clk32m = NULL; + return 0; } -- 2.16.4