diff options
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/kernel/signal.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-pxa/tosa-bt.c | 30 | ||||
-rw-r--r-- | arch/arm/mach-pxa/tosa.c | 1 |
3 files changed, 18 insertions, 19 deletions
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c index 442b87476f97..93bb4247b7ed 100644 --- a/arch/arm/kernel/signal.c +++ b/arch/arm/kernel/signal.c | |||
@@ -536,7 +536,7 @@ setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info, | |||
536 | return err; | 536 | return err; |
537 | } | 537 | } |
538 | 538 | ||
539 | static inline void restart_syscall(struct pt_regs *regs) | 539 | static inline void setup_syscall_restart(struct pt_regs *regs) |
540 | { | 540 | { |
541 | regs->ARM_r0 = regs->ARM_ORIG_r0; | 541 | regs->ARM_r0 = regs->ARM_ORIG_r0; |
542 | regs->ARM_pc -= thumb_mode(regs) ? 2 : 4; | 542 | regs->ARM_pc -= thumb_mode(regs) ? 2 : 4; |
@@ -571,7 +571,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, | |||
571 | } | 571 | } |
572 | /* fallthrough */ | 572 | /* fallthrough */ |
573 | case -ERESTARTNOINTR: | 573 | case -ERESTARTNOINTR: |
574 | restart_syscall(regs); | 574 | setup_syscall_restart(regs); |
575 | } | 575 | } |
576 | } | 576 | } |
577 | 577 | ||
@@ -695,7 +695,7 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall) | |||
695 | if (regs->ARM_r0 == -ERESTARTNOHAND || | 695 | if (regs->ARM_r0 == -ERESTARTNOHAND || |
696 | regs->ARM_r0 == -ERESTARTSYS || | 696 | regs->ARM_r0 == -ERESTARTSYS || |
697 | regs->ARM_r0 == -ERESTARTNOINTR) { | 697 | regs->ARM_r0 == -ERESTARTNOINTR) { |
698 | restart_syscall(regs); | 698 | setup_syscall_restart(regs); |
699 | } | 699 | } |
700 | } | 700 | } |
701 | single_step_set(current); | 701 | single_step_set(current); |
diff --git a/arch/arm/mach-pxa/tosa-bt.c b/arch/arm/mach-pxa/tosa-bt.c index fb0294bd4310..c31e601eb49c 100644 --- a/arch/arm/mach-pxa/tosa-bt.c +++ b/arch/arm/mach-pxa/tosa-bt.c | |||
@@ -35,21 +35,25 @@ static void tosa_bt_off(struct tosa_bt_data *data) | |||
35 | gpio_set_value(data->gpio_reset, 0); | 35 | gpio_set_value(data->gpio_reset, 0); |
36 | } | 36 | } |
37 | 37 | ||
38 | static int tosa_bt_toggle_radio(void *data, enum rfkill_state state) | 38 | static int tosa_bt_set_block(void *data, bool blocked) |
39 | { | 39 | { |
40 | pr_info("BT_RADIO going: %s\n", | 40 | pr_info("BT_RADIO going: %s\n", blocked ? "off" : "on"); |
41 | state == RFKILL_STATE_ON ? "on" : "off"); | ||
42 | 41 | ||
43 | if (state == RFKILL_STATE_ON) { | 42 | if (!blocked) { |
44 | pr_info("TOSA_BT: going ON\n"); | 43 | pr_info("TOSA_BT: going ON\n"); |
45 | tosa_bt_on(data); | 44 | tosa_bt_on(data); |
46 | } else { | 45 | } else { |
47 | pr_info("TOSA_BT: going OFF\n"); | 46 | pr_info("TOSA_BT: going OFF\n"); |
48 | tosa_bt_off(data); | 47 | tosa_bt_off(data); |
49 | } | 48 | } |
49 | |||
50 | return 0; | 50 | return 0; |
51 | } | 51 | } |
52 | 52 | ||
53 | static const struct rfkill_ops tosa_bt_rfkill_ops = { | ||
54 | .set_block = tosa_bt_set_block, | ||
55 | }; | ||
56 | |||
53 | static int tosa_bt_probe(struct platform_device *dev) | 57 | static int tosa_bt_probe(struct platform_device *dev) |
54 | { | 58 | { |
55 | int rc; | 59 | int rc; |
@@ -70,18 +74,14 @@ static int tosa_bt_probe(struct platform_device *dev) | |||
70 | if (rc) | 74 | if (rc) |
71 | goto err_pwr_dir; | 75 | goto err_pwr_dir; |
72 | 76 | ||
73 | rfk = rfkill_allocate(&dev->dev, RFKILL_TYPE_BLUETOOTH); | 77 | rfk = rfkill_alloc("tosa-bt", &dev->dev, RFKILL_TYPE_BLUETOOTH, |
78 | &tosa_bt_rfkill_ops, data); | ||
74 | if (!rfk) { | 79 | if (!rfk) { |
75 | rc = -ENOMEM; | 80 | rc = -ENOMEM; |
76 | goto err_rfk_alloc; | 81 | goto err_rfk_alloc; |
77 | } | 82 | } |
78 | 83 | ||
79 | rfk->name = "tosa-bt"; | 84 | rfkill_set_led_trigger_name(rfk, "tosa-bt"); |
80 | rfk->toggle_radio = tosa_bt_toggle_radio; | ||
81 | rfk->data = data; | ||
82 | #ifdef CONFIG_RFKILL_LEDS | ||
83 | rfk->led_trigger.name = "tosa-bt"; | ||
84 | #endif | ||
85 | 85 | ||
86 | rc = rfkill_register(rfk); | 86 | rc = rfkill_register(rfk); |
87 | if (rc) | 87 | if (rc) |
@@ -92,9 +92,7 @@ static int tosa_bt_probe(struct platform_device *dev) | |||
92 | return 0; | 92 | return 0; |
93 | 93 | ||
94 | err_rfkill: | 94 | err_rfkill: |
95 | if (rfk) | 95 | rfkill_destroy(rfk); |
96 | rfkill_free(rfk); | ||
97 | rfk = NULL; | ||
98 | err_rfk_alloc: | 96 | err_rfk_alloc: |
99 | tosa_bt_off(data); | 97 | tosa_bt_off(data); |
100 | err_pwr_dir: | 98 | err_pwr_dir: |
@@ -113,8 +111,10 @@ static int __devexit tosa_bt_remove(struct platform_device *dev) | |||
113 | 111 | ||
114 | platform_set_drvdata(dev, NULL); | 112 | platform_set_drvdata(dev, NULL); |
115 | 113 | ||
116 | if (rfk) | 114 | if (rfk) { |
117 | rfkill_unregister(rfk); | 115 | rfkill_unregister(rfk); |
116 | rfkill_destroy(rfk); | ||
117 | } | ||
118 | rfk = NULL; | 118 | rfk = NULL; |
119 | 119 | ||
120 | tosa_bt_off(data); | 120 | tosa_bt_off(data); |
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c index 168267a5dfb3..117ad5920e53 100644 --- a/arch/arm/mach-pxa/tosa.c +++ b/arch/arm/mach-pxa/tosa.c | |||
@@ -31,7 +31,6 @@ | |||
31 | #include <linux/input.h> | 31 | #include <linux/input.h> |
32 | #include <linux/gpio.h> | 32 | #include <linux/gpio.h> |
33 | #include <linux/pda_power.h> | 33 | #include <linux/pda_power.h> |
34 | #include <linux/rfkill.h> | ||
35 | #include <linux/spi/spi.h> | 34 | #include <linux/spi/spi.h> |
36 | 35 | ||
37 | #include <asm/setup.h> | 36 | #include <asm/setup.h> |