iio: hid-sensor-hub: Remove hard coded indexes
authorSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Fri, 24 Jan 2014 02:50:22 +0000 (18:50 -0800)
committerJiri Kosina <jkosina@suse.cz>
Mon, 17 Feb 2014 14:09:47 +0000 (15:09 +0100)
Remove the hard coded indexes, instead search for usage id and
use the index to set the power and report state.
This will fix issue, where the report descriptor doesn't contain
the full list of possible selector for power and report state.

Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Acked-by: Jonathan Cameron <jic23@kernel.org>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/iio/common/hid-sensors/hid-sensor-trigger.c
include/linux/hid-sensor-ids.h

index 7dcf83998e6f7fc58de8c5c3a894207abcd06bab..dbefbdaf7cd10b4c25f31f33a63b7d6b37d58c03 100644 (file)
@@ -38,29 +38,40 @@ static int hid_sensor_data_rdy_trigger_set_state(struct iio_trigger *trig,
        if (state) {
                if (sensor_hub_device_open(st->hsdev))
                        return -EIO;
-               state_val =
-               HID_USAGE_SENSOR_PROP_POWER_STATE_D0_FULL_POWER_ENUM;
-               report_val =
-               HID_USAGE_SENSOR_PROP_REPORTING_STATE_ALL_EVENTS_ENUM;
-
+               state_val = hid_sensor_get_usage_index(st->hsdev,
+                       st->power_state.report_id,
+                       st->power_state.index,
+                       HID_USAGE_SENSOR_PROP_POWER_STATE_D0_FULL_POWER_ENUM);
+               report_val = hid_sensor_get_usage_index(st->hsdev,
+                       st->report_state.report_id,
+                       st->report_state.index,
+                       HID_USAGE_SENSOR_PROP_REPORTING_STATE_ALL_EVENTS_ENUM);
        } else {
                sensor_hub_device_close(st->hsdev);
-               state_val =
-               HID_USAGE_SENSOR_PROP_POWER_STATE_D4_POWER_OFF_ENUM;
-               report_val =
-               HID_USAGE_SENSOR_PROP_REPORTING_STATE_NO_EVENTS_ENUM;
+               state_val = hid_sensor_get_usage_index(st->hsdev,
+                       st->power_state.report_id,
+                       st->power_state.index,
+                       HID_USAGE_SENSOR_PROP_POWER_STATE_D4_POWER_OFF_ENUM);
+               report_val = hid_sensor_get_usage_index(st->hsdev,
+                       st->report_state.report_id,
+                       st->report_state.index,
+                       HID_USAGE_SENSOR_PROP_REPORTING_STATE_NO_EVENTS_ENUM);
        }
-
        st->data_ready = state;
-       state_val += st->power_state.logical_minimum;
-       report_val += st->report_state.logical_minimum;
-       sensor_hub_set_feature(st->hsdev, st->power_state.report_id,
+
+       if (state_val >= 0) {
+               state_val += st->power_state.logical_minimum;
+               sensor_hub_set_feature(st->hsdev, st->power_state.report_id,
                                        st->power_state.index,
                                        (s32)state_val);
+       }
 
-       sensor_hub_set_feature(st->hsdev, st->report_state.report_id,
+       if (report_val >= 0) {
+               report_val += st->report_state.logical_minimum;
+               sensor_hub_set_feature(st->hsdev, st->report_state.report_id,
                                        st->report_state.index,
                                        (s32)report_val);
+       }
 
        return 0;
 }
index beaf965621c164735bf070d7513de36d071405b1..f8607605a31c453a4c57827fafa566a7e708e22d 100644 (file)
 #define HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS               0x1000
 
 /* Power state enumerations */
-#define HID_USAGE_SENSOR_PROP_POWER_STATE_UNDEFINED_ENUM               0x00
-#define HID_USAGE_SENSOR_PROP_POWER_STATE_D0_FULL_POWER_ENUM           0x01
-#define HID_USAGE_SENSOR_PROP_POWER_STATE_D1_LOW_POWER_ENUM            0x02
-#define HID_USAGE_SENSOR_PROP_POWER_STATE_D2_STANDBY_WITH_WAKE_ENUM    0x03
-#define HID_USAGE_SENSOR_PROP_POWER_STATE_D3_SLEEP_WITH_WAKE_ENUM      0x04
-#define HID_USAGE_SENSOR_PROP_POWER_STATE_D4_POWER_OFF_ENUM            0x05
+#define HID_USAGE_SENSOR_PROP_POWER_STATE_UNDEFINED_ENUM       0x200850
+#define HID_USAGE_SENSOR_PROP_POWER_STATE_D0_FULL_POWER_ENUM   0x200851
+#define HID_USAGE_SENSOR_PROP_POWER_STATE_D1_LOW_POWER_ENUM    0x200852
+#define HID_USAGE_SENSOR_PROP_POWER_STATE_D2_STANDBY_WITH_WAKE_ENUM 0x200853
+#define HID_USAGE_SENSOR_PROP_POWER_STATE_D3_SLEEP_WITH_WAKE_ENUM 0x200854
+#define HID_USAGE_SENSOR_PROP_POWER_STATE_D4_POWER_OFF_ENUM    0x200855
 
 /* Report State enumerations */
-#define HID_USAGE_SENSOR_PROP_REPORTING_STATE_NO_EVENTS_ENUM           0x00
-#define HID_USAGE_SENSOR_PROP_REPORTING_STATE_ALL_EVENTS_ENUM          0x01
+#define HID_USAGE_SENSOR_PROP_REPORTING_STATE_NO_EVENTS_ENUM   0x200840
+#define HID_USAGE_SENSOR_PROP_REPORTING_STATE_ALL_EVENTS_ENUM  0x200841
 
 #endif