|
@@ -30,6 +30,7 @@
|
|
|
#include <linux/module.h>
|
|
|
#include <linux/of_device.h>
|
|
|
#include <linux/regmap.h>
|
|
|
+#include <linux/sched/task.h>
|
|
|
#include <linux/util_macros.h>
|
|
|
|
|
|
#include <linux/platform_data/ina2xx.h>
|
|
@@ -826,6 +827,7 @@ static int ina2xx_buffer_enable(struct iio_dev *indio_dev)
|
|
|
{
|
|
|
struct ina2xx_chip_info *chip = iio_priv(indio_dev);
|
|
|
unsigned int sampling_us = SAMPLING_PERIOD(chip);
|
|
|
+ struct task_struct *task;
|
|
|
|
|
|
dev_dbg(&indio_dev->dev, "Enabling buffer w/ scan_mask %02x, freq = %d, avg =%u\n",
|
|
|
(unsigned int)(*indio_dev->active_scan_mask),
|
|
@@ -835,11 +837,17 @@ static int ina2xx_buffer_enable(struct iio_dev *indio_dev)
|
|
|
dev_dbg(&indio_dev->dev, "Async readout mode: %d\n",
|
|
|
chip->allow_async_readout);
|
|
|
|
|
|
- chip->task = kthread_run(ina2xx_capture_thread, (void *)indio_dev,
|
|
|
- "%s:%d-%uus", indio_dev->name, indio_dev->id,
|
|
|
- sampling_us);
|
|
|
+ task = kthread_create(ina2xx_capture_thread, (void *)indio_dev,
|
|
|
+ "%s:%d-%uus", indio_dev->name, indio_dev->id,
|
|
|
+ sampling_us);
|
|
|
+ if (IS_ERR(task))
|
|
|
+ return PTR_ERR(task);
|
|
|
+
|
|
|
+ get_task_struct(task);
|
|
|
+ wake_up_process(task);
|
|
|
+ chip->task = task;
|
|
|
|
|
|
- return PTR_ERR_OR_ZERO(chip->task);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static int ina2xx_buffer_disable(struct iio_dev *indio_dev)
|
|
@@ -848,6 +856,7 @@ static int ina2xx_buffer_disable(struct iio_dev *indio_dev)
|
|
|
|
|
|
if (chip->task) {
|
|
|
kthread_stop(chip->task);
|
|
|
+ put_task_struct(chip->task);
|
|
|
chip->task = NULL;
|
|
|
}
|
|
|
|