.int1 = {
.addr = 0x22,
.mask = 0x02,
+ .addr_od = 0x22,
+ .mask_od = 0x40,
},
.int2 = {
.addr = 0x22,
.mask = 0x10,
+ .addr_od = 0x22,
+ .mask_od = 0x40,
},
.addr_ihl = 0x22,
.mask_ihl = 0x80,
- .addr_od = 0x22,
- .mask_od = 0x40,
.stat_drdy = {
.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
.mask = 0x07,
.int1 = {
.addr = 0x22,
.mask = 0x04,
+ .addr_od = 0x22,
+ .mask_od = 0x40,
},
.int2 = {
.addr = 0x22,
.mask = 0x20,
+ .addr_od = 0x22,
+ .mask_od = 0x40,
},
.addr_ihl = 0x22,
.mask_ihl = 0x80,
- .addr_od = 0x22,
- .mask_od = 0x40,
.stat_drdy = {
.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
.mask = 0x07,
.int1 = {
.addr = 0x23,
.mask = 0x01,
+ .addr_od = 0x22,
+ .mask_od = 0x20,
},
.int2 = {
.addr = 0x24,
.mask = 0x01,
+ .addr_od = 0x22,
+ .mask_od = 0x20,
},
.addr_ihl = 0x22,
.mask_ihl = 0x08,
- .addr_od = 0x22,
- .mask_od = 0x20,
.stat_drdy = {
.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
.mask = 0x01,
}
if (pdata->open_drain) {
- if (!sdata->sensor_settings->drdy_irq.addr_od)
+ if (!sdata->sensor_settings->drdy_irq.int1.addr_od &&
+ !sdata->sensor_settings->drdy_irq.int2.addr_od)
dev_err(&indio_dev->dev,
"open drain requested but unsupported.\n");
else
}
if (sdata->int_pin_open_drain) {
+ u8 addr, mask;
+
+ if (sdata->drdy_int_pin == 1) {
+ addr = sdata->sensor_settings->drdy_irq.int1.addr_od;
+ mask = sdata->sensor_settings->drdy_irq.int1.mask_od;
+ } else {
+ addr = sdata->sensor_settings->drdy_irq.int2.addr_od;
+ mask = sdata->sensor_settings->drdy_irq.int2.mask_od;
+ }
+
dev_info(&indio_dev->dev,
- "set interrupt line to open drain mode\n");
- err = st_sensors_write_data_with_mask(indio_dev,
- sdata->sensor_settings->drdy_irq.addr_od,
- sdata->sensor_settings->drdy_irq.mask_od, 1);
+ "set interrupt line to open drain mode on pin %d\n",
+ sdata->drdy_int_pin);
+ err = st_sensors_write_data_with_mask(indio_dev, addr,
+ mask, 1);
if (err < 0)
return err;
}
.int1 = {
.addr = 0x22,
.mask = 0x04,
+ .addr_od = 0x22,
+ .mask_od = 0x40,
},
.int2 = {
.addr = 0x22,
.mask = 0x20,
+ .addr_od = 0x22,
+ .mask_od = 0x40,
},
.addr_ihl = 0x22,
.mask_ihl = 0x80,
- .addr_od = 0x22,
- .mask_od = 0x40,
.stat_drdy = {
.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
.mask = 0x03,
.int1 = {
.addr = 0x23,
.mask = 0x01,
+ .addr_od = 0x22,
+ .mask_od = 0x40,
},
.addr_ihl = 0x22,
.mask_ihl = 0x80,
- .addr_od = 0x22,
- .mask_od = 0x40,
.stat_drdy = {
.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
.mask = 0x03,
.int1 = {
.addr = 0x12,
.mask = 0x04,
+ .addr_od = 0x12,
+ .mask_od = 0x40,
},
.addr_ihl = 0x12,
.mask_ihl = 0x80,
- .addr_od = 0x12,
- .mask_od = 0x40,
.stat_drdy = {
.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
.mask = 0x03,
u8 mask;
};
+/**
+ * struct st_sensor_int_drdy - ST sensor device drdy line parameters
+ * @addr: address of INT drdy register.
+ * @mask: mask to enable drdy line.
+ * @addr_od: address to enable/disable Open Drain on the INT line.
+ * @mask_od: mask to enable/disable Open Drain on the INT line.
+ */
+struct st_sensor_int_drdy {
+ u8 addr;
+ u8 mask;
+ u8 addr_od;
+ u8 mask_od;
+};
+
/**
* struct st_sensor_data_ready_irq - ST sensor device data-ready interrupt
* 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.
- * @mask_od: mask to enable/disable Open Drain on the INT lines.
* struct stat_drdy - status register of DRDY (data ready) interrupt.
* struct ig1 - represents the Interrupt Generator 1 of sensors.
* @en_addr: address of the enable ig1 register.
* @en_mask: mask to write the on/off value for enable.
*/
struct st_sensor_data_ready_irq {
- struct {
- u8 addr;
- u8 mask;
- } int1;
- struct {
- u8 addr;
- u8 mask;
- } int2;
+ struct st_sensor_int_drdy int1;
+ struct st_sensor_int_drdy int2;
u8 addr_ihl;
u8 mask_ihl;
- u8 addr_od;
- u8 mask_od;
struct {
u8 addr;
u8 mask;