From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oskar Andero Subject: Re: [PATCH] input: don't call input_dev_release_keys() in resume Date: Fri, 5 Jul 2013 09:46:32 +0200 Message-ID: <20130705074632.GF11422@caracas.corpusers.net> References: <1362664882-16194-1-git-send-email-oskar.andero@sonymobile.com> <20130404163313.GA12302@core.coreip.homeip.net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Return-path: Content-Disposition: inline In-Reply-To: <20130404163313.GA12302@core.coreip.homeip.net> Sender: linux-kernel-owner@vger.kernel.org To: Dmitry Torokhov Cc: "linux-kernel@vger.kernel.org" , "linux-input@vger.kernel.org" , "Makarov, Aleksej" List-Id: linux-input@vger.kernel.org Hi Dmitry, On 18:33 Thu 04 Apr , Dmitry Torokhov wrote: > Hi Oskar, > > On Thu, Mar 07, 2013 at 03:01:22PM +0100, oskar.andero@sonymobile.com wrote: > > From: Aleksej Makarov > > > > When waking up the platform by pressing a specific key, sending a > > release on that key makes it impossible to react on the event in > > user-space. > > > > No, we can not simply not release keys after resume from suspend, as > this leads to keys being stuck. Consider you are holding an 'I' key on > your external USB keyboard and close your laptop's lid. Then you release > the key and leave. Later you come back, open the lid waking the laptop > and observe endless stream of 'I' in your open terminal. > > Maybe we should release the keys during suspend time? I am not sure how > Android infrastructure will react to this though... I finally got the time to try this out. Releasing the keys in suspend also solves our problem. Would such patch work for the USB keyboard case you described? Theoretically, I think it should, right? So, basically: static int input_dev_suspend(struct device *dev) { struct input_dev *input_dev = to_input_dev(dev); - mutex_lock(&input_dev->mutex); - - if (input_dev->users) - input_dev_toggle(input_dev, false); - - mutex_unlock(&input_dev->mutex); + input_reset_device(input_dev); return 0; } static int input_dev_resume(struct device *dev) { - struct input_dev *input_dev = to_input_dev(dev); - - input_reset_device(input_dev); - return 0; } Should I send the patch? -Oskar