diff options
author | Wei Yongjun <yongjun_wei@trendmicro.com.cn> | 2013-04-23 22:46:24 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2013-04-24 02:44:47 -0400 |
commit | 3482e664dc7f44e0ffb1fcf1de7af74977748f31 (patch) | |
tree | 75a1453f240ffc5eb9b96ee583ff82e4e36e8ce9 | |
parent | ad0304cfd90f46bfcae3a6cd2b69067741541730 (diff) |
x86/olpc/xo1/sci: Don't call input_free_device() after input_unregister_device()
input_free_device() should only be used if
input_register_device() was not called yet or if it failed. Once
device was unregistered use input_unregister_device() and memory
will be freed once last reference to the device is dropped.
Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
Cc: dsd@laptop.org
Cc: pgf@laptop.org
Cc: gregkh@linuxfoundation.org
Link: http://lkml.kernel.org/r/CAPgLHd84cboeucog%2BYNdHvGqTfTROujDKZgSkh3o0B-Q93ee2A@mail.gmail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r-- | arch/x86/platform/olpc/olpc-xo1-sci.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/arch/x86/platform/olpc/olpc-xo1-sci.c b/arch/x86/platform/olpc/olpc-xo1-sci.c index 74704be7b1fe..9a2e590dd202 100644 --- a/arch/x86/platform/olpc/olpc-xo1-sci.c +++ b/arch/x86/platform/olpc/olpc-xo1-sci.c | |||
@@ -460,7 +460,6 @@ static int setup_power_button(struct platform_device *pdev) | |||
460 | static void free_power_button(void) | 460 | static void free_power_button(void) |
461 | { | 461 | { |
462 | input_unregister_device(power_button_idev); | 462 | input_unregister_device(power_button_idev); |
463 | input_free_device(power_button_idev); | ||
464 | } | 463 | } |
465 | 464 | ||
466 | static int setup_ebook_switch(struct platform_device *pdev) | 465 | static int setup_ebook_switch(struct platform_device *pdev) |
@@ -491,7 +490,6 @@ static int setup_ebook_switch(struct platform_device *pdev) | |||
491 | static void free_ebook_switch(void) | 490 | static void free_ebook_switch(void) |
492 | { | 491 | { |
493 | input_unregister_device(ebook_switch_idev); | 492 | input_unregister_device(ebook_switch_idev); |
494 | input_free_device(ebook_switch_idev); | ||
495 | } | 493 | } |
496 | 494 | ||
497 | static int setup_lid_switch(struct platform_device *pdev) | 495 | static int setup_lid_switch(struct platform_device *pdev) |
@@ -526,6 +524,7 @@ static int setup_lid_switch(struct platform_device *pdev) | |||
526 | 524 | ||
527 | err_create_attr: | 525 | err_create_attr: |
528 | input_unregister_device(lid_switch_idev); | 526 | input_unregister_device(lid_switch_idev); |
527 | lid_switch_idev = NULL; | ||
529 | err_register: | 528 | err_register: |
530 | input_free_device(lid_switch_idev); | 529 | input_free_device(lid_switch_idev); |
531 | return r; | 530 | return r; |
@@ -535,7 +534,6 @@ static void free_lid_switch(void) | |||
535 | { | 534 | { |
536 | device_remove_file(&lid_switch_idev->dev, &dev_attr_lid_wake_mode); | 535 | device_remove_file(&lid_switch_idev->dev, &dev_attr_lid_wake_mode); |
537 | input_unregister_device(lid_switch_idev); | 536 | input_unregister_device(lid_switch_idev); |
538 | input_free_device(lid_switch_idev); | ||
539 | } | 537 | } |
540 | 538 | ||
541 | static int xo1_sci_probe(struct platform_device *pdev) | 539 | static int xo1_sci_probe(struct platform_device *pdev) |