ite-cir: make IR receive work after resume
Commit Message
Just recently acquired an Asus Eee Box PC with an onboard IR receiver
driven by ite-cir (ITE8713 sub-variant). Works out of the box with the
ite-cir driver in 2.6.39, but stops working after a suspend/resume
cycle. Its fixed by simply reinitializing registers after resume,
similar to what's done in the nuvoton-cir driver. I've not tested with
any other ITE variant, but code inspection suggests this should be safe
on all variants.
Reported-by: Stephan Raue <sraue@openelec.tv>
CC: Juan Jesús García de Soria <skandalfo@gmail.com>
Signed-off-by: Jarod Wilson <jarod@redhat.com>
---
drivers/media/rc/ite-cir.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
Comments
Jarod Wilson wrote:
> Just recently acquired an Asus Eee Box PC with an onboard IR receiver
> driven by ite-cir (ITE8713 sub-variant). Works out of the box with the
> ite-cir driver in 2.6.39, but stops working after a suspend/resume
> cycle. Its fixed by simply reinitializing registers after resume,
> similar to what's done in the nuvoton-cir driver. I've not tested with
> any other ITE variant, but code inspection suggests this should be safe
> on all variants.
>
> Reported-by: Stephan Raue<sraue@openelec.tv>
> CC: Juan Jesús García de Soria<skandalfo@gmail.com>
> Signed-off-by: Jarod Wilson<jarod@redhat.com>
> ---
> drivers/media/rc/ite-cir.c | 2 ++
> 1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/media/rc/ite-cir.c b/drivers/media/rc/ite-cir.c
> index 43908a7..8488e53 100644
> --- a/drivers/media/rc/ite-cir.c
> +++ b/drivers/media/rc/ite-cir.c
> @@ -1684,6 +1684,8 @@ static int ite_resume(struct pnp_dev *pdev)
> /* wake up the transmitter */
> wake_up_interruptible(&dev->tx_queue);
> } else {
> + /* reinitialize hardware config registers */
> + itdev->params.init_hardware(itdev);
> /* enable the receiver */
> dev->params.enable_rx(dev);
Gah. I've obviously screwed this one up. Tested a locally built version
of the module on the machine itself, then did a copy/paste of the
init_hardware line from elsewhere in the driver where struct ite_dev was
called itdev instead of just dev. v2 momentarily.
@@ -1684,6 +1684,8 @@ static int ite_resume(struct pnp_dev *pdev)
/* wake up the transmitter */
wake_up_interruptible(&dev->tx_queue);
} else {
+ /* reinitialize hardware config registers */
+ itdev->params.init_hardware(itdev);
/* enable the receiver */
dev->params.enable_rx(dev);
}