On 12/1/19 1:10 PM, Jonathan Cameron wrote: >> >> E.g. putting something like >> >> unsigned int first_index = find_first_bit(mask, indio_dev->masklength); >> length = iio_storage_bytes_for_si(indio_dev, first_index); >> bytes = ALIGN(bytes, length); >> >> below the loop should do the trick I believe. > It would work for Lars case, but I think a combination of both approaches > is needed to handle cases like > > u16 > u16 (may be padding) > u32 > u16 > > We need to realign to the largest sized element whereever it occurs in the > channels list. So find that whilst computing the individual alignments, > and apply it only once at the end. > Ah, yes. We need the same rules as for the alignment or padding of a struct, which mean align the size to size of the largest element.