Re: [PATCH v2 1/5] iio: st_sensors: decouple irq1 configuration parameters from the irq2 ones

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 17 Aug 2017 19:37:25 +0200
Lorenzo Bianconi <lorenzo.bianconi83@xxxxxxxxx> wrote:

> Separate data-ready configuration parameters for INT1 and INT2 pins in
> st_sensor_data_ready_irq data structure. That change will be use to
> properly support LIS2DW12 accel sensor.
> 
> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@xxxxxx>
Unfortunately I'll have to hold this series for now as the 3/4 wire
patch need for the latter part of the series hasn't yet made it
back to my tree from the fixes branch.

Let me know if I seem to have forgotten it. 

Thanks,

Jonathan
> ---
>  drivers/iio/accel/st_accel_core.c               | 66 ++++++++++++++++---------
>  drivers/iio/common/st_sensors/st_sensors_core.c | 28 ++++++-----
>  drivers/iio/gyro/st_gyro_core.c                 | 18 ++++---
>  drivers/iio/magnetometer/st_magn_core.c         |  6 ++-
>  drivers/iio/pressure/st_pressure_core.c         | 31 +++++++-----
>  include/linux/iio/common/st_sensors.h           | 16 +++---
>  6 files changed, 104 insertions(+), 61 deletions(-)
> 
> diff --git a/drivers/iio/accel/st_accel_core.c b/drivers/iio/accel/st_accel_core.c
> index 752856b3a849..9fac5a41bacd 100644
> --- a/drivers/iio/accel/st_accel_core.c
> +++ b/drivers/iio/accel/st_accel_core.c
> @@ -159,9 +159,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
>  			.mask = 0x80,
>  		},
>  		.drdy_irq = {
> -			.addr = 0x22,
> -			.mask_int1 = 0x10,
> -			.mask_int2 = 0x00,
> +			.int1 = {
> +				.addr = 0x22,
> +				.mask = 0x10,
> +			},
>  			.addr_ihl = 0x25,
>  			.mask_ihl = 0x02,
>  			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
> @@ -229,9 +230,14 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
>  			.mask = 0x80,
>  		},
>  		.drdy_irq = {
> -			.addr = 0x22,
> -			.mask_int1 = 0x02,
> -			.mask_int2 = 0x10,
> +			.int1 = {
> +				.addr = 0x22,
> +				.mask = 0x02,
> +			},
> +			.int2 = {
> +				.addr = 0x22,
> +				.mask = 0x10,
> +			},
>  			.addr_ihl = 0x22,
>  			.mask_ihl = 0x80,
>  			.addr_od = 0x22,
> @@ -313,9 +319,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
>  			.mask = 0x08,
>  		},
>  		.drdy_irq = {
> -			.addr = 0x23,
> -			.mask_int1 = 0x80,
> -			.mask_int2 = 0x00,
> +			.int1 = {
> +				.addr = 0x23,
> +				.mask = 0x80,
> +			},
>  			.addr_ihl = 0x23,
>  			.mask_ihl = 0x40,
>  			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
> @@ -387,8 +394,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
>  			.mask = 0x01,
>  		},
>  		.drdy_irq = {
> -			.addr = 0x21,
> -			.mask_int1 = 0x04,
> +			.int1 = {
> +				.addr = 0x21,
> +				.mask = 0x04,
> +			},
>  			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
>  		},
>  		.sim = {
> @@ -444,9 +453,14 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
>  			},
>  		},
>  		.drdy_irq = {
> -			.addr = 0x22,
> -			.mask_int1 = 0x04,
> -			.mask_int2 = 0x20,
> +			.int1 = {
> +				.addr = 0x22,
> +				.mask = 0x04,
> +			},
> +			.int2 = {
> +				.addr = 0x22,
> +				.mask = 0x20,
> +			},
>  			.addr_ihl = 0x22,
>  			.mask_ihl = 0x80,
>  			.addr_od = 0x22,
> @@ -513,9 +527,14 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
>  			.mask = 0x80,
>  		},
>  		.drdy_irq = {
> -			.addr = 0x22,
> -			.mask_int1 = 0x02,
> -			.mask_int2 = 0x10,
> +			.int1 = {
> +				.addr = 0x22,
> +				.mask = 0x02,
> +			},
> +			.int2 = {
> +				.addr = 0x22,
> +				.mask = 0x10,
> +			},
>  			.addr_ihl = 0x22,
>  			.mask_ihl = 0x80,
>  		},
> @@ -567,8 +586,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
>  		.bdu = {
>  		},
>  		.drdy_irq = {
> -			.addr = 0x21,
> -			.mask_int1 = 0x04,
> +			.int1 = {
> +				.addr = 0x21,
> +				.mask = 0x04,
> +			},
>  			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
>  		},
>  		.sim = {
> @@ -635,9 +656,10 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
>  			},
>  		},
>  		.drdy_irq = {
> -			.addr = 0x22,
> -			.mask_int1 = 0x10,
> -			.mask_int2 = 0x00,
> +			.int1 = {
> +				.addr = 0x22,
> +				.mask = 0x10,
> +			},
>  			.addr_ihl = 0x25,
>  			.mask_ihl = 0x02,
>  			.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
> diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c
> index d99bb1460fe2..a26217b0604f 100644
> --- a/drivers/iio/common/st_sensors/st_sensors_core.c
> +++ b/drivers/iio/common/st_sensors/st_sensors_core.c
> @@ -283,7 +283,8 @@ static int st_sensors_set_drdy_int_pin(struct iio_dev *indio_dev,
>  	struct st_sensor_data *sdata = iio_priv(indio_dev);
>  
>  	/* Sensor does not support interrupts */
> -	if (sdata->sensor_settings->drdy_irq.addr == 0) {
> +	if (!sdata->sensor_settings->drdy_irq.int1.addr &&
> +	    !sdata->sensor_settings->drdy_irq.int2.addr) {
>  		if (pdata->drdy_int_pin)
>  			dev_info(&indio_dev->dev,
>  				 "DRDY on pin INT%d specified, but sensor "
> @@ -294,7 +295,7 @@ static int st_sensors_set_drdy_int_pin(struct iio_dev *indio_dev,
>  
>  	switch (pdata->drdy_int_pin) {
>  	case 1:
> -		if (sdata->sensor_settings->drdy_irq.mask_int1 == 0) {
> +		if (!sdata->sensor_settings->drdy_irq.int1.mask) {
>  			dev_err(&indio_dev->dev,
>  					"DRDY on INT1 not available.\n");
>  			return -EINVAL;
> @@ -302,7 +303,7 @@ static int st_sensors_set_drdy_int_pin(struct iio_dev *indio_dev,
>  		sdata->drdy_int_pin = 1;
>  		break;
>  	case 2:
> -		if (sdata->sensor_settings->drdy_irq.mask_int2 == 0) {
> +		if (!sdata->sensor_settings->drdy_irq.int2.mask) {
>  			dev_err(&indio_dev->dev,
>  					"DRDY on INT2 not available.\n");
>  			return -EINVAL;
> @@ -460,10 +461,11 @@ EXPORT_SYMBOL(st_sensors_init_sensor);
>  int st_sensors_set_dataready_irq(struct iio_dev *indio_dev, bool enable)
>  {
>  	int err;
> -	u8 drdy_mask;
> +	u8 drdy_addr, drdy_mask;
>  	struct st_sensor_data *sdata = iio_priv(indio_dev);
>  
> -	if (!sdata->sensor_settings->drdy_irq.addr)
> +	if (!sdata->sensor_settings->drdy_irq.int1.addr &&
> +	    !sdata->sensor_settings->drdy_irq.int2.addr)
>  		return 0;
>  
>  	/* Enable/Disable the interrupt generator 1. */
> @@ -476,18 +478,20 @@ int st_sensors_set_dataready_irq(struct iio_dev *indio_dev, bool enable)
>  			goto st_accel_set_dataready_irq_error;
>  	}
>  
> -	if (sdata->drdy_int_pin == 1)
> -		drdy_mask = sdata->sensor_settings->drdy_irq.mask_int1;
> -	else
> -		drdy_mask = sdata->sensor_settings->drdy_irq.mask_int2;
> +	if (sdata->drdy_int_pin == 1) {
> +		drdy_addr = sdata->sensor_settings->drdy_irq.int1.addr;
> +		drdy_mask = sdata->sensor_settings->drdy_irq.int1.mask;
> +	} else {
> +		drdy_addr = sdata->sensor_settings->drdy_irq.int2.addr;
> +		drdy_mask = sdata->sensor_settings->drdy_irq.int2.mask;
> +	}
>  
>  	/* Flag to the poll function that the hardware trigger is in use */
>  	sdata->hw_irq_trigger = enable;
>  
>  	/* Enable/Disable the interrupt generator for data ready. */
> -	err = st_sensors_write_data_with_mask(indio_dev,
> -					sdata->sensor_settings->drdy_irq.addr,
> -					drdy_mask, (int)enable);
> +	err = st_sensors_write_data_with_mask(indio_dev, drdy_addr,
> +					      drdy_mask, (int)enable);
>  
>  st_accel_set_dataready_irq_error:
>  	return err;
> diff --git a/drivers/iio/gyro/st_gyro_core.c b/drivers/iio/gyro/st_gyro_core.c
> index e366422e8512..764306378b20 100644
> --- a/drivers/iio/gyro/st_gyro_core.c
> +++ b/drivers/iio/gyro/st_gyro_core.c
> @@ -111,8 +111,10 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
>  			.mask = 0x80,
>  		},
>  		.drdy_irq = {
> -			.addr = 0x22,
> -			.mask_int2 = 0x08,
> +			.int2 = {
> +				.addr = 0x22,
> +				.mask = 0x08,
> +			},
>  			/*
>  			 * The sensor has IHL (active low) and open
>  			 * drain settings, but only for INT1 and not
> @@ -181,8 +183,10 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
>  			.mask = 0x80,
>  		},
>  		.drdy_irq = {
> -			.addr = 0x22,
> -			.mask_int2 = 0x08,
> +			.int2 = {
> +				.addr = 0x22,
> +				.mask = 0x08,
> +			},
>  			/*
>  			 * The sensor has IHL (active low) and open
>  			 * drain settings, but only for INT1 and not
> @@ -246,8 +250,10 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
>  			.mask = 0x80,
>  		},
>  		.drdy_irq = {
> -			.addr = 0x22,
> -			.mask_int2 = 0x08,
> +			.int2 = {
> +				.addr = 0x22,
> +				.mask = 0x08,
> +			},
>  			/*
>  			 * The sensor has IHL (active low) and open
>  			 * drain settings, but only for INT1 and not
> diff --git a/drivers/iio/magnetometer/st_magn_core.c b/drivers/iio/magnetometer/st_magn_core.c
> index e68368b5b2a3..2c465cbe3b0a 100644
> --- a/drivers/iio/magnetometer/st_magn_core.c
> +++ b/drivers/iio/magnetometer/st_magn_core.c
> @@ -355,8 +355,10 @@ static const struct st_sensor_settings st_magn_sensors_settings[] = {
>  			.mask = 0x10,
>  		},
>  		.drdy_irq = {
> -			.addr = 0x62,
> -			.mask_int1 = 0x01,
> +			.int1 = {
> +				.addr = 0x62,
> +				.mask = 0x01,
> +			},
>  			.addr_stat_drdy = 0x67,
>  		},
>  		.multi_read_bit = false,
> diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c
> index c84eea73b3ae..240fa9f3ee3b 100644
> --- a/drivers/iio/pressure/st_pressure_core.c
> +++ b/drivers/iio/pressure/st_pressure_core.c
> @@ -280,9 +280,14 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
>  			.mask = 0x04,
>  		},
>  		.drdy_irq = {
> -			.addr = 0x22,
> -			.mask_int1 = 0x04,
> -			.mask_int2 = 0x20,
> +			.int1 = {
> +				.addr = 0x22,
> +				.mask = 0x04,
> +			},
> +			.int2 = {
> +				.addr = 0x22,
> +				.mask = 0x20,
> +			},
>  			.addr_ihl = 0x22,
>  			.mask_ihl = 0x80,
>  			.addr_od = 0x22,
> @@ -335,9 +340,6 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
>  			.addr = 0x20,
>  			.mask = 0x04,
>  		},
> -		.drdy_irq = {
> -			.addr = 0,
> -		},
>  		.multi_read_bit = true,
>  		.bootime = 2,
>  	},
> @@ -388,9 +390,10 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
>  			.mask = 0x04,
>  		},
>  		.drdy_irq = {
> -			.addr = 0x23,
> -			.mask_int1 = 0x01,
> -			.mask_int2 = 0x00,
> +			.int1 = {
> +				.addr = 0x23,
> +				.mask = 0x01,
> +			},
>  			.addr_ihl = 0x22,
>  			.mask_ihl = 0x80,
>  			.addr_od = 0x22,
> @@ -447,9 +450,10 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
>  			.mask = 0x02,
>  		},
>  		.drdy_irq = {
> -			.addr = 0x12,
> -			.mask_int1 = 0x04,
> -			.mask_int2 = 0x00,
> +			.int1 = {
> +				.addr = 0x12,
> +				.mask = 0x04,
> +			},
>  			.addr_ihl = 0x12,
>  			.mask_ihl = 0x80,
>  			.addr_od = 0x12,
> @@ -605,7 +609,8 @@ int st_press_common_probe(struct iio_dev *indio_dev)
>  	press_data->odr = press_data->sensor_settings->odr.odr_avl[0].hz;
>  
>  	/* Some devices don't support a data ready pin. */
> -	if (!pdata && press_data->sensor_settings->drdy_irq.addr)
> +	if (!pdata && (press_data->sensor_settings->drdy_irq.int1.addr ||
> +		       press_data->sensor_settings->drdy_irq.int2.addr))
>  		pdata =	(struct st_sensors_platform_data *)&default_press_pdata;
>  
>  	err = st_sensors_init_sensor(indio_dev, press_data->dev->platform_data);
> diff --git a/include/linux/iio/common/st_sensors.h b/include/linux/iio/common/st_sensors.h
> index 7b0fa8b5c120..ac3aa89518ca 100644
> --- a/include/linux/iio/common/st_sensors.h
> +++ b/include/linux/iio/common/st_sensors.h
> @@ -132,9 +132,8 @@ struct st_sensor_das {
>  
>  /**
>   * struct st_sensor_data_ready_irq - ST sensor device data-ready interrupt
> - * @addr: address of the register.
> - * @mask_int1: mask to enable/disable IRQ on INT1 pin.
> - * @mask_int2: mask to enable/disable IRQ on INT2 pin.
> + * struct int1 - data-ready configuration register for INT1 pin.
> + * struct int2 - data-ready configuration register for INT2 pin.
>   * @addr_ihl: address to enable/disable active low on the INT lines.
>   * @mask_ihl: mask to enable/disable active low on the INT lines.
>   * @addr_od: address to enable/disable Open Drain on the INT lines.
> @@ -145,9 +144,14 @@ struct st_sensor_das {
>   * @en_mask: mask to write the on/off value for enable.
>   */
>  struct st_sensor_data_ready_irq {
> -	u8 addr;
> -	u8 mask_int1;
> -	u8 mask_int2;
> +	struct {
> +		u8 addr;
> +		u8 mask;
> +	} int1;
> +	struct {
> +		u8 addr;
> +		u8 mask;
> +	} int2;
>  	u8 addr_ihl;
>  	u8 mask_ihl;
>  	u8 addr_od;

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux