aboutsummaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <[email protected]>2023-08-11 21:22:33 +0200
committerGreg Kroah-Hartman <[email protected]>2023-08-11 21:22:33 +0200
commit43fbd506498aefb696e4e338a517883fbd8b39ce (patch)
tree78cf3261ec2a44d8470683025f0622054a959d53 /include/linux
parentf90bebb36a0831f5769b65e45e39dd7bc5621a7e (diff)
parent14b7447cec15ee8dfdfe0da66ba1e280ded7e00a (diff)
Merge tag 'iio-for-6.6a' of https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into char-misc-next
Jonathan writes: 1st set of IIO new device support, features and cleanup for 6.6 New device support * adi,ad8366 - Add support for the HMC792 digital attenuator (mostly chip specific data) * alwinner,sun20i-gpadc - New driver for the integrated ADC on a number of allwinner SoCs including dt-binding documentation. * microchip,mcp4728 - New driver for this quad channel DAC. Includes dt-bindings. * miramems, da280 - Add ID for DA217 accelerometer which is compatible with the da280. * murata,irs-d200 - New driver for this passive infrared sensor typically used for human detection. Includes bindings and a few pieces of new ABI to cover a case of needing to count a number of repeats of an event before reporting it. * rohm,bu27008 - Add initial support for the BU27010 RGB + flickering sensor to this driver. Substantial refactoring was needed to enable this. Features * adi,admv8818 - Add mode that bypasses the input and output filters. * amlogic,meson - Support control of the MUX on channel 7, exposed as multiple channels. - Support channel labels. * sensirion,scd4x - Add pressure compensation. Controlled via an 'output' pressure channel. * ti,lmp92040 - Add IIO buffered supported (read via chrdev). * vishay,vcnl4000 - Add proximity interrupt support for vcnl4200. - Add proximity integration time control for vcnl4200. - Add illuminance integration time control for vcnl4040 and vcnl4200. - Add calibration bias, proximity and illuminance event period, and oversampling ratio control for vcnl4040 and vncl4200. Cleanup and minor fixes * core - Tidy up handling of set_trigger_state() callback return values to consistently assume no positive return values. - Use min() rather than min_t() in a case where types were clearly the same. - Drop some else statements that follow continue with a loop or a returns. - White space and comment format cleanup. - Use sysfs_match_string() helper to improve readability. - Use krealloc_array() to make it explicit a krealloc is for an array of structures, not just one. * tools - Tidy up potential overflow in array index. * tree wide - Fix up includes for DT related headers. - Drop some error prints in places where as similar error message is printed by the function being called. - Tidy up handling of return value from platform_get_irq() to no longer take into account 0 as a value that might be returned. Similar for fwnode_irq_get(). * adi,ad7192 - Add missing error check and improved debug logging. - Use sysfs_emit_at() rather than open coded variant. * adi,adis16475 - Drop unused scan element enum entries. - Specify that a few more devices support burst32 mode. * adi,admv1013 - Enable all required regulators and document as required in the dt-binding. * adi,admv1014 - Make all regulators required in the dt-binding as the device needs them all enabled. * adi,adxl313 - Fix wrong enum values being used in the i2c_device_id table. - Use i2c_get_match_data() to reduce open coded handling of the various id tables. * allwinner,gpadc - Make the kconfig text more specific to make space for separate drivers for other Allwinner devices. * amlogic,meson - Drop unused timestamp channels as no buffer support. - Various minor reorganizations to enable addition of support channel 7 MUX. - Initialize some default values to account for potential previous user since reboot. * qcom,spmi-adc5 - Add ADC5_GPIO2_100K_PU support to driver to line up with bindings. * qcom,spmi-adc7 - Use predefined channel ID definitions rather than values. * invensense, common - Factor out the timestamp handling to a module used by both mpu6050 and icm42600. * invensense,mpu6050 - Read as many FIFO elements as possible in one bus access. * men,s188 - Drop redundant initialization of driver owner field. * microchip,mcp4018 and mcp4531 - Use i2c_get_match_data() instead of open coding. Includes making the data format the same for the i2c_device_id and firmware match tables. * semtech,sx9310 - dt-bindings: Add reference to IIO schema to provide the label property. * semtech,sx9324 - dt-bindings: Add reference to IIO schema to provide the label property. * st,stm32-adc - Use devm_platform_get_and_ioremap_resource() instead of open coded version. * st,stm-lptimer-trigger - Drop setting platform drvdata as it wasn't then used. * ti,ads1015 - Fix wrong dt binding description of ti,datarate for some devices. * vishay,vcnl4200 - Move to switch statements for channel type checking to make later additions simpler. * tag 'iio-for-6.6a' of https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio: (73 commits) Documentation: ABI: testing: admv8818: add bypass drivers: iio: filter: admv8818: add bypass mode iio: light: bd27008: Support BD27010 RGB iio: light: bu27008: add chip info dt-bindings: iio: ROHM BU27010 RGBC + flickering sensor iio: add MCP4728 I2C DAC driver dt-bindings: iio: dac: add mcp4728.yaml drivers: iio: admv1013: add vcc regulators dt-bindings: iio: admv1013: add vcc regulators iio: trigger: stm32-lptimer-trigger: remove unneeded platform_set_drvdata() iio: adc: men_z188_adc: Remove redundant initialization owner in men_z188_driver dt-bindings: iio: admv1014: make all regs required iio: cdc: ad7150: relax return value check for IRQ get iio: mb1232: relax return value check for IRQ get iio: adc: fix the return value handle for platform_get_irq() tools: iio: iio_generic_buffer: Fix some integer type and calculation iio: potentiometer: mcp4531: Use i2c_get_match_data() iio: potentiometer: mcp4018: Use i2c_get_match_data() iio: core: Fix issues and style of the comments iio: core: Switch to krealloc_array() ...
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/iio/common/inv_sensors_timestamp.h95
-rw-r--r--include/linux/iio/types.h2
2 files changed, 97 insertions, 0 deletions
diff --git a/include/linux/iio/common/inv_sensors_timestamp.h b/include/linux/iio/common/inv_sensors_timestamp.h
new file mode 100644
index 000000000000..a47d304d1ba7
--- /dev/null
+++ b/include/linux/iio/common/inv_sensors_timestamp.h
@@ -0,0 +1,95 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2020 Invensense, Inc.
+ */
+
+#ifndef INV_SENSORS_TIMESTAMP_H_
+#define INV_SENSORS_TIMESTAMP_H_
+
+/**
+ * struct inv_sensors_timestamp_chip - chip internal properties
+ * @clock_period: internal clock period in ns
+ * @jitter: acceptable jitter in per-mille
+ * @init_period: chip initial period at reset in ns
+ */
+struct inv_sensors_timestamp_chip {
+ uint32_t clock_period;
+ uint32_t jitter;
+ uint32_t init_period;
+};
+
+/**
+ * struct inv_sensors_timestamp_interval - timestamps interval
+ * @lo: interval lower bound
+ * @up: interval upper bound
+ */
+struct inv_sensors_timestamp_interval {
+ int64_t lo;
+ int64_t up;
+};
+
+/**
+ * struct inv_sensors_timestamp_acc - accumulator for computing an estimation
+ * @val: current estimation of the value, the mean of all values
+ * @idx: current index of the next free place in values table
+ * @values: table of all measured values, use for computing the mean
+ */
+struct inv_sensors_timestamp_acc {
+ uint32_t val;
+ size_t idx;
+ uint32_t values[32];
+};
+
+/**
+ * struct inv_sensors_timestamp - timestamp management states
+ * @chip: chip internal characteristics
+ * @min_period: minimal acceptable clock period
+ * @max_period: maximal acceptable clock period
+ * @it: interrupts interval timestamps
+ * @timestamp: store last timestamp for computing next data timestamp
+ * @mult: current internal period multiplier
+ * @new_mult: new set internal period multiplier (not yet effective)
+ * @period: measured current period of the sensor
+ * @chip_period: accumulator for computing internal chip period
+ */
+struct inv_sensors_timestamp {
+ struct inv_sensors_timestamp_chip chip;
+ uint32_t min_period;
+ uint32_t max_period;
+ struct inv_sensors_timestamp_interval it;
+ int64_t timestamp;
+ uint32_t mult;
+ uint32_t new_mult;
+ uint32_t period;
+ struct inv_sensors_timestamp_acc chip_period;
+};
+
+void inv_sensors_timestamp_init(struct inv_sensors_timestamp *ts,
+ const struct inv_sensors_timestamp_chip *chip);
+
+int inv_sensors_timestamp_update_odr(struct inv_sensors_timestamp *ts,
+ uint32_t period, bool fifo);
+
+void inv_sensors_timestamp_interrupt(struct inv_sensors_timestamp *ts,
+ uint32_t fifo_period, size_t fifo_nb,
+ size_t sensor_nb, int64_t timestamp);
+
+static inline int64_t inv_sensors_timestamp_pop(struct inv_sensors_timestamp *ts)
+{
+ ts->timestamp += ts->period;
+ return ts->timestamp;
+}
+
+void inv_sensors_timestamp_apply_odr(struct inv_sensors_timestamp *ts,
+ uint32_t fifo_period, size_t fifo_nb,
+ unsigned int fifo_no);
+
+static inline void inv_sensors_timestamp_reset(struct inv_sensors_timestamp *ts)
+{
+ const struct inv_sensors_timestamp_interval interval_init = {0LL, 0LL};
+
+ ts->it = interval_init;
+ ts->timestamp = 0;
+}
+
+#endif
diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h
index 82faa98c719a..117bde7d6ad7 100644
--- a/include/linux/iio/types.h
+++ b/include/linux/iio/types.h
@@ -19,6 +19,8 @@ enum iio_event_info {
IIO_EV_INFO_TIMEOUT,
IIO_EV_INFO_RESET_TIMEOUT,
IIO_EV_INFO_TAP2_MIN_DELAY,
+ IIO_EV_INFO_RUNNING_PERIOD,
+ IIO_EV_INFO_RUNNING_COUNT,
};
#define IIO_VAL_INT 1