Re: [PATCH v4 2/4] iio: light: add support for veml6031x00 ALS series

From: Javier Carrasco

Date: Tue Jun 02 2026 - 08:25:20 EST


On Tue Jun 2, 2026 at 1:47 PM CEST, Joshua Crofts wrote:
> On Tue, 2 Jun 2026 at 13:35, Javier Carrasco
> <javier.carrasco.cruz@xxxxxxxxx> wrote:
>> Thank you, Joshua. One question, though: maybe you remember that your
>> last driver was missing one header (which I am not criticizing at all,
>> as you can see I missed some too!), and I am wondering if it was because
>> iwyu missed it and if so, how that could be avoided.
>
> About that - I didn't actually run iwyu on my driver, I recently migrated to
> Fedora and forgot to set up LLVM and iywu-tool :-)

I installed IWYU and added your mapping for a quick test, and it wants
to add a million headers or so:

python3 ~/iwyu/include-what-you-use/iwyu_tool.py \
-p . \
drivers/iio/light/veml6031x00.c \
-- \
-Xiwyu --no_default_mappings \
-Xiwyu --mapping_file=tools/iio/iio.imp

drivers/iio/light/veml6031x00.c should add these lines:
#include <asm/byteorder.h> // for le16_to_cpu, cpu_to_le16
#include <linux/bitops.h> // for BIT, const_test_bit
#include <linux/device.h> // for dev_get_drvdata, devic...
#include <linux/errno.h> // for EINVAL, EBUSY, ENOMEM
#include <linux/limits.h> // for U16_MAX
#include <linux/pm.h> // for pm_ptr
#include <linux/stddef.h> // for NULL, true
#include <linux/sysfs.h> // for attribute_group
#include <linux/types.h> // for __le16, bool, aligned_s64
#include "asm-generic/bitops/builtin-ffs.h" // for ffs
#include "asm-generic/bitops/const_hweight.h" // for hweight8
#include "linux/array_size.h" // for ARRAY_SIZE
#include "linux/cleanup.h" // for guard, scoped_guard
#include "linux/compiler-context-analysis.h" // for __must_hold
#include "linux/delay.h" // for fsleep
#include "linux/dev_printk.h" // for dev_err_probe, dev_dbg
#include "linux/device/devres.h" // for devm_add_action_or_reset
#include "linux/err.h" // for IS_ERR, PTR_ERR
#include "linux/iio/buffer.h" // for iio_push_to_buffers_wi...
#include "linux/irqreturn.h" // for irqreturn, irqreturn_t
#include "linux/kconfig.h" // for __ARG_PLACEHOLDER_1
#include "linux/regulator/consumer.h" // for devm_regulator_get_enable

drivers/iio/light/veml6031x00.c should remove these lines:
- #include <linux/bits.h> // lines 9-9
- #include <linux/units.h> // lines 17-17

The full include-list for drivers/iio/light/veml6031x00.c:
#include <asm/byteorder.h> // for le16_to_cpu, cpu_to_le16
#include <linux/bitfield.h> // for FIELD_PREP
#include <linux/bitops.h> // for BIT, const_test_bit
#include <linux/device.h> // for dev_get_drvdata, devic...
#include <linux/errno.h> // for EINVAL, EBUSY, ENOMEM
#include <linux/i2c.h> // for i2c_client, i2c_get_ma...
#include <linux/iio/events.h> // for IIO_UNMOD_EVENT_CODE
#include <linux/iio/iio-gts-helper.h> // for GAIN_SCALE_ITIME_US
#include <linux/iio/iio.h> // for iio_chan_info_enum
#include <linux/iio/sysfs.h> // for iio_const_attr, IIO_CO...
#include <linux/iio/trigger.h> // for devm_iio_trigger_register
#include <linux/iio/trigger_consumer.h> // for iio_poll_func, iio_tri...
#include <linux/iio/triggered_buffer.h> // for devm_iio_triggered_buf...
#include <linux/interrupt.h> // for devm_request_threaded_irq
#include <linux/limits.h> // for U16_MAX
#include <linux/mod_devicetable.h> // for kernel_ulong_t, i2c_de...
#include <linux/module.h> // for MODULE_DEVICE_TABLE
#include <linux/mutex.h> // for class_mutex_constructor
#include <linux/pm.h> // for pm_ptr
#include <linux/pm_runtime.h> // for pm_runtime_put_autosus...
#include <linux/regmap.h> // for regmap_field_write
#include <linux/stddef.h> // for NULL, true
#include <linux/sysfs.h> // for attribute_group
#include <linux/types.h> // for __le16, bool, aligned_s64
#include "asm-generic/bitops/builtin-ffs.h" // for ffs
#include "asm-generic/bitops/const_hweight.h" // for hweight8
#include "linux/array_size.h" // for ARRAY_SIZE
#include "linux/cleanup.h" // for guard, scoped_guard
#include "linux/compiler-context-analysis.h" // for __must_hold
#include "linux/delay.h" // for fsleep
#include "linux/dev_printk.h" // for dev_err_probe, dev_dbg
#include "linux/device/devres.h" // for devm_add_action_or_reset
#include "linux/err.h" // for IS_ERR, PTR_ERR
#include "linux/iio/buffer.h" // for iio_push_to_buffers_wi...
#include "linux/irqreturn.h" // for irqreturn, irqreturn_t
#include "linux/kconfig.h" // for __ARG_PLACEHOLDER_1
#include "linux/regulator/consumer.h" // for devm_regulator_get_enable
---

If that is correct, I bet there is almost no driver prior to IWYU that
has all the headers :D