mirror of
https://github.com/torvalds/linux.git
synced 2024-11-16 17:12:06 +00:00
iio: cros: unify hw fifo attributes without API changes
Commit2e2366c2d1
("iio: cros_ec: unify hw fifo attributes into the core file") should be reverted as it set buffer extended attributes at the wrong place. However, to revert it will requires to revert more commits: commit165aea80e2
("iio: cros_ec: use devm_iio_triggered_buffer_setup_ext()") commit21232b4456
("iio: buffer: remove iio_buffer_set_attrs() helper")). and we would still have conflict with more recent development. commitee708e6baa
("iio: buffer: introduce support for attaching more IIO buffers") Instead, this commit reverts the first 2 commits without re-adding iio_buffer_set_attrs() and set the buffer extended attributes at the right place: 1. Instead of adding has_fw_fifo, deduct it from the configuration: - EC must support FIFO (EC_FEATURE_MOTION_SENSE_FIFO) set. - sensors send data a regular interval (accelerometer, gyro, magnetomer, barometer, light sensor). - "Legacy accelerometer" is only present on EC without FIFO, so we don't need to set buffer attributes. 2. devm_iio_triggered_buffer_setup_ext() does not need to be called when EC does not support FIFO, as there is no FIFO to manage. 3. Use devm_iio_triggered_buffer_setup_ext() when EC has a FIFO to specify the buffer extended attributes. Fixes:2e2366c2d1
("iio: cros_ec: unify hw fifo attributes into the core file") Fixes:165aea80e2
("iio: cros_ec: use devm_iio_triggered_buffer_setup_ext()") Signed-off-by: Gwendal Grignou <gwendal@chromium.org> Reviewed-by: Alexandru Ardelean <ardeleanalex@gmail.com> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Link: https://lore.kernel.org/r/20210318184857.2679181-1-gwendal@chromium.org Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
0a21526bc1
commit
80346b2b55
@ -215,7 +215,7 @@ static int cros_ec_accel_legacy_probe(struct platform_device *pdev)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = cros_ec_sensors_core_init(pdev, indio_dev, true,
|
||||
cros_ec_sensors_capture, NULL, false);
|
||||
cros_ec_sensors_capture, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -97,8 +97,7 @@ static int cros_ec_lid_angle_probe(struct platform_device *pdev)
|
||||
if (!indio_dev)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = cros_ec_sensors_core_init(pdev, indio_dev, false, NULL,
|
||||
NULL, false);
|
||||
ret = cros_ec_sensors_core_init(pdev, indio_dev, false, NULL, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -236,8 +236,7 @@ static int cros_ec_sensors_probe(struct platform_device *pdev)
|
||||
|
||||
ret = cros_ec_sensors_core_init(pdev, indio_dev, true,
|
||||
cros_ec_sensors_capture,
|
||||
cros_ec_sensors_push_data,
|
||||
true);
|
||||
cros_ec_sensors_push_data);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include <linux/iio/iio.h>
|
||||
#include <linux/iio/kfifo_buf.h>
|
||||
#include <linux/iio/sysfs.h>
|
||||
#include <linux/iio/trigger.h>
|
||||
#include <linux/iio/trigger_consumer.h>
|
||||
#include <linux/iio/triggered_buffer.h>
|
||||
#include <linux/kernel.h>
|
||||
@ -240,7 +241,6 @@ static void cros_ec_sensors_core_clean(void *arg)
|
||||
* for backward compatibility.
|
||||
* @push_data: function to call when cros_ec_sensorhub receives
|
||||
* a sample for that sensor.
|
||||
* @has_hw_fifo: Set true if this device has/uses a HW FIFO
|
||||
*
|
||||
* Return: 0 on success, -errno on failure.
|
||||
*/
|
||||
@ -248,8 +248,7 @@ int cros_ec_sensors_core_init(struct platform_device *pdev,
|
||||
struct iio_dev *indio_dev,
|
||||
bool physical_device,
|
||||
cros_ec_sensors_capture_t trigger_capture,
|
||||
cros_ec_sensorhub_push_data_cb_t push_data,
|
||||
bool has_hw_fifo)
|
||||
cros_ec_sensorhub_push_data_cb_t push_data)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
struct cros_ec_sensors_core_state *state = iio_priv(indio_dev);
|
||||
@ -334,9 +333,9 @@ int cros_ec_sensors_core_init(struct platform_device *pdev,
|
||||
* We can not use trigger here, as events are generated
|
||||
* as soon as sample_frequency is set.
|
||||
*/
|
||||
ret = devm_iio_kfifo_buffer_setup(dev, indio_dev,
|
||||
INDIO_BUFFER_SOFTWARE,
|
||||
NULL);
|
||||
ret = devm_iio_kfifo_buffer_setup_ext(dev, indio_dev,
|
||||
INDIO_BUFFER_SOFTWARE, NULL,
|
||||
cros_ec_sensor_fifo_attributes);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -355,21 +354,14 @@ int cros_ec_sensors_core_init(struct platform_device *pdev,
|
||||
ret = iio_device_set_clock(indio_dev, CLOCK_BOOTTIME);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
} else {
|
||||
const struct attribute **fifo_attrs;
|
||||
|
||||
if (has_hw_fifo)
|
||||
fifo_attrs = cros_ec_sensor_fifo_attributes;
|
||||
else
|
||||
fifo_attrs = NULL;
|
||||
|
||||
/*
|
||||
* The only way to get samples in buffer is to set a
|
||||
* software trigger (systrig, hrtimer).
|
||||
*/
|
||||
ret = devm_iio_triggered_buffer_setup_ext(
|
||||
dev, indio_dev, NULL, trigger_capture,
|
||||
NULL, fifo_attrs);
|
||||
ret = devm_iio_triggered_buffer_setup(dev, indio_dev,
|
||||
NULL, trigger_capture, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
@ -182,8 +182,7 @@ static int cros_ec_light_prox_probe(struct platform_device *pdev)
|
||||
|
||||
ret = cros_ec_sensors_core_init(pdev, indio_dev, true,
|
||||
cros_ec_sensors_capture,
|
||||
cros_ec_sensors_push_data,
|
||||
true);
|
||||
cros_ec_sensors_push_data);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -139,8 +139,7 @@ static int cros_ec_baro_probe(struct platform_device *pdev)
|
||||
|
||||
ret = cros_ec_sensors_core_init(pdev, indio_dev, true,
|
||||
cros_ec_sensors_capture,
|
||||
cros_ec_sensors_push_data,
|
||||
true);
|
||||
cros_ec_sensors_push_data);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -96,8 +96,7 @@ struct platform_device;
|
||||
int cros_ec_sensors_core_init(struct platform_device *pdev,
|
||||
struct iio_dev *indio_dev, bool physical_device,
|
||||
cros_ec_sensors_capture_t trigger_capture,
|
||||
cros_ec_sensorhub_push_data_cb_t push_data,
|
||||
bool has_hw_fifo);
|
||||
cros_ec_sensorhub_push_data_cb_t push_data);
|
||||
|
||||
irqreturn_t cros_ec_sensors_capture(int irq, void *p);
|
||||
int cros_ec_sensors_push_data(struct iio_dev *indio_dev,
|
||||
|
Loading…
Reference in New Issue
Block a user