Hi Trevor,Seems to be a problem with missing static inline definitions in pwm.h if CONFIG_PWM isn't set. I've replied to the relevant series on the PWM mailing list and will add "select PWM" to Kconfig for this driver.
kernel test robot noticed the following build errors:
[auto build test ERROR on ac6a258892793f0a255fe7084ec2b612131c67fc]
url: https://github.com/intel-lab-lkp/linux/commits/Trevor-Gamblin/dt-bindings-iio-adc-add-AD762x-AD796x-ADCs/20240819-221425
base: ac6a258892793f0a255fe7084ec2b612131c67fc
patch link: https://lore.kernel.org/r/20240819-ad7625_r1-v3-2-75d5217c76b5%40baylibre.com
patch subject: [PATCH v3 2/3] iio: adc: ad7625: add driver
config: alpha-randconfig-r132-20240820 (https://download.01.org/0day-ci/archive/20240820/202408201520.lFtco3eF-lkp@xxxxxxxxx/config)
compiler: alpha-linux-gcc (GCC) 13.3.0
reproduce: (https://download.01.org/0day-ci/archive/20240820/202408201520.lFtco3eF-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/202408201520.lFtco3eF-lkp@xxxxxxxxx/
All errors (new ones prefixed by >>):
drivers/iio/adc/ad7625.c: In function 'ad7625_set_sampling_freq':
191 | ret = pwm_round_waveform_might_sleep(st->cnv_pwm, &cnv_wf);drivers/iio/adc/ad7625.c:191:15: error: implicit declaration of function 'pwm_round_waveform_might_sleep' [-Werror=implicit-function-declaration]
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/iio/adc/ad7625.c: In function 'ad7625_buffer_preenable':
420 | ret = pwm_set_waveform_might_sleep(st->cnv_pwm, &st->cnv_wf, false);drivers/iio/adc/ad7625.c:420:15: error: implicit declaration of function 'pwm_set_waveform_might_sleep' [-Werror=implicit-function-declaration]
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +/pwm_round_waveform_might_sleep +191 drivers/iio/adc/ad7625.c
175
176 static int ad7625_set_sampling_freq(struct ad7625_state *st, int freq)
177 {
178 u64 target;
179 struct pwm_waveform clk_gate_wf = { }, cnv_wf = { };
180 int ret;
181
182 target = DIV_ROUND_UP_ULL(NSEC_PER_SEC, freq);
183 cnv_wf.period_length_ns = clamp(target, 100, 10 * KILO);
184
185 /*
186 * Use the maximum conversion time t_CNVH from the datasheet as
187 * the duty_cycle for ref_clk, cnv, and clk_gate
188 */
189 cnv_wf.duty_length_ns = st->info->timing_spec->conv_high_ns;
190
> 191 ret = pwm_round_waveform_might_sleep(st->cnv_pwm, &cnv_wf);
192 if (ret)
193 return ret;
194
195 /*
196 * Set up the burst signal for transferring data. period and
197 * offset should mirror the CNV signal
198 */
199 clk_gate_wf.period_length_ns = cnv_wf.period_length_ns;
200
201 clk_gate_wf.duty_length_ns = DIV_ROUND_UP_ULL((u64)NSEC_PER_SEC *
202 st->info->chan_spec.scan_type.realbits,
203 st->ref_clk_rate_hz);
204
205 /* max t_MSB from datasheet */
206 clk_gate_wf.duty_offset_ns = st->info->timing_spec->conv_msb_ns;
207
208 ret = pwm_round_waveform_might_sleep(st->clk_gate_pwm, &clk_gate_wf);
209 if (ret)
210 return ret;
211
212 st->cnv_wf = cnv_wf;
213 st->clk_gate_wf = clk_gate_wf;
214
215 /* TODO: Add a rounding API for PWMs that can simplify this */
216 target = DIV_ROUND_CLOSEST_ULL(st->ref_clk_rate_hz, freq);
217 st->sampling_freq_hz = DIV_ROUND_CLOSEST_ULL(st->ref_clk_rate_hz,
218 target);
219
220 return 0;
221 }
222