forked from luck/tmp_suning_uos_patched
HID: hid-sensor-hub: Add selector api
In some report descriptors, they leave holes in the selectors. In this case if we use hardcoded selector values, this will result in invalid values. For example, if there is selectors defined for Power State from OFF to D0 to D3. We can't use indexes of these states if some states are not implemented or not present in the report decriptors. In this case, we need to get the indexes from report descriptors. One API is added to get the index of a selector. This API will search for usage id in the field usage list and return the index. Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
4988abf174
commit
e02cee4819
@ -291,6 +291,28 @@ int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(sensor_hub_input_attr_get_raw_value);
|
EXPORT_SYMBOL_GPL(sensor_hub_input_attr_get_raw_value);
|
||||||
|
|
||||||
|
int hid_sensor_get_usage_index(struct hid_sensor_hub_device *hsdev,
|
||||||
|
u32 report_id, int field_index, u32 usage_id)
|
||||||
|
{
|
||||||
|
struct hid_report *report;
|
||||||
|
struct hid_field *field;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
report = sensor_hub_report(report_id, hsdev->hdev, HID_FEATURE_REPORT);
|
||||||
|
if (!report || (field_index >= report->maxfield))
|
||||||
|
goto done_proc;
|
||||||
|
|
||||||
|
field = report->field[field_index];
|
||||||
|
for (i = 0; i < field->maxusage; ++i) {
|
||||||
|
if (field->usage[i].hid == usage_id)
|
||||||
|
return field->usage[i].usage_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
done_proc:
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(hid_sensor_get_usage_index);
|
||||||
|
|
||||||
int sensor_hub_input_get_attribute_info(struct hid_sensor_hub_device *hsdev,
|
int sensor_hub_input_get_attribute_info(struct hid_sensor_hub_device *hsdev,
|
||||||
u8 type,
|
u8 type,
|
||||||
u32 usage_id,
|
u32 usage_id,
|
||||||
|
@ -218,4 +218,7 @@ int hid_sensor_write_samp_freq_value(struct hid_sensor_common *st,
|
|||||||
int hid_sensor_read_samp_freq_value(struct hid_sensor_common *st,
|
int hid_sensor_read_samp_freq_value(struct hid_sensor_common *st,
|
||||||
int *val1, int *val2);
|
int *val1, int *val2);
|
||||||
|
|
||||||
|
int hid_sensor_get_usage_index(struct hid_sensor_hub_device *hsdev,
|
||||||
|
u32 report_id, int field_index, u32 usage_id);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user