From patchwork Wed Aug 22 11:02:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Whitten X-Patchwork-Id: 960904 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="ce3es/Fo"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41wPm40byxz9s7X for ; Wed, 22 Aug 2018 21:03:16 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728675AbeHVO1j (ORCPT ); Wed, 22 Aug 2018 10:27:39 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:34265 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727016AbeHVO1j (ORCPT ); Wed, 22 Aug 2018 10:27:39 -0400 Received: by mail-wr1-f67.google.com with SMTP id g33-v6so1266677wrd.1 for ; Wed, 22 Aug 2018 04:03:13 -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=L4Aco+Hgld1lzsxdfDOnoCr2URwuAJdUHe5/uk+pT7o=; b=ce3es/FoGvTNph8IqSp+Wf/Q5f7PcO/K65NQOTvzhH7WOlja90rTPzqiDzQMrMXj44 8Q5HWKgdY4wSBy41ay5WKlyjTu3ws/or7D96v2OlRDu/+g8R3PqZHZRUEex013sQg55X yBzvBnTPT05laDVKWwEinacDxfgDnROXLIEDh3WSLmDToJnrS8wsaA5Usdsi7r3sgKjD n/XVkdD3Vi7HA9C8DqZ4udnq8xtfxX1BaIK0CYyceAEkDbQe9c4l8JO7PR224r3LM22c cYC6srQjeCz5Yu4TJnBRjfp8cI9YWFIgLTlxiC85QIfyG1BzmgIxVSH9jvpU8Gv/Oq1D ILzA== 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=L4Aco+Hgld1lzsxdfDOnoCr2URwuAJdUHe5/uk+pT7o=; b=Xy34Uk6LQveVLVb2tuwGlU0fDyfj0IAyovJLS/SpO4jdUyR5zRMsYM60euMcWNTBp1 RW4QWd8ZRUyqm/5DjjpCWwdWZAubcyu1oMlYvCEy2Kxq+D6plBO87BsGh0NF+lG7Ihza 8+X6vCrtm90XCCYWPWCiRxGpMgbVq5ujXEHigJi080DGGGKi9fy5mbKbOQDsFmNgfo4d 1faHUn4A294oSsMhF819omfGIiWE9mpWPHbzCMbAAB0/H+ugFK7gxoCqkXe7lKATQvRg Xg8R0QGsboahoDz6CoAnJTNmNE1PNbCqguKj8ebCIAk/Ba+jmvXc4z2Mdf0nsFSTKoU+ 0GEg== X-Gm-Message-State: APzg51Bz65XbVA4OX9+Z/poJGmdQ9dbn4uY3VXABDceIl4o1yMpzsbov lC6hp7V9a8WfpCF2A3eivDo= X-Google-Smtp-Source: ANB0VdYduPGcYg8I+5bIRFy2aJd1VEstu8XmIb0VbqDsAJmI21PG4bXTHnn4ARy0Y9SpvdOK+i2oTQ== X-Received: by 2002:adf:9464:: with SMTP id 91-v6mr8783050wrq.231.1534935793029; Wed, 22 Aug 2018 04:03:13 -0700 (PDT) Received: from Sarah.corp.lairdtech.com ([109.174.151.67]) by smtp.gmail.com with ESMTPSA id j6-v6sm548890wru.64.2018.08.22.04.03.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 22 Aug 2018 04:03:11 -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 2/3] net: lora: sx125x: convert to regmap fields Date: Wed, 22 Aug 2018 12:02:40 +0100 Message-Id: <1534935761-12738-2-git-send-email-ben.whitten@lairdtech.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1534935761-12738-1-git-send-email-ben.whitten@lairdtech.com> References: <1534935761-12738-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 3476a59..b5517e4 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 (false) { 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; } }