iio: st_magn: Add irq trigger handling
[firefly-linux-kernel-4.4.55.git] / drivers / iio / magnetometer / st_magn_core.c
index b4bcfb790f49fe2060247b259e141d76bf1aff92..4c0cef865517b16344221055ce2e9ee8e9f06e8e 100644 (file)
@@ -192,6 +192,7 @@ static const struct iio_chan_spec st_magn_2_16bit_channels[] = {
 static const struct st_sensor_settings st_magn_sensors_settings[] = {
        {
                .wai = 0, /* This sensor has no valid WhoAmI report 0 */
+               .wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
                .sensors_supported = {
                        [0] = LSM303DLH_MAGN_DEV_NAME,
                },
@@ -268,6 +269,7 @@ static const struct st_sensor_settings st_magn_sensors_settings[] = {
        },
        {
                .wai = ST_MAGN_1_WAI_EXP,
+               .wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
                .sensors_supported = {
                        [0] = LSM303DLHC_MAGN_DEV_NAME,
                        [1] = LSM303DLM_MAGN_DEV_NAME,
@@ -346,6 +348,7 @@ static const struct st_sensor_settings st_magn_sensors_settings[] = {
        },
        {
                .wai = ST_MAGN_2_WAI_EXP,
+               .wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
                .sensors_supported = {
                        [0] = LIS3MDL_MAGN_DEV_NAME,
                },
@@ -477,6 +480,16 @@ static const struct iio_info magn_info = {
        .write_raw = &st_magn_write_raw,
 };
 
+#ifdef CONFIG_IIO_TRIGGER
+static const struct iio_trigger_ops st_magn_trigger_ops = {
+       .owner = THIS_MODULE,
+       .set_trigger_state = ST_MAGN_TRIGGER_SET_STATE,
+};
+#define ST_MAGN_TRIGGER_OPS (&st_magn_trigger_ops)
+#else
+#define ST_MAGN_TRIGGER_OPS NULL
+#endif
+
 int st_magn_common_probe(struct iio_dev *indio_dev)
 {
        struct st_sensor_data *mdata = iio_priv(indio_dev);
@@ -513,7 +526,8 @@ int st_magn_common_probe(struct iio_dev *indio_dev)
                return err;
 
        if (irq > 0) {
-               err = st_sensors_allocate_trigger(indio_dev, NULL);
+               err = st_sensors_allocate_trigger(indio_dev,
+                                               ST_MAGN_TRIGGER_OPS);
                if (err < 0)
                        goto st_magn_probe_trigger_error;
        }