From 578f737dd36989121412cf947a5b534e7b8a0ac5 Mon Sep 17 00:00:00 2001 From: Peter Meerwald Date: Mon, 25 Jun 2012 23:13:24 +0200 Subject: [PATCH 1/6] iio staging: fix potential resource leak in generic_buffer Signed-off-by: Peter Meerwald Signed-off-by: Jonathan Cameron --- drivers/staging/iio/Documentation/iio_utils.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/staging/iio/Documentation/iio_utils.h b/drivers/staging/iio/Documentation/iio_utils.h index 6f3a392297ec..ab788594b202 100644 --- a/drivers/staging/iio/Documentation/iio_utils.h +++ b/drivers/staging/iio/Documentation/iio_utils.h @@ -157,7 +157,8 @@ inline int iioutils_get_type(unsigned *is_signed, &padint, shift); if (ret < 0) { printf("failed to pass scan type description\n"); - return ret; + ret = -errno; + goto error_close_sysfsfp; } *be = (endianchar == 'b'); *bytes = padint / 8; @@ -173,7 +174,11 @@ inline int iioutils_get_type(unsigned *is_signed, free(filename); filename = 0; + sysfsfp = 0; } +error_close_sysfsfp: + if (sysfsfp) + fclose(sysfsfp); error_free_filename: if (filename) free(filename); From a4d429e362d873414046c78724f3d6a7978bc2fd Mon Sep 17 00:00:00 2001 From: Peter Meerwald Date: Mon, 25 Jun 2012 23:13:25 +0200 Subject: [PATCH 2/6] iio staging: fix potential memory/resource leaks in find_type_by_name() Signed-off-by: Peter Meerwald Signed-off-by: Jonathan Cameron --- drivers/staging/iio/Documentation/iio_utils.h | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/staging/iio/Documentation/iio_utils.h b/drivers/staging/iio/Documentation/iio_utils.h index ab788594b202..81a628975cdd 100644 --- a/drivers/staging/iio/Documentation/iio_utils.h +++ b/drivers/staging/iio/Documentation/iio_utils.h @@ -472,23 +472,30 @@ inline int find_type_by_name(const char *name, const char *type) + strlen(type) + numstrlen + 6); - if (filename == NULL) + if (filename == NULL) { + closedir(dp); return -ENOMEM; + } sprintf(filename, "%s%s%d/name", iio_dir, type, number); nameFile = fopen(filename, "r"); - if (!nameFile) + if (!nameFile) { + free(filename); continue; + } free(filename); fscanf(nameFile, "%s", thisname); - if (strcmp(name, thisname) == 0) - return number; fclose(nameFile); + if (strcmp(name, thisname) == 0) { + closedir(dp); + return number; + } } } } + closedir(dp); return -ENODEV; } From ce7b04c629254b884baa338730021b01298be921 Mon Sep 17 00:00:00 2001 From: Peter Meerwald Date: Mon, 25 Jun 2012 23:13:26 +0200 Subject: [PATCH 3/6] iio staging: fix resource leak in _write_sysfs_int() Signed-off-by: Peter Meerwald Signed-off-by: Jonathan Cameron --- drivers/staging/iio/Documentation/iio_utils.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/staging/iio/Documentation/iio_utils.h b/drivers/staging/iio/Documentation/iio_utils.h index 81a628975cdd..b38e81f4fa64 100644 --- a/drivers/staging/iio/Documentation/iio_utils.h +++ b/drivers/staging/iio/Documentation/iio_utils.h @@ -524,6 +524,7 @@ inline int _write_sysfs_int(char *filename, char *basedir, int val, int verify) goto error_free; } fscanf(sysfsfp, "%d", &test); + fclose(sysfsfp); if (test != val) { printf("Possible failure in int write %d to %s%s\n", val, @@ -573,6 +574,7 @@ int _write_sysfs_string(char *filename, char *basedir, char *val, int verify) goto error_free; } fscanf(sysfsfp, "%s", temp); + fclose(sysfsfp); if (strcmp(temp, val) != 0) { printf("Possible failure in string write of %s " "Should be %s " From 05eda67d2c31f3e8d815c3fc14f4dbb612363eab Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Wed, 27 Jun 2012 10:58:27 +0200 Subject: [PATCH 4/6] staging:iio:ad7793: Fix scan index for the "shorted" channel The code expects the scan index to match the offset of the channel into the channel array. For the "shorted" the offset is 3, but the scan index is set to 2. Also the scan index 2 is already taken by the previous channel. As a result the "shorted" channel will appear to be selected if the previous channel is selected and vice versa and it is not possible to sample the "shorted" channel in buffered mode. Signed-off-by: Lars-Peter Clausen Signed-off-by: Jonathan Cameron --- drivers/staging/iio/adc/ad7793.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/staging/iio/adc/ad7793.c b/drivers/staging/iio/adc/ad7793.c index b36556fa2957..92d8c255d470 100644 --- a/drivers/staging/iio/adc/ad7793.c +++ b/drivers/staging/iio/adc/ad7793.c @@ -786,7 +786,7 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { .address = AD7793_CH_AIN1M_AIN1M, .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | IIO_CHAN_INFO_SCALE_SHARED_BIT, - .scan_index = 2, + .scan_index = 3, .scan_type = IIO_ST('s', 24, 32, 0) }, .channel[4] = { @@ -859,7 +859,7 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { .address = AD7793_CH_AIN1M_AIN1M, .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | IIO_CHAN_INFO_SCALE_SHARED_BIT, - .scan_index = 2, + .scan_index = 3, .scan_type = IIO_ST('s', 16, 32, 0) }, .channel[4] = { From 467d0becaf52add767e51a6de92c52a91cf546ac Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Sat, 5 May 2012 10:41:25 +0100 Subject: [PATCH 5/6] staging:iio:accel:adis16204 fix bug in channel modifier handling Will result in the correct scale value for the x axis. Signed-off-by: Jonathan Cameron Acked-by: Michael Hennerich --- drivers/staging/iio/accel/adis16204_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/staging/iio/accel/adis16204_core.c b/drivers/staging/iio/accel/adis16204_core.c index ac9d95e4ea47..457982bf7eac 100644 --- a/drivers/staging/iio/accel/adis16204_core.c +++ b/drivers/staging/iio/accel/adis16204_core.c @@ -381,7 +381,7 @@ static int adis16204_read_raw(struct iio_dev *indio_dev, return IIO_VAL_INT_PLUS_MICRO; case IIO_ACCEL: *val = 0; - if (chan->channel == 'x') + if (chan->channel2 == IIO_MOD_X) *val2 = 17125; else *val2 = 8407; From 06d5199d4c53615338d0453b62458cd82fb88f33 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Sat, 12 May 2012 10:01:01 +0100 Subject: [PATCH 6/6] staging:iio: Add some missing peak elements to the info_mask These are supported by raw_read but not actually there. Signed-off-by: Jonathan Cameron Acked-by: Michael Hennerich --- drivers/staging/iio/accel/adis16240_core.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/staging/iio/accel/adis16240_core.c b/drivers/staging/iio/accel/adis16240_core.c index 8b15eaea3381..4ba9b1c3bb5a 100644 --- a/drivers/staging/iio/accel/adis16240_core.c +++ b/drivers/staging/iio/accel/adis16240_core.c @@ -500,7 +500,8 @@ static struct iio_chan_spec adis16240_channels[] = { .channel2 = IIO_MOD_X, .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | IIO_CHAN_INFO_SCALE_SHARED_BIT | - IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, + IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | + IIO_CHAN_INFO_PEAK_SEPARATE_BIT, .address = accel_x, .scan_index = ADIS16240_SCAN_ACC_X, .scan_type = { @@ -514,7 +515,8 @@ static struct iio_chan_spec adis16240_channels[] = { .channel2 = IIO_MOD_Y, .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | IIO_CHAN_INFO_SCALE_SHARED_BIT | - IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, + IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | + IIO_CHAN_INFO_PEAK_SEPARATE_BIT, .address = accel_y, .scan_index = ADIS16240_SCAN_ACC_Y, .scan_type = { @@ -528,7 +530,8 @@ static struct iio_chan_spec adis16240_channels[] = { .channel2 = IIO_MOD_Z, .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | IIO_CHAN_INFO_SCALE_SHARED_BIT | - IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, + IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | + IIO_CHAN_INFO_PEAK_SEPARATE_BIT, .address = accel_z, .scan_index = ADIS16240_SCAN_ACC_Z, .scan_type = {