From patchwork Tue Oct 9 12:52:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Whitten X-Patchwork-Id: 981184 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="uvh+7X/Q"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42Txvx3TGqz9s9G for ; Tue, 9 Oct 2018 23:52:29 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726986AbeJIUJP (ORCPT ); Tue, 9 Oct 2018 16:09:15 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:45536 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726862AbeJIUJN (ORCPT ); Tue, 9 Oct 2018 16:09:13 -0400 Received: by mail-wr1-f68.google.com with SMTP id q5-v6so1682009wrw.12 for ; Tue, 09 Oct 2018 05:52:24 -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=vykvvw6z8KbAShDoVOxsMwloQTTl5qXhoxhjAjE5d9g=; b=uvh+7X/Q4iHTkONa+Lew7Z28sjH++mL1JLgx0tqFKoPCuLL4AOQvSXY05gp3Tfl/YX OGXPRkKGxdTa2IKMYQG+YMdQpKF0/j/FdwlxxazfBYuORIhcyS/dbTTXRbFfj6HBbk/8 vWMtKSzs5sjXkm5k+sD/oLn2MzqzLX75XwvkVHSeQ1JTanT0875pPmZMKZEdG/b0Ai8R 57/1JrOm8GS1LmHW9RQy80CR/L2CY7IffGm6uzRuoYACopz1al4vogaEgT/OwoDlOgMi W/eK0cmk9Jpogf+uLNr+iuas+dHZ+S0dCi3kME5Sxb+6aFiGbhVIjrTH2o1ZLhCFZU4G Z0jg== 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=vykvvw6z8KbAShDoVOxsMwloQTTl5qXhoxhjAjE5d9g=; b=V6ZVOUztXmMVdN0XypydQET2CThzpCcDCMUNsw6r4dogWvQ/qREe84pbm/BeRjIAWi xFq9bJR8CwsfMdlKOEncHIB5DLP3zJBQeQaZFjwE/I72VIXJU8jKtZoYtBKNmyKqG0kZ MXBl8Wc1tjip9pyXTop5Rn7/HJB3tJ6Ujo6VYhbnoFmo0Vmp+Y04dRknFyO2gNAmkMAn brYUSz0sbFSG/0DIkPyIebXN0eVOg33WR5bJ6AqLfU5vVaODneksV/bAyB+araNC++ji uttbdfBS7o6ZL44T073KAGZiUmOMxM12orxb8sbSFasSDgsAtPUq9Enb4IbhaGmywAaE va+w== X-Gm-Message-State: ABuFfoi7QXWWU8y8Msyr2HpB0yFUjYGDz6DvQK+w/GpWp66J32kPgvkG eTeEwCVo1jjrlyoZODyWYuY= X-Google-Smtp-Source: ACcGV60bBB+OnkrIShISI9ZJ2X5rUC4m9wEnNAXSH92llFraJq6NH7ymnVt06B7o7wlNxhNATQ7uIA== X-Received: by 2002:a5d:47cb:: with SMTP id l11-v6mr19883434wrs.195.1539089543222; Tue, 09 Oct 2018 05:52:23 -0700 (PDT) Received: from Sarah.corp.lairdtech.com ([109.174.151.67]) by smtp.gmail.com with ESMTPSA id g3-v6sm17216942wrw.81.2018.10.09.05.52.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 09 Oct 2018 05:52:22 -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 v2 lora-next 3/4] net: lora: sx125x: convert to regmap fields Date: Tue, 9 Oct 2018 13:52:11 +0100 Message-Id: <1539089532-2481-4-git-send-email-ben.whitten@lairdtech.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1539089532-2481-1-git-send-email-ben.whitten@lairdtech.com> References: <1539089532-2481-1-git-send-email-ben.whitten@lairdtech.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Ben Whitten We convert to using regmap fields to allow regmap to take care of read modify writes and bit shifting for ofset fields. Signed-off-by: Ben Whitten --- drivers/net/lora/sx125x.c | 59 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/drivers/net/lora/sx125x.c b/drivers/net/lora/sx125x.c index dc13d1a..36b61b1 100644 --- a/drivers/net/lora/sx125x.c +++ b/drivers/net/lora/sx125x.c @@ -25,11 +25,25 @@ #include "sx125x.h" -#define REG_CLK_SELECT_TX_DAC_CLK_SELECT_CLK_IN BIT(0) -#define REG_CLK_SELECT_CLK_OUT BIT(1) +enum sx125x_fields { + F_CLK_OUT, + F_TX_DAC_CLK_SEL, + F_SX1257_XOSC_GM_STARTUP, + F_SX1257_XOSC_DISABLE_CORE, +}; + +static const struct reg_field sx125x_regmap_fields[] = { + /* CLK_SELECT */ + [F_CLK_OUT] = REG_FIELD(SX125X_CLK_SELECT, 1, 1), + [F_TX_DAC_CLK_SEL] = REG_FIELD(SX125X_CLK_SELECT, 0, 0), + /* XOSC */ /* TODO maybe make this dynamic */ + [F_SX1257_XOSC_GM_STARTUP] = REG_FIELD(SX1257_XOSC, 0, 3), + [F_SX1257_XOSC_DISABLE_CORE] = REG_FIELD(SX1257_XOSC, 5, 5), +}; struct sx125x_priv { struct regmap *regmap; + struct regmap_field *regmap_fields[ARRAY_SIZE(sx125x_regmap_fields)]; }; static struct regmap_config __maybe_unused sx125x_regmap_config = { @@ -44,11 +58,18 @@ static struct regmap_config __maybe_unused sx125x_regmap_config = { .max_register = SX125X_MAX_REGISTER, }; +static int sx125x_field_write(struct sx125x_priv *priv, + enum sx125x_fields field_id, u8 val) +{ + return regmap_field_write(priv->regmap_fields[field_id], val); +} + static int __maybe_unused sx125x_regmap_probe(struct device *dev, struct regmap *regmap, unsigned int radio) { struct sx125x_priv *priv; unsigned int val; int ret; + int i; priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); if (!priv) @@ -56,6 +77,18 @@ static int __maybe_unused sx125x_regmap_probe(struct device *dev, struct regmap dev_set_drvdata(dev, priv); priv->regmap = regmap; + for (i = 0; i < ARRAY_SIZE(sx125x_regmap_fields); i++) { + const struct reg_field *reg_fields = sx125x_regmap_fields; + + priv->regmap_fields[i] = devm_regmap_field_alloc(dev, + priv->regmap, + reg_fields[i]); + if (IS_ERR(priv->regmap_fields[i])) { + ret = PTR_ERR(priv->regmap_fields[i]); + dev_err(dev, "Cannot allocate regmap field: %d\n", ret); + return ret; + } + } if (true) { ret = regmap_read(priv->regmap, SX1255_VERSION, &val); @@ -66,24 +99,34 @@ static int __maybe_unused sx125x_regmap_probe(struct device *dev, struct regmap dev_info(dev, "SX125x version: %02x\n", val); } - val = REG_CLK_SELECT_TX_DAC_CLK_SELECT_CLK_IN; if (radio == 1) { /* HACK */ - val |= REG_CLK_SELECT_CLK_OUT; + ret = sx125x_field_write(priv, F_CLK_OUT, 1); + if (ret) { + dev_err(dev, "enabling clock output failed\n"); + return ret; + } + dev_info(dev, "enabling clock output\n"); } - ret = regmap_write(priv->regmap, SX125X_CLK_SELECT, val); + ret = sx125x_field_write(priv, F_TX_DAC_CLK_SEL, 1); if (ret) { - dev_err(dev, "clk write failed\n"); + dev_err(dev, "clock select failed\n"); return ret; } dev_dbg(dev, "clk written\n"); if (true) { - ret = regmap_write(priv->regmap, SX1257_XOSC, 13 + 2 * 16); + ret = sx125x_field_write(priv, F_SX1257_XOSC_DISABLE_CORE, 1); + if (ret) { + dev_err(dev, "xosc disable failed\n"); + return ret; + } + + ret = sx125x_field_write(priv, F_SX1257_XOSC_GM_STARTUP, 13); if (ret) { - dev_err(dev, "xosc write failed\n"); + dev_err(dev, "xosc startup adjust failed\n"); return ret; } }