Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c9ddf8fe authored by Matthew Garrett's avatar Matthew Garrett Committed by Len Brown
Browse files

eeepc-laptop: Check return values from rfkill_register



Error out if rfkill registration fails, and also set the default system state
appropriately on boot

Signed-off-by: default avatarMatthew Garrett <mjg@redhat.com>
Signed-off-by: default avatarCorentin Chary <corentincj@iksaif.net>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent b5f6f265
Loading
Loading
Loading
Loading
+37 −14
Original line number Diff line number Diff line
@@ -562,7 +562,7 @@ static int eeepc_hotk_add(struct acpi_device *device)
	ehotk->device = device;
	result = eeepc_hotk_check();
	if (result)
		goto end;
		goto ehotk_fail;
	status = acpi_install_notify_handler(ehotk->handle, ACPI_SYSTEM_NOTIFY,
					     eeepc_hotk_notify, ehotk);
	if (ACPI_FAILURE(status))
@@ -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,27 +599,43 @@ 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);
		}

 end:
	if (result) {
		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);
 ehotk_fail:
	kfree(ehotk);
	ehotk = NULL;
	}

	return result;
}