diff options
Diffstat (limited to 'include/linux/iio')
| -rw-r--r-- | include/linux/iio/adc/ad_sigma_delta.h | 6 | ||||
| -rw-r--r-- | include/linux/iio/common/st_sensors.h | 5 | ||||
| -rw-r--r-- | include/linux/iio/gyro/itg3200.h | 2 | ||||
| -rw-r--r-- | include/linux/iio/iio.h | 79 | ||||
| -rw-r--r-- | include/linux/iio/imu/adis.h | 34 | ||||
| -rw-r--r-- | include/linux/iio/trigger.h | 26 | 
6 files changed, 56 insertions, 96 deletions
diff --git a/include/linux/iio/adc/ad_sigma_delta.h b/include/linux/iio/adc/ad_sigma_delta.h index 2e4eab9868a..e7fdec4db9d 100644 --- a/include/linux/iio/adc/ad_sigma_delta.h +++ b/include/linux/iio/adc/ad_sigma_delta.h @@ -133,9 +133,9 @@ int ad_sd_validate_trigger(struct iio_dev *indio_dev, struct iio_trigger *trig);  		.channel2 = (_channel2), \  		.address = (_address), \  		.extend_name = (_extend_name), \ -		.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ -			IIO_CHAN_INFO_SCALE_SHARED_BIT | \ -			IIO_CHAN_INFO_OFFSET_SEPARATE_BIT, \ +		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ +			BIT(IIO_CHAN_INFO_OFFSET), \ +		.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \  		.scan_index = (_si), \  		.scan_type = { \  			.sign = 'u', \ diff --git a/include/linux/iio/common/st_sensors.h b/include/linux/iio/common/st_sensors.h index 8bd12be0b02..172c5b23cb8 100644 --- a/include/linux/iio/common/st_sensors.h +++ b/include/linux/iio/common/st_sensors.h @@ -15,6 +15,7 @@  #include <linux/spi/spi.h>  #include <linux/irqreturn.h>  #include <linux/iio/trigger.h> +#include <linux/bitops.h>  #define ST_SENSORS_TX_MAX_LENGTH		2  #define ST_SENSORS_RX_MAX_LENGTH		6 @@ -45,8 +46,8 @@  { \  	.type = device_type, \  	.modified = 1, \ -	.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ -			IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ +	.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ +			BIT(IIO_CHAN_INFO_SCALE), \  	.scan_index = index, \  	.channel2 = mod, \  	.address = addr, \ diff --git a/include/linux/iio/gyro/itg3200.h b/include/linux/iio/gyro/itg3200.h index c53f16914b7..2a820850f28 100644 --- a/include/linux/iio/gyro/itg3200.h +++ b/include/linux/iio/gyro/itg3200.h @@ -149,6 +149,6 @@ static inline void itg3200_buffer_unconfigure(struct iio_dev *indio_dev)  {  } -#endif  /* CONFIG_IIO_RING_BUFFER */ +#endif  /* CONFIG_IIO_BUFFER */  #endif /* ITG3200_H_ */ diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h index da8c776ba0b..8d171f42763 100644 --- a/include/linux/iio/iio.h +++ b/include/linux/iio/iio.h @@ -38,76 +38,6 @@ enum iio_chan_info_enum {  	IIO_CHAN_INFO_HYSTERESIS,  }; -#define IIO_CHAN_INFO_SHARED_BIT(type) BIT(type*2) -#define IIO_CHAN_INFO_SEPARATE_BIT(type) BIT(type*2 + 1) -#define IIO_CHAN_INFO_BITS(type) (IIO_CHAN_INFO_SHARED_BIT(type) | \ -				    IIO_CHAN_INFO_SEPARATE_BIT(type)) - -#define IIO_CHAN_INFO_RAW_SEPARATE_BIT			\ -	IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_RAW) -#define IIO_CHAN_INFO_PROCESSED_SEPARATE_BIT			\ -	IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PROCESSED) -#define IIO_CHAN_INFO_SCALE_SEPARATE_BIT		\ -	IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_SCALE) -#define IIO_CHAN_INFO_SCALE_SHARED_BIT			\ -	IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_SCALE) -#define IIO_CHAN_INFO_OFFSET_SEPARATE_BIT			\ -	IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_OFFSET) -#define IIO_CHAN_INFO_OFFSET_SHARED_BIT			\ -	IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_OFFSET) -#define IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT			\ -	IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_CALIBSCALE) -#define IIO_CHAN_INFO_CALIBSCALE_SHARED_BIT			\ -	IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_CALIBSCALE) -#define IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT			\ -	IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_CALIBBIAS) -#define IIO_CHAN_INFO_CALIBBIAS_SHARED_BIT			\ -	IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_CALIBBIAS) -#define IIO_CHAN_INFO_PEAK_SEPARATE_BIT			\ -	IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PEAK) -#define IIO_CHAN_INFO_PEAK_SHARED_BIT			\ -	IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PEAK) -#define IIO_CHAN_INFO_PEAKSCALE_SEPARATE_BIT			\ -	IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PEAKSCALE) -#define IIO_CHAN_INFO_PEAKSCALE_SHARED_BIT			\ -	IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PEAKSCALE) -#define IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT	\ -	IIO_CHAN_INFO_SEPARATE_BIT(				\ -		IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW) -#define IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SHARED_BIT	\ -	IIO_CHAN_INFO_SHARED_BIT(				\ -		IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW) -#define IIO_CHAN_INFO_AVERAGE_RAW_SEPARATE_BIT			\ -	IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_AVERAGE_RAW) -#define IIO_CHAN_INFO_AVERAGE_RAW_SHARED_BIT			\ -	IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_AVERAGE_RAW) -#define IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT \ -	IIO_CHAN_INFO_SHARED_BIT(			       \ -		IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY) -#define IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SEPARATE_BIT \ -	IIO_CHAN_INFO_SEPARATE_BIT(			       \ -		IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY) -#define IIO_CHAN_INFO_SAMP_FREQ_SEPARATE_BIT		\ -	IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_SAMP_FREQ) -#define IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT			\ -	IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_SAMP_FREQ) -#define IIO_CHAN_INFO_FREQUENCY_SEPARATE_BIT			\ -	IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_FREQUENCY) -#define IIO_CHAN_INFO_FREQUENCY_SHARED_BIT			\ -	IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_FREQUENCY) -#define IIO_CHAN_INFO_PHASE_SEPARATE_BIT			\ -	IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PHASE) -#define IIO_CHAN_INFO_PHASE_SHARED_BIT			\ -	IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PHASE) -#define IIO_CHAN_INFO_HARDWAREGAIN_SEPARATE_BIT			\ -	IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_HARDWAREGAIN) -#define IIO_CHAN_INFO_HARDWAREGAIN_SHARED_BIT			\ -	IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_HARDWAREGAIN) -#define IIO_CHAN_INFO_HYSTERESIS_SEPARATE_BIT			\ -	IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_HYSTERESIS) -#define IIO_CHAN_INFO_HYSTERESIS_SHARED_BIT			\ -	IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_HYSTERESIS) -  enum iio_endian {  	IIO_CPU,  	IIO_BE, @@ -218,6 +148,10 @@ ssize_t iio_enum_write(struct iio_dev *indio_dev,   *			endianness:	little or big endian   * @info_mask:		What information is to be exported about this channel.   *			This includes calibbias, scale etc. + * @info_mask_separate: What information is to be exported that is specific to + *			this channel. + * @info_mask_shared_by_type: What information is to be exported that is shared +*			by all channels of the same type.   * @event_mask:		What events can this channel produce.   * @ext_info:		Array of extended info attributes for this channel.   *			The array is NULL terminated, the last element should @@ -253,6 +187,8 @@ struct iio_chan_spec {  		enum iio_endian endianness;  	} scan_type;  	long			info_mask; +	long			info_mask_separate; +	long			info_mask_shared_by_type;  	long			event_mask;  	const struct iio_chan_spec_ext_info *ext_info;  	const char		*extend_name; @@ -275,7 +211,8 @@ struct iio_chan_spec {  static inline bool iio_channel_has_info(const struct iio_chan_spec *chan,  	enum iio_chan_info_enum type)  { -	return chan->info_mask & IIO_CHAN_INFO_BITS(type); +	return (chan->info_mask_separate & type) | +	       (chan->info_mask_shared_by_type & type);  }  #define IIO_ST(si, rb, sb, sh)						\ diff --git a/include/linux/iio/imu/adis.h b/include/linux/iio/imu/adis.h index ff781dca2e9..b665dc7f017 100644 --- a/include/linux/iio/imu/adis.h +++ b/include/linux/iio/imu/adis.h @@ -162,8 +162,8 @@ int adis_single_conversion(struct iio_dev *indio_dev,  	.indexed = 1, \  	.channel = (chan), \  	.extend_name = name, \ -	.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ -		IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ +	.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ +		BIT(IIO_CHAN_INFO_SCALE), \  	.address = (addr), \  	.scan_index = (si), \  	.scan_type = { \ @@ -184,9 +184,9 @@ int adis_single_conversion(struct iio_dev *indio_dev,  	.type = IIO_TEMP, \  	.indexed = 1, \  	.channel = 0, \ -	.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ -		IIO_CHAN_INFO_SCALE_SEPARATE_BIT | \ -		IIO_CHAN_INFO_OFFSET_SEPARATE_BIT, \ +	.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ +		BIT(IIO_CHAN_INFO_SCALE) | \ +		BIT(IIO_CHAN_INFO_OFFSET), \  	.address = (addr), \  	.scan_index = (si), \  	.scan_type = { \ @@ -197,13 +197,13 @@ int adis_single_conversion(struct iio_dev *indio_dev,  	}, \  } -#define ADIS_MOD_CHAN(_type, mod, addr, si, info, bits) { \ +#define ADIS_MOD_CHAN(_type, mod, addr, si, info_sep, bits) { \  	.type = (_type), \  	.modified = 1, \  	.channel2 = IIO_MOD_ ## mod, \ -	.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ -		 IIO_CHAN_INFO_SCALE_SHARED_BIT | \ -		 info, \ +	.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ +		 info_sep, \ +	.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \  	.address = (addr), \  	.scan_index = (si), \  	.scan_type = { \ @@ -214,17 +214,17 @@ int adis_single_conversion(struct iio_dev *indio_dev,  	}, \  } -#define ADIS_ACCEL_CHAN(mod, addr, si, info, bits) \ -	ADIS_MOD_CHAN(IIO_ACCEL, mod, addr, si, info, bits) +#define ADIS_ACCEL_CHAN(mod, addr, si, info_sep, bits) \ +	ADIS_MOD_CHAN(IIO_ACCEL, mod, addr, si, info_sep, bits) -#define ADIS_GYRO_CHAN(mod, addr, si, info, bits) \ -	ADIS_MOD_CHAN(IIO_ANGL_VEL, mod, addr, si, info, bits) +#define ADIS_GYRO_CHAN(mod, addr, si, info_sep, bits) \ +	ADIS_MOD_CHAN(IIO_ANGL_VEL, mod, addr, si, info_sep, bits) -#define ADIS_INCLI_CHAN(mod, addr, si, info, bits) \ -	ADIS_MOD_CHAN(IIO_INCLI, mod, addr, si, info, bits) +#define ADIS_INCLI_CHAN(mod, addr, si, info_sep, bits) \ +	ADIS_MOD_CHAN(IIO_INCLI, mod, addr, si, info_sep, bits) -#define ADIS_ROT_CHAN(mod, addr, si, info, bits) \ -	ADIS_MOD_CHAN(IIO_ROT, mod, addr, si, info, bits) +#define ADIS_ROT_CHAN(mod, addr, si, info_sep, bits) \ +	ADIS_MOD_CHAN(IIO_ROT, mod, addr, si, info_sep, bits)  #ifdef CONFIG_IIO_ADIS_LIB_BUFFER diff --git a/include/linux/iio/trigger.h b/include/linux/iio/trigger.h index c66e0a96f6e..3869c525b05 100644 --- a/include/linux/iio/trigger.h +++ b/include/linux/iio/trigger.h @@ -44,7 +44,6 @@ struct iio_trigger_ops {   * @id:			[INTERN] unique id number   * @name:		[DRIVER] unique name   * @dev:		[DRIVER] associated device (if relevant) - * @private_data:	[DRIVER] device specific data   * @list:		[INTERN] used in maintenance of global trigger list   * @alloc_list:		[DRIVER] used for driver specific trigger list   * @use_count:		use count for the trigger @@ -60,7 +59,6 @@ struct iio_trigger {  	const char			*name;  	struct device			dev; -	void				*private_data;  	struct list_head		list;  	struct list_head		alloc_list;  	int use_count; @@ -92,6 +90,30 @@ static inline void iio_trigger_get(struct iio_trigger *trig)  }  /** + * iio_device_set_drvdata() - Set trigger driver data + * @trig: IIO trigger structure + * @data: Driver specific data + * + * Allows to attach an arbitrary pointer to an IIO trigger, which can later be + * retrieved by iio_trigger_get_drvdata(). + */ +static inline void iio_trigger_set_drvdata(struct iio_trigger *trig, void *data) +{ +	dev_set_drvdata(&trig->dev, data); +} + +/** + * iio_trigger_get_drvdata() - Get trigger driver data + * @trig: IIO trigger structure + * + * Returns the data previously set with iio_trigger_set_drvdata() + */ +static inline void *iio_trigger_get_drvdata(struct iio_trigger *trig) +{ +	return dev_get_drvdata(&trig->dev); +} + +/**   * iio_trigger_register() - register a trigger with the IIO core   * @trig_info:	trigger to be registered   **/  |