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

Commit b3fa1329 authored by Alan Jenkins's avatar Alan Jenkins Committed by John W. Linville
Browse files

rfkill: remove set_global_sw_state



rfkill_set_global_sw_state() (previously rfkill_set_default()) will no
longer be exported by the rewritten rfkill core.

Instead, platform drivers which can provide persistent soft-rfkill state
across power-down/reboot should indicate their initial state by calling
rfkill_set_sw_state() before registration.  Otherwise, they will be
initialized to a default value during registration by a set_block call.

We remove existing calls to rfkill_set_sw_state() which happen before
registration, since these had no effect in the old model.  If these
drivers do have persistent state, the calls can be put back (subject
to testing :-).  This affects hp-wmi and acer-wmi.

Drivers with persistent state will affect the global state only if
rfkill-input is enabled.  This is required, otherwise booting with
wireless soft-blocked and pressing the wireless-toggle key once would
have no apparent effect.  This special case will be removed in future
along with rfkill-input, in favour of a more flexible userspace daemon
(see Documentation/feature-removal-schedule.txt).

Now rfkill_global_states[n].def is only used to preserve global states
over EPO, it is renamed to ".sav".

Signed-off-by: default avatarAlan Jenkins <alan-jenkins@tuffmail.co.uk>
Acked-by: default avatarHenrique de Moraes Holschuh <hmh@hmh.eng.br>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 8f77f384
Loading
Loading
Loading
Loading
+0 −3
Original line number Original line Diff line number Diff line
@@ -988,7 +988,6 @@ static struct rfkill *acer_rfkill_register(struct device *dev,
					   char *name, u32 cap)
					   char *name, u32 cap)
{
{
	int err;
	int err;
	u32 state;
	struct rfkill *rfkill_dev;
	struct rfkill *rfkill_dev;


	rfkill_dev = rfkill_alloc(name, dev, type,
	rfkill_dev = rfkill_alloc(name, dev, type,
@@ -996,8 +995,6 @@ static struct rfkill *acer_rfkill_register(struct device *dev,
				  (void *)(unsigned long)cap);
				  (void *)(unsigned long)cap);
	if (!rfkill_dev)
	if (!rfkill_dev)
		return ERR_PTR(-ENOMEM);
		return ERR_PTR(-ENOMEM);
	get_u32(&state, cap);
	rfkill_set_sw_state(rfkill_dev, !state);


	err = rfkill_register(rfkill_dev);
	err = rfkill_register(rfkill_dev);
	if (err) {
	if (err) {
+4 −4
Original line number Original line Diff line number Diff line
@@ -675,7 +675,7 @@ static int eeepc_hotk_add(struct acpi_device *device)
		if (!ehotk->eeepc_wlan_rfkill)
		if (!ehotk->eeepc_wlan_rfkill)
			goto wlan_fail;
			goto wlan_fail;


		rfkill_set_global_sw_state(RFKILL_TYPE_WLAN,
		rfkill_set_sw_state(ehotk->eeepc_wlan_rfkill,
				    get_acpi(CM_ASL_WLAN) != 1);
				    get_acpi(CM_ASL_WLAN) != 1);
		result = rfkill_register(ehotk->eeepc_wlan_rfkill);
		result = rfkill_register(ehotk->eeepc_wlan_rfkill);
		if (result)
		if (result)
@@ -693,7 +693,7 @@ static int eeepc_hotk_add(struct acpi_device *device)
		if (!ehotk->eeepc_bluetooth_rfkill)
		if (!ehotk->eeepc_bluetooth_rfkill)
			goto bluetooth_fail;
			goto bluetooth_fail;


		rfkill_set_global_sw_state(RFKILL_TYPE_BLUETOOTH,
		rfkill_set_sw_state(ehotk->eeepc_bluetooth_rfkill,
				    get_acpi(CM_ASL_BLUETOOTH) != 1);
				    get_acpi(CM_ASL_BLUETOOTH) != 1);
		result = rfkill_register(ehotk->eeepc_bluetooth_rfkill);
		result = rfkill_register(ehotk->eeepc_bluetooth_rfkill);
		if (result)
		if (result)
+0 −4
Original line number Original line Diff line number Diff line
@@ -422,7 +422,6 @@ static int __init hp_wmi_bios_setup(struct platform_device *device)
					   RFKILL_TYPE_WLAN,
					   RFKILL_TYPE_WLAN,
					   &hp_wmi_rfkill_ops,
					   &hp_wmi_rfkill_ops,
					   (void *) 0);
					   (void *) 0);
		rfkill_set_sw_state(wifi_rfkill, hp_wmi_wifi_state());
		err = rfkill_register(wifi_rfkill);
		err = rfkill_register(wifi_rfkill);
		if (err)
		if (err)
			goto register_wifi_error;
			goto register_wifi_error;
@@ -433,8 +432,6 @@ static int __init hp_wmi_bios_setup(struct platform_device *device)
						RFKILL_TYPE_BLUETOOTH,
						RFKILL_TYPE_BLUETOOTH,
						&hp_wmi_rfkill_ops,
						&hp_wmi_rfkill_ops,
						(void *) 1);
						(void *) 1);
		rfkill_set_sw_state(bluetooth_rfkill,
				    hp_wmi_bluetooth_state());
		err = rfkill_register(bluetooth_rfkill);
		err = rfkill_register(bluetooth_rfkill);
		if (err)
		if (err)
			goto register_bluetooth_error;
			goto register_bluetooth_error;
@@ -445,7 +442,6 @@ static int __init hp_wmi_bios_setup(struct platform_device *device)
					   RFKILL_TYPE_WWAN,
					   RFKILL_TYPE_WWAN,
					   &hp_wmi_rfkill_ops,
					   &hp_wmi_rfkill_ops,
					   (void *) 2);
					   (void *) 2);
		rfkill_set_sw_state(wwan_rfkill, hp_wmi_wwan_state());
		err = rfkill_register(wwan_rfkill);
		err = rfkill_register(wwan_rfkill);
		if (err)
		if (err)
			goto register_wwan_err;
			goto register_wwan_err;
+14 −17
Original line number Original line Diff line number Diff line
@@ -1168,21 +1168,6 @@ static int __init tpacpi_new_rfkill(const enum tpacpi_rfk_id id,


	BUG_ON(id >= TPACPI_RFK_SW_MAX || tpacpi_rfkill_switches[id]);
	BUG_ON(id >= TPACPI_RFK_SW_MAX || tpacpi_rfkill_switches[id]);


	initial_sw_status = (tp_rfkops->get_status)();
	if (initial_sw_status < 0) {
		printk(TPACPI_ERR
			"failed to read initial state for %s, error %d; "
			"will turn radio off\n", name, initial_sw_status);
	} else {
		initial_sw_state = (initial_sw_status == TPACPI_RFK_RADIO_OFF);
		if (set_default) {
			/* try to set the initial state as the default for the
			 * rfkill type, since we ask the firmware to preserve
			 * it across S5 in NVRAM */
			rfkill_set_global_sw_state(rfktype, initial_sw_state);
		}
	}

	atp_rfk = kzalloc(sizeof(struct tpacpi_rfk), GFP_KERNEL);
	atp_rfk = kzalloc(sizeof(struct tpacpi_rfk), GFP_KERNEL);
	if (atp_rfk)
	if (atp_rfk)
		atp_rfk->rfkill = rfkill_alloc(name,
		atp_rfk->rfkill = rfkill_alloc(name,
@@ -1200,8 +1185,20 @@ static int __init tpacpi_new_rfkill(const enum tpacpi_rfk_id id,
	atp_rfk->id = id;
	atp_rfk->id = id;
	atp_rfk->ops = tp_rfkops;
	atp_rfk->ops = tp_rfkops;


	rfkill_set_states(atp_rfk->rfkill, initial_sw_state,
	initial_sw_status = (tp_rfkops->get_status)();
				tpacpi_rfk_check_hwblock_state());
	if (initial_sw_status < 0) {
		printk(TPACPI_ERR
			"failed to read initial state for %s, error %d\n",
			name, initial_sw_status);
	} else {
		initial_sw_state = (initial_sw_status == TPACPI_RFK_RADIO_OFF);
		if (set_default) {
			/* try to keep the initial state, since we ask the
			 * firmware to preserve it across S5 in NVRAM */
			rfkill_set_sw_state(atp_rfk->rfkill, initial_sw_state);
		}
	}
	rfkill_set_hw_state(atp_rfk->rfkill, tpacpi_rfk_check_hwblock_state());


	res = rfkill_register(atp_rfk->rfkill);
	res = rfkill_register(atp_rfk->rfkill);
	if (res < 0) {
	if (res < 0) {
+8 −20
Original line number Original line Diff line number Diff line
@@ -157,8 +157,14 @@ struct rfkill * __must_check rfkill_alloc(const char *name,
 * @rfkill: rfkill structure to be registered
 * @rfkill: rfkill structure to be registered
 *
 *
 * This function should be called by the transmitter driver to register
 * This function should be called by the transmitter driver to register
 * the rfkill structure needs to be registered. Before calling this function
 * the rfkill structure. Before calling this function the driver needs
 * the driver needs to be ready to service method calls from rfkill.
 * to be ready to service method calls from rfkill.
 *
 * If the software blocked state is not set before registration,
 * set_block will be called to initialize it to a default value.
 *
 * If the hardware blocked state is not set before registration,
 * it is assumed to be unblocked.
 */
 */
int __must_check rfkill_register(struct rfkill *rfkill);
int __must_check rfkill_register(struct rfkill *rfkill);


@@ -250,19 +256,6 @@ bool rfkill_set_sw_state(struct rfkill *rfkill, bool blocked);
 */
 */
void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw);
void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw);


/**
 * rfkill_set_global_sw_state - set global sw block default
 * @type: rfkill type to set default for
 * @blocked: default to set
 *
 * This function sets the global default -- use at boot if your platform has
 * an rfkill switch. If not early enough this call may be ignored.
 *
 * XXX: instead of ignoring -- how about just updating all currently
 *	registered drivers?
 */
void rfkill_set_global_sw_state(const enum rfkill_type type, bool blocked);

/**
/**
 * rfkill_blocked - query rfkill block
 * rfkill_blocked - query rfkill block
 *
 *
@@ -317,11 +310,6 @@ static inline void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw)
{
{
}
}


static inline void rfkill_set_global_sw_state(const enum rfkill_type type,
					      bool blocked)
{
}

static inline bool rfkill_blocked(struct rfkill *rfkill)
static inline bool rfkill_blocked(struct rfkill *rfkill)
{
{
	return false;
	return false;
Loading