iio: accel: adxl345: Add spi-3wire option
authorLothar Rubusch <l.rubusch@gmail.com>
Mon, 1 Apr 2024 19:49:06 +0000 (19:49 +0000)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 6 Apr 2024 15:18:39 +0000 (16:18 +0100)
Add a setup function implementation to the spi module to enable spi-3wire
when specified in the device-tree. If spi-3wire is not specified in the
device-tree, NULL is returned as bus pre-initialization. This behavior
is identical to the i2c initialization, hence the default initialization.

Signed-off-by: Lothar Rubusch <l.rubusch@gmail.com>
Link: https://lore.kernel.org/r/20240401194906.56810-9-l.rubusch@gmail.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/accel/adxl345.h
drivers/iio/accel/adxl345_spi.c

index e859c01d4bffc80ed0d1485408b321548e9b5b52..3d5c8719db3d78204305a0885c37369303198bff 100644 (file)
@@ -31,6 +31,7 @@
 #define ADXL345_DATA_FORMAT_RANGE      GENMASK(1, 0)   /* Set the g range */
 #define ADXL345_DATA_FORMAT_JUSTIFY    BIT(2)  /* Left-justified (MSB) mode */
 #define ADXL345_DATA_FORMAT_FULL_RES   BIT(3)  /* Up to 13-bits resolution */
+#define ADXL345_DATA_FORMAT_SPI_3WIRE  BIT(6)  /* 3-wire SPI mode */
 #define ADXL345_DATA_FORMAT_SELF_TEST  BIT(7)  /* Enable a self test */
 
 #define ADXL345_DATA_FORMAT_2G         0
index 1c0513bd3b9b7efdb3861668084d9163def94912..57e16b44170214ba88035b3e71ea0d7015bd169a 100644 (file)
@@ -20,6 +20,11 @@ static const struct regmap_config adxl345_spi_regmap_config = {
        .read_flag_mask = BIT(7) | BIT(6),
 };
 
+static int adxl345_spi_setup(struct device *dev, struct regmap *regmap)
+{
+       return regmap_write(regmap, ADXL345_REG_DATA_FORMAT, ADXL345_DATA_FORMAT_SPI_3WIRE);
+}
+
 static int adxl345_spi_probe(struct spi_device *spi)
 {
        struct regmap *regmap;
@@ -33,7 +38,10 @@ static int adxl345_spi_probe(struct spi_device *spi)
        if (IS_ERR(regmap))
                return dev_err_probe(&spi->dev, PTR_ERR(regmap), "Error initializing regmap\n");
 
-       return adxl345_core_probe(&spi->dev, regmap, NULL);
+       if (spi->mode & SPI_3WIRE)
+               return adxl345_core_probe(&spi->dev, regmap, adxl345_spi_setup);
+       else
+               return adxl345_core_probe(&spi->dev, regmap, NULL);
 }
 
 static const struct adxl345_chip_info adxl345_spi_info = {