diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2013-10-08 08:43:00 -0700 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2013-10-08 08:43:00 -0700 |
commit | e3c55d406bd8df1a878546002c93db90c42be10c (patch) | |
tree | efb0ba2707c95fd7166cf1b76887c43c977e37dd /drivers/staging/iio | |
parent | 4d6e482675f13e33599fc3d18fc723959be0a9b6 (diff) | |
parent | d0e639c9e06d44e713170031fe05fb60ebe680af (diff) |
Merge tag 'v3.12-rc4' into next
Merge with mainline to bring in changes to input subsystem that were
committed through other trees.
Diffstat (limited to 'drivers/staging/iio')
33 files changed, 130 insertions, 964 deletions
diff --git a/drivers/staging/iio/Documentation/device.txt b/drivers/staging/iio/Documentation/device.txt index ea08d621337..8be32e5a0af 100644 --- a/drivers/staging/iio/Documentation/device.txt +++ b/drivers/staging/iio/Documentation/device.txt @@ -56,7 +56,7 @@ Then fill in the following: - indio_dev->modes: Specify whether direct access and / or ring buffer access is supported. -- indio_dev->ring: +- indio_dev->buffer: An optional associated buffer. - indio_dev->pollfunc: Poll function related elements. This controls what occurs when a trigger @@ -67,7 +67,7 @@ Then fill in the following: - indio_dev->num_channels: How many channels are there? -Once these are set up, a call to iio_device_register(indio_dev), +Once these are set up, a call to iio_device_register(indio_dev) will register the device with the iio core. Worth noting here is that, if a ring buffer is to be used, it can be diff --git a/drivers/staging/iio/Kconfig b/drivers/staging/iio/Kconfig index db4d6dc0324..b36feb080cb 100644 --- a/drivers/staging/iio/Kconfig +++ b/drivers/staging/iio/Kconfig @@ -37,7 +37,7 @@ config IIO_SIMPLE_DUMMY_EVENTS config IIO_SIMPLE_DUMMY_BUFFER boolean "Buffered capture support" - depends on IIO_KFIFO_BUF + select IIO_KFIFO_BUF help Add buffered data capture to the simple dummy driver. diff --git a/drivers/staging/iio/accel/adis16201_core.c b/drivers/staging/iio/accel/adis16201_core.c index ab8ec7af88b..2105576fa77 100644 --- a/drivers/staging/iio/accel/adis16201_core.c +++ b/drivers/staging/iio/accel/adis16201_core.c @@ -182,11 +182,10 @@ static int adis16201_probe(struct spi_device *spi) struct iio_dev *indio_dev; /* setup the industrialio driver allocated elements */ - indio_dev = iio_device_alloc(sizeof(*st)); - if (indio_dev == NULL) { - ret = -ENOMEM; - goto error_ret; - } + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); + if (!indio_dev) + return -ENOMEM; + st = iio_priv(indio_dev); /* this is only used for removal purposes */ spi_set_drvdata(spi, indio_dev); @@ -201,10 +200,10 @@ static int adis16201_probe(struct spi_device *spi) ret = adis_init(st, indio_dev, spi, &adis16201_data); if (ret) - goto error_free_dev; + return ret; ret = adis_setup_buffer_and_trigger(st, indio_dev, NULL); if (ret) - goto error_free_dev; + return ret; /* Get the device into a sane initial state */ ret = adis_initial_startup(st); @@ -218,9 +217,6 @@ static int adis16201_probe(struct spi_device *spi) error_cleanup_buffer_trigger: adis_cleanup_buffer_and_trigger(st, indio_dev); -error_free_dev: - iio_device_free(indio_dev); -error_ret: return ret; } @@ -231,7 +227,6 @@ static int adis16201_remove(struct spi_device *spi) iio_device_unregister(indio_dev); adis_cleanup_buffer_and_trigger(st, indio_dev); - iio_device_free(indio_dev); return 0; } diff --git a/drivers/staging/iio/accel/adis16203_core.c b/drivers/staging/iio/accel/adis16203_core.c index b08ac8fdeee..409a28ed904 100644 --- a/drivers/staging/iio/accel/adis16203_core.c +++ b/drivers/staging/iio/accel/adis16203_core.c @@ -148,11 +148,9 @@ static int adis16203_probe(struct spi_device *spi) struct adis *st; /* setup the industrialio driver allocated elements */ - indio_dev = iio_device_alloc(sizeof(*st)); - if (indio_dev == NULL) { - ret = -ENOMEM; - goto error_ret; - } + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); + if (!indio_dev) + return -ENOMEM; st = iio_priv(indio_dev); /* this is only used for removal purposes */ spi_set_drvdata(spi, indio_dev); @@ -166,11 +164,11 @@ static int adis16203_probe(struct spi_device *spi) ret = adis_init(st, indio_dev, spi, &adis16203_data); if (ret) - goto error_free_dev; + return ret; ret = adis_setup_buffer_and_trigger(st, indio_dev, NULL); if (ret) - goto error_free_dev; + return ret; /* Get the device into a sane initial state */ ret = adis_initial_startup(st); @@ -185,9 +183,6 @@ static int adis16203_probe(struct spi_device *spi) error_cleanup_buffer_trigger: adis_cleanup_buffer_and_trigger(st, indio_dev); -error_free_dev: - iio_device_free(indio_dev); -error_ret: return ret; } @@ -198,7 +193,6 @@ static int adis16203_remove(struct spi_device *spi) iio_device_unregister(indio_dev); adis_cleanup_buffer_and_trigger(st, indio_dev); - iio_device_free(indio_dev); return 0; } diff --git a/drivers/staging/iio/accel/adis16204_core.c b/drivers/staging/iio/accel/adis16204_core.c index 792ec25a50d..b8ea76857cd 100644 --- a/drivers/staging/iio/accel/adis16204_core.c +++ b/drivers/staging/iio/accel/adis16204_core.c @@ -187,11 +187,9 @@ static int adis16204_probe(struct spi_device *spi) struct iio_dev *indio_dev; /* setup the industrialio driver allocated elements */ - indio_dev = iio_device_alloc(sizeof(*st)); - if (indio_dev == NULL) { - ret = -ENOMEM; - goto error_ret; - } + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); + if (!indio_dev) + return -ENOMEM; st = iio_priv(indio_dev); /* this is only used for removal purposes */ spi_set_drvdata(spi, indio_dev); @@ -205,11 +203,11 @@ static int adis16204_probe(struct spi_device *spi) ret = adis_init(st, indio_dev, spi, &adis16204_data); if (ret) - goto error_free_dev; + return ret; ret = adis_setup_buffer_and_trigger(st, indio_dev, NULL); if (ret) - goto error_free_dev; + return ret; /* Get the device into a sane initial state */ ret = adis_initial_startup(st); @@ -223,9 +221,6 @@ static int adis16204_probe(struct spi_device *spi) error_cleanup_buffer_trigger: adis_cleanup_buffer_and_trigger(st, indio_dev); -error_free_dev: - iio_device_free(indio_dev); -error_ret: return ret; } @@ -236,7 +231,6 @@ static int adis16204_remove(struct spi_device *spi) iio_device_unregister(indio_dev); adis_cleanup_buffer_and_trigger(st, indio_dev); - iio_device_free(indio_dev); return 0; } diff --git a/drivers/staging/iio/accel/adis16209_core.c b/drivers/staging/iio/accel/adis16209_core.c index 323c169d699..4492e51d888 100644 --- a/drivers/staging/iio/accel/adis16209_core.c +++ b/drivers/staging/iio/accel/adis16209_core.c @@ -183,11 +183,9 @@ static int adis16209_probe(struct spi_device *spi) struct iio_dev *indio_dev; /* setup the industrialio driver allocated elements */ - indio_dev = iio_device_alloc(sizeof(*st)); - if (indio_dev == NULL) { - ret = -ENOMEM; - goto error_ret; - } + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); + if (!indio_dev) + return -ENOMEM; st = iio_priv(indio_dev); /* this is only used for removal purposes */ spi_set_drvdata(spi, indio_dev); @@ -201,10 +199,10 @@ static int adis16209_probe(struct spi_device *spi) ret = adis_init(st, indio_dev, spi, &adis16209_data); if (ret) - goto error_free_dev; + return ret; ret = adis_setup_buffer_and_trigger(st, indio_dev, NULL); if (ret) - goto error_free_dev; + return ret; /* Get the device into a sane initial state */ ret = adis_initial_startup(st); @@ -218,9 +216,6 @@ static int adis16209_probe(struct spi_device *spi) error_cleanup_buffer_trigger: adis_cleanup_buffer_and_trigger(st, indio_dev); -error_free_dev: - iio_device_free(indio_dev); -error_ret: return ret; } @@ -231,7 +226,6 @@ static int adis16209_remove(struct spi_device *spi) iio_device_unregister(indio_dev); adis_cleanup_buffer_and_trigger(st, indio_dev); - iio_device_free(indio_dev); return 0; } diff --git a/drivers/staging/iio/accel/adis16220_core.c b/drivers/staging/iio/accel/adis16220_core.c index 0e72f795ed0..5c289614357 100644 --- a/drivers/staging/iio/accel/adis16220_core.c +++ b/drivers/staging/iio/accel/adis16220_core.c @@ -428,11 +428,9 @@ static int adis16220_probe(struct spi_device *spi) struct iio_dev *indio_dev; /* setup the industrialio driver allocated elements */ - indio_dev = iio_device_alloc(sizeof(*st)); - if (indio_dev == NULL) { - ret = -ENOMEM; - goto error_ret; - } + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); + if (!indio_dev) + return -ENOMEM; st = iio_priv(indio_dev); /* this is only used for removal purposes */ @@ -447,7 +445,7 @@ static int adis16220_probe(struct spi_device *spi) ret = iio_device_register(indio_dev); if (ret) - goto error_free_dev; + return ret; ret = sysfs_create_bin_file(&indio_dev->dev.kobj, &accel_bin); if (ret) @@ -478,9 +476,6 @@ error_rm_accel_bin: sysfs_remove_bin_file(&indio_dev->dev.kobj, &accel_bin); error_unregister_dev: iio_device_unregister(indio_dev); -error_free_dev: - iio_device_free(indio_dev); -error_ret: return ret; } @@ -492,7 +487,6 @@ static int adis16220_remove(struct spi_device *spi) sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc1_bin); sysfs_remove_bin_file(&indio_dev->dev.kobj, &accel_bin); iio_device_unregister(indio_dev); - iio_device_free(indio_dev); return 0; } diff --git a/drivers/staging/iio/accel/adis16240_core.c b/drivers/staging/iio/accel/adis16240_core.c index fd1f0fd0fba..3a303a03d02 100644 --- a/drivers/staging/iio/accel/adis16240_core.c +++ b/drivers/staging/iio/accel/adis16240_core.c @@ -236,11 +236,9 @@ static int adis16240_probe(struct spi_device *spi) struct iio_dev *indio_dev; /* setup the industrialio driver allocated elements */ - indio_dev = iio_device_alloc(sizeof(*st)); - if (indio_dev == NULL) { - ret = -ENOMEM; - goto error_ret; - } + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); + if (!indio_dev) + return -ENOMEM; st = iio_priv(indio_dev); /* this is only used for removal purposes */ spi_set_drvdata(spi, indio_dev); @@ -254,10 +252,10 @@ static int adis16240_probe(struct spi_device *spi) ret = adis_init(st, indio_dev, spi, &adis16240_data); if (ret) - goto error_free_dev; + return ret; ret = adis_setup_buffer_and_trigger(st, indio_dev, NULL); if (ret) - goto error_free_dev; + return ret; /* Get the device into a sane initial state */ ret = adis_initial_startup(st); @@ -270,9 +268,6 @@ static int adis16240_probe(struct spi_device *spi) error_cleanup_buffer_trigger: adis_cleanup_buffer_and_trigger(st, indio_dev); -error_free_dev: - iio_device_free(indio_dev); -error_ret: return ret; } @@ -283,7 +278,6 @@ static int adis16240_remove(struct spi_device *spi) iio_device_unregister(indio_dev); adis_cleanup_buffer_and_trigger(st, indio_dev); - iio_device_free(indio_dev); return 0; } diff --git a/drivers/staging/iio/accel/lis3l02dq_core.c b/drivers/staging/iio/accel/lis3l02dq_core.c index 8ed75a94f46..bb852dc9c98 100644 --- a/drivers/staging/iio/accel/lis3l02dq_core.c +++ b/drivers/staging/iio/accel/lis3l02dq_core.c @@ -668,11 +668,9 @@ static int lis3l02dq_probe(struct spi_device *spi) struct lis3l02dq_state *st; struct iio_dev *indio_dev; - indio_dev = iio_device_alloc(sizeof *st); - if (indio_dev == NULL) { - ret = -ENOMEM; - goto error_ret; - } + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); + if (!indio_dev) + return -ENOMEM; st = iio_priv(indio_dev); /* this is only used for removal purposes */ spi_set_drvdata(spi, indio_dev); @@ -690,7 +688,7 @@ static int lis3l02dq_probe(struct spi_device *spi) ret = lis3l02dq_configure_buffer(indio_dev); if (ret) - goto error_free_dev; + return ret; ret = iio_buffer_register(indio_dev, lis3l02dq_channels, @@ -736,9 +734,6 @@ error_uninitialize_buffer: iio_buffer_unregister(indio_dev); error_unreg_buffer_funcs: lis3l02dq_unconfigure_buffer(indio_dev); -error_free_dev: - iio_device_free(indio_dev); -error_ret: return ret; } @@ -786,8 +781,6 @@ static int lis3l02dq_remove(struct spi_device *spi) iio_buffer_unregister(indio_dev); lis3l02dq_unconfigure_buffer(indio_dev); - iio_device_free(indio_dev); - return 0; } diff --git a/drivers/staging/iio/accel/sca3000_core.c b/drivers/staging/iio/accel/sca3000_core.c index 32950ad9485..48a25ba290f 100644 --- a/drivers/staging/iio/accel/sca3000_core.c +++ b/drivers/staging/iio/accel/sca3000_core.c @@ -1135,11 +1135,9 @@ static int sca3000_probe(struct spi_device *spi) struct sca3000_state *st; struct iio_dev *indio_dev; - indio_dev = iio_device_alloc(sizeof(*st)); - if (indio_dev == NULL) { - ret = -ENOMEM; - goto error_ret; - } + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); + if (!indio_dev) + return -ENOMEM; st = iio_priv(indio_dev); spi_set_drvdata(spi, indio_dev); @@ -1162,7 +1160,7 @@ static int sca3000_probe(struct spi_device *spi) sca3000_configure_ring(indio_dev); ret = iio_device_register(indio_dev); if (ret < 0) - goto error_free_dev; + return ret; ret = iio_buffer_register(indio_dev, sca3000_channels, @@ -1198,10 +1196,6 @@ error_unregister_ring: iio_buffer_unregister(indio_dev); error_unregister_dev: iio_device_unregister(indio_dev); -error_free_dev: - iio_device_free(indio_dev); - -error_ret: return ret; } @@ -1235,7 +1229,6 @@ static int sca3000_remove(struct spi_device *spi) iio_device_unregister(indio_dev); iio_buffer_unregister(indio_dev); sca3000_unconfigure_ring(indio_dev); - iio_device_free(indio_dev); return 0; } diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c index 9f52a285792..a08c1736458 100644 --- a/drivers/staging/iio/adc/mxs-lradc.c +++ b/drivers/staging/iio/adc/mxs-lradc.c @@ -225,6 +225,9 @@ struct mxs_lradc { #define LRADC_CTRL4_LRADCSELECT_MASK(n) (0xf << ((n) * 4)) #define LRADC_CTRL4_LRADCSELECT_OFFSET(n) ((n) * 4) +#define LRADC_RESOLUTION 12 +#define LRADC_SINGLE_SAMPLE_MASK ((1 << LRADC_RESOLUTION) - 1) + /* * Raw I/O operations */ @@ -540,9 +543,10 @@ static int mxs_lradc_ts_register(struct mxs_lradc *lradc) __set_bit(EV_ABS, input->evbit); __set_bit(EV_KEY, input->evbit); __set_bit(BTN_TOUCH, input->keybit); - input_set_abs_params(input, ABS_X, 0, LRADC_CH_VALUE_MASK, 0, 0); - input_set_abs_params(input, ABS_Y, 0, LRADC_CH_VALUE_MASK, 0, 0); - input_set_abs_params(input, ABS_PRESSURE, 0, LRADC_CH_VALUE_MASK, 0, 0); + input_set_abs_params(input, ABS_X, 0, LRADC_SINGLE_SAMPLE_MASK, 0, 0); + input_set_abs_params(input, ABS_Y, 0, LRADC_SINGLE_SAMPLE_MASK, 0, 0); + input_set_abs_params(input, ABS_PRESSURE, 0, LRADC_SINGLE_SAMPLE_MASK, + 0, 0); lradc->ts_input = input; input_set_drvdata(input, lradc); @@ -817,7 +821,7 @@ static const struct iio_buffer_setup_ops mxs_lradc_buffer_ops = { .channel = (idx), \ .scan_type = { \ .sign = 'u', \ - .realbits = 18, \ + .realbits = LRADC_RESOLUTION, \ .storagebits = 32, \ }, \ } @@ -841,14 +845,16 @@ static const struct iio_chan_spec mxs_lradc_chan_spec[] = { MXS_ADC_CHAN(15, IIO_VOLTAGE), /* VDD5V */ }; -static void mxs_lradc_hw_init(struct mxs_lradc *lradc) +static int mxs_lradc_hw_init(struct mxs_lradc *lradc) { /* The ADC always uses DELAY CHANNEL 0. */ const uint32_t adc_cfg = (1 << (LRADC_DELAY_TRIGGER_DELAYS_OFFSET + 0)) | (LRADC_DELAY_TIMER_PER << LRADC_DELAY_DELAY_OFFSET); - stmp_reset_block(lradc->base); + int ret = stmp_reset_block(lradc->base); + if (ret) + return ret; /* Configure DELAY CHANNEL 0 for generic ADC sampling. */ writel(adc_cfg, lradc->base + LRADC_DELAY(0)); @@ -869,6 +875,8 @@ static void mxs_lradc_hw_init(struct mxs_lradc *lradc) /* Start internal temperature sensing. */ writel(0, lradc->base + LRADC_CTRL2); + + return 0; } static void mxs_lradc_hw_stop(struct mxs_lradc *lradc) @@ -905,7 +913,7 @@ static int mxs_lradc_probe(struct platform_device *pdev) int i; /* Allocate the IIO device. */ - iio = iio_device_alloc(sizeof(*lradc)); + iio = devm_iio_device_alloc(dev, sizeof(*lradc)); if (!iio) { dev_err(dev, "Failed to allocate IIO device\n"); return -ENOMEM; @@ -917,10 +925,8 @@ static int mxs_lradc_probe(struct platform_device *pdev) iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); lradc->dev = &pdev->dev; lradc->base = devm_ioremap_resource(dev, iores); - if (IS_ERR(lradc->base)) { - ret = PTR_ERR(lradc->base); - goto err_addr; - } + if (IS_ERR(lradc->base)) + return PTR_ERR(lradc->base); INIT_WORK(&lradc->ts_work, mxs_lradc_ts_work); @@ -940,16 +946,14 @@ static int mxs_lradc_probe(struct platform_device *pdev) /* Grab all IRQ sources */ for (i = 0; i < of_cfg->irq_count; i++) { lradc->irq[i] = platform_get_irq(pdev, i); - if (lradc->irq[i] < 0) { - ret = -EINVAL; - goto err_addr; - } + if (lradc->irq[i] < 0) + return -EINVAL; ret = devm_request_irq(dev, lradc->irq[i], mxs_lradc_handle_irq, 0, of_cfg->irq_name[i], iio); if (ret) - goto err_addr; + return ret; } platform_set_drvdata(pdev, iio); @@ -969,14 +973,16 @@ static int mxs_lradc_probe(struct platform_device *pdev) &mxs_lradc_trigger_handler, &mxs_lradc_buffer_ops); if (ret) - goto err_addr; + return ret; ret = mxs_lradc_trigger_init(iio); if (ret) goto err_trig; /* Configure the hardware. */ - mxs_lradc_hw_init(lradc); + ret = mxs_lradc_hw_init(lradc); + if (ret) + goto err_dev; /* Register the touchscreen input device. */ ret = mxs_lradc_ts_register(lradc); @@ -998,8 +1004,6 @@ err_dev: mxs_lradc_trigger_remove(iio); err_trig: iio_triggered_buffer_cleanup(iio); -err_addr: - iio_device_free(iio); return ret; } @@ -1015,7 +1019,6 @@ static int mxs_lradc_remove(struct platform_device *pdev) iio_device_unregister(iio); iio_triggered_buffer_cleanup(iio); mxs_lradc_trigger_remove(iio); - iio_device_free(iio); return 0; } diff --git a/drivers/staging/iio/adc/spear_adc.c b/drivers/staging/iio/adc/spear_adc.c index 736219c3030..20f2d555e7c 100644 --- a/drivers/staging/iio/adc/spear_adc.c +++ b/drivers/staging/iio/adc/spear_adc.c @@ -300,11 +300,10 @@ static int spear_adc_probe(struct platform_device *pdev) int ret = -ENODEV; int irq; - iodev = iio_device_alloc(sizeof(struct spear_adc_info)); + iodev = devm_iio_device_alloc(dev, sizeof(struct spear_adc_info)); if (!iodev) { dev_err(dev, "failed allocating iio device\n"); - ret = -ENOMEM; - goto errout1; + return -ENOMEM; } info = iio_priv(iodev); @@ -318,8 +317,7 @@ static int spear_adc_probe(struct platform_device *pdev) info->adc_base_spear6xx = of_iomap(np, 0); if (!info->adc_base_spear6xx) { dev_err(dev, "failed mapping memory\n"); - ret = -ENOMEM; - goto errout2; + return -ENOMEM; } info->adc_base_spear3xx = (struct adc_regs_spear3xx *)info->adc_base_spear6xx; @@ -327,33 +325,33 @@ static int spear_adc_probe(struct platform_device *pdev) info->clk = clk_get(dev, NULL); if (IS_ERR(info->clk)) { dev_err(dev, "failed getting clock\n"); - goto errout3; + goto errout1; } ret = clk_prepare_enable(info->clk); if (ret) { dev_err(dev, "failed enabling clock\n"); - goto errout4; + goto errout2; } irq = platform_get_irq(pdev, 0); if ((irq < 0) || (irq >= NR_IRQS)) { dev_err(dev, "failed getting interrupt resource\n"); ret = -EINVAL; - goto errout5; + goto errout3; } ret = devm_request_irq(dev, irq, spear_adc_isr, 0, MOD_NAME, info); if (ret < 0) { dev_err(dev, "failed requesting interrupt\n"); - goto errout5; + goto errout3; } if (of_property_read_u32(np, "sampling-frequency", &info->sampling_freq)) { dev_err(dev, "sampling-frequency missing in DT\n"); ret = -EINVAL; - goto errout5; + goto errout3; } /* @@ -383,21 +381,18 @@ static int spear_adc_probe(struct platform_device *pdev) ret = iio_device_register(iodev); if (ret) - goto errout5; + goto errout3; dev_info(dev, "SPEAR ADC driver loaded, IRQ %d\n", irq); return 0; -errout5: - clk_disable_unprepare(info->clk); -errout4: - clk_put(info->clk); errout3: - iounmap(info->adc_base_spear6xx); + clk_disable_unprepare(info->clk); errout2: - iio_device_free(iodev); + clk_put(info->clk); errout1: + iounmap(info->adc_base_spear6xx); return ret; } @@ -410,7 +405,6 @@ static int spear_adc_remove(struct platform_device *pdev) clk_disable_unprepare(info->clk); clk_put(info->clk); iounmap(info->adc_base_spear6xx); - iio_device_free(iodev); return 0; } diff --git a/drivers/staging/iio/addac/adt7316.c b/drivers/staging/iio/addac/adt7316.c index 506b5a7d96c..1e1356825d6 100644 --- a/drivers/staging/iio/addac/adt7316.c +++ b/drivers/staging/iio/addac/adt7316.c @@ -551,31 +551,6 @@ static IIO_DEVICE_ATTR(enable_smbus_timeout, S_IRUGO | S_IWUSR, adt7316_store_enable_smbus_timeout, 0); - -static ssize_t adt7316_store_reset(struct device *dev, - struct device_attribute *attr, - const char *buf, - size_t len) -{ - struct iio_dev *dev_info = dev_to_iio_dev(dev); - struct adt7316_chip_info *chip = iio_priv(dev_info); - u8 config2; - int ret; - - config2 = chip->config2 | ADT7316_RESET; - - ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG2, config2); - if (ret) - return -EIO; - - return len; -} - -static IIO_DEVICE_ATTR(reset, S_IWUSR, - NULL, - adt7316_store_reset, - 0); - static ssize_t adt7316_show_powerdown(struct device *dev, struct device_attribute *attr, char *buf) @@ -1675,7 +1650,6 @@ static IIO_DEVICE_ATTR(bus_type, S_IRUGO, adt7316_show_bus_type, NULL, 0); static struct attribute *adt7316_attributes[] = { &iio_dev_attr_all_modes.dev_attr.attr, &iio_dev_attr_mode.dev_attr.attr, - &iio_dev_attr_reset.dev_attr.attr, &iio_dev_attr_enabled.dev_attr.attr, &iio_dev_attr_ad_channel.dev_attr.attr, &iio_dev_attr_all_ad_channels.dev_attr.attr, @@ -1719,7 +1693,6 @@ static struct attribute *adt7516_attributes[] = { &iio_dev_attr_all_modes.dev_attr.attr, &iio_dev_attr_mode.dev_attr.attr, &iio_dev_attr_select_ex_temp.dev_attr.attr, - &iio_dev_attr_reset.dev_attr.attr, &iio_dev_attr_enabled.dev_attr.attr, &iio_dev_attr_ad_channel.dev_attr.attr, &iio_dev_attr_all_ad_channels.dev_attr.attr, diff --git a/drivers/staging/iio/cdc/ad7150.c b/drivers/staging/iio/cdc/ad7150.c index 687dd2c9143..f4a0341cc70 100644 --- a/drivers/staging/iio/cdc/ad7150.c +++ b/drivers/staging/iio/cdc/ad7150.c @@ -558,11 +558,9 @@ static int ad7150_probe(struct i2c_client *client, struct ad7150_chip_info *chip; struct iio_dev *indio_dev; - indio_dev = iio_device_alloc(sizeof(*chip)); - if (indio_dev == NULL) { - ret = -ENOMEM; - goto error_ret; - } + indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*chip)); + if (!indio_dev) + return -ENOMEM; chip = iio_priv(indio_dev); mutex_init(&chip->state_lock); /* this is only used for device removal purposes */ @@ -581,7 +579,7 @@ static int ad7150_probe(struct i2c_client *client, indio_dev->modes = INDIO_DIRECT_MODE; if (client->irq) { - ret = request_threaded_irq(client->irq, + ret = devm_request_threaded_irq(&client->dev, client->irq, NULL, &ad7150_event_handler, IRQF_TRIGGER_RISING | @@ -590,11 +588,11 @@ static int ad7150_probe(struct i2c_client *client, "ad7150_irq1", indio_dev); if (ret) - goto error_free_dev; + return ret; } if (client->dev.platform_data) { - ret = request_threaded_irq(*(unsigned int *) + ret = devm_request_threaded_irq(&client->dev, *(unsigned int *) client->dev.platform_data, NULL, &ad7150_event_handler, @@ -604,28 +602,17 @@ static int ad7150_probe(struct i2c_client *client, "ad7150_irq2", indio_dev); if (ret) - goto error_free_irq; + return ret; } ret = iio_device_register(indio_dev); if (ret) - goto error_free_irq2; + return ret; dev_info(&client->dev, "%s capacitive sensor registered,irq: %d\n", id->name, client->irq); return 0; -error_free_irq2: - if (client->dev.platform_data) - free_irq(*(unsigned int *)client->dev.platform_data, - indio_dev); -error_free_irq: - if (client->irq) - free_irq(client->irq, indio_dev); -error_free_dev: - iio_device_free(indio_dev); -error_ret: - return ret; } static int ad7150_remove(struct i2c_client *client) @@ -633,13 +620,6 @@ static int ad7150_remove(struct i2c_client *client) struct iio_dev *indio_dev = i2c_get_clientdata(client); iio_device_unregister(indio_dev); - if (client->irq) - free_irq(client->irq, indio_dev); - - if (client->dev.platform_data) - free_irq(*(unsigned int *)client->dev.platform_data, indio_dev); - - iio_device_free(indio_dev); return 0; } diff --git a/drivers/staging/iio/cdc/ad7152.c b/drivers/staging/iio/cdc/ad7152.c index 1d7c5283a85..f2c309d1eb5 100644 --- a/drivers/staging/iio/cdc/ad7152.c +++ b/drivers/staging/iio/cdc/ad7152.c @@ -481,11 +481,9 @@ static int ad7152_probe(struct i2c_client *client, struct ad7152_chip_info *chip; struct iio_dev *indio_dev; - indio_dev = iio_device_alloc(sizeof(*chip)); - if (indio_dev == NULL) { - ret = -ENOMEM; - goto error_ret; - } + indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*chip)); + if (!indio_dev) + return -ENOMEM; chip = iio_priv(indio_dev); /* this is only used for device removal purposes */ i2c_set_clientdata(client, indio_dev); @@ -506,16 +504,11 @@ static int ad7152_probe(struct i2c_client *client, ret = iio_device_register(indio_dev); if (ret) - goto error_free_dev; + return ret; dev_err(&client->dev, "%s capacitive sensor registered\n", id->name); return 0; - -error_free_dev: - iio_device_free(indio_dev); -error_ret: - return ret; } static int ad7152_remove(struct i2c_client *client) @@ -523,7 +516,6 @@ static int ad7152_remove(struct i2c_client *client) struct iio_dev *indio_dev = i2c_get_clientdata(client); iio_device_unregister(indio_dev); - iio_device_free(indio_dev); return 0; } diff --git a/drivers/staging/iio/cdc/ad7746.c b/drivers/staging/iio/cdc/ad7746.c index 94f9ca726d1..75a533bce02 100644 --- a/drivers/staging/iio/cdc/ad7746.c +++ b/drivers/staging/iio/cdc/ad7746.c @@ -699,11 +699,9 @@ static int ad7746_probe(struct i2c_client *client, int ret = 0; unsigned char regval = 0; - indio_dev = iio_device_alloc(sizeof(*chip)); - if (indio_dev == NULL) { - ret = -ENOMEM; - goto error_ret; - } + indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*chip)); + if (!indio_dev) + return -ENOMEM; chip = iio_priv(indio_dev); /* this is only used for device removal purposes */ i2c_set_clientdata(client, indio_dev); @@ -748,20 +746,15 @@ static int ad7746_probe(struct i2c_client *client, ret = i2c_smbus_write_byte_data(chip->client, AD7746_REG_EXC_SETUP, regval); if (ret < 0) - goto error_free_dev; + return ret; ret = iio_device_register(indio_dev); if (ret) - goto error_free_dev; + return ret; dev_info(&client->dev, "%s capacitive sensor registered\n", id->name); return 0; - -error_free_dev: - iio_device_free(indio_dev); -error_ret: - return ret; } static int ad7746_remove(struct i2c_client *client) @@ -769,7 +762,6 @@ static int ad7746_remove(struct i2c_client *client) struct iio_dev *indio_dev = i2c_get_clientdata(client); iio_device_unregister(indio_dev); - iio_device_free(indio_dev); return 0; } diff --git a/drivers/staging/iio/gyro/Kconfig b/drivers/staging/iio/gyro/Kconfig index b4333715536..88b199bb292 100644 --- a/drivers/staging/iio/gyro/Kconfig +++ b/drivers/staging/iio/gyro/Kconfig @@ -10,16 +10,4 @@ config ADIS16060 Say yes here to build support for Analog Devices adis16060 wide bandwidth yaw rate gyroscope with SPI. -config ADIS16260 - tristate "Analog Devices ADIS16260 Digital Gyroscope Sensor SPI driver" - depends on SPI - select IIO_ADIS_LIB - select IIO_ADIS_LIB_BUFFER if IIO_BUFFER - help - Say yes here to build support for Analog Devices ADIS16260 ADIS16265 - ADIS16250 ADIS16255 and ADIS16251 programmable digital gyroscope sensors. - - This driver can also be built as a module. If so, the module - will be called adis16260. - endmenu diff --git a/drivers/staging/iio/gyro/Makefile b/drivers/staging/iio/gyro/Makefile index 975f95b141d..cf22d6d55e2 100644 --- a/drivers/staging/iio/gyro/Makefile +++ b/drivers/staging/iio/gyro/Makefile @@ -4,6 +4,3 @@ adis16060-y := adis16060_core.o obj-$(CONFIG_ADIS16060) += adis16060.o - -adis16260-y := adis16260_core.o -obj-$(CONFIG_ADIS16260) += adis16260.o diff --git a/drivers/staging/iio/gyro/adis16060_core.c b/drivers/staging/iio/gyro/adis16060_core.c index c67d3a832ae..6d3d771154f 100644 --- a/drivers/staging/iio/gyro/adis16060_core.c +++ b/drivers/staging/iio/gyro/adis16060_core.c @@ -151,11 +151,9 @@ static int adis16060_r_probe(struct spi_device *spi) struct iio_dev *indio_dev; /* setup the industrialio driver allocated elements */ - indio_dev = iio_device_alloc(sizeof(*st)); - if (indio_dev == NULL) { - ret = -ENOMEM; - goto error_ret; - } + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); + if (!indio_dev) + return -ENOMEM; /* this is only used for removal purposes */ spi_set_drvdata(spi, indio_dev); st = iio_priv(indio_dev); @@ -171,23 +169,16 @@ static int adis16060_r_probe(struct spi_device *spi) ret = iio_device_register(indio_dev); if (ret) - goto error_free_dev; + return ret; adis16060_iio_dev = indio_dev; return 0; - -error_free_dev: - iio_device_free(indio_dev); -error_ret: - return ret; } /* fixme, confirm ordering in this function */ static int adis16060_r_remove(struct spi_device *spi) { iio_device_unregister(spi_get_drvdata(spi)); - iio_device_free(spi_get_drvdata(spi)); - return 0; } diff --git a/drivers/staging/iio/gyro/adis16260.h b/drivers/staging/iio/gyro/adis16260.h deleted file mode 100644 index df3c0b7e954..00000000000 --- a/drivers/staging/iio/gyro/adis16260.h +++ /dev/null @@ -1,98 +0,0 @@ -#ifndef SPI_ADIS16260_H_ -#define SPI_ADIS16260_H_ - -#include "adis16260_platform_data.h" -#include <linux/iio/imu/adis.h> - -#define ADIS16260_STARTUP_DELAY 220 /* ms */ - -#define ADIS16260_FLASH_CNT 0x00 /* Flash memory write count */ -#define ADIS16260_SUPPLY_OUT 0x02 /* Power supply measurement */ -#define ADIS16260_GYRO_OUT 0x04 /* X-axis gyroscope output */ -#define ADIS16260_AUX_ADC 0x0A /* analog input channel measurement */ -#define ADIS16260_TEMP_OUT 0x0C /* internal temperature measurement */ -#define ADIS16260_ANGL_OUT 0x0E /* angle displacement */ -#define ADIS16260_GYRO_OFF 0x14 /* Calibration, offset/bias adjustment */ -#define ADIS16260_GYRO_SCALE 0x16 /* Calibration, scale adjustment */ -#define ADIS16260_ALM_MAG1 0x20 /* Alarm 1 magnitude/polarity setting */ -#define ADIS16260_ALM_MAG2 0x22 /* Alarm 2 magnitude/polarity setting */ -#define ADIS16260_ALM_SMPL1 0x24 /* Alarm 1 dynamic rate of change setting */ -#define ADIS16260_ALM_SMPL2 0x26 /* Alarm 2 dynamic rate of change setting */ -#define ADIS16260_ALM_CTRL 0x28 /* Alarm control */ -#define ADIS16260_AUX_DAC 0x30 /* Auxiliary DAC data */ -#define ADIS16260_GPIO_CTRL 0x32 /* Control, digital I/O line */ -#define ADIS16260_MSC_CTRL 0x34 /* Control, data ready, self-test settings */ -#define ADIS16260_SMPL_PRD 0x36 /* Control, internal sample rate */ -#define ADIS16260_SENS_AVG 0x38 /* Control, dynamic range, filtering */ -#define ADIS16260_SLP_CNT 0x3A /* Control, sleep mode initiation */ -#define ADIS16260_DIAG_STAT 0x3C /* Diagnostic, error flags */ -#define ADIS16260_GLOB_CMD 0x3E /* Control, global commands */ -#define ADIS16260_LOT_ID1 0x52 /* Lot Identification Code 1 */ -#define ADIS16260_LOT_ID2 0x54 /* Lot Identification Code 2 */ -#define ADIS16260_PROD_ID 0x56 /* Product identifier; - * convert to decimal = 16,265/16,260 */ -#define ADIS16260_SERIAL_NUM 0x58 /* Serial number */ - -#define ADIS16260_ERROR_ACTIVE (1<<14) -#define ADIS16260_NEW_DATA (1<<15) - -/* MSC_CTRL */ -#define ADIS16260_MSC_CTRL_MEM_TEST (1<<11) -/* Internal self-test enable */ -#define ADIS16260_MSC_CTRL_INT_SELF_TEST (1<<10) -#define ADIS16260_MSC_CTRL_NEG_SELF_TEST (1<<9) -#define ADIS16260_MSC_CTRL_POS_SELF_TEST (1<<8) -#define ADIS16260_MSC_CTRL_DATA_RDY_EN (1<<2) -#define ADIS16260_MSC_CTRL_DATA_RDY_POL_HIGH (1<<1) -#define ADIS16260_MSC_CTRL_DATA_RDY_DIO2 (1<<0) - -/* SMPL_PRD */ -/* Time base (tB): 0 = 1.953 ms, 1 = 60.54 ms */ -#define ADIS16260_SMPL_PRD_TIME_BASE (1<<7) -#define ADIS16260_SMPL_PRD_DIV_MASK 0x7F - -/* SLP_CNT */ -#define ADIS16260_SLP_CNT_POWER_OFF 0x80 - -/* DIAG_STAT */ -#define ADIS16260_DIAG_STAT_ALARM2 (1<<9) -#define ADIS16260_DIAG_STAT_ALARM1 (1<<8) -#define ADIS16260_DIAG_STAT_FLASH_CHK_BIT 6 -#define ADIS16260_DIAG_STAT_SELF_TEST_BIT 5 -#define ADIS16260_DIAG_STAT_OVERFLOW_BIT 4 -#define ADIS16260_DIAG_STAT_SPI_FAIL_BIT 3 -#define ADIS16260_DIAG_STAT_FLASH_UPT_BIT 2 -#define ADIS16260_DIAG_STAT_POWER_HIGH_BIT 1 -#define ADIS16260_DIAG_STAT_POWER_LOW_BIT 0 - -/* GLOB_CMD */ -#define ADIS16260_GLOB_CMD_SW_RESET (1<<7) -#define ADIS16260_GLOB_CMD_FLASH_UPD (1<<3) -#define ADIS16260_GLOB_CMD_DAC_LATCH (1<<2) -#define ADIS16260_GLOB_CMD_FAC_CALIB (1<<1) -#define ADIS16260_GLOB_CMD_AUTO_NULL (1<<0) - -#define ADIS16260_SPI_SLOW (u32)(300 * 1000) -#define ADIS16260_SPI_BURST (u32)(1000 * 1000) -#define ADIS16260_SPI_FAST (u32)(2000 * 1000) - -/** - * struct adis16260_state - device instance specific data - * @negate: negate the scale parameter - **/ -struct adis16260_state { - unsigned negate:1; - struct adis adis; -}; - -/* At the moment triggers are only used for ring buffer - * filling. This may change! - */ - -#define ADIS16260_SCAN_GYRO 0 -#define ADIS16260_SCAN_SUPPLY 1 -#define ADIS16260_SCAN_AUX_ADC 2 -#define ADIS16260_SCAN_TEMP 3 -#define ADIS16260_SCAN_ANGL 4 - -#endif /* SPI_ADIS16260_H_ */ diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c deleted file mode 100644 index 620d63fd099..00000000000 --- a/drivers/staging/iio/gyro/adis16260_core.c +++ /dev/null @@ -1,427 +0,0 @@ -/* - * ADIS16260/ADIS16265 Programmable Digital Gyroscope Sensor Driver - * - * Copyright 2010 Analog Devices Inc. - * - * Licensed under the GPL-2 or later. - */ - -#include <linux/interrupt.h> -#include <linux/irq.h> -#include <linux/delay.h> -#include <linux/mutex.h> -#include <linux/device.h> -#include <linux/kernel.h> -#include <linux/spi/spi.h> -#include <linux/slab.h> -#include <linux/sysfs.h> -#include <linux/list.h> -#include <linux/module.h> - -#include <linux/iio/iio.h> -#include <linux/iio/sysfs.h> -#include <linux/iio/buffer.h> - -#include "adis16260.h" - -static ssize_t adis16260_read_frequency_available(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct iio_dev *indio_dev = dev_to_iio_dev(dev); - struct adis16260_state *st = iio_priv(indio_dev); - if (spi_get_device_id(st->adis.spi)->driver_data) - return sprintf(buf, "%s\n", "0.129 ~ 256"); - else - return sprintf(buf, "%s\n", "256 2048"); -} - -static ssize_t adis16260_read_frequency(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct iio_dev *indio_dev = dev_to_iio_dev(dev); - struct adis16260_state *st = iio_priv(indio_dev); - int ret, len = 0; - u16 t; - int sps; - ret = adis_read_reg_16(&st->adis, ADIS16260_SMPL_PRD, &t); - if (ret) - return ret; - - if (spi_get_device_id(st->adis.spi)->driver_data) /* If an adis16251 */ - sps = (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 8 : 256; - else - sps = (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048; - sps /= (t & ADIS16260_SMPL_PRD_DIV_MASK) + 1; - len = sprintf(buf, "%d SPS\n", sps); - return len; -} - -static ssize_t adis16260_write_frequency(struct device *dev, - struct device_attribute *attr, - const char *buf, - size_t len) -{ - struct iio_dev *indio_dev = dev_to_iio_dev(dev); - struct adis16260_state *st = iio_priv(indio_dev); - long val; - int ret; - u8 t; - - ret = strict_strtol(buf, 10, &val); - if (ret) - return ret; - if (val == 0) - return -EINVAL; - - mutex_lock(&indio_dev->mlock); - if (spi_get_device_id(st->adis.spi)->driver_data) { - t = (256 / val); - if (t > 0) - t--; - t &= ADIS16260_SMPL_PRD_DIV_MASK; - } else { - t = (2048 / val); - if (t > 0) - t--; - t &= ADIS16260_SMPL_PRD_DIV_MASK; - } - if ((t & ADIS16260_SMPL_PRD_DIV_MASK) >= 0x0A) - st->adis.spi->max_speed_hz = ADIS16260_SPI_SLOW; - else - st->adis.spi->max_speed_hz = ADIS16260_SPI_FAST; - ret = adis_write_reg_8(&st->adis, - ADIS16260_SMPL_PRD, - t); - - mutex_unlock(&indio_dev->mlock); - - return ret ? ret : len; -} - -/* Power down the device */ -static int adis16260_stop_device(struct iio_dev *indio_dev) -{ - struct adis16260_state *st = iio_priv(indio_dev); - int ret; - u16 val = ADIS16260_SLP_CNT_POWER_OFF; - - ret = adis_write_reg_16(&st->adis, ADIS16260_SLP_CNT, val); - if (ret) - dev_err(&indio_dev->dev, "problem with turning device off: SLP_CNT"); - - return ret; -} - -static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO, - adis16260_read_frequency, - adis16260_write_frequency); - -static IIO_DEVICE_ATTR(sampling_frequency_available, - S_IRUGO, adis16260_read_frequency_available, NULL, 0); - -#define ADIS16260_GYRO_CHANNEL_SET(axis, mod) \ -struct iio_chan_spec adis16260_channels_##axis[] = { \ - ADIS_GYRO_CHAN(mod, ADIS16260_GYRO_OUT, ADIS16260_SCAN_GYRO, \ - BIT(IIO_CHAN_INFO_CALIBBIAS) | \ - BIT(IIO_CHAN_INFO_CALIBSCALE), 14), \ - ADIS_INCLI_CHAN(mod, ADIS16260_ANGL_OUT, ADIS16260_SCAN_ANGL, 0, 14), \ - ADIS_TEMP_CHAN(ADIS16260_TEMP_OUT, ADIS16260_SCAN_TEMP, 12), \ - ADIS_SUPPLY_CHAN(ADIS16260_SUPPLY_OUT, ADIS16260_SCAN_SUPPLY, 12), \ - ADIS_AUX_ADC_CHAN(ADIS16260_AUX_ADC, ADIS16260_SCAN_AUX_ADC, 12), \ - IIO_CHAN_SOFT_TIMESTAMP(5), \ -} - -static const ADIS16260_GYRO_CHANNEL_SET(x, X); -static const ADIS16260_GYRO_CHANNEL_SET(y, Y); -static const ADIS16260_GYRO_CHANNEL_SET(z, Z); - -static const u8 adis16260_addresses[][2] = { - [ADIS16260_SCAN_GYRO] = { ADIS16260_GYRO_OFF, ADIS16260_GYRO_SCALE }, -}; - -static int adis16260_read_raw(struct iio_dev *indio_dev, - struct iio_chan_spec const *chan, - int *val, int *val2, - long mask) -{ - struct adis16260_state *st = iio_priv(indio_dev); - int ret; - int bits; - u8 addr; - s16 val16; - - switch (mask) { - case IIO_CHAN_INFO_RAW: - return adis_single_conversion(indio_dev, chan, - ADIS16260_ERROR_ACTIVE, val); - case IIO_CHAN_INFO_SCALE: - switch (chan->type) { - case IIO_ANGL_VEL: - *val = 0; - if (spi_get_device_id(st->adis.spi)->driver_data) { - /* 0.01832 degree / sec */ - *val2 = IIO_DEGREE_TO_RAD(18320); - } else { - /* 0.07326 degree / sec */ - *val2 = IIO_DEGREE_TO_RAD(73260); - } - return IIO_VAL_INT_PLUS_MICRO; - case IIO_VOLTAGE: - if (chan->channel == 0) { - *val = 1; - *val2 = 831500; /* 1.8315 mV */ - } else { - *val = 0; - *val2 = 610500; /* 610.5 uV */ - } - return IIO_VAL_INT_PLUS_MICRO; - case IIO_TEMP: - *val = 145; - *val2 = 300000; /* 0.1453 C */ - return IIO_VAL_INT_PLUS_MICRO; - default: - return -EINVAL; - } - break; - case IIO_CHAN_INFO_OFFSET: - *val = 250000 / 1453; /* 25 C = 0x00 */ - return IIO_VAL_INT; - case IIO_CHAN_INFO_CALIBBIAS: - switch (chan->type) { - case IIO_ANGL_VEL: - bits = 12; - break; - default: - return -EINVAL; - } - mutex_lock(&indio_dev->mlock); - addr = adis16260_addresses[chan->scan_index][0]; - ret = adis_read_reg_16(&st->adis, addr, &val16); - if (ret) { - mutex_unlock(&indio_dev->mlock); - return ret; - } - val16 &= (1 << bits) - 1; - val16 = (s16)(val16 << (16 - bits)) >> (16 - bits); - *val = val16; - mutex_unlock(&indio_dev->mlock); - return IIO_VAL_INT; - case IIO_CHAN_INFO_CALIBSCALE: - switch (chan->type) { - case IIO_ANGL_VEL: - bits = 12; - break; - default: - return -EINVAL; - } - mutex_lock(&indio_dev->mlock); - addr = adis16260_addresses[chan->scan_index][1]; - ret = adis_read_reg_16(&st->adis, addr, &val16); - if (ret) { - mutex_unlock(&indio_dev->mlock); - return ret; - } - *val = (1 << bits) - 1; - mutex_unlock(&indio_dev->mlock); - return IIO_VAL_INT; - } - return -EINVAL; -} - -static int adis16260_write_raw(struct iio_dev *indio_dev, - struct iio_chan_spec const *chan, - int val, - int val2, - long mask) -{ - struct adis16260_state *st = iio_priv(indio_dev); - int bits = 12; - s16 val16; - u8 addr; - switch (mask) { - case IIO_CHAN_INFO_CALIBBIAS: - val16 = val & ((1 << bits) - 1); - addr = adis16260_addresses[chan->scan_index][0]; - return adis_write_reg_16(&st->adis, addr, val16); - case IIO_CHAN_INFO_CALIBSCALE: - val16 = val & ((1 << bits) - 1); - addr = adis16260_addresses[chan->scan_index][1]; - return adis_write_reg_16(&st->adis, addr, val16); - } - return -EINVAL; -} - -static struct attribute *adis16260_attributes[] = { - &iio_dev_attr_sampling_frequency.dev_attr.attr, - &iio_dev_attr_sampling_frequency_available.dev_attr.attr, - NULL -}; - -static const struct attribute_group adis16260_attribute_group = { - .attrs = adis16260_attributes, -}; - -static const struct iio_info adis16260_info = { - .attrs = &adis16260_attribute_group, - .read_raw = &adis16260_read_raw, - .write_raw = &adis16260_write_raw, - .update_scan_mode = adis_update_scan_mode, - .driver_module = THIS_MODULE, -}; - -static const char * const adis1620_status_error_msgs[] = { - [ADIS16260_DIAG_STAT_FLASH_CHK_BIT] = "Flash checksum error", - [ADIS16260_DIAG_STAT_SELF_TEST_BIT] = "Self test error", - [ADIS16260_DIAG_STAT_OVERFLOW_BIT] = "Sensor overrange", - [ADIS16260_DIAG_STAT_SPI_FAIL_BIT] = "SPI failure", - [ADIS16260_DIAG_STAT_FLASH_UPT_BIT] = "Flash update failed", - [ADIS16260_DIAG_STAT_POWER_HIGH_BIT] = "Power supply above 5.25", - [ADIS16260_DIAG_STAT_POWER_LOW_BIT] = "Power supply below 4.75", -}; - -static const struct adis_data adis16260_data = { - .write_delay = 30, - .read_delay = 30, - .msc_ctrl_reg = ADIS16260_MSC_CTRL, - .glob_cmd_reg = ADIS16260_GLOB_CMD, - .diag_stat_reg = ADIS16260_DIAG_STAT, - - .self_test_mask = ADIS16260_MSC_CTRL_MEM_TEST, - .startup_delay = ADIS16260_STARTUP_DELAY, - - .status_error_msgs = adis1620_status_error_msgs, - .status_error_mask = BIT(ADIS16260_DIAG_STAT_FLASH_CHK_BIT) | - BIT(ADIS16260_DIAG_STAT_SELF_TEST_BIT) | - BIT(ADIS16260_DIAG_STAT_OVERFLOW_BIT) | - BIT(ADIS16260_DIAG_STAT_SPI_FAIL_BIT) | - BIT(ADIS16260_DIAG_STAT_FLASH_UPT_BIT) | - BIT(ADIS16260_DIAG_STAT_POWER_HIGH_BIT) | - BIT(ADIS16260_DIAG_STAT_POWER_LOW_BIT), -}; - -static int adis16260_probe(struct spi_device *spi) -{ - int ret; - struct adis16260_platform_data *pd = spi->dev.platform_data; - struct adis16260_state *st; - struct iio_dev *indio_dev; - - /* setup the industrialio driver allocated elements */ - indio_dev = iio_device_alloc(sizeof(*st)); - if (indio_dev == NULL) { - ret = -ENOMEM; - goto error_ret; - } - st = iio_priv(indio_dev); - if (pd) - st->negate = pd->negate; - /* this is only used for removal purposes */ - spi_set_drvdata(spi, indio_dev); - - indio_dev->name = spi_get_device_id(spi)->name; - indio_dev->dev.parent = &spi->dev; - indio_dev->info = &adis16260_info; - indio_dev->num_channels - = ARRAY_SIZE(adis16260_channels_x); - if (pd && pd->direction) - switch (pd->direction) { - case 'x': - indio_dev->channels = adis16260_channels_x; - break; - case 'y': - indio_dev->channels = adis16260_channels_y; - break; - case 'z': - indio_dev->channels = adis16260_channels_z; - break; - default: - return -EINVAL; - } - else - indio_dev->channels = adis16260_channels_x; - indio_dev->num_channels = ARRAY_SIZE(adis16260_channels_x); - indio_dev->modes = INDIO_DIRECT_MODE; - - ret = adis_init(&st->adis, indio_dev, spi, &adis16260_data); - if (ret) - goto error_free_dev; - - ret = adis_setup_buffer_and_trigger(&st->adis, indio_dev, NULL); - if (ret) - goto error_free_dev; - - if (indio_dev->buffer) { - /* Set default scan mode */ - iio_scan_mask_set(indio_dev, indio_dev->buffer, - ADIS16260_SCAN_SUPPLY); - iio_scan_mask_set(indio_dev, indio_dev->buffer, - ADIS16260_SCAN_GYRO); - iio_scan_mask_set(indio_dev, indio_dev->buffer, - ADIS16260_SCAN_AUX_ADC); - iio_scan_mask_set(indio_dev, indio_dev->buffer, - ADIS16260_SCAN_TEMP); - iio_scan_mask_set(indio_dev, indio_dev->buffer, - ADIS16260_SCAN_ANGL); - } - - /* Get the device into a sane initial state */ - ret = adis_initial_startup(&st->adis); - if (ret) - goto error_cleanup_buffer_trigger; - ret = iio_device_register(indio_dev); - if (ret) - goto error_cleanup_buffer_trigger; - - return 0; - -error_cleanup_buffer_trigger: - adis_cleanup_buffer_and_trigger(&st->adis, indio_dev); -error_free_dev: - iio_device_free(indio_dev); -error_ret: - return ret; -} - -static int adis16260_remove(struct spi_device *spi) -{ - struct iio_dev *indio_dev = spi_get_drvdata(spi); - struct adis16260_state *st = iio_priv(indio_dev); - - iio_device_unregister(indio_dev); - adis16260_stop_device(indio_dev); - adis_cleanup_buffer_and_trigger(&st->adis, indio_dev); - iio_device_free(indio_dev); - - return 0; -} - -/* - * These parts do not need to be differentiated until someone adds - * support for the on chip filtering. - */ -static const struct spi_device_id adis16260_id[] = { - {"adis16260", 0}, - {"adis16265", 0}, - {"adis16250", 0}, - {"adis16255", 0}, - {"adis16251", 1}, - {} -}; -MODULE_DEVICE_TABLE(spi, adis16260_id); - -static struct spi_driver adis16260_driver = { - .driver = { - .name = "adis16260", - .owner = THIS_MODULE, - }, - .probe = adis16260_probe, - .remove = adis16260_remove, - .id_table = adis16260_id, -}; -module_spi_driver(adis16260_driver); - -MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>"); -MODULE_DESCRIPTION("Analog Devices ADIS16260/5 Digital Gyroscope Sensor"); -MODULE_LICENSE("GPL v2"); diff --git a/drivers/staging/iio/gyro/adis16260_platform_data.h b/drivers/staging/iio/gyro/adis16260_platform_data.h deleted file mode 100644 index 12802e97be9..00000000000 --- a/drivers/staging/iio/gyro/adis16260_platform_data.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * ADIS16260 Programmable Digital Gyroscope Sensor Driver Platform Data - * - * Based on adis16255.h Matthia Brugger <m_brugger&web.de> - * - * Copyright (C) 2010 Fraunhofer Institute for Integrated Circuits - * - * Licensed under the GPL-2 or later. - */ - -/** - * struct adis16260_platform_data - instance specific data - * @direction: x y or z - * @negate: flag to indicate value should be inverted. - **/ -struct adis16260_platform_data { - char direction; - unsigned negate:1; -}; diff --git a/drivers/staging/iio/light/isl29018.c b/drivers/staging/iio/light/isl29018.c index 82478a59e42..e4998e4d443 100644 --- a/drivers/staging/iio/light/isl29018.c +++ b/drivers/staging/iio/light/isl29018.c @@ -550,11 +550,10 @@ static int isl29018_probe(struct i2c_client *client, struct iio_dev *indio_dev; int err; - indio_dev = iio_device_alloc(sizeof(*chip)); + indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*chip)); if (indio_dev == NULL) { dev_err(&client->dev, "iio allocation fails\n"); - err = -ENOMEM; - goto exit; + return -ENOMEM; } chip = iio_priv(indio_dev); @@ -564,6 +563,7 @@ static int isl29018_probe(struct i2c_client *client, mutex_init(&chip->lock); chip->lux_scale = 1; + chip->lux_uscale = 0; chip->range = 1000; chip->adc_bit = 16; chip->suspended = false; @@ -572,12 +572,12 @@ static int isl29018_probe(struct i2c_client *client, if (IS_ERR(chip->regmap)) { err = PTR_ERR(chip->regmap); dev_err(chip->dev, "regmap initialization failed: %d\n", err); - goto exit; + return err; } err = isl29018_chip_init(chip); if (err) - goto exit_iio_free; + return err; indio_dev->info = &isl29108_info; indio_dev->channels = isl29018_channels; @@ -588,14 +588,10 @@ static int isl29018_probe(struct i2c_client *client, err = iio_device_register(indio_dev); if (err) { dev_err(&client->dev, "iio registration fails\n"); - goto exit_iio_free; + return err; } return 0; -exit_iio_free: - iio_device_free(indio_dev); -exit: - return err; } static int isl29018_remove(struct i2c_client *client) @@ -604,7 +600,6 @@ static int isl29018_remove(struct i2c_client *client) dev_dbg(&client->dev, "%s()\n", __func__); iio_device_unregister(indio_dev); - iio_device_free(indio_dev); return 0; } diff --git a/drivers/staging/iio/light/isl29028.c b/drivers/staging/iio/light/isl29028.c index 8bb0d03627f..6014625920b 100644 --- a/drivers/staging/iio/light/isl29028.c +++ b/drivers/staging/iio/light/isl29028.c @@ -482,7 +482,7 @@ static int isl29028_probe(struct i2c_client *client, struct iio_dev *indio_dev; int ret; - indio_dev = iio_device_alloc(sizeof(*chip)); + indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*chip)); if (!indio_dev) { dev_err(&client->dev, "iio allocation fails\n"); return -ENOMEM; @@ -498,13 +498,13 @@ static int isl29028_probe(struct i2c_client *client, if (IS_ERR(chip->regmap)) { ret = PTR_ERR(chip->regmap); dev_err(chip->dev, "regmap initialization failed: %d\n", ret); - goto exit_iio_free; + return ret; } ret = isl29028_chip_init(chip); if (ret < 0) { dev_err(chip->dev, "chip initialization failed: %d\n", ret); - goto exit_iio_free; + return ret; } indio_dev->info = &isl29028_info; @@ -517,13 +517,9 @@ static int isl29028_probe(struct i2c_client *client, if (ret < 0) { dev_err(chip->dev, "iio registration fails with error %d\n", ret); - goto exit_iio_free; + return ret; } return 0; - -exit_iio_free: - iio_device_free(indio_dev); - return ret; } static int isl29028_remove(struct i2c_client *client) @@ -531,7 +527,6 @@ static int isl29028_remove(struct i2c_client *client) struct iio_dev *indio_dev = i2c_get_clientdata(client); iio_device_unregister(indio_dev); - iio_device_free(indio_dev); return 0; } diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c index 86c6bf9d5dd..c3f3f539e78 100644 --- a/drivers/staging/iio/magnetometer/hmc5843.c +++ b/drivers/staging/iio/magnetometer/hmc5843.c @@ -20,12 +20,10 @@ */ #include <linux/module.h> -#include <linux/init.h> #include <linux/i2c.h> -#include <linux/slab.h> -#include <linux/types.h> #include <linux/iio/iio.h> #include <linux/iio/sysfs.h> +#include <linux/delay.h> #define HMC5843_CONFIG_REG_A 0x00 #define HMC5843_CONFIG_REG_B 0x01 @@ -42,9 +40,6 @@ #define HMC5883_DATA_OUT_Y_MSB_REG 0x07 #define HMC5883_DATA_OUT_Y_LSB_REG 0x08 #define HMC5843_STATUS_REG 0x09 -#define HMC5843_ID_REG_A 0x0A -#define HMC5843_ID_REG_B 0x0B -#define HMC5843_ID_REG_C 0x0C enum hmc5843_ids { HMC5843_ID, @@ -53,14 +48,6 @@ enum hmc5843_ids { }; /* - * Beware: identification of the HMC5883 is still "H43"; - * I2C address is also unchanged - */ -#define HMC5843_ID_REG_LENGTH 0x03 -#define HMC5843_ID_STRING "H43" -#define HMC5843_I2C_ADDRESS 0x1E - -/* * Range gain settings in (+-)Ga * Beware: HMC5843 and HMC5883 have different recommended sensor field * ranges; default corresponds to +-1.0 Ga and +-1.3 Ga, respectively @@ -185,14 +172,9 @@ static const char * const hmc5883_regval_to_sample_freq[] = { "0.75", "1.5", "3", "7.5", "15", "30", "75", }; -/* Addresses to scan: 0x1E */ -static const unsigned short normal_i2c[] = { HMC5843_I2C_ADDRESS, - I2C_CLIENT_END }; - /* Describe chip variants */ struct hmc5843_chip_info { const struct iio_chan_spec *channels; - int num_channels; const char * const *regval_to_sample_freq; const int *regval_to_input_field_mga; const int *regval_to_nanoscale; @@ -225,18 +207,29 @@ static int hmc5843_read_measurement(struct iio_dev *indio_dev, struct i2c_client *client = to_i2c_client(indio_dev->dev.parent); struct hmc5843_data *data = iio_priv(indio_dev); s32 result; + int tries = 150; mutex_lock(&data->lock); - result = i2c_smbus_read_byte_data(client, HMC5843_STATUS_REG); - while (!(result & HMC5843_DATA_READY)) - result = i2c_smbus_read_byte_data(client, HMC5843_STATUS_REG); + while (tries-- > 0) { + result = i2c_smbus_read_byte_data(client, + HMC5843_STATUS_REG); + if (result & HMC5843_DATA_READY) + break; + msleep(20); + } + + if (tries < 0) { + dev_err(&client->dev, "data not ready\n"); + mutex_unlock(&data->lock); + return -EIO; + } - result = i2c_smbus_read_word_data(client, address); + result = i2c_smbus_read_word_swapped(client, address); mutex_unlock(&data->lock); if (result < 0) return -EINVAL; - *val = (s16)swab16((u16)result); + *val = sign_extend32(result, 15); return IIO_VAL_INT; } @@ -559,14 +552,14 @@ static int hmc5843_read_raw(struct iio_dev *indio_dev, return -EINVAL; } -#define HMC5843_CHANNEL(axis, add) \ +#define HMC5843_CHANNEL(axis, addr) \ { \ .type = IIO_MAGN, \ .modified = 1, \ .channel2 = IIO_MOD_##axis, \ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \ - .address = add \ + .address = addr \ } static const struct iio_chan_spec hmc5843_channels[] = { @@ -597,7 +590,6 @@ static const struct attribute_group hmc5843_group = { static const struct hmc5843_chip_info hmc5843_chip_info_tbl[] = { [HMC5843_ID] = { .channels = hmc5843_channels, - .num_channels = ARRAY_SIZE(hmc5843_channels), .regval_to_sample_freq = hmc5843_regval_to_sample_freq, .regval_to_input_field_mga = hmc5843_regval_to_input_field_mga, @@ -605,7 +597,6 @@ static const struct hmc5843_chip_info hmc5843_chip_info_tbl[] = { }, [HMC5883_ID] = { .channels = hmc5883_channels, - .num_channels = ARRAY_SIZE(hmc5883_channels), .regval_to_sample_freq = hmc5883_regval_to_sample_freq, .regval_to_input_field_mga = hmc5883_regval_to_input_field_mga, @@ -613,7 +604,6 @@ static const struct hmc5843_chip_info hmc5843_chip_info_tbl[] = { }, [HMC5883L_ID] = { .channels = hmc5883_channels, - .num_channels = ARRAY_SIZE(hmc5883_channels), .regval_to_sample_freq = hmc5883_regval_to_sample_freq, .regval_to_input_field_mga = hmc5883l_regval_to_input_field_mga, @@ -621,25 +611,6 @@ static const struct hmc5843_chip_info hmc5843_chip_info_tbl[] = { }, }; -static int hmc5843_detect(struct i2c_client *client, - struct i2c_board_info *info) -{ - unsigned char id_str[HMC5843_ID_REG_LENGTH]; - - if (client->addr != HMC5843_I2C_ADDRESS) - return -ENODEV; - - if (i2c_smbus_read_i2c_block_data(client, HMC5843_ID_REG_A, - HMC5843_ID_REG_LENGTH, id_str) - != HMC5843_ID_REG_LENGTH) - return -ENODEV; - - if (0 != strncmp(id_str, HMC5843_ID_STRING, HMC5843_ID_REG_LENGTH)) - return -ENODEV; - - return 0; -} - /* Called when we have found a new HMC58X3 */ static void hmc5843_init_client(struct i2c_client *client, const struct i2c_device_id *id) @@ -649,7 +620,7 @@ static void hmc5843_init_client(struct i2c_client *client, data->variant = &hmc5843_chip_info_tbl[id->driver_data]; indio_dev->channels = data->variant->channels; - indio_dev->num_channels = data->variant->num_channels; + indio_dev->num_channels = 3; hmc5843_set_meas_conf(client, data->meas_conf); hmc5843_set_rate(client, data->rate); hmc5843_configure(client, data->operating_mode); @@ -756,8 +727,6 @@ static struct i2c_driver hmc5843_driver = { .id_table = hmc5843_id, .probe = hmc5843_probe, .remove = hmc5843_remove, - .detect = hmc5843_detect, - .address_list = normal_i2c, }; module_i2c_driver(hmc5843_driver); diff --git a/drivers/staging/iio/meter/ade7753.c b/drivers/staging/iio/meter/ade7753.c index e5943e2287c..74025fbae67 100644 --- a/drivers/staging/iio/meter/ade7753.c +++ b/drivers/staging/iio/meter/ade7753.c @@ -225,21 +225,6 @@ static int ade7753_reset(struct device *dev) return ade7753_spi_write_reg_16(dev, ADE7753_MODE, val); } -static ssize_t ade7753_write_reset(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t len) -{ - if (len < 1) - return -1; - switch (buf[0]) { - case '1': - case 'y': - case 'Y': - return ade7753_reset(dev); - } - return -1; -} - static IIO_DEV_ATTR_AENERGY(ade7753_read_24bit, ADE7753_AENERGY); static IIO_DEV_ATTR_LAENERGY(ade7753_read_24bit, ADE7753_LAENERGY); static IIO_DEV_ATTR_VAENERGY(ade7753_read_24bit, ADE7753_VAENERGY); @@ -458,8 +443,6 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO, ade7753_read_frequency, ade7753_write_frequency); -static IIO_DEV_ATTR_RESET(ade7753_write_reset); - static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("27900 14000 7000 3500"); static struct attribute *ade7753_attributes[] = { @@ -468,7 +451,6 @@ static struct attribute *ade7753_attributes[] = { &iio_const_attr_in_temp_scale.dev_attr.attr, &iio_dev_attr_sampling_frequency.dev_attr.attr, &iio_const_attr_sampling_frequency_available.dev_attr.attr, - &iio_dev_attr_reset.dev_attr.attr, &iio_dev_attr_phcal.dev_attr.attr, &iio_dev_attr_cfden.dev_attr.attr, &iio_dev_attr_aenergy.dev_attr.attr, diff --git a/drivers/staging/iio/meter/ade7754.c b/drivers/staging/iio/meter/ade7754.c index 7b6503bf9a7..f649ebe55a0 100644 --- a/drivers/staging/iio/meter/ade7754.c +++ b/drivers/staging/iio/meter/ade7754.c @@ -224,22 +224,6 @@ static int ade7754_reset(struct device *dev) return ade7754_spi_write_reg_8(dev, ADE7754_OPMODE, val); } - -static ssize_t ade7754_write_reset(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t len) -{ - if (len < 1) - return -1; - switch (buf[0]) { - case '1': - case 'y': - case 'Y': - return ade7754_reset(dev); - } - return -1; -} - static IIO_DEV_ATTR_AENERGY(ade7754_read_24bit, ADE7754_AENERGY); static IIO_DEV_ATTR_LAENERGY(ade7754_read_24bit, ADE7754_LAENERGY); static IIO_DEV_ATTR_VAENERGY(ade7754_read_24bit, ADE7754_VAENERGY); @@ -478,8 +462,6 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO, ade7754_read_frequency, ade7754_write_frequency); -static IIO_DEV_ATTR_RESET(ade7754_write_reset); - static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("26000 13000 65000 33000"); static struct attribute *ade7754_attributes[] = { @@ -488,7 +470,6 @@ static struct attribute *ade7754_attributes[] = { &iio_const_attr_in_temp_scale.dev_attr.attr, &iio_dev_attr_sampling_frequency.dev_attr.attr, &iio_const_attr_sampling_frequency_available.dev_attr.attr, - &iio_dev_attr_reset.dev_attr.attr, &iio_dev_attr_aenergy.dev_attr.attr, &iio_dev_attr_laenergy.dev_attr.attr, &iio_dev_attr_vaenergy.dev_attr.attr, diff --git a/drivers/staging/iio/meter/ade7758_core.c b/drivers/staging/iio/meter/ade7758_core.c index 8f5bcfab356..6005d4aab0c 100644 --- a/drivers/staging/iio/meter/ade7758_core.c +++ b/drivers/staging/iio/meter/ade7758_core.c @@ -313,21 +313,6 @@ static int ade7758_reset(struct device *dev) return ret; } -static ssize_t ade7758_write_reset(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t len) -{ - if (len < 1) - return -1; - switch (buf[0]) { - case '1': - case 'y': - case 'Y': - return ade7758_reset(dev); - } - return len; -} - static IIO_DEV_ATTR_VPEAK(S_IWUSR | S_IRUGO, ade7758_read_8bit, ade7758_write_8bit, @@ -591,8 +576,6 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO, ade7758_read_frequency, ade7758_write_frequency); -static IIO_DEV_ATTR_RESET(ade7758_write_reset); - static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("26040 13020 6510 3255"); static struct attribute *ade7758_attributes[] = { @@ -601,7 +584,6 @@ static struct attribute *ade7758_attributes[] = { &iio_const_attr_in_temp_scale.dev_attr.attr, &iio_dev_attr_sampling_frequency.dev_attr.attr, &iio_const_attr_sampling_frequency_available.dev_attr.attr, - &iio_dev_attr_reset.dev_attr.attr, &iio_dev_attr_awatthr.dev_attr.attr, &iio_dev_attr_bwatthr.dev_attr.attr, &iio_dev_attr_cwatthr.dev_attr.attr, diff --git a/drivers/staging/iio/meter/ade7758_ring.c b/drivers/staging/iio/meter/ade7758_ring.c index b29e2d5d993..7d5db717557 100644 --- a/drivers/staging/iio/meter/ade7758_ring.c +++ b/drivers/staging/iio/meter/ade7758_ring.c @@ -54,7 +54,7 @@ out: return ret; } -/* Whilst this makes a lot of calls to iio_sw_ring functions - it is to device +/* Whilst this makes a lot of calls to iio_sw_ring functions - it is too device * specific to be rolled into the core. */ static irqreturn_t ade7758_trigger_handler(int irq, void *p) diff --git a/drivers/staging/iio/meter/ade7759.c b/drivers/staging/iio/meter/ade7759.c index 17dc373e108..d214ac4932c 100644 --- a/drivers/staging/iio/meter/ade7759.c +++ b/drivers/staging/iio/meter/ade7759.c @@ -229,21 +229,6 @@ static int ade7759_reset(struct device *dev) return ret; } -static ssize_t ade7759_write_reset(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t len) -{ - if (len < 1) - return -1; - switch (buf[0]) { - case '1': - case 'y': - case 'Y': - return ade7759_reset(dev); - } - return -1; -} - static IIO_DEV_ATTR_AENERGY(ade7759_read_40bit, ADE7759_AENERGY); static IIO_DEV_ATTR_CFDEN(S_IWUSR | S_IRUGO, ade7759_read_16bit, @@ -418,8 +403,6 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO, ade7759_read_frequency, ade7759_write_frequency); -static IIO_DEV_ATTR_RESET(ade7759_write_reset); - static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("27900 14000 7000 3500"); static struct attribute *ade7759_attributes[] = { @@ -428,7 +411,6 @@ static struct attribute *ade7759_attributes[] = { &iio_const_attr_in_temp_scale.dev_attr.attr, &iio_dev_attr_sampling_frequency.dev_attr.attr, &iio_const_attr_sampling_frequency_available.dev_attr.attr, - &iio_dev_attr_reset.dev_attr.attr, &iio_dev_attr_phcal.dev_attr.attr, &iio_dev_attr_cfden.dev_attr.attr, &iio_dev_attr_aenergy.dev_attr.attr, diff --git a/drivers/staging/iio/meter/ade7854-spi.c b/drivers/staging/iio/meter/ade7854-spi.c index a802cf2491d..4c6d2041260 100644 --- a/drivers/staging/iio/meter/ade7854-spi.c +++ b/drivers/staging/iio/meter/ade7854-spi.c @@ -299,7 +299,7 @@ static int ade7854_spi_probe(struct spi_device *spi) if (ret) iio_device_free(indio_dev); - return 0; + return ret; } static int ade7854_spi_remove(struct spi_device *spi) diff --git a/drivers/staging/iio/meter/ade7854.c b/drivers/staging/iio/meter/ade7854.c index c642da84842..e8379c0f117 100644 --- a/drivers/staging/iio/meter/ade7854.c +++ b/drivers/staging/iio/meter/ade7854.c @@ -186,22 +186,6 @@ static int ade7854_reset(struct device *dev) return st->write_reg_16(dev, ADE7854_CONFIG, val); } - -static ssize_t ade7854_write_reset(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t len) -{ - if (len < 1) - return -1; - switch (buf[0]) { - case '1': - case 'y': - case 'Y': - return ade7854_reset(dev); - } - return -1; -} - static IIO_DEV_ATTR_AIGAIN(S_IWUSR | S_IRUGO, ade7854_read_24bit, ade7854_write_24bit, @@ -468,8 +452,6 @@ err_ret: return ret; } -static IIO_DEV_ATTR_RESET(ade7854_write_reset); - static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("8000"); static IIO_CONST_ATTR(name, "ade7854"); @@ -515,7 +497,6 @@ static struct attribute *ade7854_attributes[] = { &iio_dev_attr_bvahr.dev_attr.attr, &iio_dev_attr_cvahr.dev_attr.attr, &iio_const_attr_sampling_frequency_available.dev_attr.attr, - &iio_dev_attr_reset.dev_attr.attr, &iio_const_attr_name.dev_attr.attr, &iio_dev_attr_vpeak.dev_attr.attr, &iio_dev_attr_ipeak.dev_attr.attr, diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c index 0d3356d4b7d..dcdadbbcf7e 100644 --- a/drivers/staging/iio/resolver/ad2s1210.c +++ b/drivers/staging/iio/resolver/ad2s1210.c @@ -192,21 +192,6 @@ static inline int ad2s1210_soft_reset(struct ad2s1210_state *st) return ad2s1210_config_write(st, 0x0); } -static ssize_t ad2s1210_store_softreset(struct device *dev, - struct device_attribute *attr, - const char *buf, - size_t len) -{ - struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev)); - int ret; - - mutex_lock(&st->lock); - ret = ad2s1210_soft_reset(st); - mutex_unlock(&st->lock); - - return ret < 0 ? ret : len; -} - static ssize_t ad2s1210_show_fclkin(struct device *dev, struct device_attribute *attr, char *buf) @@ -536,8 +521,6 @@ error_ret: return ret; } -static IIO_DEVICE_ATTR(reset, S_IWUSR, - NULL, ad2s1210_store_softreset, 0); static IIO_DEVICE_ATTR(fclkin, S_IRUGO | S_IWUSR, ad2s1210_show_fclkin, ad2s1210_store_fclkin, 0); static IIO_DEVICE_ATTR(fexcit, S_IRUGO | S_IWUSR, @@ -587,7 +570,6 @@ static const struct iio_chan_spec ad2s1210_channels[] = { }; static struct attribute *ad2s1210_attributes[] = { - &iio_dev_attr_reset.dev_attr.attr, &iio_dev_attr_fclkin.dev_attr.attr, &iio_dev_attr_fexcit.dev_attr.attr, &iio_dev_attr_control.dev_attr.attr, |