Re: [PATCH] iio: gyro: mpu3050: fix sign of raw angular velocity readings
From: Linus Walleij
Date: Sun Aug 02 2026 - 17:31:01 EST
On Sun, Aug 2, 2026 at 8:55 AM Cong Nguyen <congnt264@xxxxxxxxx> wrote:
> The MPU-3050 gyroscope output registers hold 16-bit two's complement
> values; the angular velocity channels are declared with .sign = 's'.
> When mpu3050_read_raw() handles IIO_CHAN_INFO_RAW it reads the register
> via a big-endian regmap_bulk_read() and assigns it with:
>
> *val = be16_to_cpu(raw_val);
>
> be16_to_cpu() yields an unsigned 16-bit quantity, so negative rates
> (bit 15 set) are reported to userspace as large positive integers
> (e.g. -1 becomes 65535) instead of the correct negative value.
>
> Cast to s16 before the assignment, matching the temperature channel a
> few lines above which already handles the sign correctly.
>
> Fixes: 3904b28efb2c ("iio: gyro: Add driver for the MPU-3050 gyroscope")
> Cc: stable@xxxxxxxxxxxxxxx
> Assisted-by: Claude:claude-opus-4
> Signed-off-by: Cong Nguyen <congnt264@xxxxxxxxx>
Reviewed-by: Linus Walleij <linusw@xxxxxxxxxx>
Yours,
Linus Walleij