rfkill: rewrite
[safe/jmp/linux-2.6] / arch / arm / mach-pxa / tosa-bt.c
index bde42aa..c31e601 100644 (file)
@@ -35,21 +35,25 @@ static void tosa_bt_off(struct tosa_bt_data *data)
        gpio_set_value(data->gpio_reset, 0);
 }
 
-static int tosa_bt_toggle_radio(void *data, enum rfkill_state state)
+static int tosa_bt_set_block(void *data, bool blocked)
 {
-       pr_info("BT_RADIO going: %s\n",
-                       state == RFKILL_STATE_UNBLOCKED ? "on" : "off");
+       pr_info("BT_RADIO going: %s\n", blocked ? "off" : "on");
 
-       if (state == RFKILL_STATE_UNBLOCKED) {
+       if (!blocked) {
                pr_info("TOSA_BT: going ON\n");
                tosa_bt_on(data);
        } else {
                pr_info("TOSA_BT: going OFF\n");
                tosa_bt_off(data);
        }
+
        return 0;
 }
 
+static const struct rfkill_ops tosa_bt_rfkill_ops = {
+       .set_block = tosa_bt_set_block,
+};
+
 static int tosa_bt_probe(struct platform_device *dev)
 {
        int rc;
@@ -70,18 +74,14 @@ static int tosa_bt_probe(struct platform_device *dev)
        if (rc)
                goto err_pwr_dir;
 
-       rfk = rfkill_allocate(&dev->dev, RFKILL_TYPE_BLUETOOTH);
+       rfk = rfkill_alloc("tosa-bt", &dev->dev, RFKILL_TYPE_BLUETOOTH,
+                          &tosa_bt_rfkill_ops, data);
        if (!rfk) {
                rc = -ENOMEM;
                goto err_rfk_alloc;
        }
 
-       rfk->name = "tosa-bt";
-       rfk->toggle_radio = tosa_bt_toggle_radio;
-       rfk->data = data;
-#ifdef CONFIG_RFKILL_LEDS
-       rfk->led_trigger.name = "tosa-bt";
-#endif
+       rfkill_set_led_trigger_name(rfk, "tosa-bt");
 
        rc = rfkill_register(rfk);
        if (rc)
@@ -92,9 +92,7 @@ static int tosa_bt_probe(struct platform_device *dev)
        return 0;
 
 err_rfkill:
-       if (rfk)
-               rfkill_free(rfk);
-       rfk = NULL;
+       rfkill_destroy(rfk);
 err_rfk_alloc:
        tosa_bt_off(data);
 err_pwr_dir:
@@ -113,8 +111,10 @@ static int __devexit tosa_bt_remove(struct platform_device *dev)
 
        platform_set_drvdata(dev, NULL);
 
-       if (rfk)
+       if (rfk) {
                rfkill_unregister(rfk);
+               rfkill_destroy(rfk);
+       }
        rfk = NULL;
 
        tosa_bt_off(data);