Re: iio: accel: dmard09: in_accel_scale always returns -EINVAL
From: Jelle van der Waa
Date: Mon Jun 29 2026 - 15:07:04 EST
Hi,
On 17/06/2026 17:53, Mert Seftali wrote:
Hi,Thanks for digging into this, I no longer have the device in question. But the vendor driver can be found on GitHub:
I've been digging into IIO to learn my way around it, and the dmard09
accelerometer driver caught my eye as I think its scale attribute has
been broken since day one, so I wanted to flag it.
The channels advertise scale:
.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
which makes the core create in_accel_scale. The trouble is
dmard09_read_raw() never handles IIO_CHAN_INFO_SCALE, it only does
RAW, and SCALE drops straight into 'default: return -EINVAL'. So
reading the scale just errors out:
$ cat .../iio:deviceX/in_accel_scale
cat: in_accel_scale: Invalid argument
and userspace is left with raw counts it can't turn into m/s^2.
To be clear about how I found this: I don't have the hardware, I traced
it through the core (iio_read_channel_info() -> read_raw() with the
SCALE mask) rather than seeing it fail on a device. But the path looks
unambiguous.
I went looking to fix it properly; add a SCALE case returning the
sensitivity, the way dmard06 and dmard10 do, but I couldn't find a
DMARD09 datasheet anywhere. Digging through the list archives, it looks
like the scale was declared in the original 2016 submission but never
implemented, and the driver was written from a vendor source without a
datasheet to begin with. So I don't have a real number to use, and I'd
rather not make one up.
https://github.com/minstrelsy/mediatek/blob/1f49d8c87b839651bc89afc870277e8e0f2e2d55/custom/common/kernel/accelerometer/dmard09/dmard09.c
Greetings,
Jelle van der Waa