Re: [PATCH v3 6/8] iio: adc: ad4030: Add SPI offload support

From: kernel test robot

Date: Sat Sep 27 2025 - 09:00:11 EST


Hi Marcelo,

kernel test robot noticed the following build errors:

[auto build test ERROR on 561285d048053fec8a3d6d1e3ddc60df11c393a0]

url: https://github.com/intel-lab-lkp/linux/commits/Marcelo-Schmitt/dt-bindings-iio-adc-adi-ad4030-Reference-spi-peripheral-props/20250927-044546
base: 561285d048053fec8a3d6d1e3ddc60df11c393a0
patch link: https://lore.kernel.org/r/0028720d2cb21898ef044458065ac8a0bc829588.1758916484.git.marcelo.schmitt%40analog.com
patch subject: [PATCH v3 6/8] iio: adc: ad4030: Add SPI offload support
config: i386-randconfig-014-20250927 (https://download.01.org/0day-ci/archive/20250927/202509272028.0zLNiR5w-lkp@xxxxxxxxx/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250927/202509272028.0zLNiR5w-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202509272028.0zLNiR5w-lkp@xxxxxxxxx/

All errors (new ones prefixed by >>):

drivers/spi/spi-offload-trigger-pwm.c: In function 'spi_offload_trigger_pwm_validate':
>> drivers/spi/spi-offload-trigger-pwm.c:55:15: error: implicit declaration of function 'pwm_round_waveform_might_sleep' [-Wimplicit-function-declaration]
55 | ret = pwm_round_waveform_might_sleep(st->pwm, &wf);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/spi/spi-offload-trigger-pwm.c: In function 'spi_offload_trigger_pwm_enable':
>> drivers/spi/spi-offload-trigger-pwm.c:81:16: error: implicit declaration of function 'pwm_set_waveform_might_sleep' [-Wimplicit-function-declaration]
81 | return pwm_set_waveform_might_sleep(st->pwm, &wf, false);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/spi/spi-offload-trigger-pwm.c: In function 'spi_offload_trigger_pwm_disable':
>> drivers/spi/spi-offload-trigger-pwm.c:90:15: error: implicit declaration of function 'pwm_get_waveform_might_sleep' [-Wimplicit-function-declaration]
90 | ret = pwm_get_waveform_might_sleep(st->pwm, &wf);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for SPI_OFFLOAD_TRIGGER_PWM
Depends on [n]: SPI [=y] && SPI_OFFLOAD [=y] && PWM [=n]
Selected by [y]:
- AD4030 [=y] && IIO [=y] && SPI [=y] && GPIOLIB [=y]


vim +/pwm_round_waveform_might_sleep +55 drivers/spi/spi-offload-trigger-pwm.c

ebb398ae1e052c David Lechner 2025-02-07 36
ebb398ae1e052c David Lechner 2025-02-07 37 static int spi_offload_trigger_pwm_validate(struct spi_offload_trigger *trigger,
ebb398ae1e052c David Lechner 2025-02-07 38 struct spi_offload_trigger_config *config)
ebb398ae1e052c David Lechner 2025-02-07 39 {
ebb398ae1e052c David Lechner 2025-02-07 40 struct spi_offload_trigger_pwm_state *st = spi_offload_trigger_get_priv(trigger);
ebb398ae1e052c David Lechner 2025-02-07 41 struct spi_offload_trigger_periodic *periodic = &config->periodic;
ebb398ae1e052c David Lechner 2025-02-07 42 struct pwm_waveform wf = { };
ebb398ae1e052c David Lechner 2025-02-07 43 int ret;
ebb398ae1e052c David Lechner 2025-02-07 44
ebb398ae1e052c David Lechner 2025-02-07 45 if (config->type != SPI_OFFLOAD_TRIGGER_PERIODIC)
ebb398ae1e052c David Lechner 2025-02-07 46 return -EINVAL;
ebb398ae1e052c David Lechner 2025-02-07 47
ebb398ae1e052c David Lechner 2025-02-07 48 if (!periodic->frequency_hz)
ebb398ae1e052c David Lechner 2025-02-07 49 return -EINVAL;
ebb398ae1e052c David Lechner 2025-02-07 50
ebb398ae1e052c David Lechner 2025-02-07 51 wf.period_length_ns = DIV_ROUND_UP_ULL(NSEC_PER_SEC, periodic->frequency_hz);
ebb398ae1e052c David Lechner 2025-02-07 52 /* REVISIT: 50% duty-cycle for now - may add config parameter later */
ebb398ae1e052c David Lechner 2025-02-07 53 wf.duty_length_ns = wf.period_length_ns / 2;
ebb398ae1e052c David Lechner 2025-02-07 54
ebb398ae1e052c David Lechner 2025-02-07 @55 ret = pwm_round_waveform_might_sleep(st->pwm, &wf);
ebb398ae1e052c David Lechner 2025-02-07 56 if (ret < 0)
ebb398ae1e052c David Lechner 2025-02-07 57 return ret;
ebb398ae1e052c David Lechner 2025-02-07 58
ebb398ae1e052c David Lechner 2025-02-07 59 periodic->frequency_hz = DIV_ROUND_UP_ULL(NSEC_PER_SEC, wf.period_length_ns);
ebb398ae1e052c David Lechner 2025-02-07 60
ebb398ae1e052c David Lechner 2025-02-07 61 return 0;
ebb398ae1e052c David Lechner 2025-02-07 62 }
ebb398ae1e052c David Lechner 2025-02-07 63
ebb398ae1e052c David Lechner 2025-02-07 64 static int spi_offload_trigger_pwm_enable(struct spi_offload_trigger *trigger,
ebb398ae1e052c David Lechner 2025-02-07 65 struct spi_offload_trigger_config *config)
ebb398ae1e052c David Lechner 2025-02-07 66 {
ebb398ae1e052c David Lechner 2025-02-07 67 struct spi_offload_trigger_pwm_state *st = spi_offload_trigger_get_priv(trigger);
ebb398ae1e052c David Lechner 2025-02-07 68 struct spi_offload_trigger_periodic *periodic = &config->periodic;
ebb398ae1e052c David Lechner 2025-02-07 69 struct pwm_waveform wf = { };
ebb398ae1e052c David Lechner 2025-02-07 70
ebb398ae1e052c David Lechner 2025-02-07 71 if (config->type != SPI_OFFLOAD_TRIGGER_PERIODIC)
ebb398ae1e052c David Lechner 2025-02-07 72 return -EINVAL;
ebb398ae1e052c David Lechner 2025-02-07 73
ebb398ae1e052c David Lechner 2025-02-07 74 if (!periodic->frequency_hz)
ebb398ae1e052c David Lechner 2025-02-07 75 return -EINVAL;
ebb398ae1e052c David Lechner 2025-02-07 76
ebb398ae1e052c David Lechner 2025-02-07 77 wf.period_length_ns = DIV_ROUND_UP_ULL(NSEC_PER_SEC, periodic->frequency_hz);
ebb398ae1e052c David Lechner 2025-02-07 78 /* REVISIT: 50% duty-cycle for now - may add config parameter later */
ebb398ae1e052c David Lechner 2025-02-07 79 wf.duty_length_ns = wf.period_length_ns / 2;
ebb398ae1e052c David Lechner 2025-02-07 80
ebb398ae1e052c David Lechner 2025-02-07 @81 return pwm_set_waveform_might_sleep(st->pwm, &wf, false);
ebb398ae1e052c David Lechner 2025-02-07 82 }
ebb398ae1e052c David Lechner 2025-02-07 83
ebb398ae1e052c David Lechner 2025-02-07 84 static void spi_offload_trigger_pwm_disable(struct spi_offload_trigger *trigger)
ebb398ae1e052c David Lechner 2025-02-07 85 {
ebb398ae1e052c David Lechner 2025-02-07 86 struct spi_offload_trigger_pwm_state *st = spi_offload_trigger_get_priv(trigger);
ebb398ae1e052c David Lechner 2025-02-07 87 struct pwm_waveform wf;
ebb398ae1e052c David Lechner 2025-02-07 88 int ret;
ebb398ae1e052c David Lechner 2025-02-07 89
ebb398ae1e052c David Lechner 2025-02-07 @90 ret = pwm_get_waveform_might_sleep(st->pwm, &wf);
ebb398ae1e052c David Lechner 2025-02-07 91 if (ret < 0) {
ebb398ae1e052c David Lechner 2025-02-07 92 dev_err(st->dev, "failed to get waveform: %d\n", ret);
ebb398ae1e052c David Lechner 2025-02-07 93 return;
ebb398ae1e052c David Lechner 2025-02-07 94 }
ebb398ae1e052c David Lechner 2025-02-07 95
ebb398ae1e052c David Lechner 2025-02-07 96 wf.duty_length_ns = 0;
ebb398ae1e052c David Lechner 2025-02-07 97
ebb398ae1e052c David Lechner 2025-02-07 98 ret = pwm_set_waveform_might_sleep(st->pwm, &wf, false);
ebb398ae1e052c David Lechner 2025-02-07 99 if (ret < 0)
ebb398ae1e052c David Lechner 2025-02-07 100 dev_err(st->dev, "failed to disable PWM: %d\n", ret);
ebb398ae1e052c David Lechner 2025-02-07 101 }
ebb398ae1e052c David Lechner 2025-02-07 102

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki