On 02/22/11 20:21, Michael Hennerich wrote: > On 02/22/2011 07:48 PM, Jonathan Cameron wrote: >> On 02/15/11 14:46, michael.hennerich@xxxxxxxxxx wrote: >> >>> From: Michael Hennerich <michael.hennerich@xxxxxxxxxx> >>> >>> In case a timestamp is present, scan size returned by size_from_channelarray() >>> is not longer valid. >>> >> Really? Shouldn't the timestamp just be picked up as another channel assuming >> all the relevant attributes are present (which they should be...) >> > I think the pronunciation is on 'should be'. > Looks like all my drivers don't do it, as well as some of yours. > > My assumption was that bytes_per_datum must be properly set. That should certainly be the case. We could put a sanity check in to test both numbers are the same as clearly we've gotten it wrong in some drivers. > And that the timestamp is always assumed to be the last 8bytes aligned > on a 64-bit boundary. It is at the moment but that might change so lets do it right now.. > I guess some drivers need fixing. Yes. It looks that way. Good thing you picked up on this problem. > >> >>> However size_from_channelarray() must be still called >>> in order to setup locations within the buffer. >>> >>> Signed-off-by: Michael Hennerich <michael.hennerich@xxxxxxxxxx> >>> --- >>> drivers/staging/iio/Documentation/generic_buffer.c | 8 +++++++- >>> 1 files changed, 7 insertions(+), 1 deletions(-) >>> >>> diff --git a/drivers/staging/iio/Documentation/generic_buffer.c b/drivers/staging/iio/Documentation/generic_buffer.c >>> index 131d9d0..c382452 100644 >>> --- a/drivers/staging/iio/Documentation/generic_buffer.c >>> +++ b/drivers/staging/iio/Documentation/generic_buffer.c >>> @@ -226,7 +226,13 @@ int main(int argc, char **argv) >>> ret = write_sysfs_int("enable", buf_dir_name, 1); >>> if (ret < 0) >>> goto error_free_buf_dir_name; >>> - scan_size = size_from_channelarray(infoarray, num_channels); >>> + >>> + scan_size = read_sysfs_posint("bytes_per_datum", buf_dir_name); >>> + if (ret < 0) >>> + goto error_free_buf_dir_name; >>> + >>> + size_from_channelarray(infoarray, num_channels); >>> + >>> data = malloc(scan_size*buf_len); >>> if (!data) { >>> ret = -ENOMEM; >>> >> > > -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html