From patchwork Tue Aug 7 17:32:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Whitten X-Patchwork-Id: 954604 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="pUQhqH12"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41lM6N75lkz9rvt for ; Wed, 8 Aug 2018 03:32:44 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390289AbeHGTsF (ORCPT ); Tue, 7 Aug 2018 15:48:05 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:33829 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389361AbeHGTsF (ORCPT ); Tue, 7 Aug 2018 15:48:05 -0400 Received: by mail-wr1-f67.google.com with SMTP id c13-v6so16538369wrt.1 for ; Tue, 07 Aug 2018 10:32:41 -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=t8ZJo4v4brCziy76WKqQEjU5rpsQ+u6GKTCbrmnD0ZE=; b=pUQhqH121GzC18g9CtEmO4o3FhHd2LXLxgiOfCrXJCIy1JnQZz3j/AhhPUGis+hncq tXbn9QqjaLRrA5s3rOfZCHaBgAW+2Mn0uJ+1pobB2cG4SX7Cobim4PMk9kffqexKAId5 1tXHywV10kG6+4Auj7vje1DuqKlkvlJuTDHXntlldJhR1LuwMerOK5ERC/ISMDiHyI+x kSEjjBRyw1nnsIxqcOHEfI/YeJQD8KZtRQUYs1MQbFx3a438DxSDNi6y6mvtCnGox+de 6DpWz70qh89ipOlYs8MbvSRFQkzG3YcK62so8ISB/873EyOcP9N4yLy7JIb/RKcRI+EL 0FiQ== 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=t8ZJo4v4brCziy76WKqQEjU5rpsQ+u6GKTCbrmnD0ZE=; b=svb+eH5o07izM6eEut6wzqBuhKwa3X0NUMvicPSyijiSLbpbX2GWsLgTpwRK70yJGh 5TAzZvfxkTVzmnGH4UunPIgmM2SpSTMRondOON2AZIGoNOrU60DLpkI8QhLBDu8Yp0iM Hm1PEQdERvu5lJ3XwPhOuzy3HnO3axwOX5KMuK0gpcedbIIZuawxR5mPNxje8mhGyiT9 murwB/uEVt65iseeiWC/Gw3fRd9dq1iImVRYDxvt0UzHVAkvOZ3dCKBRTOKmIFCP0mwz KHPa6otL62JGEwdMGExL3FTiOlFmEygcrlnPdQxVkT/55IDpB9wzKpdgfpYx7r7aQMFs nuBQ== X-Gm-Message-State: AOUpUlHWls0at9pIr5dS9jXd6c2K/pbxjlQ6cv/esgPzmM+Jo6AOwhZS VlEIhv3BiCO/1zzhKiJQ/QA= X-Google-Smtp-Source: AAOMgpcoZEjgbLDLufoIqdDOgLinmPg7tY5iNwzrdHX8vHKcWYuzLXUFF2zCXjoigEBnkurPbF7FUg== X-Received: by 2002:adf:9546:: with SMTP id 64-v6mr12903123wrs.257.1533663159548; Tue, 07 Aug 2018 10:32:39 -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.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 07 Aug 2018 10:32:38 -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 09/10] net: lora: sx1301: convert agc calibrate to regmap functions Date: Tue, 7 Aug 2018 18:32:10 +0100 Message-Id: <1533663131-16313-11-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 We convert the AGC calibration function over to regmap and take the opportunity to make the expected firmware versions defines. Switch to taking a pointer to our private data. Signed-off-by: Ben Whitten --- drivers/net/lora/sx1301.c | 101 ++++++++++++---------------------------------- 1 file changed, 26 insertions(+), 75 deletions(-) diff --git a/drivers/net/lora/sx1301.c b/drivers/net/lora/sx1301.c index f84a6ce..21b3f9a 100644 --- a/drivers/net/lora/sx1301.c +++ b/drivers/net/lora/sx1301.c @@ -589,123 +589,74 @@ static int sx1301_load_firmware(struct sx1301_priv *priv, int mcu, const struct return 0; } -static int sx1301_agc_calibrate(struct spi_device *spi) +static int sx1301_agc_calibrate(struct sx1301_priv *priv) { const struct firmware *fw; - struct sx1301_priv *priv = spi_get_drvdata(spi); u8 val; int ret; + unsigned int cal; ret = request_firmware(&fw, "sx1301_agc_calibration.bin", priv->dev); if (ret) { - dev_err(&spi->dev, "agc cal firmware file load failed\n"); + dev_err(priv->dev, "AGC CAL firmware file load failed\n"); return ret; } ret = sx1301_load_firmware(priv, 1, fw); release_firmware(fw); if (ret) { - dev_err(&spi->dev, "agc cal firmware load failed\n"); - return ret; - } - - ret = sx1301_page_read(spi, 0, 105, &val); - if (ret) { - dev_err(&spi->dev, "0|105 read failed\n"); + dev_err(priv->dev, "AGC CAL firmware load failed\n"); return ret; } - val &= ~REG_0_105_FORCE_HOST_RADIO_CTRL; - - ret = sx1301_page_write(spi, 0, 105, val); - if (ret) { - dev_err(&spi->dev, "0|105 write failed\n"); + ret = sx1301_field_write(priv, F_FORCE_HOST_RADIO_CTRL, 0); + if (ret) return ret; - } val = BIT(4); /* with DAC gain=3 */ if (false) val |= BIT(5); /* SX1255 */ - ret = sx1301_page_write(spi, 0, REG_0_RADIO_SELECT, val); - if (ret) { - dev_err(&spi->dev, "radio select write failed\n"); - return ret; - } - - ret = sx1301_page_read(spi, 0, REG_0_MCU, &val); - if (ret) { - dev_err(&spi->dev, "MCU read (0) failed\n"); + ret = regmap_write(priv->regmap, SX1301_CHRS, val); + if (ret) return ret; - } - - val &= ~REG_0_MCU_RST_1; - ret = sx1301_page_write(spi, 0, REG_0_MCU, val); - if (ret) { - dev_err(&spi->dev, "MCU write (0) failed\n"); + ret = sx1301_field_write(priv, F_MCU_RST_1, 0); + if (ret) return ret; - } ret = sx1301_agc_ram_read(priv, 0x20, &val); if (ret) { - dev_err(&spi->dev, "AGC RAM data read failed\n"); + dev_err(priv->dev, "AGC RAM data read failed\n"); return ret; } - dev_info(&spi->dev, "AGC calibration firmware version %u\n", (unsigned)val); + dev_info(priv->dev, "AGC calibration firmware version %u\n", (unsigned)val); - if (val != 2) { - dev_err(&spi->dev, "unexpected firmware version, expecting %u\n", 2); + if (val != SX1301_MCU_AGC_CAL_FW_VERSION) { + dev_err(priv->dev, "unexpected firmware version, expecting %u\n", + SX1301_MCU_AGC_CAL_FW_VERSION); return -ENXIO; } - ret = sx1301_page_switch(spi, 3); - if (ret) { - dev_err(&spi->dev, "page switch 3 failed\n"); - return ret; - } - - ret = sx1301_read(priv, REG_EMERGENCY_FORCE, &val); - if (ret) { - dev_err(&spi->dev, "emergency force read failed\n"); - return ret; - } - - val &= ~REG_EMERGENCY_FORCE_HOST_CTRL; - - ret = sx1301_write(priv, REG_EMERGENCY_FORCE, val); - if (ret) { - dev_err(&spi->dev, "emergency force write failed\n"); + ret = sx1301_field_write(priv, F_EMERGENCY_FORCE_HOST_CTRL, 0); + if (ret) return ret; - } - dev_err(&spi->dev, "starting calibration...\n"); + dev_err(priv->dev, "starting calibration...\n"); msleep(2300); - ret = sx1301_read(priv, REG_EMERGENCY_FORCE, &val); - if (ret) { - dev_err(&spi->dev, "emergency force read (1) failed\n"); - return ret; - } - - val |= REG_EMERGENCY_FORCE_HOST_CTRL; - - ret = sx1301_write(priv, REG_EMERGENCY_FORCE, val); - if (ret) { - dev_err(&spi->dev, "emergency force write (1) failed\n"); + ret = sx1301_field_write(priv, F_EMERGENCY_FORCE_HOST_CTRL, 1); + if (ret) return ret; - } - ret = sx1301_read(priv, REG_MCU_AGC_STATUS, &val); - if (ret) { - dev_err(&spi->dev, "AGC status read failed\n"); + ret = regmap_read(priv->regmap, SX1301_AGCSTS, &cal); + if (ret) return ret; - } - dev_info(&spi->dev, "AGC status: %02x\n", (unsigned)val); - if ((val & (BIT(7) | BIT(0))) != (BIT(7) | BIT(0))) { - dev_err(&spi->dev, "AGC calibration failed\n"); + dev_info(priv->dev, "AGC status: %02x\n", cal); + if ((cal & (BIT(7) | BIT(0))) != (BIT(7) | BIT(0))) { + dev_err(priv->dev, "AGC calibration failed\n"); return -ENXIO; } @@ -985,7 +936,7 @@ static int sx1301_probe(struct spi_device *spi) /* calibration */ - ret = sx1301_agc_calibrate(spi); + ret = sx1301_agc_calibrate(priv); if (ret) return ret;