From ee08940531193ccce680ca3c2f17ecc497c4bb67 Mon Sep 17 00:00:00 2001 From: Jarod Wilson Date: Wed, 15 Sep 2010 15:31:12 -0300 Subject: V4L/DVB: IR: export ir_keyup so imon driver can use it directly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The imon driver currently reimplements its own version of ir_keyup (along with key release timer functionality also already present in the core IR code). A follow-up imon patch will make use of ir_keyup and the IR stack's key release code. Trivial extraction from David Härdeman's pending rc-core merge and device interface abstraction patchset to facilitate merging a patch based on his imon input dev split patch ahead of the larger churn, which is slated for post-2.6.37-rc1 (after Dmitry's large keycode patches are merged in mainline). Signed-off-by: Jarod Wilson Signed-off-by: Mauro Carvalho Chehab --- drivers/media/IR/ir-keytable.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/media/IR/ir-keytable.c') diff --git a/drivers/media/IR/ir-keytable.c b/drivers/media/IR/ir-keytable.c index 7961d59f5cac..59510cd33419 100644 --- a/drivers/media/IR/ir-keytable.c +++ b/drivers/media/IR/ir-keytable.c @@ -285,7 +285,7 @@ EXPORT_SYMBOL_GPL(ir_g_keycode_from_table); * This routine is used to signal that a key has been released on the * remote control. It reports a keyup input event via input_report_key(). */ -static void ir_keyup(struct ir_input_dev *ir) +void ir_keyup(struct ir_input_dev *ir) { if (!ir->keypressed) return; @@ -295,6 +295,7 @@ static void ir_keyup(struct ir_input_dev *ir) input_sync(ir->input_dev); ir->keypressed = false; } +EXPORT_SYMBOL_GPL(ir_keyup); /** * ir_timer_keyup() - generates a keyup event after a timeout -- cgit v1.2.3 From 58b3dd449feaa997129bde23592c6a31da039e4e Mon Sep 17 00:00:00 2001 From: Maxim Levitsky Date: Mon, 6 Sep 2010 18:26:07 -0300 Subject: [media] IR: make sure we register the input device when it is safe to do so As soon as input device is registered, it might be accessed (and it is) This can trigger a hardware interrupt that can access not yet initialized ir->raw, (by sending a sample) This can be reproduced by holding down a remote button and reloading the module. And this always crashes the systems where hardware decides to send an interrupt right at the moment it is enabled. Signed-off-by: Maxim Levitsky Acked-by: Jarod Wilson Signed-off-by: Mauro Carvalho Chehab --- drivers/media/IR/ir-keytable.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/media/IR/ir-keytable.c') diff --git a/drivers/media/IR/ir-keytable.c b/drivers/media/IR/ir-keytable.c index 59510cd33419..a616bd052336 100644 --- a/drivers/media/IR/ir-keytable.c +++ b/drivers/media/IR/ir-keytable.c @@ -506,6 +506,8 @@ int __ir_input_register(struct input_dev *input_dev, goto out_event; } + rc = ir_register_input(input_dev); + IR_dprintk(1, "Registered input device on %s for %s remote%s.\n", driver_name, rc_tab->name, (ir_dev->props && ir_dev->props->driver_type == RC_DRIVER_IR_RAW) ? -- cgit v1.2.3 From 991369e33f0182903d2c64e4b1c6c74ed6f83089 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Thu, 14 Oct 2010 17:49:33 -0300 Subject: [media] ir: properly handle an error at input_register Be sure to rollback all init if input register fails. Cc: Maxim Levitsky Acked-by: Jarod Wilson Signed-off-by: Mauro Carvalho Chehab --- drivers/media/IR/ir-keytable.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/media/IR/ir-keytable.c') diff --git a/drivers/media/IR/ir-keytable.c b/drivers/media/IR/ir-keytable.c index a616bd052336..5f24cd6ed990 100644 --- a/drivers/media/IR/ir-keytable.c +++ b/drivers/media/IR/ir-keytable.c @@ -507,6 +507,8 @@ int __ir_input_register(struct input_dev *input_dev, } rc = ir_register_input(input_dev); + if (rc < 0) + goto out_event; IR_dprintk(1, "Registered input device on %s for %s remote%s.\n", driver_name, rc_tab->name, -- cgit v1.2.3