On 6/24/24 5:51 PM, David Lechner wrote: > On 6/24/24 12:31 PM, Jerome Brunet wrote: >> Add support for the HW found in most Amlogic SoC dedicated to measure >> system clocks. >> > > > >> +static int cmsr_read_raw(struct iio_dev *indio_dev, >> + struct iio_chan_spec const *chan, >> + int *val, int *val2, long mask) >> +{ >> + struct amlogic_cmsr *cm = iio_priv(indio_dev); >> + >> + guard(mutex)(&cm->lock); >> + >> + switch (mask) { >> + case IIO_CHAN_INFO_RAW: >> + *val = cmsr_measure_unlocked(cm, chan->channel); > > Is this actually returning an alternating voltage magnitutde? > Most frequency drivers don't have a raw value, only frequency. > >> + if (*val < 0) >> + return *val; >> + return IIO_VAL_INT; >> + >> + case IIO_CHAN_INFO_PROCESSED: /* Result in Hz */ > > Shouldn't this be IIO_CHAN_INFO_FREQUENCY? > > Processed is just (raw + offset) * scale which would be a voltage > in this case since the channel type is IIO_ALTVOLTAGE. > >> + *val = cmsr_measure_processed_unlocked(cm, chan->channel, val2); >> + if (*val < 0) >> + return *val; >> + return IIO_VAL_INT_64; >> + >> + case IIO_CHAN_INFO_SCALE: > > What is this attribute being used for? > > (clearly not used to convert the raw value to millivolts :-) ) > > Maybe IIO_CHAN_INFO_INT_TIME is the right one for this? Although > so far, that has only been used with light sensors. Probably not the right idea though since it applies to the frequency measurement, not the voltage measurement. > >> + *val2 = cmsr_get_time_unlocked(cm); >> + *val = 1000000; >> + return IIO_VAL_FRACTIONAL; >> + >> + default: >> + return -EINVAL; >> + } >> +} >> +