lkml.org 
[lkml]   [2008]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[Patch 2/3] eeepc-laptop: Check return values from rfkill_register
    We should check that rfkill registration succeeds and error out if it 
    doesn't. This patch also sets the default state to match the BIOS on
    load.

    Signed-off-by: Matthew Garrett <mjg@redhat.com>

    diff --git a/drivers/misc/eeepc-laptop.c b/drivers/misc/eeepc-laptop.c
    index e81ef18..4d70626 100644
    --- a/drivers/misc/eeepc-laptop.c
    +++ b/drivers/misc/eeepc-laptop.c
    @@ -573,18 +573,25 @@ static int eeepc_hotk_add(struct acpi_device *device)
    RFKILL_TYPE_WLAN);

    if (!ehotk->eeepc_wlan_rfkill)
    - goto end;
    + goto wlan_fail;

    ehotk->eeepc_wlan_rfkill->name = "eeepc-wlan";
    ehotk->eeepc_wlan_rfkill->toggle_radio = eeepc_wlan_rfkill_set;
    ehotk->eeepc_wlan_rfkill->get_state = eeepc_wlan_rfkill_state;
    - if (get_acpi(CM_ASL_WLAN) == 1)
    + if (get_acpi(CM_ASL_WLAN) == 1) {
    ehotk->eeepc_wlan_rfkill->state =
    RFKILL_STATE_UNBLOCKED;
    - else
    + rfkill_set_default(RFKILL_TYPE_WLAN,
    + RFKILL_STATE_UNBLOCKED);
    + } else {
    ehotk->eeepc_wlan_rfkill->state =
    RFKILL_STATE_SOFT_BLOCKED;
    - rfkill_register(ehotk->eeepc_wlan_rfkill);
    + rfkill_set_default(RFKILL_TYPE_WLAN,
    + RFKILL_STATE_SOFT_BLOCKED);
    + }
    + result = rfkill_register(ehotk->eeepc_wlan_rfkill);
    + if (result)
    + goto wlan_fail;
    }

    if (get_acpi(CM_ASL_BLUETOOTH) != -1) {
    @@ -592,22 +599,39 @@ static int eeepc_hotk_add(struct acpi_device *device)
    rfkill_allocate(&device->dev, RFKILL_TYPE_BLUETOOTH);

    if (!ehotk->eeepc_bluetooth_rfkill)
    - goto end;
    + goto bluetooth_fail;

    ehotk->eeepc_bluetooth_rfkill->name = "eeepc-bluetooth";
    ehotk->eeepc_bluetooth_rfkill->toggle_radio =
    eeepc_bluetooth_rfkill_set;
    ehotk->eeepc_bluetooth_rfkill->get_state =
    eeepc_bluetooth_rfkill_state;
    - if (get_acpi(CM_ASL_BLUETOOTH) == 1)
    + if (get_acpi(CM_ASL_BLUETOOTH) == 1) {
    ehotk->eeepc_bluetooth_rfkill->state =
    RFKILL_STATE_UNBLOCKED;
    - else
    + rfkill_set_default(RFKILL_TYPE_BLUETOOTH,
    + RFKILL_STATE_UNBLOCKED);
    + } else {
    ehotk->eeepc_bluetooth_rfkill->state =
    RFKILL_STATE_SOFT_BLOCKED;
    - rfkill_register(ehotk->eeepc_bluetooth_rfkill);
    + rfkill_set_default(RFKILL_TYPE_BLUETOOTH,
    + RFKILL_STATE_SOFT_BLOCKED);
    + }
    +
    + result = rfkill_register(ehotk->eeepc_bluetooth_rfkill);
    + if (result)
    + goto bluetooth_fail;
    }
    + return 0;

    + bluetooth_fail:
    + if (ehotk->eeepc_bluetooth_rfkill)
    + rfkill_free(ehotk->eeepc_bluetooth_rfkill);
    + rfkill_unregister(ehotk->eeepc_wlan_rfkill);
    + ehotk->eeepc_wlan_rfkill = NULL;
    + wlan_fail:
    + if (ehotk->eeepc_wlan_rfkill)
    + rfkill_free(ehotk->eeepc_wlan_rfkill);
    end:
    if (result) {
    kfree(ehotk);
    --
    Matthew Garrett | mjg59@srcf.ucam.org

    \
     
     \ /
      Last update: 2008-11-17 14:41    [W:0.025 / U:28.964 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site