All of lore.kernel.org
 help / color / mirror / Atom feed
From: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
To: rrs@researchut.com, Song Hongyan <hongyan.song@intel.com>,
	linux-iio <linux-iio@vger.kernel.org>
Cc: stable@vger.kernel.org,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [STABLE REGRESSION] iio: hid-sensor-trigger: Change get poll value function order to avoid sensor properties losing after resume from S3
Date: Tue, 04 Apr 2017 17:44:40 -0700	[thread overview]
Message-ID: <1491353080.3695.4.camel@linux.intel.com> (raw)
In-Reply-To: <1491246858.17255.10.camel@researchut.com>

[-- Attachment #1: Type: text/plain, Size: 2133 bytes --]

Hi Ritesh,

Does the attached patch helps?

Thanks,
Srinivas

On Tue, 2017-04-04 at 00:44 +0530, Ritesh Raj Sarraf wrote:
> Adding Stable, LKML and IIO MLs.
> 
> Hello Hongyan,
> 
> Do you have any feedback ? With the bisected commit reverted, I've
> been
> successfully running the machine without any issues.
> 
> Ritesh
> 
> 
> On Sat, 2017-04-01 at 08:14 -0700, Srinivas Pandruvada wrote:
> > Hello Hongyan,
> > 
> > Can you check the findings of Ritesh?
> > 
> > Thanks,
> > Srinivas
> > 
> > On Sat, 2017-04-01 at 14:07 +0530, Ritesh Raj Sarraf wrote:
> > > Hello Srinivas,
> > > 
> > > With the Linux 4.10.7 release, I have encountered a regression
> > > introduced on my
> > > Lenovo Yoga 2 13, for the ITE Rotation Sensor.
> > > 
> > > 
> > > rrs@learner:~$ lsusb 
> > > Bus 001 Device 002: ID 8087:8000 Intel Corp. 
> > > Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
> > > Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
> > > Bus 002 Device 006: ID 048d:8350 Integrated Technology Express,
> > > Inc. 
> > > Bus 002 Device 005: ID 0bda:b728 Realtek Semiconductor Corp. 
> > > Bus 002 Device 004: ID 04f2:b40f Chicony Electronics Co., Ltd 
> > > Bus 002 Device 003: ID 04f3:0303 Elan Microelectronics Corp. 
> > > Bus 002 Device 002: ID 0bda:0129 Realtek Semiconductor Corp.
> > > RTS5129
> > > Card Reader
> > > Controller
> > > Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
> > > 2017-04-01 / 14:04:49 ♒♒♒  ☺  
> > > 
> > > 
> > > The ITE sensors do not feed any data on the 4.10.7 kernel.
> > > Reverting
> > > back to
> > > 4.10.5, everything works back.
> > > 
> > > 
> > > After a git bisect, the culprit reported is:
> > > 
> > > Bisecting: 0 revisions left to test after this (roughly 0 steps)
> > > [6c2aab07d12436af1cd8d9ac1d117a442cc91eec] iio: hid-sensor-
> > > trigger:
> > > Change get
> > > poll value function order to avoid sensor properties losing after
> > > resume from S3
> > > 1
> > > 
> > > Can you please review my findings to confirm that it really is a
> > > regression bug
> > > ?
> > > 
> > > 
> > > Thanks,
> > > Ritesh
> > > 

[-- Attachment #2: 0001-iio-hid-sensor-Store-restore-poll-and-hysteresis.patch --]
[-- Type: text/x-patch, Size: 3892 bytes --]

From 81a55bd9e6dfb4aec15da37a3a3ff8213d788f62 Mon Sep 17 00:00:00 2001
From: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Date: Tue, 4 Apr 2017 16:50:59 -0700
Subject: [PATCH] iio: hid-sensor: Store restore poll and hysteresis

Instead of relying on HW for restoring poll and hysteresis, store in driver
and restore on resume.

Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
---
 .../iio/common/hid-sensors/hid-sensor-attributes.c   | 17 +++++++++++++++++
 drivers/iio/common/hid-sensors/hid-sensor-trigger.c  | 20 +++++++++++++++++---
 include/linux/hid-sensor-hub.h                       |  2 ++
 3 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/drivers/iio/common/hid-sensors/hid-sensor-attributes.c b/drivers/iio/common/hid-sensors/hid-sensor-attributes.c
index 7afdac42..aa8cacf 100644
--- a/drivers/iio/common/hid-sensors/hid-sensor-attributes.c
+++ b/drivers/iio/common/hid-sensors/hid-sensor-attributes.c
@@ -221,6 +221,14 @@ int hid_sensor_write_samp_freq_value(struct hid_sensor_common *st,
 	if (ret < 0 || value < 0)
 		ret = -EINVAL;
 
+	ret = sensor_hub_get_feature(st->hsdev,
+				     st->poll.report_id,
+				     st->poll.index, sizeof(value), &value);
+	if (ret < 0 || value < 0)
+		return -EINVAL;
+
+	st->poll_interval = value;
+
 	return ret;
 }
 EXPORT_SYMBOL(hid_sensor_write_samp_freq_value);
@@ -266,6 +274,15 @@ int hid_sensor_write_raw_hyst_value(struct hid_sensor_common *st,
 	if (ret < 0 || value < 0)
 		ret = -EINVAL;
 
+	ret = sensor_hub_get_feature(st->hsdev,
+				     st->sensitivity.report_id,
+				     st->sensitivity.index, sizeof(value),
+				     &value);
+	if (ret < 0 || value < 0)
+		return -EINVAL;
+
+	st->raw_hystersis = value;
+
 	return ret;
 }
 EXPORT_SYMBOL(hid_sensor_write_raw_hyst_value);
diff --git a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
index ecf592d..be7011e 100644
--- a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
+++ b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
@@ -51,6 +51,8 @@ static int _hid_sensor_power_state(struct hid_sensor_common *st, bool state)
 			st->report_state.report_id,
 			st->report_state.index,
 			HID_USAGE_SENSOR_PROP_REPORTING_STATE_ALL_EVENTS_ENUM);
+
+		poll_value = hid_sensor_read_poll_value(st);
 	} else {
 		int val;
 
@@ -87,9 +89,7 @@ static int _hid_sensor_power_state(struct hid_sensor_common *st, bool state)
 	sensor_hub_get_feature(st->hsdev, st->power_state.report_id,
 			       st->power_state.index,
 			       sizeof(state_val), &state_val);
-	if (state)
-		poll_value = hid_sensor_read_poll_value(st);
-	if (poll_value > 0)
+	if (state && poll_value)
 		msleep_interruptible(poll_value * 2);
 
 	return 0;
@@ -127,6 +127,20 @@ static void hid_sensor_set_power_work(struct work_struct *work)
 	struct hid_sensor_common *attrb = container_of(work,
 						       struct hid_sensor_common,
 						       work);
+
+	if (attrb->poll_interval)
+		sensor_hub_set_feature(attrb->hsdev, attrb->poll.report_id,
+				       attrb->poll.index,
+				       sizeof(attrb->poll_interval),
+				       &attrb->poll_interval);
+
+	if (attrb->raw_hystersis)
+		sensor_hub_set_feature(attrb->hsdev,
+				       attrb->sensitivity.report_id,
+				       attrb->sensitivity.index,
+				       sizeof(attrb->raw_hystersis),
+				       &attrb->raw_hystersis);
+
 	_hid_sensor_power_state(attrb, true);
 }
 
diff --git a/include/linux/hid-sensor-hub.h b/include/linux/hid-sensor-hub.h
index 7ef111d..f32d7c3 100644
--- a/include/linux/hid-sensor-hub.h
+++ b/include/linux/hid-sensor-hub.h
@@ -231,6 +231,8 @@ struct hid_sensor_common {
 	unsigned usage_id;
 	atomic_t data_ready;
 	atomic_t user_requested_state;
+	int poll_interval;
+	int raw_hystersis;
 	struct iio_trigger *trigger;
 	int timestamp_ns_scale;
 	struct hid_sensor_hub_attribute_info poll;
-- 
2.9.3


  reply	other threads:[~2017-04-05  0:44 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1491035833.10386.1.camel@researchut.com>
     [not found] ` <1491059661.30396.37.camel@linux.intel.com>
2017-04-03 19:14   ` [STABLE REGRESSION] iio: hid-sensor-trigger: Change get poll value function order to avoid sensor properties losing after resume from S3 Ritesh Raj Sarraf
2017-04-05  0:44     ` Srinivas Pandruvada [this message]
2017-04-05  1:12       ` Song, Hongyan
2017-04-05  1:12         ` Song, Hongyan
2017-04-05 10:51       ` Ritesh Raj Sarraf
2017-04-05 15:35         ` Srinivas Pandruvada
2017-04-06  4:58           ` Song, Hongyan
2017-04-06  4:58             ` Song, Hongyan
2017-04-06  5:18             ` Srinivas Pandruvada
2017-04-05  4:59     ` Song, Hongyan
2017-04-05  4:59       ` Song, Hongyan

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=1491353080.3695.4.camel@linux.intel.com \
    --to=srinivas.pandruvada@linux.intel.com \
    --cc=hongyan.song@intel.com \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rrs@researchut.com \
    --cc=stable@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.