diff options
| -rw-r--r-- | drivers/iio/accel/bma180.c | 4 | ||||
| -rw-r--r-- | drivers/iio/adc/at91_adc.c | 11 | ||||
| -rw-r--r-- | drivers/iio/buffer_cb.c | 2 | ||||
| -rw-r--r-- | drivers/iio/dac/mcp4725.c | 12 | ||||
| -rw-r--r-- | drivers/iio/iio_core.h | 4 | ||||
| -rw-r--r-- | drivers/iio/industrialio-buffer.c | 30 | ||||
| -rw-r--r-- | drivers/iio/industrialio-core.c | 31 | ||||
| -rw-r--r-- | drivers/iio/industrialio-event.c | 20 | ||||
| -rw-r--r-- | drivers/iio/temperature/tmp006.c | 6 | ||||
| -rw-r--r-- | drivers/staging/iio/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/staging/iio/light/isl29018.c | 1 | ||||
| -rw-r--r-- | drivers/staging/iio/magnetometer/hmc5843.c | 2 | ||||
| -rw-r--r-- | drivers/staging/iio/meter/ade7854-spi.c | 2 |
13 files changed, 91 insertions, 36 deletions
diff --git a/drivers/iio/accel/bma180.c b/drivers/iio/accel/bma180.c index 12e32e6b4103..81e3dc260993 100644 --- a/drivers/iio/accel/bma180.c +++ b/drivers/iio/accel/bma180.c | |||
| @@ -620,7 +620,7 @@ static int bma180_remove(struct i2c_client *client) | |||
| 620 | #ifdef CONFIG_PM_SLEEP | 620 | #ifdef CONFIG_PM_SLEEP |
| 621 | static int bma180_suspend(struct device *dev) | 621 | static int bma180_suspend(struct device *dev) |
| 622 | { | 622 | { |
| 623 | struct iio_dev *indio_dev = dev_to_iio_dev(dev); | 623 | struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); |
| 624 | struct bma180_data *data = iio_priv(indio_dev); | 624 | struct bma180_data *data = iio_priv(indio_dev); |
| 625 | int ret; | 625 | int ret; |
| 626 | 626 | ||
| @@ -633,7 +633,7 @@ static int bma180_suspend(struct device *dev) | |||
| 633 | 633 | ||
| 634 | static int bma180_resume(struct device *dev) | 634 | static int bma180_resume(struct device *dev) |
| 635 | { | 635 | { |
| 636 | struct iio_dev *indio_dev = dev_to_iio_dev(dev); | 636 | struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); |
| 637 | struct bma180_data *data = iio_priv(indio_dev); | 637 | struct bma180_data *data = iio_priv(indio_dev); |
| 638 | int ret; | 638 | int ret; |
| 639 | 639 | ||
diff --git a/drivers/iio/adc/at91_adc.c b/drivers/iio/adc/at91_adc.c index 84be63bdf038..0f16b553e063 100644 --- a/drivers/iio/adc/at91_adc.c +++ b/drivers/iio/adc/at91_adc.c | |||
| @@ -556,7 +556,7 @@ static const struct iio_info at91_adc_info = { | |||
| 556 | 556 | ||
| 557 | static int at91_adc_probe(struct platform_device *pdev) | 557 | static int at91_adc_probe(struct platform_device *pdev) |
| 558 | { | 558 | { |
| 559 | unsigned int prsc, mstrclk, ticks, adc_clk, shtim; | 559 | unsigned int prsc, mstrclk, ticks, adc_clk, adc_clk_khz, shtim; |
| 560 | int ret; | 560 | int ret; |
| 561 | struct iio_dev *idev; | 561 | struct iio_dev *idev; |
| 562 | struct at91_adc_state *st; | 562 | struct at91_adc_state *st; |
| @@ -649,6 +649,7 @@ static int at91_adc_probe(struct platform_device *pdev) | |||
| 649 | */ | 649 | */ |
| 650 | mstrclk = clk_get_rate(st->clk); | 650 | mstrclk = clk_get_rate(st->clk); |
| 651 | adc_clk = clk_get_rate(st->adc_clk); | 651 | adc_clk = clk_get_rate(st->adc_clk); |
| 652 | adc_clk_khz = adc_clk / 1000; | ||
| 652 | prsc = (mstrclk / (2 * adc_clk)) - 1; | 653 | prsc = (mstrclk / (2 * adc_clk)) - 1; |
| 653 | 654 | ||
| 654 | if (!st->startup_time) { | 655 | if (!st->startup_time) { |
| @@ -662,15 +663,15 @@ static int at91_adc_probe(struct platform_device *pdev) | |||
| 662 | * defined in the electrical characteristics of the board, divided by 8. | 663 | * defined in the electrical characteristics of the board, divided by 8. |
| 663 | * The formula thus is : Startup Time = (ticks + 1) * 8 / ADC Clock | 664 | * The formula thus is : Startup Time = (ticks + 1) * 8 / ADC Clock |
| 664 | */ | 665 | */ |
| 665 | ticks = round_up((st->startup_time * adc_clk / | 666 | ticks = round_up((st->startup_time * adc_clk_khz / |
| 666 | 1000000) - 1, 8) / 8; | 667 | 1000) - 1, 8) / 8; |
| 667 | /* | 668 | /* |
| 668 | * a minimal Sample and Hold Time is necessary for the ADC to guarantee | 669 | * a minimal Sample and Hold Time is necessary for the ADC to guarantee |
| 669 | * the best converted final value between two channels selection | 670 | * the best converted final value between two channels selection |
| 670 | * The formula thus is : Sample and Hold Time = (shtim + 1) / ADCClock | 671 | * The formula thus is : Sample and Hold Time = (shtim + 1) / ADCClock |
| 671 | */ | 672 | */ |
| 672 | shtim = round_up((st->sample_hold_time * adc_clk / | 673 | shtim = round_up((st->sample_hold_time * adc_clk_khz / |
| 673 | 1000000) - 1, 1); | 674 | 1000) - 1, 1); |
| 674 | 675 | ||
| 675 | reg = AT91_ADC_PRESCAL_(prsc) & st->registers->mr_prescal_mask; | 676 | reg = AT91_ADC_PRESCAL_(prsc) & st->registers->mr_prescal_mask; |
| 676 | reg |= AT91_ADC_STARTUP_(ticks) & st->registers->mr_startup_mask; | 677 | reg |= AT91_ADC_STARTUP_(ticks) & st->registers->mr_startup_mask; |
diff --git a/drivers/iio/buffer_cb.c b/drivers/iio/buffer_cb.c index 9d19ba74f22b..415f3c6efd72 100644 --- a/drivers/iio/buffer_cb.c +++ b/drivers/iio/buffer_cb.c | |||
| @@ -41,6 +41,8 @@ struct iio_cb_buffer *iio_channel_get_all_cb(struct device *dev, | |||
| 41 | goto error_ret; | 41 | goto error_ret; |
| 42 | } | 42 | } |
| 43 | 43 | ||
| 44 | iio_buffer_init(&cb_buff->buffer); | ||
| 45 | |||
| 44 | cb_buff->private = private; | 46 | cb_buff->private = private; |
| 45 | cb_buff->cb = cb; | 47 | cb_buff->cb = cb; |
| 46 | cb_buff->buffer.access = &iio_cb_access; | 48 | cb_buff->buffer.access = &iio_cb_access; |
diff --git a/drivers/iio/dac/mcp4725.c b/drivers/iio/dac/mcp4725.c index 1f4a48e6a82c..1397b6e0e414 100644 --- a/drivers/iio/dac/mcp4725.c +++ b/drivers/iio/dac/mcp4725.c | |||
| @@ -37,21 +37,21 @@ struct mcp4725_data { | |||
| 37 | 37 | ||
| 38 | static int mcp4725_suspend(struct device *dev) | 38 | static int mcp4725_suspend(struct device *dev) |
| 39 | { | 39 | { |
| 40 | struct iio_dev *indio_dev = dev_to_iio_dev(dev); | 40 | struct mcp4725_data *data = iio_priv(i2c_get_clientdata( |
| 41 | struct mcp4725_data *data = iio_priv(indio_dev); | 41 | to_i2c_client(dev))); |
| 42 | u8 outbuf[2]; | 42 | u8 outbuf[2]; |
| 43 | 43 | ||
| 44 | outbuf[0] = (data->powerdown_mode + 1) << 4; | 44 | outbuf[0] = (data->powerdown_mode + 1) << 4; |
| 45 | outbuf[1] = 0; | 45 | outbuf[1] = 0; |
| 46 | data->powerdown = true; | 46 | data->powerdown = true; |
| 47 | 47 | ||
| 48 | return i2c_master_send(to_i2c_client(dev), outbuf, 2); | 48 | return i2c_master_send(data->client, outbuf, 2); |
| 49 | } | 49 | } |
| 50 | 50 | ||
| 51 | static int mcp4725_resume(struct device *dev) | 51 | static int mcp4725_resume(struct device *dev) |
| 52 | { | 52 | { |
| 53 | struct iio_dev *indio_dev = dev_to_iio_dev(dev); | 53 | struct mcp4725_data *data = iio_priv(i2c_get_clientdata( |
| 54 | struct mcp4725_data *data = iio_priv(indio_dev); | 54 | to_i2c_client(dev))); |
| 55 | u8 outbuf[2]; | 55 | u8 outbuf[2]; |
| 56 | 56 | ||
| 57 | /* restore previous DAC value */ | 57 | /* restore previous DAC value */ |
| @@ -59,7 +59,7 @@ static int mcp4725_resume(struct device *dev) | |||
| 59 | outbuf[1] = data->dac_value & 0xff; | 59 | outbuf[1] = data->dac_value & 0xff; |
| 60 | data->powerdown = false; | 60 | data->powerdown = false; |
| 61 | 61 | ||
| 62 | return i2c_master_send(to_i2c_client(dev), outbuf, 2); | 62 | return i2c_master_send(data->client, outbuf, 2); |
| 63 | } | 63 | } |
| 64 | 64 | ||
| 65 | #ifdef CONFIG_PM_SLEEP | 65 | #ifdef CONFIG_PM_SLEEP |
diff --git a/drivers/iio/iio_core.h b/drivers/iio/iio_core.h index 05c1b74502a3..9b32253b824b 100644 --- a/drivers/iio/iio_core.h +++ b/drivers/iio/iio_core.h | |||
| @@ -49,11 +49,15 @@ ssize_t iio_buffer_read_first_n_outer(struct file *filp, char __user *buf, | |||
| 49 | #define iio_buffer_poll_addr (&iio_buffer_poll) | 49 | #define iio_buffer_poll_addr (&iio_buffer_poll) |
| 50 | #define iio_buffer_read_first_n_outer_addr (&iio_buffer_read_first_n_outer) | 50 | #define iio_buffer_read_first_n_outer_addr (&iio_buffer_read_first_n_outer) |
| 51 | 51 | ||
| 52 | void iio_disable_all_buffers(struct iio_dev *indio_dev); | ||
| 53 | |||
| 52 | #else | 54 | #else |
| 53 | 55 | ||
| 54 | #define iio_buffer_poll_addr NULL | 56 | #define iio_buffer_poll_addr NULL |
| 55 | #define iio_buffer_read_first_n_outer_addr NULL | 57 | #define iio_buffer_read_first_n_outer_addr NULL |
| 56 | 58 | ||
| 59 | static inline void iio_disable_all_buffers(struct iio_dev *indio_dev) {} | ||
| 60 | |||
| 57 | #endif | 61 | #endif |
| 58 | 62 | ||
| 59 | int iio_device_register_eventset(struct iio_dev *indio_dev); | 63 | int iio_device_register_eventset(struct iio_dev *indio_dev); |
diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c index e73033f3839a..2710f7245c3b 100644 --- a/drivers/iio/industrialio-buffer.c +++ b/drivers/iio/industrialio-buffer.c | |||
| @@ -460,6 +460,25 @@ static int iio_compute_scan_bytes(struct iio_dev *indio_dev, const long *mask, | |||
| 460 | return bytes; | 460 | return bytes; |
| 461 | } | 461 | } |
| 462 | 462 | ||
| 463 | void iio_disable_all_buffers(struct iio_dev *indio_dev) | ||
| 464 | { | ||
| 465 | struct iio_buffer *buffer, *_buffer; | ||
| 466 | |||
| 467 | if (list_empty(&indio_dev->buffer_list)) | ||
| 468 | return; | ||
| 469 | |||
| 470 | if (indio_dev->setup_ops->predisable) | ||
| 471 | indio_dev->setup_ops->predisable(indio_dev); | ||
| 472 | |||
| 473 | list_for_each_entry_safe(buffer, _buffer, | ||
| 474 | &indio_dev->buffer_list, buffer_list) | ||
| 475 | list_del_init(&buffer->buffer_list); | ||
| 476 | |||
| 477 | indio_dev->currentmode = INDIO_DIRECT_MODE; | ||
| 478 | if (indio_dev->setup_ops->postdisable) | ||
| 479 | indio_dev->setup_ops->postdisable(indio_dev); | ||
| 480 | } | ||
| 481 | |||
| 463 | int iio_update_buffers(struct iio_dev *indio_dev, | 482 | int iio_update_buffers(struct iio_dev *indio_dev, |
| 464 | struct iio_buffer *insert_buffer, | 483 | struct iio_buffer *insert_buffer, |
| 465 | struct iio_buffer *remove_buffer) | 484 | struct iio_buffer *remove_buffer) |
| @@ -528,8 +547,15 @@ int iio_update_buffers(struct iio_dev *indio_dev, | |||
| 528 | * Note can only occur when adding a buffer. | 547 | * Note can only occur when adding a buffer. |
| 529 | */ | 548 | */ |
| 530 | list_del(&insert_buffer->buffer_list); | 549 | list_del(&insert_buffer->buffer_list); |
| 531 | indio_dev->active_scan_mask = old_mask; | 550 | if (old_mask) { |
| 532 | success = -EINVAL; | 551 | indio_dev->active_scan_mask = old_mask; |
| 552 | success = -EINVAL; | ||
| 553 | } | ||
| 554 | else { | ||
| 555 | kfree(compound_mask); | ||
| 556 | ret = -EINVAL; | ||
| 557 | goto error_ret; | ||
| 558 | } | ||
| 533 | } | 559 | } |
| 534 | } else { | 560 | } else { |
| 535 | indio_dev->active_scan_mask = compound_mask; | 561 | indio_dev->active_scan_mask = compound_mask; |
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c index 97f0297b120f..8e84cd522e49 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c | |||
| @@ -848,8 +848,6 @@ static void iio_device_unregister_sysfs(struct iio_dev *indio_dev) | |||
| 848 | static void iio_dev_release(struct device *device) | 848 | static void iio_dev_release(struct device *device) |
| 849 | { | 849 | { |
| 850 | struct iio_dev *indio_dev = dev_to_iio_dev(device); | 850 | struct iio_dev *indio_dev = dev_to_iio_dev(device); |
| 851 | if (indio_dev->chrdev.dev) | ||
| 852 | cdev_del(&indio_dev->chrdev); | ||
| 853 | if (indio_dev->modes & INDIO_BUFFER_TRIGGERED) | 851 | if (indio_dev->modes & INDIO_BUFFER_TRIGGERED) |
| 854 | iio_device_unregister_trigger_consumer(indio_dev); | 852 | iio_device_unregister_trigger_consumer(indio_dev); |
| 855 | iio_device_unregister_eventset(indio_dev); | 853 | iio_device_unregister_eventset(indio_dev); |
| @@ -970,6 +968,8 @@ static int iio_chrdev_open(struct inode *inode, struct file *filp) | |||
| 970 | if (test_and_set_bit(IIO_BUSY_BIT_POS, &indio_dev->flags)) | 968 | if (test_and_set_bit(IIO_BUSY_BIT_POS, &indio_dev->flags)) |
| 971 | return -EBUSY; | 969 | return -EBUSY; |
| 972 | 970 | ||
| 971 | iio_device_get(indio_dev); | ||
| 972 | |||
| 973 | filp->private_data = indio_dev; | 973 | filp->private_data = indio_dev; |
| 974 | 974 | ||
| 975 | return 0; | 975 | return 0; |
| @@ -983,6 +983,8 @@ static int iio_chrdev_release(struct inode *inode, struct file *filp) | |||
| 983 | struct iio_dev *indio_dev = container_of(inode->i_cdev, | 983 | struct iio_dev *indio_dev = container_of(inode->i_cdev, |
| 984 | struct iio_dev, chrdev); | 984 | struct iio_dev, chrdev); |
| 985 | clear_bit(IIO_BUSY_BIT_POS, &indio_dev->flags); | 985 | clear_bit(IIO_BUSY_BIT_POS, &indio_dev->flags); |
| 986 | iio_device_put(indio_dev); | ||
| 987 | |||
| 986 | return 0; | 988 | return 0; |
| 987 | } | 989 | } |
| 988 | 990 | ||
| @@ -1052,18 +1054,20 @@ int iio_device_register(struct iio_dev *indio_dev) | |||
| 1052 | indio_dev->setup_ops == NULL) | 1054 | indio_dev->setup_ops == NULL) |
| 1053 | indio_dev->setup_ops = &noop_ring_setup_ops; | 1055 | indio_dev->setup_ops = &noop_ring_setup_ops; |
| 1054 | 1056 | ||
| 1055 | ret = device_add(&indio_dev->dev); | ||
| 1056 | if (ret < 0) | ||
| 1057 | goto error_unreg_eventset; | ||
| 1058 | cdev_init(&indio_dev->chrdev, &iio_buffer_fileops); | 1057 | cdev_init(&indio_dev->chrdev, &iio_buffer_fileops); |
| 1059 | indio_dev->chrdev.owner = indio_dev->info->driver_module; | 1058 | indio_dev->chrdev.owner = indio_dev->info->driver_module; |
| 1059 | indio_dev->chrdev.kobj.parent = &indio_dev->dev.kobj; | ||
| 1060 | ret = cdev_add(&indio_dev->chrdev, indio_dev->dev.devt, 1); | 1060 | ret = cdev_add(&indio_dev->chrdev, indio_dev->dev.devt, 1); |
| 1061 | if (ret < 0) | 1061 | if (ret < 0) |
| 1062 | goto error_del_device; | 1062 | goto error_unreg_eventset; |
| 1063 | return 0; | ||
| 1064 | 1063 | ||
| 1065 | error_del_device: | 1064 | ret = device_add(&indio_dev->dev); |
| 1066 | device_del(&indio_dev->dev); | 1065 | if (ret < 0) |
| 1066 | goto error_cdev_del; | ||
| 1067 | |||
| 1068 | return 0; | ||
| 1069 | error_cdev_del: | ||
| 1070 | cdev_del(&indio_dev->chrdev); | ||
| 1067 | error_unreg_eventset: | 1071 | error_unreg_eventset: |
| 1068 | iio_device_unregister_eventset(indio_dev); | 1072 | iio_device_unregister_eventset(indio_dev); |
| 1069 | error_free_sysfs: | 1073 | error_free_sysfs: |
| @@ -1078,9 +1082,16 @@ EXPORT_SYMBOL(iio_device_register); | |||
| 1078 | void iio_device_unregister(struct iio_dev *indio_dev) | 1082 | void iio_device_unregister(struct iio_dev *indio_dev) |
| 1079 | { | 1083 | { |
| 1080 | mutex_lock(&indio_dev->info_exist_lock); | 1084 | mutex_lock(&indio_dev->info_exist_lock); |
| 1085 | |||
| 1086 | device_del(&indio_dev->dev); | ||
| 1087 | |||
| 1088 | if (indio_dev->chrdev.dev) | ||
| 1089 | cdev_del(&indio_dev->chrdev); | ||
| 1090 | |||
| 1091 | iio_disable_all_buffers(indio_dev); | ||
| 1092 | |||
| 1081 | indio_dev->info = NULL; | 1093 | indio_dev->info = NULL; |
| 1082 | mutex_unlock(&indio_dev->info_exist_lock); | 1094 | mutex_unlock(&indio_dev->info_exist_lock); |
| 1083 | device_del(&indio_dev->dev); | ||
| 1084 | } | 1095 | } |
| 1085 | EXPORT_SYMBOL(iio_device_unregister); | 1096 | EXPORT_SYMBOL(iio_device_unregister); |
| 1086 | subsys_initcall(iio_init); | 1097 | subsys_initcall(iio_init); |
diff --git a/drivers/iio/industrialio-event.c b/drivers/iio/industrialio-event.c index 10aa9ef86cec..6be65ef5faa9 100644 --- a/drivers/iio/industrialio-event.c +++ b/drivers/iio/industrialio-event.c | |||
| @@ -72,7 +72,8 @@ EXPORT_SYMBOL(iio_push_event); | |||
| 72 | static unsigned int iio_event_poll(struct file *filep, | 72 | static unsigned int iio_event_poll(struct file *filep, |
| 73 | struct poll_table_struct *wait) | 73 | struct poll_table_struct *wait) |
| 74 | { | 74 | { |
| 75 | struct iio_event_interface *ev_int = filep->private_data; | 75 | struct iio_dev *indio_dev = filep->private_data; |
| 76 | struct iio_event_interface *ev_int = indio_dev->event_interface; | ||
| 76 | unsigned int events = 0; | 77 | unsigned int events = 0; |
| 77 | 78 | ||
| 78 | poll_wait(filep, &ev_int->wait, wait); | 79 | poll_wait(filep, &ev_int->wait, wait); |
| @@ -90,7 +91,8 @@ static ssize_t iio_event_chrdev_read(struct file *filep, | |||
| 90 | size_t count, | 91 | size_t count, |
| 91 | loff_t *f_ps) | 92 | loff_t *f_ps) |
| 92 | { | 93 | { |
| 93 | struct iio_event_interface *ev_int = filep->private_data; | 94 | struct iio_dev *indio_dev = filep->private_data; |
| 95 | struct iio_event_interface *ev_int = indio_dev->event_interface; | ||
| 94 | unsigned int copied; | 96 | unsigned int copied; |
| 95 | int ret; | 97 | int ret; |
| 96 | 98 | ||
| @@ -121,7 +123,8 @@ error_unlock: | |||
| 121 | 123 | ||
| 122 | static int iio_event_chrdev_release(struct inode *inode, struct file *filep) | 124 | static int iio_event_chrdev_release(struct inode *inode, struct file *filep) |
| 123 | { | 125 | { |
| 124 | struct iio_event_interface *ev_int = filep->private_data; | 126 | struct iio_dev *indio_dev = filep->private_data; |
| 127 | struct iio_event_interface *ev_int = indio_dev->event_interface; | ||
| 125 | 128 | ||
| 126 | spin_lock_irq(&ev_int->wait.lock); | 129 | spin_lock_irq(&ev_int->wait.lock); |
| 127 | __clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags); | 130 | __clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags); |
| @@ -133,6 +136,8 @@ static int iio_event_chrdev_release(struct inode *inode, struct file *filep) | |||
| 133 | kfifo_reset_out(&ev_int->det_events); | 136 | kfifo_reset_out(&ev_int->det_events); |
| 134 | spin_unlock_irq(&ev_int->wait.lock); | 137 | spin_unlock_irq(&ev_int->wait.lock); |
| 135 | 138 | ||
| 139 | iio_device_put(indio_dev); | ||
| 140 | |||
| 136 | return 0; | 141 | return 0; |
| 137 | } | 142 | } |
| 138 | 143 | ||
| @@ -158,12 +163,15 @@ int iio_event_getfd(struct iio_dev *indio_dev) | |||
| 158 | return -EBUSY; | 163 | return -EBUSY; |
| 159 | } | 164 | } |
| 160 | spin_unlock_irq(&ev_int->wait.lock); | 165 | spin_unlock_irq(&ev_int->wait.lock); |
| 161 | fd = anon_inode_getfd("iio:event", | 166 | iio_device_get(indio_dev); |
| 162 | &iio_event_chrdev_fileops, ev_int, O_RDONLY); | 167 | |
| 168 | fd = anon_inode_getfd("iio:event", &iio_event_chrdev_fileops, | ||
| 169 | indio_dev, O_RDONLY); | ||
| 163 | if (fd < 0) { | 170 | if (fd < 0) { |
| 164 | spin_lock_irq(&ev_int->wait.lock); | 171 | spin_lock_irq(&ev_int->wait.lock); |
| 165 | __clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags); | 172 | __clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags); |
| 166 | spin_unlock_irq(&ev_int->wait.lock); | 173 | spin_unlock_irq(&ev_int->wait.lock); |
| 174 | iio_device_put(indio_dev); | ||
| 167 | } | 175 | } |
| 168 | return fd; | 176 | return fd; |
| 169 | } | 177 | } |
| @@ -276,7 +284,7 @@ static int iio_device_add_event_sysfs(struct iio_dev *indio_dev, | |||
| 276 | goto error_ret; | 284 | goto error_ret; |
| 277 | } | 285 | } |
| 278 | if (chan->modified) | 286 | if (chan->modified) |
| 279 | mask = IIO_MOD_EVENT_CODE(chan->type, 0, chan->channel, | 287 | mask = IIO_MOD_EVENT_CODE(chan->type, 0, chan->channel2, |
| 280 | i/IIO_EV_DIR_MAX, | 288 | i/IIO_EV_DIR_MAX, |
| 281 | i%IIO_EV_DIR_MAX); | 289 | i%IIO_EV_DIR_MAX); |
| 282 | else if (chan->differential) | 290 | else if (chan->differential) |
diff --git a/drivers/iio/temperature/tmp006.c b/drivers/iio/temperature/tmp006.c index 64ccde3f1f7a..6d63883da1ab 100644 --- a/drivers/iio/temperature/tmp006.c +++ b/drivers/iio/temperature/tmp006.c | |||
| @@ -255,12 +255,14 @@ static int tmp006_remove(struct i2c_client *client) | |||
| 255 | #ifdef CONFIG_PM_SLEEP | 255 | #ifdef CONFIG_PM_SLEEP |
| 256 | static int tmp006_suspend(struct device *dev) | 256 | static int tmp006_suspend(struct device *dev) |
| 257 | { | 257 | { |
| 258 | return tmp006_powerdown(iio_priv(dev_to_iio_dev(dev))); | 258 | struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); |
| 259 | return tmp006_powerdown(iio_priv(indio_dev)); | ||
| 259 | } | 260 | } |
| 260 | 261 | ||
| 261 | static int tmp006_resume(struct device *dev) | 262 | static int tmp006_resume(struct device *dev) |
| 262 | { | 263 | { |
| 263 | struct tmp006_data *data = iio_priv(dev_to_iio_dev(dev)); | 264 | struct tmp006_data *data = iio_priv(i2c_get_clientdata( |
| 265 | to_i2c_client(dev))); | ||
| 264 | return i2c_smbus_write_word_swapped(data->client, TMP006_CONFIG, | 266 | return i2c_smbus_write_word_swapped(data->client, TMP006_CONFIG, |
| 265 | data->config | TMP006_CONFIG_MOD_MASK); | 267 | data->config | TMP006_CONFIG_MOD_MASK); |
| 266 | } | 268 | } |
diff --git a/drivers/staging/iio/Kconfig b/drivers/staging/iio/Kconfig index db4d6dc03243..b36feb080cba 100644 --- a/drivers/staging/iio/Kconfig +++ b/drivers/staging/iio/Kconfig | |||
| @@ -37,7 +37,7 @@ config IIO_SIMPLE_DUMMY_EVENTS | |||
| 37 | 37 | ||
| 38 | config IIO_SIMPLE_DUMMY_BUFFER | 38 | config IIO_SIMPLE_DUMMY_BUFFER |
| 39 | boolean "Buffered capture support" | 39 | boolean "Buffered capture support" |
| 40 | depends on IIO_KFIFO_BUF | 40 | select IIO_KFIFO_BUF |
| 41 | help | 41 | help |
| 42 | Add buffered data capture to the simple dummy driver. | 42 | Add buffered data capture to the simple dummy driver. |
| 43 | 43 | ||
diff --git a/drivers/staging/iio/light/isl29018.c b/drivers/staging/iio/light/isl29018.c index 351936c3efd6..e4998e4d4434 100644 --- a/drivers/staging/iio/light/isl29018.c +++ b/drivers/staging/iio/light/isl29018.c | |||
| @@ -563,6 +563,7 @@ static int isl29018_probe(struct i2c_client *client, | |||
| 563 | mutex_init(&chip->lock); | 563 | mutex_init(&chip->lock); |
| 564 | 564 | ||
| 565 | chip->lux_scale = 1; | 565 | chip->lux_scale = 1; |
| 566 | chip->lux_uscale = 0; | ||
| 566 | chip->range = 1000; | 567 | chip->range = 1000; |
| 567 | chip->adc_bit = 16; | 568 | chip->adc_bit = 16; |
| 568 | chip->suspended = false; | 569 | chip->suspended = false; |
diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c index d2748c329eae..c3f3f539e787 100644 --- a/drivers/staging/iio/magnetometer/hmc5843.c +++ b/drivers/staging/iio/magnetometer/hmc5843.c | |||
| @@ -229,7 +229,7 @@ static int hmc5843_read_measurement(struct iio_dev *indio_dev, | |||
| 229 | if (result < 0) | 229 | if (result < 0) |
| 230 | return -EINVAL; | 230 | return -EINVAL; |
| 231 | 231 | ||
| 232 | *val = result; | 232 | *val = sign_extend32(result, 15); |
| 233 | return IIO_VAL_INT; | 233 | return IIO_VAL_INT; |
| 234 | } | 234 | } |
| 235 | 235 | ||
diff --git a/drivers/staging/iio/meter/ade7854-spi.c b/drivers/staging/iio/meter/ade7854-spi.c index a802cf2491d6..4c6d2041260b 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) | |||
| 299 | if (ret) | 299 | if (ret) |
| 300 | iio_device_free(indio_dev); | 300 | iio_device_free(indio_dev); |
| 301 | 301 | ||
| 302 | return 0; | 302 | return ret; |
| 303 | } | 303 | } |
| 304 | 304 | ||
| 305 | static int ade7854_spi_remove(struct spi_device *spi) | 305 | static int ade7854_spi_remove(struct spi_device *spi) |
