From: Jonathan Cameron <jic23-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Srinivas Pandruvada
<srinivas.pandruvada-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
jkosina-AlSwsSmVLrQ@public.gmane.org
Cc: linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH v1 2/2] HID: hid-sensor-hub: Enhance feature report set API
Date: Sun, 01 Feb 2015 10:34:42 +0000 [thread overview]
Message-ID: <54CE0142.3080906@kernel.org> (raw)
In-Reply-To: <1421027714-25726-3-git-send-email-srinivas.pandruvada-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
On 12/01/15 01:55, Srinivas Pandruvada wrote:
> Current API only allows setting one offset in the field. This API
> is extended to set multiple offsets in the field report.
> Also update parameters in the users of this API.
>
> Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
Again, looks to be a straightforward addition. One trivial point inline.
With that fixed
Reviewed-by: Jonathan Cameron <jic23-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
> ---
> drivers/hid/hid-sensor-hub.c | 22 ++++++++++++++++++++--
> .../iio/common/hid-sensors/hid-sensor-attributes.c | 11 +++++------
> .../iio/common/hid-sensors/hid-sensor-trigger.c | 9 +++++----
> include/linux/hid-sensor-hub.h | 5 +++--
> 4 files changed, 33 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/hid/hid-sensor-hub.c b/drivers/hid/hid-sensor-hub.c
> index d17aa67..8bed109 100644
> --- a/drivers/hid/hid-sensor-hub.c
> +++ b/drivers/hid/hid-sensor-hub.c
> @@ -194,10 +194,14 @@ int sensor_hub_remove_callback(struct hid_sensor_hub_device *hsdev,
> EXPORT_SYMBOL_GPL(sensor_hub_remove_callback);
>
> int sensor_hub_set_feature(struct hid_sensor_hub_device *hsdev, u32 report_id,
> - u32 field_index, s32 value)
> + u32 field_index, int buffer_size, void *buffer)
> {
> struct hid_report *report;
> struct sensor_hub_data *data = hid_get_drvdata(hsdev->hdev);
> + __s32 *buf32 = (__s32 *)buffer;
Don't need this cast. Can assign void * to any pointer directly.
> + int i = 0;
> + int remaining_bytes;
> + __s32 value;
> int ret = 0;
>
> mutex_lock(&data->mutex);
> @@ -206,7 +210,21 @@ int sensor_hub_set_feature(struct hid_sensor_hub_device *hsdev, u32 report_id,
> ret = -EINVAL;
> goto done_proc;
> }
> - hid_set_field(report->field[field_index], 0, value);
> +
> + remaining_bytes = do_div(buffer_size, sizeof(__s32));
> + if (buffer_size) {
> + for (i = 0; i < buffer_size; ++i) {
> + hid_set_field(report->field[field_index], i,
> + cpu_to_le32(*buf32));
> + ++buf32;
> + }
> + }
> + if (remaining_bytes) {
> + value = 0;
> + memcpy(&value, (u8 *)buf32, remaining_bytes);
> + hid_set_field(report->field[field_index], i,
> + cpu_to_le32(value));
> + }
> hid_hw_request(hsdev->hdev, report, HID_REQ_SET_REPORT);
> hid_hw_wait(hsdev->hdev);
>
> diff --git a/drivers/iio/common/hid-sensors/hid-sensor-attributes.c b/drivers/iio/common/hid-sensors/hid-sensor-attributes.c
> index e1435e9..e81f434 100644
> --- a/drivers/iio/common/hid-sensors/hid-sensor-attributes.c
> +++ b/drivers/iio/common/hid-sensors/hid-sensor-attributes.c
> @@ -212,9 +212,8 @@ int hid_sensor_write_samp_freq_value(struct hid_sensor_common *st,
> else
> value = 0;
> }
> - ret = sensor_hub_set_feature(st->hsdev,
> - st->poll.report_id,
> - st->poll.index, value);
> + ret = sensor_hub_set_feature(st->hsdev, st->poll.report_id,
> + st->poll.index, sizeof(value), &value);
> if (ret < 0 || value < 0)
> ret = -EINVAL;
>
> @@ -254,9 +253,9 @@ int hid_sensor_write_raw_hyst_value(struct hid_sensor_common *st,
> value = convert_to_vtf_format(st->sensitivity.size,
> st->sensitivity.unit_expo,
> val1, val2);
> - ret = sensor_hub_set_feature(st->hsdev,
> - st->sensitivity.report_id,
> - st->sensitivity.index, value);
> + ret = sensor_hub_set_feature(st->hsdev, st->sensitivity.report_id,
> + st->sensitivity.index, sizeof(value),
> + &value);
> if (ret < 0 || value < 0)
> ret = -EINVAL;
>
> diff --git a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
> index ef0c495..910e82a 100644
> --- a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
> +++ b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
> @@ -64,15 +64,16 @@ int hid_sensor_power_state(struct hid_sensor_common *st, bool state)
> 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);
> + st->power_state.index, sizeof(state_val),
> + &state_val);
> }
>
> 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);
> + st->report_state.index,
> + sizeof(report_val),
> + &report_val);
> }
>
> sensor_hub_get_feature(st->hsdev, st->power_state.report_id,
> diff --git a/include/linux/hid-sensor-hub.h b/include/linux/hid-sensor-hub.h
> index 1995bbd..a51c768 100644
> --- a/include/linux/hid-sensor-hub.h
> +++ b/include/linux/hid-sensor-hub.h
> @@ -190,13 +190,14 @@ int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev,
> * @hsdev: Hub device instance.
> * @report_id: Report id to look for
> * @field_index: Field index inside a report
> -* @value: Value to set
> +* @buffer_size: size of the buffer
> +* @buffer: buffer to use in the feature set
> *
> * Used to set a field in feature report. For example this can set polling
> * interval, sensitivity, activate/deactivate state.
> */
> int sensor_hub_set_feature(struct hid_sensor_hub_device *hsdev, u32 report_id,
> - u32 field_index, s32 value);
> + u32 field_index, int buffer_size, void *buffer);
>
> /**
> * sensor_hub_get_feature() - Feature get request
>
prev parent reply other threads:[~2015-02-01 10:34 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-12 1:55 [PATCH v1 0/2] Enhance feature report APIs Srinivas Pandruvada
2015-01-12 1:55 ` [PATCH v1 1/2] HID: hid-sensor-hub: Enhance get feature report API Srinivas Pandruvada
[not found] ` <1421027714-25726-2-git-send-email-srinivas.pandruvada-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2015-01-12 3:57 ` Antonio Borneo
[not found] ` <CAAj6DX1a-UNkdtKZ+eoF2Cvv_nfM1Cc-Vqu_+iHn_sRNto+NjQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-12 16:38 ` Srinivas Pandruvada
2015-02-01 10:29 ` Jonathan Cameron
2015-01-12 1:55 ` [PATCH v1 2/2] HID: hid-sensor-hub: Enhance feature report set API Srinivas Pandruvada
[not found] ` <1421027714-25726-3-git-send-email-srinivas.pandruvada-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2015-02-01 10:34 ` Jonathan Cameron [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54CE0142.3080906@kernel.org \
--to=jic23-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
--cc=jkosina-AlSwsSmVLrQ@public.gmane.org \
--cc=linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=srinivas.pandruvada-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).