The last stage in the probe function loads the final firmwares to
the sx1301.

Signed-off-by: Ben Whitten <ben.whit...@gmail.com>
---
 drivers/net/lora/sx1301.c | 67 ++++++++++++++++++++---------------------------
 1 file changed, 28 insertions(+), 39 deletions(-)

diff --git a/drivers/net/lora/sx1301.c b/drivers/net/lora/sx1301.c
index 21b3f9a..7f4bfa1 100644
--- a/drivers/net/lora/sx1301.c
+++ b/drivers/net/lora/sx1301.c
@@ -663,16 +663,15 @@ static int sx1301_agc_calibrate(struct sx1301_priv *priv)
        return 0;
 }
 
-static int sx1301_load_all_firmware(struct spi_device *spi)
+static int sx1301_load_all_firmware(struct sx1301_priv *priv)
 {
-       struct sx1301_priv *priv = spi_get_drvdata(spi);
        const struct firmware *fw;
        u8 val;
        int ret;
 
        ret = request_firmware(&fw, "sx1301_arb.bin", priv->dev);
        if (ret) {
-               dev_err(priv->dev, "arb firmware file load failed\n");
+               dev_err(priv->dev, "ARB firmware file load failed\n");
                return ret;
        }
 
@@ -683,7 +682,7 @@ static int sx1301_load_all_firmware(struct spi_device *spi)
 
        ret = request_firmware(&fw, "sx1301_agc.bin", priv->dev);
        if (ret) {
-               dev_err(priv->dev, "agc firmware file load failed\n");
+               dev_err(priv->dev, "AGC firmware file load failed\n");
                return ret;
        }
 
@@ -692,63 +691,53 @@ static int sx1301_load_all_firmware(struct spi_device 
*spi)
        if (ret)
                return ret;
 
-       ret = sx1301_page_read(spi, 0, 105, &val);
-       if (ret) {
-               dev_err(&spi->dev, "0|105 read failed\n");
+       ret = sx1301_field_write(priv, F_FORCE_HOST_RADIO_CTRL, 0);
+       if (ret)
                return ret;
-       }
-
-       val &= ~(REG_0_105_FORCE_HOST_RADIO_CTRL | REG_0_105_FORCE_HOST_FE_CTRL 
| REG_0_105_FORCE_DEC_FILTER_GAIN);
-
-       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_FE_CTRL, 0);
+       if (ret)
                return ret;
-       }
-
-       ret = sx1301_page_write(spi, 0, REG_0_RADIO_SELECT, 0);
-       if (ret) {
-               dev_err(&spi->dev, "radio select write failed\n");
+       ret = sx1301_field_write(priv, F_FORCE_DEC_FILTER_GAIN, 0);
+       if (ret)
                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, 0);
+       if (ret)
                return ret;
-       }
-
-       val &= ~(REG_0_MCU_RST_1 | REG_0_MCU_RST_0);
 
-       ret = sx1301_page_write(spi, 0, REG_0_MCU, val);
-       if (ret) {
-               dev_err(&spi->dev, "MCU write (0) failed\n");
+       /* Release the CPUs */
+       ret = sx1301_field_write(priv, F_MCU_RST_0, 0);
+       if (ret)
+               return ret;
+       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 firmware version %u\n", (unsigned)val);
+       dev_info(priv->dev, "AGC firmware version %u\n", (unsigned)val);
 
-       if (val != 4) {
-               dev_err(&spi->dev, "unexpected firmware version, expecting 
%u\n", 4);
+       if (val != SX1301_MCU_AGC_FW_VERSION) {
+               dev_err(priv->dev, "unexpected firmware version, expecting 
%u\n",
+                               SX1301_MCU_AGC_FW_VERSION);
                return -ENXIO;
        }
 
        ret = sx1301_arb_ram_read(priv, 0x20, &val);
        if (ret) {
-               dev_err(&spi->dev, "ARB RAM data read failed\n");
+               dev_err(priv->dev, "ARB RAM data read failed\n");
                return ret;
        }
 
-       dev_info(&spi->dev, "ARB firmware version %u\n", (unsigned)val);
+       dev_info(priv->dev, "ARB firmware version %u\n", (unsigned)val);
 
-       if (val != 1) {
-               dev_err(&spi->dev, "unexpected firmware version, expecting 
%u\n", 1);
+       if (val != SX1301_MCU_ARB_FW_VERSION) {
+               dev_err(priv->dev, "unexpected firmware version, expecting 
%u\n",
+                               SX1301_MCU_ARB_FW_VERSION);
                return -ENXIO;
        }
 
@@ -942,7 +931,7 @@ static int sx1301_probe(struct spi_device *spi)
 
        /* TODO */
 
-       ret = sx1301_load_all_firmware(spi);
+       ret = sx1301_load_all_firmware(priv);
        if (ret)
                return ret;
 
-- 
2.7.4

Reply via email to