From patchwork Tue Aug 7 17:32:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Whitten X-Patchwork-Id: 954599 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="QCx9wyaI"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41lM6B5bk9z9rvt for ; Wed, 8 Aug 2018 03:32:34 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390258AbeHGTrz (ORCPT ); Tue, 7 Aug 2018 15:47:55 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:36098 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389712AbeHGTrz (ORCPT ); Tue, 7 Aug 2018 15:47:55 -0400 Received: by mail-wr1-f66.google.com with SMTP id h9-v6so16554561wro.3 for ; Tue, 07 Aug 2018 10:32:32 -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=ZaRagN3HaIOK1TlMtP7cqEyK4U21bXdXWl7O0dOlcc8=; b=QCx9wyaIE2/1fH8/xD0YCcP6NvRgzHU/mvikUtTv8VkpYc6p+ZBKDdfnmRoT260K6e XU7xkauR6wAHxHDfdpfD3IyBfWPXm018m5S6nus9YJd/QkZR4qm6NhsecHlAvUBpHo1q 5oKOBWC3nLSlagXj5qgKo8LziNt5lfqg7NAGbFojnOZhXJIoRGsAwMr84HXke7RX3tbP VsCtOKw6ByQw/cLRR4Tw4UvxwSYq2/QWctXsDGzCxiha4tELV1V/tc+JSNjq4BDZf+E0 iJxtKnRUyw95LO8MAHKqHrWnL0C8EAA846wx6S0jgIxLChMcM/VrO6w1qVuMPjRZj0dC 5dEw== 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=ZaRagN3HaIOK1TlMtP7cqEyK4U21bXdXWl7O0dOlcc8=; b=c/QuJIGPlEtnLsqpZfUYzUxOWCwTtKD/HGKVij4ApFhQ0fBeL4w6cHiO8OhvqtLeZe cgjkyMcaf8UJ1MJ4ix6lLr9SqqIff/5f/MgnOlRzkNxdX+BLXYm2jinq33Pw+1fzl3IA b+EA1DrdoA9qAQOPUDi181bo1AAxnm2Jy+Ab5+AR+P0Jp88vGQUCt7i4zAC6kJ5lxs03 D2X8pTuKm8FKBrhlDw53Q1VjhVr7tNXtRJKCquCHGDIV81WNg6q5lXOW9MWcpmgFdpW1 N/tAncQbIhjTiZqVaVYlUC7FQaB8nJDcPTEMKcB+VVSvatYFGiqy9c7MPL8DaqfEYTQ4 4Kjw== X-Gm-Message-State: AOUpUlHq5/uNZ2gOsC7pKWBjRI1hlxPYkDtdhAay4s2ecSRt9cYj0dZe ChI2+HIhY8kJwG/mCWpLRYk= X-Google-Smtp-Source: AAOMgpciIxGOrG2Rlt/UfBxqThCNC0XwF9AM2CBRk4wkzoCeEUwnpAR7Y5sW1oVJQ3AE8MfWkJ0NyA== X-Received: by 2002:adf:ef8c:: with SMTP id d12-v6mr14010641wro.195.1533663151904; Tue, 07 Aug 2018 10:32:31 -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.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 07 Aug 2018 10:32:31 -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 04/10] net: lora: sx1301: convert probe function to regmap access Date: Tue, 7 Aug 2018 18:32:05 +0100 Message-Id: <1533663131-16313-6-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 Keeping change sets small we convert the probe function over to regmap and regmap_field access for initialisation. Signed-off-by: Ben Whitten --- drivers/net/lora/sx1301.c | 155 +++++++++------------------------------------- drivers/net/lora/sx1301.h | 7 +++ 2 files changed, 35 insertions(+), 127 deletions(-) diff --git a/drivers/net/lora/sx1301.c b/drivers/net/lora/sx1301.c index 54bfc31..118e8d8 100644 --- a/drivers/net/lora/sx1301.c +++ b/drivers/net/lora/sx1301.c @@ -379,11 +379,6 @@ static int sx1301_page_write(struct spi_device *spi, u8 page, u8 reg, u8 val) return sx1301_write(spi, reg, val); } -static int sx1301_soft_reset(struct spi_device *spi) -{ - return sx1301_write(spi, REG_PAGE_RESET, REG_PAGE_RESET_SOFT_RESET); -} - #define REG_RADIO_X_DATA 0 #define REG_RADIO_X_DATA_READBACK 1 #define REG_RADIO_X_ADDR 2 @@ -854,7 +849,6 @@ static int sx1301_probe(struct spi_device *spi) int ret; int i; unsigned int ver; - u8 val; rst = devm_gpiod_get_optional(&spi->dev, "reset", GPIOD_OUT_LOW); if (IS_ERR(rst)) @@ -911,96 +905,46 @@ static int sx1301_probe(struct spi_device *spi) return ret; } - if (ver != 103) { + if (ver != SX1301_CHIP_VERSION) { dev_err(&spi->dev, "unexpected version: %u\n", ver); return -ENXIO; } - ret = sx1301_write(spi, REG_PAGE_RESET, 0); + ret = regmap_write(priv->regmap, SX1301_PAGE, 0); if (ret) { dev_err(&spi->dev, "page/reset write failed\n"); return ret; } - ret = sx1301_soft_reset(spi); + ret = sx1301_field_write(priv, F_SOFT_RESET, 1); if (ret) { dev_err(&spi->dev, "soft reset failed\n"); return ret; } - ret = sx1301_read(spi, 16, &val); - if (ret) { - dev_err(&spi->dev, "16 read failed\n"); - return ret; - } - - val &= ~REG_16_GLOBAL_EN; - - ret = sx1301_write(spi, 16, val); - if (ret) { - dev_err(&spi->dev, "16 write failed\n"); - return ret; - } - - ret = sx1301_read(spi, 17, &val); - if (ret) { - dev_err(&spi->dev, "17 read failed\n"); - return ret; - } - - val &= ~REG_17_CLK32M_EN; - - ret = sx1301_write(spi, 17, val); - if (ret) { - dev_err(&spi->dev, "17 write failed\n"); - return ret; - } - - ret = sx1301_page_read(spi, 2, 43, &val); - if (ret) { - dev_err(&spi->dev, "2|43 read failed\n"); + /* gate clocks */ + ret = sx1301_field_write(priv, F_GLOBAL_EN, 0); + if (ret) return ret; - } - - val |= REG_2_43_RADIO_B_EN | REG_2_43_RADIO_A_EN; - - ret = sx1301_page_write(spi, 2, 43, val); - if (ret) { - dev_err(&spi->dev, "2|43 write failed\n"); + ret = sx1301_field_write(priv, F_CLK32M_EN, 0); + if (ret) return ret; - } - msleep(500); - - ret = sx1301_page_read(spi, 2, 43, &val); - if (ret) { - dev_err(&spi->dev, "2|43 read failed\n"); + /* switch on and reset the radios (also starts the 32 MHz XTAL) */ + ret = sx1301_field_write(priv, F_RADIO_A_EN, 1); + if (ret) return ret; - } - - val |= REG_2_43_RADIO_RST; - - ret = sx1301_page_write(spi, 2, 43, val); - if (ret) { - dev_err(&spi->dev, "2|43 write failed\n"); + ret = sx1301_field_write(priv, F_RADIO_B_EN, 1); + if (ret) return ret; - } - - msleep(5); - - ret = sx1301_page_read(spi, 2, 43, &val); - if (ret) { - dev_err(&spi->dev, "2|43 read failed\n"); + mdelay(500); + ret = sx1301_field_write(priv, F_RADIO_RST, 1); + if (ret) return ret; - } - - val &= ~REG_2_43_RADIO_RST; - - ret = sx1301_page_write(spi, 2, 43, val); - if (ret) { - dev_err(&spi->dev, "2|43 write failed\n"); + mdelay(5); + ret = sx1301_field_write(priv, F_RADIO_RST, 0); + if (ret) return ret; - } /* radio A */ @@ -1047,65 +991,22 @@ static int sx1301_probe(struct spi_device *spi) } /* GPIO */ - - ret = sx1301_read(spi, REG_GPIO_MODE, &val); - if (ret) { - dev_err(&spi->dev, "GPIO mode read failed\n"); - return ret; - } - - val |= GENMASK(4, 0); - - ret = sx1301_write(spi, REG_GPIO_MODE, val); - if (ret) { - dev_err(&spi->dev, "GPIO mode write failed\n"); - return ret; - } - - ret = sx1301_read(spi, REG_GPIO_SELECT_OUTPUT, &val); - if (ret) { - dev_err(&spi->dev, "GPIO select output read failed\n"); + ret = regmap_write(priv->regmap, SX1301_GPMODE, 0x1F); + if (ret) return ret; - } - - val &= ~GENMASK(3, 0); - val |= 2; - - ret = sx1301_write(spi, REG_GPIO_SELECT_OUTPUT, val); - if (ret) { - dev_err(&spi->dev, "GPIO select output write failed\n"); + ret = regmap_write(priv->regmap, SX1301_GPSO, 0x2); + if (ret) return ret; - } /* TODO LBT */ - ret = sx1301_read(spi, 16, &val); - if (ret) { - dev_err(&spi->dev, "16 read (1) failed\n"); - return ret; - } - - val |= REG_16_GLOBAL_EN; - - ret = sx1301_write(spi, 16, val); - if (ret) { - dev_err(&spi->dev, "16 write (1) failed\n"); - return ret; - } - - ret = sx1301_read(spi, 17, &val); - if (ret) { - dev_err(&spi->dev, "17 read (1) failed\n"); + /* start clocks */ + ret = sx1301_field_write(priv, F_GLOBAL_EN, 1); + if (ret) return ret; - } - - val |= REG_17_CLK32M_EN; - - ret = sx1301_write(spi, 17, val); - if (ret) { - dev_err(&spi->dev, "17 write (1) failed\n"); + ret = sx1301_field_write(priv, F_CLK32M_EN, 1); + if (ret) return ret; - } /* calibration */ diff --git a/drivers/net/lora/sx1301.h b/drivers/net/lora/sx1301.h index abfb7b5..0e84703 100644 --- a/drivers/net/lora/sx1301.h +++ b/drivers/net/lora/sx1301.h @@ -8,6 +8,13 @@ #ifndef _SX1301_ #define _SX1301_ +#define SX1301_CHIP_VERSION 103 + +#define SX1301_MCU_FW_BYTE 8192 +#define SX1301_MCU_ARB_FW_VERSION 1 +#define SX1301_MCU_AGC_FW_VERSION 4 +#define SX1301_MCU_AGC_CAL_FW_VERSION 2 + /* Page independent */ #define SX1301_PAGE 0x00 #define SX1301_VER 0x01