aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxim Levitsky <maximlevitsky@gmail.com>2013-07-07 19:22:46 -0400
committerMauro Carvalho Chehab <m.chehab@samsung.com>2013-07-29 10:48:26 -0400
commitb5daad2f13c90ef3175d201450543fd0a1627bdd (patch)
tree311f5088999217708312c75db6a41aa29925c20e
parent1de6ebba2c2759da4d8ccb167336a4d136d08471 (diff)
[media] ene_ir: disable the device if wake is disabled
It doesn't hurt and on my notebook despite clearing the wake flag the remote still wakes up the system. This way it doesn't. Signed-off-by: Maxim Levitsky <maximlevitsky@gmail.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
-rw-r--r--drivers/media/rc/ene_ir.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/drivers/media/rc/ene_ir.c b/drivers/media/rc/ene_ir.c
index 4214311e3901..c1444f84717d 100644
--- a/drivers/media/rc/ene_ir.c
+++ b/drivers/media/rc/ene_ir.c
@@ -476,7 +476,7 @@ select_timeout:
476} 476}
477 477
478/* Enable the device for receive */ 478/* Enable the device for receive */
479static void ene_rx_enable(struct ene_device *dev) 479static void ene_rx_enable_hw(struct ene_device *dev)
480{ 480{
481 u8 reg_value; 481 u8 reg_value;
482 482
@@ -504,11 +504,17 @@ static void ene_rx_enable(struct ene_device *dev)
504 504
505 /* enter idle mode */ 505 /* enter idle mode */
506 ir_raw_event_set_idle(dev->rdev, true); 506 ir_raw_event_set_idle(dev->rdev, true);
507}
508
509/* Enable the device for receive - wrapper to track the state*/
510static void ene_rx_enable(struct ene_device *dev)
511{
512 ene_rx_enable_hw(dev);
507 dev->rx_enabled = true; 513 dev->rx_enabled = true;
508} 514}
509 515
510/* Disable the device receiver */ 516/* Disable the device receiver */
511static void ene_rx_disable(struct ene_device *dev) 517static void ene_rx_disable_hw(struct ene_device *dev)
512{ 518{
513 /* disable inputs */ 519 /* disable inputs */
514 ene_rx_enable_cir_engine(dev, false); 520 ene_rx_enable_cir_engine(dev, false);
@@ -516,8 +522,13 @@ static void ene_rx_disable(struct ene_device *dev)
516 522
517 /* disable hardware IRQ and firmware flag */ 523 /* disable hardware IRQ and firmware flag */
518 ene_clear_reg_mask(dev, ENE_FW1, ENE_FW1_ENABLE | ENE_FW1_IRQ); 524 ene_clear_reg_mask(dev, ENE_FW1, ENE_FW1_ENABLE | ENE_FW1_IRQ);
519
520 ir_raw_event_set_idle(dev->rdev, true); 525 ir_raw_event_set_idle(dev->rdev, true);
526}
527
528/* Disable the device receiver - wrapper to track the state */
529static void ene_rx_disable(struct ene_device *dev)
530{
531 ene_rx_disable_hw(dev);
521 dev->rx_enabled = false; 532 dev->rx_enabled = false;
522} 533}
523 534
@@ -1124,9 +1135,8 @@ static void ene_remove(struct pnp_dev *pnp_dev)
1124} 1135}
1125 1136
1126/* enable wake on IR (wakes on specific button on original remote) */ 1137/* enable wake on IR (wakes on specific button on original remote) */
1127static void ene_enable_wake(struct ene_device *dev, int enable) 1138static void ene_enable_wake(struct ene_device *dev, bool enable)
1128{ 1139{
1129 enable = enable && device_may_wakeup(&dev->pnp_dev->dev);
1130 dbg("wake on IR %s", enable ? "enabled" : "disabled"); 1140 dbg("wake on IR %s", enable ? "enabled" : "disabled");
1131 ene_set_clear_reg_mask(dev, ENE_FW1, ENE_FW1_WAKE, enable); 1141 ene_set_clear_reg_mask(dev, ENE_FW1, ENE_FW1_WAKE, enable);
1132} 1142}
@@ -1135,9 +1145,12 @@ static void ene_enable_wake(struct ene_device *dev, int enable)
1135static int ene_suspend(struct pnp_dev *pnp_dev, pm_message_t state) 1145static int ene_suspend(struct pnp_dev *pnp_dev, pm_message_t state)
1136{ 1146{
1137 struct ene_device *dev = pnp_get_drvdata(pnp_dev); 1147 struct ene_device *dev = pnp_get_drvdata(pnp_dev);
1138 ene_enable_wake(dev, true); 1148 bool wake = device_may_wakeup(&dev->pnp_dev->dev);
1149
1150 if (!wake && dev->rx_enabled)
1151 ene_rx_disable_hw(dev);
1139 1152
1140 /* TODO: add support for wake pattern */ 1153 ene_enable_wake(dev, wake);
1141 return 0; 1154 return 0;
1142} 1155}
1143 1156