[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID:
<AM8PR10MB4721196E13BCDAD7ABAD8E85CD602@AM8PR10MB4721.EURPRD10.PROD.OUTLOOK.COM>
Date: Mon, 16 Sep 2024 20:32:56 +0000
From: "Shen Jianping (ME-SE/EAD2)" <Jianping.Shen@...bosch.com>
To: Jonathan Cameron <jic23@...nel.org>
CC: "lars@...afoo.de" <lars@...afoo.de>, "robh@...nel.org" <robh@...nel.org>,
"krzk+dt@...nel.org" <krzk+dt@...nel.org>, "conor+dt@...nel.org"
<conor+dt@...nel.org>, "dima.fedrau@...il.com" <dima.fedrau@...il.com>,
"marcelo.schmitt1@...il.com" <marcelo.schmitt1@...il.com>,
"linux-iio@...r.kernel.org" <linux-iio@...r.kernel.org>,
"devicetree@...r.kernel.org" <devicetree@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>, "Lorenz
Christian (ME-SE/EAD2)" <Christian.Lorenz3@...bosch.com>, "Frauendorf Ulrike
(ME/PJ-SW3)" <Ulrike.Frauendorf@...bosch.com>, "Dolde Kai (ME-SE/PAE-A3)"
<Kai.Dolde@...bosch.com>
Subject: RE: [PATCH v7 2/2] iio: imu: smi240: add driver
>Hi Shen,
>
>I suspect I led you astray. regmap core seems unlikely to feed us little endian
>buffers on writes (they should be CPU endian I think) so there should be memcpy()
>for that not a get_unaligned_le16()
>
>> +
>> +static int smi240_regmap_spi_write(void *context, const void *data,
>> + size_t count)
>> +{
>> + u8 reg_addr;
>> + u16 reg_data;
>> + u32 request;
>> + struct spi_device *spi = context;
>> + struct iio_dev *indio_dev = dev_get_drvdata(&spi->dev);
>> + struct smi240_data *iio_priv_data = iio_priv(indio_dev);
>> +
>> + if (count < 2)
>> + return -EINVAL;
>> +
>> + reg_addr = ((u8 *)data)[0];
>> + reg_data = get_unaligned_le16(&((u8 *)data)[1]);
>
>Why is the regmap core giving us an le16?
>I probably sent you wrong way with this earlier :( memcpy probably the correct
>choice here.
Yes, you are right. We shall use memcpy to keep the be CPU endian. Just using memcpy may be not enough.
Shall we also change regmap_config.val_format_endian from REGMAP_ENDIAN_LITTLE to REGMAP_ENDIAN_NATIVE ?
This is to make sure that regmap_write passes the reg-value to smi240_regmap_spi_write without changing the CPU endian.
Powered by blists - more mailing lists