* [RFC PATCH 1/2] iio: Add channel for Gravity @ 2016-12-07 10:14 Song Hongyan 2016-12-07 10:14 ` [RFC PATCH 2/2] iio: Add gravity sensor support Song Hongyan 2016-12-30 10:09 ` [RFC PATCH 1/2] iio: Add channel for Gravity Jonathan Cameron 0 siblings, 2 replies; 5+ messages in thread From: Song Hongyan @ 2016-12-07 10:14 UTC (permalink / raw) To: linux-iio; +Cc: jic23, jikos, srinivas.pandruvada, Song Hongyan Add new channel types support for gravity sensor. Signed-off-by: Song Hongyan <hongyan.song@intel.com> --- Documentation/ABI/testing/sysfs-bus-iio | 11 +++++++++++ drivers/iio/industrialio-core.c | 1 + include/uapi/linux/iio/types.h | 1 + tools/iio/iio_event_monitor.c | 2 ++ 4 files changed, 15 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/testing/sysfs-bus-iio index fee35c0..60b7406 100644 --- a/Documentation/ABI/testing/sysfs-bus-iio +++ b/Documentation/ABI/testing/sysfs-bus-iio @@ -170,6 +170,17 @@ Description: Has all of the equivalent parameters as per voltageY. Units after application of scale and offset are m/s^2. + +What: /sys/bus/iio/devices/iio:deviceX/in_gravity_x_raw +What: /sys/bus/iio/devices/iio:deviceX/in_gravity_y_raw +What: /sys/bus/iio/devices/iio:deviceX/in_gravity_z_raw +KernelVersion: 4.11 +Contact: linux-iio@vger.kernel.org +Description: + Gravity in direction x, y or z (may be arbitrarily assigned + but should match other such assignments on device). + Units after application of scale and offset are m/s^2. + What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_x_raw What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_y_raw What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_z_raw diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c index fc340ed..72fc96a 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c @@ -81,6 +81,7 @@ struct bus_type iio_bus_type = { [IIO_PH] = "ph", [IIO_UVINDEX] = "uvindex", [IIO_ELECTRICALCONDUCTIVITY] = "electricalconductivity", + [IIO_GRAVITY] = "gravity", }; static const char * const iio_modifier_names[] = { diff --git a/include/uapi/linux/iio/types.h b/include/uapi/linux/iio/types.h index 22e5e58..d3f7ba7 100644 --- a/include/uapi/linux/iio/types.h +++ b/include/uapi/linux/iio/types.h @@ -40,6 +40,7 @@ enum iio_chan_type { IIO_PH, IIO_UVINDEX, IIO_ELECTRICALCONDUCTIVITY, + IIO_GRAVITY, }; enum iio_modifier { diff --git a/tools/iio/iio_event_monitor.c b/tools/iio/iio_event_monitor.c index d9b7e0f..b61245e 100644 --- a/tools/iio/iio_event_monitor.c +++ b/tools/iio/iio_event_monitor.c @@ -57,6 +57,7 @@ [IIO_RESISTANCE] = "resistance", [IIO_PH] = "ph", [IIO_UVINDEX] = "uvindex", + [IIO_GRAVITY] = "gravity", }; static const char * const iio_ev_type_text[] = { @@ -149,6 +150,7 @@ static bool event_is_known(struct iio_event_data *event) case IIO_RESISTANCE: case IIO_PH: case IIO_UVINDEX: + case IIO_GRAVITY: break; default: return false; -- 1.9.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [RFC PATCH 2/2] iio: Add gravity sensor support 2016-12-07 10:14 [RFC PATCH 1/2] iio: Add channel for Gravity Song Hongyan @ 2016-12-07 10:14 ` Song Hongyan 2016-12-30 10:28 ` Jonathan Cameron 2016-12-30 10:09 ` [RFC PATCH 1/2] iio: Add channel for Gravity Jonathan Cameron 1 sibling, 1 reply; 5+ messages in thread From: Song Hongyan @ 2016-12-07 10:14 UTC (permalink / raw) To: linux-iio; +Cc: jic23, jikos, srinivas.pandruvada, Song Hongyan Gravity sensor and accelerometer have similar channels and share channel usage ids. So the most of the code for accel_3d can be reused. Signed-off-by: Song Hongyan <hongyan.song@intel.com> --- drivers/iio/accel/hid-sensor-accel-3d.c | 74 +++++++++++++++++++++++++++------ include/linux/hid-sensor-ids.h | 3 ++ 2 files changed, 64 insertions(+), 13 deletions(-) diff --git a/drivers/iio/accel/hid-sensor-accel-3d.c b/drivers/iio/accel/hid-sensor-accel-3d.c index ab1e238..9edd574 100644 --- a/drivers/iio/accel/hid-sensor-accel-3d.c +++ b/drivers/iio/accel/hid-sensor-accel-3d.c @@ -90,6 +90,41 @@ struct accel_3d_state { } }; +/* Channel definitions */ +static const struct iio_chan_spec gravity_channels[] = { + { + .type = IIO_GRAVITY, + .modified = 1, + .channel2 = IIO_MOD_X, + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), + .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | + BIT(IIO_CHAN_INFO_SCALE) | + BIT(IIO_CHAN_INFO_SAMP_FREQ) | + BIT(IIO_CHAN_INFO_HYSTERESIS), + .scan_index = CHANNEL_SCAN_INDEX_X, + }, { + .type = IIO_GRAVITY, + .modified = 1, + .channel2 = IIO_MOD_Y, + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), + .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | + BIT(IIO_CHAN_INFO_SCALE) | + BIT(IIO_CHAN_INFO_SAMP_FREQ) | + BIT(IIO_CHAN_INFO_HYSTERESIS), + .scan_index = CHANNEL_SCAN_INDEX_Y, + }, { + .type = IIO_GRAVITY, + .modified = 1, + .channel2 = IIO_MOD_Z, + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), + .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | + BIT(IIO_CHAN_INFO_SCALE) | + BIT(IIO_CHAN_INFO_SAMP_FREQ) | + BIT(IIO_CHAN_INFO_HYSTERESIS), + .scan_index = CHANNEL_SCAN_INDEX_Z, + } +}; + /* Adjust channel real bits based on report descriptor */ static void accel_3d_adjust_channel_bit_mask(struct iio_chan_spec *channels, int channel, int size) @@ -111,6 +146,8 @@ static int accel_3d_read_raw(struct iio_dev *indio_dev, int report_id = -1; u32 address; int ret_type; + struct hid_sensor_hub_device *hsdev = + accel_state->common_attributes.hsdev; *val = 0; *val2 = 0; @@ -122,8 +159,7 @@ static int accel_3d_read_raw(struct iio_dev *indio_dev, if (report_id >= 0) *val = sensor_hub_input_attr_get_raw_value( accel_state->common_attributes.hsdev, - HID_USAGE_SENSOR_ACCEL_3D, address, - report_id, + hsdev->usage, address, report_id, SENSOR_HUB_SYNC); else { *val = 0; @@ -272,7 +308,7 @@ static int accel_3d_parse_report(struct platform_device *pdev, st->accel[2].index, st->accel[2].report_id); st->scale_precision = hid_sensor_format_scale( - HID_USAGE_SENSOR_ACCEL_3D, + hsdev->usage, &st->accel[CHANNEL_SCAN_INDEX_X], &st->scale_pre_decml, &st->scale_post_decml); @@ -295,9 +331,12 @@ static int accel_3d_parse_report(struct platform_device *pdev, static int hid_accel_3d_probe(struct platform_device *pdev) { int ret = 0; - static const char *name = "accel_3d"; + static const char *name; struct iio_dev *indio_dev; struct accel_3d_state *accel_state; + const struct iio_chan_spec *channel_spec; + int channel_size; + struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data; indio_dev = devm_iio_device_alloc(&pdev->dev, @@ -311,24 +350,30 @@ static int hid_accel_3d_probe(struct platform_device *pdev) accel_state->common_attributes.hsdev = hsdev; accel_state->common_attributes.pdev = pdev; - ret = hid_sensor_parse_common_attributes(hsdev, - HID_USAGE_SENSOR_ACCEL_3D, + if (hsdev->usage == HID_USAGE_SENSOR_ACCEL_3D) { + name = "accel_3d"; + channel_spec = accel_3d_channels; + channel_size = sizeof(accel_3d_channels); + } else { + name = "gravity"; + channel_spec = gravity_channels; + channel_size = sizeof(gravity_channels); + } + ret = hid_sensor_parse_common_attributes(hsdev, hsdev->usage, &accel_state->common_attributes); if (ret) { dev_err(&pdev->dev, "failed to setup common attributes\n"); return ret; } + indio_dev->channels = kmemdup(channel_spec, channel_size, GFP_KERNEL); - indio_dev->channels = kmemdup(accel_3d_channels, - sizeof(accel_3d_channels), GFP_KERNEL); if (!indio_dev->channels) { dev_err(&pdev->dev, "failed to duplicate channels\n"); return -ENOMEM; } - ret = accel_3d_parse_report(pdev, hsdev, - (struct iio_chan_spec *)indio_dev->channels, - HID_USAGE_SENSOR_ACCEL_3D, accel_state); + (struct iio_chan_spec *)indio_dev->channels, + hsdev->usage, accel_state); if (ret) { dev_err(&pdev->dev, "failed to setup attributes\n"); goto error_free_dev_mem; @@ -363,7 +408,7 @@ static int hid_accel_3d_probe(struct platform_device *pdev) accel_state->callbacks.send_event = accel_3d_proc_event; accel_state->callbacks.capture_sample = accel_3d_capture_sample; accel_state->callbacks.pdev = pdev; - ret = sensor_hub_register_callback(hsdev, HID_USAGE_SENSOR_ACCEL_3D, + ret = sensor_hub_register_callback(hsdev, hsdev->usage, &accel_state->callbacks); if (ret < 0) { dev_err(&pdev->dev, "callback reg failed\n"); @@ -390,7 +435,7 @@ static int hid_accel_3d_remove(struct platform_device *pdev) struct iio_dev *indio_dev = platform_get_drvdata(pdev); struct accel_3d_state *accel_state = iio_priv(indio_dev); - sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_ACCEL_3D); + sensor_hub_remove_callback(hsdev, hsdev->usage); iio_device_unregister(indio_dev); hid_sensor_remove_trigger(&accel_state->common_attributes); iio_triggered_buffer_cleanup(indio_dev); @@ -404,6 +449,9 @@ static int hid_accel_3d_remove(struct platform_device *pdev) /* Format: HID-SENSOR-usage_id_in_hex_lowercase */ .name = "HID-SENSOR-200073", }, + { /* gravity sensor */ + .name = "HID-SENSOR-20007b", + }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(platform, hid_accel_3d_ids); diff --git a/include/linux/hid-sensor-ids.h b/include/linux/hid-sensor-ids.h index f2ee90a..b6778fd2 100644 --- a/include/linux/hid-sensor-ids.h +++ b/include/linux/hid-sensor-ids.h @@ -52,6 +52,9 @@ #define HID_USAGE_SENSOR_ANGL_VELOCITY_Y_AXIS 0x200458 #define HID_USAGE_SENSOR_ANGL_VELOCITY_Z_AXIS 0x200459 +/* Gravity vector */ +#define HID_USAGE_SENSOR_GRAVITY_VECTOR 0x20007B + /* ORIENTATION: Compass 3D: (200083) */ #define HID_USAGE_SENSOR_COMPASS_3D 0x200083 #define HID_USAGE_SENSOR_DATA_ORIENTATION 0x200470 -- 1.9.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [RFC PATCH 2/2] iio: Add gravity sensor support 2016-12-07 10:14 ` [RFC PATCH 2/2] iio: Add gravity sensor support Song Hongyan @ 2016-12-30 10:28 ` Jonathan Cameron 2016-12-30 17:27 ` Pandruvada, Srinivas 0 siblings, 1 reply; 5+ messages in thread From: Jonathan Cameron @ 2016-12-30 10:28 UTC (permalink / raw) To: Song Hongyan, linux-iio; +Cc: jikos, srinivas.pandruvada On 07/12/16 10:14, Song Hongyan wrote: > Gravity sensor and accelerometer have similar channels and > share channel usage ids. So the most of the code for accel_3d > can be reused. I would like to have seen a reference to the source for the IDs in here. Took me a little while to confirm these were no officially assigned (rather than in the reserved space). I found them in: http://www.usb.org/developers/hidpage/HUTRR59_-_Usages_for_Wearables.pdf Also, perhaps a reference to a device that supports this? Would be useful to give us an idea of how new it is for the purposes of distribution kernel back ports etc. I'd also like an Ack for this from Srinivas if possible. These are computed values presumably using various other sensors to separate out the gravity - I guess putting it in the acceleration modules makes sense rather than anywhere else. So looks fine to me. Only real request for future on this sort of patch is to provide a little more background information. Thanks, Jonathan > > Signed-off-by: Song Hongyan <hongyan.song@intel.com> > --- > drivers/iio/accel/hid-sensor-accel-3d.c | 74 +++++++++++++++++++++++++++------ > include/linux/hid-sensor-ids.h | 3 ++ > 2 files changed, 64 insertions(+), 13 deletions(-) > > diff --git a/drivers/iio/accel/hid-sensor-accel-3d.c b/drivers/iio/accel/hid-sensor-accel-3d.c > index ab1e238..9edd574 100644 > --- a/drivers/iio/accel/hid-sensor-accel-3d.c > +++ b/drivers/iio/accel/hid-sensor-accel-3d.c > @@ -90,6 +90,41 @@ struct accel_3d_state { > } > }; > > +/* Channel definitions */ > +static const struct iio_chan_spec gravity_channels[] = { > + { > + .type = IIO_GRAVITY, > + .modified = 1, > + .channel2 = IIO_MOD_X, > + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), > + .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | > + BIT(IIO_CHAN_INFO_SCALE) | > + BIT(IIO_CHAN_INFO_SAMP_FREQ) | > + BIT(IIO_CHAN_INFO_HYSTERESIS), > + .scan_index = CHANNEL_SCAN_INDEX_X, > + }, { > + .type = IIO_GRAVITY, > + .modified = 1, > + .channel2 = IIO_MOD_Y, > + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), > + .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | > + BIT(IIO_CHAN_INFO_SCALE) | > + BIT(IIO_CHAN_INFO_SAMP_FREQ) | > + BIT(IIO_CHAN_INFO_HYSTERESIS), > + .scan_index = CHANNEL_SCAN_INDEX_Y, > + }, { > + .type = IIO_GRAVITY, > + .modified = 1, > + .channel2 = IIO_MOD_Z, > + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), > + .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | > + BIT(IIO_CHAN_INFO_SCALE) | > + BIT(IIO_CHAN_INFO_SAMP_FREQ) | > + BIT(IIO_CHAN_INFO_HYSTERESIS), > + .scan_index = CHANNEL_SCAN_INDEX_Z, > + } > +}; > + > /* Adjust channel real bits based on report descriptor */ > static void accel_3d_adjust_channel_bit_mask(struct iio_chan_spec *channels, > int channel, int size) > @@ -111,6 +146,8 @@ static int accel_3d_read_raw(struct iio_dev *indio_dev, > int report_id = -1; > u32 address; > int ret_type; > + struct hid_sensor_hub_device *hsdev = > + accel_state->common_attributes.hsdev; > > *val = 0; > *val2 = 0; > @@ -122,8 +159,7 @@ static int accel_3d_read_raw(struct iio_dev *indio_dev, > if (report_id >= 0) > *val = sensor_hub_input_attr_get_raw_value( > accel_state->common_attributes.hsdev, > - HID_USAGE_SENSOR_ACCEL_3D, address, > - report_id, > + hsdev->usage, address, report_id, > SENSOR_HUB_SYNC); > else { > *val = 0; > @@ -272,7 +308,7 @@ static int accel_3d_parse_report(struct platform_device *pdev, > st->accel[2].index, st->accel[2].report_id); > > st->scale_precision = hid_sensor_format_scale( > - HID_USAGE_SENSOR_ACCEL_3D, > + hsdev->usage, > &st->accel[CHANNEL_SCAN_INDEX_X], > &st->scale_pre_decml, &st->scale_post_decml); > > @@ -295,9 +331,12 @@ static int accel_3d_parse_report(struct platform_device *pdev, > static int hid_accel_3d_probe(struct platform_device *pdev) > { > int ret = 0; > - static const char *name = "accel_3d"; > + static const char *name; > struct iio_dev *indio_dev; > struct accel_3d_state *accel_state; > + const struct iio_chan_spec *channel_spec; > + int channel_size; > + > struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data; > > indio_dev = devm_iio_device_alloc(&pdev->dev, > @@ -311,24 +350,30 @@ static int hid_accel_3d_probe(struct platform_device *pdev) > accel_state->common_attributes.hsdev = hsdev; > accel_state->common_attributes.pdev = pdev; > > - ret = hid_sensor_parse_common_attributes(hsdev, > - HID_USAGE_SENSOR_ACCEL_3D, > + if (hsdev->usage == HID_USAGE_SENSOR_ACCEL_3D) { > + name = "accel_3d"; > + channel_spec = accel_3d_channels; > + channel_size = sizeof(accel_3d_channels); > + } else { > + name = "gravity"; > + channel_spec = gravity_channels; > + channel_size = sizeof(gravity_channels); > + } > + ret = hid_sensor_parse_common_attributes(hsdev, hsdev->usage, > &accel_state->common_attributes); > if (ret) { > dev_err(&pdev->dev, "failed to setup common attributes\n"); > return ret; > } > + indio_dev->channels = kmemdup(channel_spec, channel_size, GFP_KERNEL); > > - indio_dev->channels = kmemdup(accel_3d_channels, > - sizeof(accel_3d_channels), GFP_KERNEL); > if (!indio_dev->channels) { > dev_err(&pdev->dev, "failed to duplicate channels\n"); > return -ENOMEM; > } > - > ret = accel_3d_parse_report(pdev, hsdev, > - (struct iio_chan_spec *)indio_dev->channels, > - HID_USAGE_SENSOR_ACCEL_3D, accel_state); > + (struct iio_chan_spec *)indio_dev->channels, > + hsdev->usage, accel_state); > if (ret) { > dev_err(&pdev->dev, "failed to setup attributes\n"); > goto error_free_dev_mem; > @@ -363,7 +408,7 @@ static int hid_accel_3d_probe(struct platform_device *pdev) > accel_state->callbacks.send_event = accel_3d_proc_event; > accel_state->callbacks.capture_sample = accel_3d_capture_sample; > accel_state->callbacks.pdev = pdev; > - ret = sensor_hub_register_callback(hsdev, HID_USAGE_SENSOR_ACCEL_3D, > + ret = sensor_hub_register_callback(hsdev, hsdev->usage, > &accel_state->callbacks); > if (ret < 0) { > dev_err(&pdev->dev, "callback reg failed\n"); > @@ -390,7 +435,7 @@ static int hid_accel_3d_remove(struct platform_device *pdev) > struct iio_dev *indio_dev = platform_get_drvdata(pdev); > struct accel_3d_state *accel_state = iio_priv(indio_dev); > > - sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_ACCEL_3D); > + sensor_hub_remove_callback(hsdev, hsdev->usage); > iio_device_unregister(indio_dev); > hid_sensor_remove_trigger(&accel_state->common_attributes); > iio_triggered_buffer_cleanup(indio_dev); > @@ -404,6 +449,9 @@ static int hid_accel_3d_remove(struct platform_device *pdev) > /* Format: HID-SENSOR-usage_id_in_hex_lowercase */ > .name = "HID-SENSOR-200073", > }, > + { /* gravity sensor */ > + .name = "HID-SENSOR-20007b", > + }, > { /* sentinel */ } > }; > MODULE_DEVICE_TABLE(platform, hid_accel_3d_ids); > diff --git a/include/linux/hid-sensor-ids.h b/include/linux/hid-sensor-ids.h > index f2ee90a..b6778fd2 100644 > --- a/include/linux/hid-sensor-ids.h > +++ b/include/linux/hid-sensor-ids.h > @@ -52,6 +52,9 @@ > #define HID_USAGE_SENSOR_ANGL_VELOCITY_Y_AXIS 0x200458 > #define HID_USAGE_SENSOR_ANGL_VELOCITY_Z_AXIS 0x200459 > > +/* Gravity vector */ > +#define HID_USAGE_SENSOR_GRAVITY_VECTOR 0x20007B > + > /* ORIENTATION: Compass 3D: (200083) */ > #define HID_USAGE_SENSOR_COMPASS_3D 0x200083 > #define HID_USAGE_SENSOR_DATA_ORIENTATION 0x200470 > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFC PATCH 2/2] iio: Add gravity sensor support 2016-12-30 10:28 ` Jonathan Cameron @ 2016-12-30 17:27 ` Pandruvada, Srinivas 0 siblings, 0 replies; 5+ messages in thread From: Pandruvada, Srinivas @ 2016-12-30 17:27 UTC (permalink / raw) To: Song, Hongyan, linux-iio@vger.kernel.org, jic23@kernel.org Cc: jikos@kernel.org T24gRnJpLCAyMDE2LTEyLTMwIGF0IDEwOjI4ICswMDAwLCBKb25hdGhhbiBDYW1lcm9uIHdyb3Rl Og0KPiBPbiAwNy8xMi8xNiAxMDoxNCwgU29uZyBIb25neWFuIHdyb3RlOg0KPiA+IA0KPiA+IEdy YXZpdHkgc2Vuc29yIGFuZCBhY2NlbGVyb21ldGVyIGhhdmUgc2ltaWxhciBjaGFubmVscyBhbmQN Cj4gPiBzaGFyZSBjaGFubmVsIHVzYWdlIGlkcy4gU28gdGhlIG1vc3Qgb2YgdGhlIGNvZGUgZm9y IGFjY2VsXzNkDQo+ID4gY2FuIGJlIHJldXNlZC4NCj4gSSB3b3VsZCBsaWtlIHRvIGhhdmUgc2Vl biBhIHJlZmVyZW5jZSB0byB0aGUgc291cmNlIGZvciB0aGUgSURzIGluDQo+IGhlcmUuIFRvb2sN Cj4gbWUgYSBsaXR0bGUgd2hpbGUgdG8gY29uZmlybSB0aGVzZSB3ZXJlIG5vIG9mZmljaWFsbHkg YXNzaWduZWQNCj4gKHJhdGhlciB0aGFuIGluIHRoZQ0KPiByZXNlcnZlZCBzcGFjZSkuwqDCoEkg Zm91bmQgdGhlbSBpbjoNCj4gaHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvaGlkcGFnZS9I VVRSUjU5Xy1fVXNhZ2VzX2Zvcl9XZWFyYWJsZXMuDQo+IHBkZg0KPiANCkhvbmd5YW4sIFBsZWFz ZSBhZGQgdGhlIGxpbmsgdG8gc3BlYyB3aGVyZSB0aGVzZSBJZHMgYXJlIGRlZmluZWQuDQpBbHNv IGV4cGxhaW4gc29tZXRoaW5nIGxpa2UgdGhpcyB0aGF0ICJncmF2aXR5IHNlbnNvciBpcyBhIHNv ZnQgc2Vuc29yLA0Kd2hpY2ggwqBkZXJpdmVzIHZhbHVlIGZyb20gc3RhbmRhcmQgYWNjbGVyb21l dGVyIGRldmljZSBieSBmaWx0ZXJpbmcgb3V0DQp0aGUgYWNjZWxlcmF0aW9uIHdoaWNoIGlzIG5v dCBjYXVzZWQgYnkgZ3Jhdml0eS4iIFlvdSBjYW4gYWRkIG1vcmUNCmluZm9ybWF0aW9uIGhvdyBm aWx0ZXJpbmcgaXMgZG9uZSwgaWYgeW91IGNhbi4NCg0KPiBBbHNvLCBwZXJoYXBzIGEgcmVmZXJl bmNlIHRvIGEgZGV2aWNlIHRoYXQgc3VwcG9ydHMgdGhpcz/CoMKgV291bGQgYmUNCj4gdXNlZnVs IHRvIGdpdmUNCj4gdXMgYW4gaWRlYSBvZiBob3cgbmV3IGl0IGlzIGZvciB0aGUgcHVycG9zZXMg b2YgZGlzdHJpYnV0aW9uIGtlcm5lbA0KPiBiYWNrIHBvcnRzIGV0Yy4NCkkgZG9uJ3QgdGhpbmsg YW55IGxhcHRvcCB0eXBlcyBvZiBkZXZpY2VzIGhhcyBzdXBwb3J0IGZvciB0aGlzLiBUaGlzIGlz DQppbiBJT1Qgc3BhY2Ugc28gZGlmZmljdWx0IHRvIGdldCB3aG8gaXMgYWN0dWFsbHkgdXNpbmcg dGhpcy4NCg0KPiANCj4gSSdkIGFsc28gbGlrZSBhbiBBY2sgZm9yIHRoaXMgZnJvbSBTcmluaXZh cyBpZiBwb3NzaWJsZS4NCkFmdGVyIGFkZGluZyB0aGUgYWJvdmUgaW5mb3JtYXRpb24geW91IGNh biBhZGQgbXnCoA0KQUNLIGluIHRoZSBuZXh0IHBhdGNoc2V0Lg0KDQpUaGFua3MsDQpTcmluaXZh cw0KDQoNCj4gDQo+IFRoZXNlIGFyZSBjb21wdXRlZCB2YWx1ZXMgcHJlc3VtYWJseSB1c2luZyB2 YXJpb3VzIG90aGVyIHNlbnNvcnMgdG8NCj4gc2VwYXJhdGUgb3V0IHRoZQ0KPiBncmF2aXR5IC0g SSBndWVzcyBwdXR0aW5nIGl0IGluIHRoZSBhY2NlbGVyYXRpb24gbW9kdWxlcyBtYWtlcyBzZW5z ZQ0KPiByYXRoZXIgdGhhbiBhbnl3aGVyZQ0KPiBlbHNlLg0KPiANCj4gU28gbG9va3MgZmluZSB0 byBtZS4gT25seSByZWFsIHJlcXVlc3QgZm9yIGZ1dHVyZSBvbiB0aGlzIHNvcnQgb2YNCj4gcGF0 Y2ggaXMgdG8gcHJvdmlkZQ0KPiBhIGxpdHRsZSBtb3JlIGJhY2tncm91bmQgaW5mb3JtYXRpb24u DQo+IA0KPiBUaGFua3MsDQo+IA0KPiBKb25hdGhhbg0KPiA+IA0KPiA+IA0KPiA+IFNpZ25lZC1v ZmYtYnk6IFNvbmcgSG9uZ3lhbiA8aG9uZ3lhbi5zb25nQGludGVsLmNvbT4NCj4gPiAtLS0NCj4g PiDCoGRyaXZlcnMvaWlvL2FjY2VsL2hpZC1zZW5zb3ItYWNjZWwtM2QuYyB8IDc0DQo+ID4gKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tDQo+ID4gwqBpbmNsdWRlL2xpbnV4L2hpZC1z ZW5zb3ItaWRzLmjCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMyArKw0KPiA+IMKgMiBmaWxlcyBj aGFuZ2VkLCA2NCBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkNCj4gPiANCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9paW8vYWNjZWwvaGlkLXNlbnNvci1hY2NlbC0zZC5jDQo+ID4gYi9k cml2ZXJzL2lpby9hY2NlbC9oaWQtc2Vuc29yLWFjY2VsLTNkLmMNCj4gPiBpbmRleCBhYjFlMjM4 Li45ZWRkNTc0IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvaWlvL2FjY2VsL2hpZC1zZW5zb3It YWNjZWwtM2QuYw0KPiA+ICsrKyBiL2RyaXZlcnMvaWlvL2FjY2VsL2hpZC1zZW5zb3ItYWNjZWwt M2QuYw0KPiA+IEBAIC05MCw2ICs5MCw0MSBAQCBzdHJ1Y3QgYWNjZWxfM2Rfc3RhdGUgew0KPiA+ IMKgCX0NCj4gPiDCoH07DQo+ID4gwqANCj4gPiArLyogQ2hhbm5lbCBkZWZpbml0aW9ucyAqLw0K PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgZ3Jhdml0eV9jaGFubmVsc1td ID0gew0KPiA+ICsJew0KPiA+ICsJCS50eXBlID0gSUlPX0dSQVZJVFksDQo+ID4gKwkJLm1vZGlm aWVkID0gMSwNCj4gPiArCQkuY2hhbm5lbDIgPSBJSU9fTU9EX1gsDQo+ID4gKwkJLmluZm9fbWFz a19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1JBVyksDQo+ID4gKwkJLmluZm9fbWFza19z aGFyZWRfYnlfdHlwZSA9DQo+ID4gQklUKElJT19DSEFOX0lORk9fT0ZGU0VUKSB8DQo+ID4gKwkJ QklUKElJT19DSEFOX0lORk9fU0NBTEUpIHwNCj4gPiArCQlCSVQoSUlPX0NIQU5fSU5GT19TQU1Q X0ZSRVEpIHwNCj4gPiArCQlCSVQoSUlPX0NIQU5fSU5GT19IWVNURVJFU0lTKSwNCj4gPiArCQku c2Nhbl9pbmRleCA9IENIQU5ORUxfU0NBTl9JTkRFWF9YLA0KPiA+ICsJfSwgew0KPiA+ICsJCS50 eXBlID0gSUlPX0dSQVZJVFksDQo+ID4gKwkJLm1vZGlmaWVkID0gMSwNCj4gPiArCQkuY2hhbm5l bDIgPSBJSU9fTU9EX1ksDQo+ID4gKwkJLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hB Tl9JTkZPX1JBVyksDQo+ID4gKwkJLmluZm9fbWFza19zaGFyZWRfYnlfdHlwZSA9DQo+ID4gQklU KElJT19DSEFOX0lORk9fT0ZGU0VUKSB8DQo+ID4gKwkJQklUKElJT19DSEFOX0lORk9fU0NBTEUp IHwNCj4gPiArCQlCSVQoSUlPX0NIQU5fSU5GT19TQU1QX0ZSRVEpIHwNCj4gPiArCQlCSVQoSUlP X0NIQU5fSU5GT19IWVNURVJFU0lTKSwNCj4gPiArCQkuc2Nhbl9pbmRleCA9IENIQU5ORUxfU0NB Tl9JTkRFWF9ZLA0KPiA+ICsJfSwgew0KPiA+ICsJCS50eXBlID0gSUlPX0dSQVZJVFksDQo+ID4g KwkJLm1vZGlmaWVkID0gMSwNCj4gPiArCQkuY2hhbm5lbDIgPSBJSU9fTU9EX1osDQo+ID4gKwkJ LmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1JBVyksDQo+ID4gKwkJLmlu Zm9fbWFza19zaGFyZWRfYnlfdHlwZSA9DQo+ID4gQklUKElJT19DSEFOX0lORk9fT0ZGU0VUKSB8 DQo+ID4gKwkJQklUKElJT19DSEFOX0lORk9fU0NBTEUpIHwNCj4gPiArCQlCSVQoSUlPX0NIQU5f SU5GT19TQU1QX0ZSRVEpIHwNCj4gPiArCQlCSVQoSUlPX0NIQU5fSU5GT19IWVNURVJFU0lTKSwN Cj4gPiArCQkuc2Nhbl9pbmRleCA9IENIQU5ORUxfU0NBTl9JTkRFWF9aLA0KPiA+ICsJfQ0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiDCoC8qIEFkanVzdCBjaGFubmVsIHJlYWwgYml0cyBiYXNlZCBvbiBy ZXBvcnQgZGVzY3JpcHRvciAqLw0KPiA+IMKgc3RhdGljIHZvaWQgYWNjZWxfM2RfYWRqdXN0X2No YW5uZWxfYml0X21hc2soc3RydWN0IGlpb19jaGFuX3NwZWMNCj4gPiAqY2hhbm5lbHMsDQo+ID4g wqAJCQkJCQlpbnQgY2hhbm5lbCwgaW50DQo+ID4gc2l6ZSkNCj4gPiBAQCAtMTExLDYgKzE0Niw4 IEBAIHN0YXRpYyBpbnQgYWNjZWxfM2RfcmVhZF9yYXcoc3RydWN0IGlpb19kZXYNCj4gPiAqaW5k aW9fZGV2LA0KPiA+IMKgCWludCByZXBvcnRfaWQgPSAtMTsNCj4gPiDCoAl1MzIgYWRkcmVzczsN Cj4gPiDCoAlpbnQgcmV0X3R5cGU7DQo+ID4gKwlzdHJ1Y3QgaGlkX3NlbnNvcl9odWJfZGV2aWNl ICpoc2RldiA9DQo+ID4gKwkJCQkJYWNjZWxfc3RhdGUtDQo+ID4gPmNvbW1vbl9hdHRyaWJ1dGVz LmhzZGV2Ow0KPiA+IMKgDQo+ID4gwqAJKnZhbCA9IDA7DQo+ID4gwqAJKnZhbDIgPSAwOw0KPiA+ IEBAIC0xMjIsOCArMTU5LDcgQEAgc3RhdGljIGludCBhY2NlbF8zZF9yZWFkX3JhdyhzdHJ1Y3Qg aWlvX2Rldg0KPiA+ICppbmRpb19kZXYsDQo+ID4gwqAJCWlmIChyZXBvcnRfaWQgPj0gMCkNCj4g PiDCoAkJCSp2YWwgPQ0KPiA+IHNlbnNvcl9odWJfaW5wdXRfYXR0cl9nZXRfcmF3X3ZhbHVlKA0K PiA+IMKgCQkJCQlhY2NlbF9zdGF0ZS0NCj4gPiA+Y29tbW9uX2F0dHJpYnV0ZXMuaHNkZXYsDQo+ ID4gLQkJCQkJSElEX1VTQUdFX1NFTlNPUl9BQ0NFTF8zRCwNCj4gPiBhZGRyZXNzLA0KPiA+IC0J CQkJCXJlcG9ydF9pZCwNCj4gPiArCQkJCQloc2Rldi0+dXNhZ2UsIGFkZHJlc3MsDQo+ID4gcmVw b3J0X2lkLA0KPiA+IMKgCQkJCQlTRU5TT1JfSFVCX1NZTkMpOw0KPiA+IMKgCQllbHNlIHsNCj4g PiDCoAkJCSp2YWwgPSAwOw0KPiA+IEBAIC0yNzIsNyArMzA4LDcgQEAgc3RhdGljIGludCBhY2Nl bF8zZF9wYXJzZV9yZXBvcnQoc3RydWN0DQo+ID4gcGxhdGZvcm1fZGV2aWNlICpwZGV2LA0KPiA+ IMKgCQkJc3QtPmFjY2VsWzJdLmluZGV4LCBzdC0NCj4gPiA+YWNjZWxbMl0ucmVwb3J0X2lkKTsN Cj4gPiDCoA0KPiA+IMKgCXN0LT5zY2FsZV9wcmVjaXNpb24gPSBoaWRfc2Vuc29yX2Zvcm1hdF9z Y2FsZSgNCj4gPiAtCQkJCUhJRF9VU0FHRV9TRU5TT1JfQUNDRUxfM0QsDQo+ID4gKwkJCQloc2Rl di0+dXNhZ2UsDQo+ID4gwqAJCQkJJnN0LT5hY2NlbFtDSEFOTkVMX1NDQU5fSU5ERVhfWF0sDQo+ ID4gwqAJCQkJJnN0LT5zY2FsZV9wcmVfZGVjbWwsICZzdC0NCj4gPiA+c2NhbGVfcG9zdF9kZWNt bCk7DQo+ID4gwqANCj4gPiBAQCAtMjk1LDkgKzMzMSwxMiBAQCBzdGF0aWMgaW50IGFjY2VsXzNk X3BhcnNlX3JlcG9ydChzdHJ1Y3QNCj4gPiBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsDQo+ID4gwqBz dGF0aWMgaW50IGhpZF9hY2NlbF8zZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQ0KPiA+IMKgew0KPiA+IMKgCWludCByZXQgPSAwOw0KPiA+IC0Jc3RhdGljIGNvbnN0IGNoYXIg Km5hbWUgPSAiYWNjZWxfM2QiOw0KPiA+ICsJc3RhdGljIGNvbnN0IGNoYXIgKm5hbWU7DQo+ID4g wqAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldjsNCj4gPiDCoAlzdHJ1Y3QgYWNjZWxfM2Rfc3Rh dGUgKmFjY2VsX3N0YXRlOw0KPiA+ICsJY29uc3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgKmNoYW5u ZWxfc3BlYzsNCj4gPiArCWludCBjaGFubmVsX3NpemU7DQo+ID4gKw0KPiA+IMKgCXN0cnVjdCBo aWRfc2Vuc29yX2h1Yl9kZXZpY2UgKmhzZGV2ID0gcGRldi0NCj4gPiA+ZGV2LnBsYXRmb3JtX2Rh dGE7DQo+ID4gwqANCj4gPiDCoAlpbmRpb19kZXYgPSBkZXZtX2lpb19kZXZpY2VfYWxsb2MoJnBk ZXYtPmRldiwNCj4gPiBAQCAtMzExLDI0ICszNTAsMzAgQEAgc3RhdGljIGludCBoaWRfYWNjZWxf M2RfcHJvYmUoc3RydWN0DQo+ID4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+IMKgCWFjY2Vs X3N0YXRlLT5jb21tb25fYXR0cmlidXRlcy5oc2RldiA9IGhzZGV2Ow0KPiA+IMKgCWFjY2VsX3N0 YXRlLT5jb21tb25fYXR0cmlidXRlcy5wZGV2ID0gcGRldjsNCj4gPiDCoA0KPiA+IC0JcmV0ID0g aGlkX3NlbnNvcl9wYXJzZV9jb21tb25fYXR0cmlidXRlcyhoc2RldiwNCj4gPiAtCQkJCQlISURf VVNBR0VfU0VOU09SX0FDQ0VMXzNELA0KPiA+ICsJaWYgKGhzZGV2LT51c2FnZSA9PSBISURfVVNB R0VfU0VOU09SX0FDQ0VMXzNEKSB7DQo+ID4gKwkJbmFtZSA9ICJhY2NlbF8zZCI7DQo+ID4gKwkJ Y2hhbm5lbF9zcGVjID0gYWNjZWxfM2RfY2hhbm5lbHM7DQo+ID4gKwkJY2hhbm5lbF9zaXplID0g c2l6ZW9mKGFjY2VsXzNkX2NoYW5uZWxzKTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJbmFtZSA9 ICJncmF2aXR5IjsNCj4gPiArCQljaGFubmVsX3NwZWMgPSBncmF2aXR5X2NoYW5uZWxzOw0KPiA+ ICsJCWNoYW5uZWxfc2l6ZSA9IHNpemVvZihncmF2aXR5X2NoYW5uZWxzKTsNCj4gPiArCX0NCj4g PiArCXJldCA9IGhpZF9zZW5zb3JfcGFyc2VfY29tbW9uX2F0dHJpYnV0ZXMoaHNkZXYsIGhzZGV2 LQ0KPiA+ID51c2FnZSwNCj4gPiDCoAkJCQkJJmFjY2VsX3N0YXRlLQ0KPiA+ID5jb21tb25fYXR0 cmlidXRlcyk7DQo+ID4gwqAJaWYgKHJldCkgew0KPiA+IMKgCQlkZXZfZXJyKCZwZGV2LT5kZXYs ICJmYWlsZWQgdG8gc2V0dXAgY29tbW9uDQo+ID4gYXR0cmlidXRlc1xuIik7DQo+ID4gwqAJCXJl dHVybiByZXQ7DQo+ID4gwqAJfQ0KPiA+ICsJaW5kaW9fZGV2LT5jaGFubmVscyA9IGttZW1kdXAo Y2hhbm5lbF9zcGVjLCBjaGFubmVsX3NpemUsDQo+ID4gR0ZQX0tFUk5FTCk7DQo+ID4gwqANCj4g PiAtCWluZGlvX2Rldi0+Y2hhbm5lbHMgPSBrbWVtZHVwKGFjY2VsXzNkX2NoYW5uZWxzLA0KPiA+ IC0JCQkJwqDCoMKgwqDCoMKgc2l6ZW9mKGFjY2VsXzNkX2NoYW5uZWxzKSwNCj4gPiBHRlBfS0VS TkVMKTsNCj4gPiDCoAlpZiAoIWluZGlvX2Rldi0+Y2hhbm5lbHMpIHsNCj4gPiDCoAkJZGV2X2Vy cigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGR1cGxpY2F0ZQ0KPiA+IGNoYW5uZWxzXG4iKTsNCj4g PiDCoAkJcmV0dXJuIC1FTk9NRU07DQo+ID4gwqAJfQ0KPiA+IC0NCj4gPiDCoAlyZXQgPSBhY2Nl bF8zZF9wYXJzZV9yZXBvcnQocGRldiwgaHNkZXYsDQo+ID4gLQkJCQnCoMKgwqDCoChzdHJ1Y3Qg aWlvX2NoYW5fc3BlYw0KPiA+ICopaW5kaW9fZGV2LT5jaGFubmVscywNCj4gPiAtCQkJCcKgwqDC oMKgSElEX1VTQUdFX1NFTlNPUl9BQ0NFTF8zRCwNCj4gPiBhY2NlbF9zdGF0ZSk7DQo+ID4gKwkJ CQkoc3RydWN0IGlpb19jaGFuX3NwZWMgKilpbmRpb19kZXYtDQo+ID4gPmNoYW5uZWxzLA0KPiA+ ICsJCQkJaHNkZXYtPnVzYWdlLCBhY2NlbF9zdGF0ZSk7DQo+ID4gwqAJaWYgKHJldCkgew0KPiA+ IMKgCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gc2V0dXANCj4gPiBhdHRyaWJ1dGVz XG4iKTsNCj4gPiDCoAkJZ290byBlcnJvcl9mcmVlX2Rldl9tZW07DQo+ID4gQEAgLTM2Myw3ICs0 MDgsNyBAQCBzdGF0aWMgaW50IGhpZF9hY2NlbF8zZF9wcm9iZShzdHJ1Y3QNCj4gPiBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpDQo+ID4gwqAJYWNjZWxfc3RhdGUtPmNhbGxiYWNrcy5zZW5kX2V2ZW50 ID0gYWNjZWxfM2RfcHJvY19ldmVudDsNCj4gPiDCoAlhY2NlbF9zdGF0ZS0+Y2FsbGJhY2tzLmNh cHR1cmVfc2FtcGxlID0NCj4gPiBhY2NlbF8zZF9jYXB0dXJlX3NhbXBsZTsNCj4gPiDCoAlhY2Nl bF9zdGF0ZS0+Y2FsbGJhY2tzLnBkZXYgPSBwZGV2Ow0KPiA+IC0JcmV0ID0gc2Vuc29yX2h1Yl9y ZWdpc3Rlcl9jYWxsYmFjayhoc2RldiwNCj4gPiBISURfVVNBR0VfU0VOU09SX0FDQ0VMXzNELA0K PiA+ICsJcmV0ID0gc2Vuc29yX2h1Yl9yZWdpc3Rlcl9jYWxsYmFjayhoc2RldiwgaHNkZXYtPnVz YWdlLA0KPiA+IMKgCQkJCQkmYWNjZWxfc3RhdGUtPmNhbGxiYWNrcyk7DQo+ID4gwqAJaWYgKHJl dCA8IDApIHsNCj4gPiDCoAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FsbGJhY2sgcmVnIGZhaWxl ZFxuIik7DQo+ID4gQEAgLTM5MCw3ICs0MzUsNyBAQCBzdGF0aWMgaW50IGhpZF9hY2NlbF8zZF9y ZW1vdmUoc3RydWN0DQo+ID4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+IMKgCXN0cnVjdCBp aW9fZGV2ICppbmRpb19kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiDCoAlz dHJ1Y3QgYWNjZWxfM2Rfc3RhdGUgKmFjY2VsX3N0YXRlID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsN Cj4gPiDCoA0KPiA+IC0Jc2Vuc29yX2h1Yl9yZW1vdmVfY2FsbGJhY2soaHNkZXYsDQo+ID4gSElE X1VTQUdFX1NFTlNPUl9BQ0NFTF8zRCk7DQo+ID4gKwlzZW5zb3JfaHViX3JlbW92ZV9jYWxsYmFj ayhoc2RldiwgaHNkZXYtPnVzYWdlKTsNCj4gPiDCoAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5k aW9fZGV2KTsNCj4gPiDCoAloaWRfc2Vuc29yX3JlbW92ZV90cmlnZ2VyKCZhY2NlbF9zdGF0ZS0N Cj4gPiA+Y29tbW9uX2F0dHJpYnV0ZXMpOw0KPiA+IMKgCWlpb190cmlnZ2VyZWRfYnVmZmVyX2Ns ZWFudXAoaW5kaW9fZGV2KTsNCj4gPiBAQCAtNDA0LDYgKzQ0OSw5IEBAIHN0YXRpYyBpbnQgaGlk X2FjY2VsXzNkX3JlbW92ZShzdHJ1Y3QNCj4gPiBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4g wqAJCS8qIEZvcm1hdDogSElELVNFTlNPUi11c2FnZV9pZF9pbl9oZXhfbG93ZXJjYXNlICovDQo+ ID4gwqAJCS5uYW1lID0gIkhJRC1TRU5TT1ItMjAwMDczIiwNCj4gPiDCoAl9LA0KPiA+ICsJewkv KiBncmF2aXR5IHNlbnNvciAqLw0KPiA+ICsJCS5uYW1lID0gIkhJRC1TRU5TT1ItMjAwMDdiIiwN Cj4gPiArCX0sDQo+ID4gwqAJeyAvKiBzZW50aW5lbCAqLyB9DQo+ID4gwqB9Ow0KPiA+IMKgTU9E VUxFX0RFVklDRV9UQUJMRShwbGF0Zm9ybSwgaGlkX2FjY2VsXzNkX2lkcyk7DQo+ID4gZGlmZiAt LWdpdCBhL2luY2x1ZGUvbGludXgvaGlkLXNlbnNvci1pZHMuaCBiL2luY2x1ZGUvbGludXgvaGlk LQ0KPiA+IHNlbnNvci1pZHMuaA0KPiA+IGluZGV4IGYyZWU5MGEuLmI2Nzc4ZmQyIDEwMDY0NA0K PiA+IC0tLSBhL2luY2x1ZGUvbGludXgvaGlkLXNlbnNvci1pZHMuaA0KPiA+ICsrKyBiL2luY2x1 ZGUvbGludXgvaGlkLXNlbnNvci1pZHMuaA0KPiA+IEBAIC01Miw2ICs1Miw5IEBADQo+ID4gwqAj ZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfQU5HTF9WRUxPQ0lUWV9ZX0FYSVMJCQkNCj4gPiAweDIw MDQ1OA0KPiA+IMKgI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0FOR0xfVkVMT0NJVFlfWl9BWElT CQkJDQo+ID4gMHgyMDA0NTkNCj4gPiDCoA0KPiA+ICsvKiBHcmF2aXR5IHZlY3RvciAqLw0KPiA+ ICsjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR1JBVklUWV9WRUNUT1IJCQkJDQo+ID4gMHgyMDAw N0INCj4gPiArDQo+ID4gwqAvKiBPUklFTlRBVElPTjogQ29tcGFzcyAzRDogKDIwMDA4MykgKi8N Cj4gPiDCoCNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9DT01QQVNTXzNECQkJCQ0KPiA+IDB4MjAw MDgzDQo+ID4gwqAjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTgkJCTAN Cj4gPiB4MjAwNDcwDQo+ID4g ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFC PATCH 1/2] iio: Add channel for Gravity 2016-12-07 10:14 [RFC PATCH 1/2] iio: Add channel for Gravity Song Hongyan 2016-12-07 10:14 ` [RFC PATCH 2/2] iio: Add gravity sensor support Song Hongyan @ 2016-12-30 10:09 ` Jonathan Cameron 1 sibling, 0 replies; 5+ messages in thread From: Jonathan Cameron @ 2016-12-30 10:09 UTC (permalink / raw) To: Song Hongyan, linux-iio; +Cc: jikos, srinivas.pandruvada On 07/12/16 10:14, Song Hongyan wrote: > Add new channel types support for gravity sensor. > > Signed-off-by: Song Hongyan <hongyan.song@intel.com> Firstly, sorry I took so long to get to this. It just missed my last catch up session before end of the year mess got in the way. Anyhow this looks fine to me and I'm happy to take it once any last corners are sorted in patch 2. > --- > Documentation/ABI/testing/sysfs-bus-iio | 11 +++++++++++ > drivers/iio/industrialio-core.c | 1 + > include/uapi/linux/iio/types.h | 1 + > tools/iio/iio_event_monitor.c | 2 ++ > 4 files changed, 15 insertions(+) > > diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/testing/sysfs-bus-iio > index fee35c0..60b7406 100644 > --- a/Documentation/ABI/testing/sysfs-bus-iio > +++ b/Documentation/ABI/testing/sysfs-bus-iio > @@ -170,6 +170,17 @@ Description: > Has all of the equivalent parameters as per voltageY. Units > after application of scale and offset are m/s^2. > > + > +What: /sys/bus/iio/devices/iio:deviceX/in_gravity_x_raw > +What: /sys/bus/iio/devices/iio:deviceX/in_gravity_y_raw > +What: /sys/bus/iio/devices/iio:deviceX/in_gravity_z_raw > +KernelVersion: 4.11 > +Contact: linux-iio@vger.kernel.org > +Description: > + Gravity in direction x, y or z (may be arbitrarily assigned > + but should match other such assignments on device). > + Units after application of scale and offset are m/s^2. > + > What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_x_raw > What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_y_raw > What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_z_raw > diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c > index fc340ed..72fc96a 100644 > --- a/drivers/iio/industrialio-core.c > +++ b/drivers/iio/industrialio-core.c > @@ -81,6 +81,7 @@ struct bus_type iio_bus_type = { > [IIO_PH] = "ph", > [IIO_UVINDEX] = "uvindex", > [IIO_ELECTRICALCONDUCTIVITY] = "electricalconductivity", > + [IIO_GRAVITY] = "gravity", > }; > > static const char * const iio_modifier_names[] = { > diff --git a/include/uapi/linux/iio/types.h b/include/uapi/linux/iio/types.h > index 22e5e58..d3f7ba7 100644 > --- a/include/uapi/linux/iio/types.h > +++ b/include/uapi/linux/iio/types.h > @@ -40,6 +40,7 @@ enum iio_chan_type { > IIO_PH, > IIO_UVINDEX, > IIO_ELECTRICALCONDUCTIVITY, > + IIO_GRAVITY, > }; > > enum iio_modifier { > diff --git a/tools/iio/iio_event_monitor.c b/tools/iio/iio_event_monitor.c > index d9b7e0f..b61245e 100644 > --- a/tools/iio/iio_event_monitor.c > +++ b/tools/iio/iio_event_monitor.c > @@ -57,6 +57,7 @@ > [IIO_RESISTANCE] = "resistance", > [IIO_PH] = "ph", > [IIO_UVINDEX] = "uvindex", > + [IIO_GRAVITY] = "gravity", > }; > > static const char * const iio_ev_type_text[] = { > @@ -149,6 +150,7 @@ static bool event_is_known(struct iio_event_data *event) > case IIO_RESISTANCE: > case IIO_PH: > case IIO_UVINDEX: > + case IIO_GRAVITY: > break; > default: > return false; > ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-12-30 17:27 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-12-07 10:14 [RFC PATCH 1/2] iio: Add channel for Gravity Song Hongyan 2016-12-07 10:14 ` [RFC PATCH 2/2] iio: Add gravity sensor support Song Hongyan 2016-12-30 10:28 ` Jonathan Cameron 2016-12-30 17:27 ` Pandruvada, Srinivas 2016-12-30 10:09 ` [RFC PATCH 1/2] iio: Add channel for Gravity Jonathan Cameron
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).