M HYPE SPLASH
// updates

Wireless Hard Block

By Emma Terry

I have a Lenovo Yoga 2 11" with Ubuntu 13.10 (x64). I have just a litle problem with my wifi. (bluetooth is working)

I tried:

sudo rfkill list

Status:

0: ideapad_wlan: Wireless LAN Soft blocked: no Hard blocked: yes
1: ideapad_bluetooth: Bluetooth Soft blocked: no Hard blocked: yes
2: phy0: wireless LAN Soft blocked: no Hard blocked: no
3: hci0: bluetooth Soft blocked: no Hard blocked: no

next:

sudo rfkill unblock all
sudo rfkill unblock number

They work only soft block ... my hard block is still on "yes".

My yoga has not hardware button. I tried settings in bios, but not working.

If anyone has any other solution I will be very grateful.

3

3 Answers

So, it sounds like your IdeaPad Yoga 2 semi-bricked the rfkill the same way mine did. I just figured out how to fix it with the following:

The rfkill is controlled by the embedded EC, which is driven by the ideapad-laptop module. This module tweaks some wrong bits on the Yoga 2, but thankfully not in a way that permanently breaks stuff.

The EC presents itself as an ACPI platform device, with enumerated commands and a property read and write method. The structure is fairly obvious if you look at the ideapad-laptop.c in your local linux source tree.

There are 3 bits of interest: VPCCMD_W_RF: turns on/off RF devices in general? This one is interesting, as it's not used in ideapad_laptop.c, but its inverse, VPCCMD_R_RF -is-. VPCCMD_W_BT: turns on/off Bluetooth devices. VPCCMD_W_WIFI: turns on/of wi-fi.

For each of these commands, sending a 1 to them turns their function on, and 0 turns them off. I suspect that the W_RF is actually non-functional on the yogas. The ideapad-laptop driver will see its setting though, and turn on the persistent rfkill flags for the BT and WIFI devices.

I fixed this by compiling a local version of the ideapad-laptop.c driver that executes the following commands as soon as it can, then has the module abort:

write_ec_cmd(ideapad_handle, VPCCMD_W_RF, 1);
write_ec_cmd(ideapad_handle, VPCCMD_W_BT, 1);
write_ec_cmd(ideapad_handle, VPCCMD_W_WIFI, 1);

After that, I made sure to keep the ideapad-laptop module with the blacklist ideapad-laptop option in a file in /etc/modprobe.d/whatever.conf.

I've been working fine since.

Unfortunately, the ideapad-laptop module has changed from one kernel version to another, so I can't just dump a built module for full source file, but if you search that file for write_ec_cmd strings, and build your own copy of that file with instructions like those at for building external modules, you could be fine.

You'll probably want to put it in one of the debugfs files so you can run it by catting a debugfs file, then unload the module before you accidentally hit a rfkill button.

You should then be able to rfkill list and see yourself unblocked!

Several things to try

BIOS update available solved it for me.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy