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


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


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.

  • Try pressing F7 to disable Airplane mode, and see if it helps. – Mitch Mar 15 '14 at 10:46
  • I tried befor... good tip or... not wokring – oliverbedi Mar 15 '14 at 10:57
  • This answer seems the most reasonable I found for the issue, but I'm not a Linux coder. Bryon can you please specify a bit more on how to implement it? I got a copy of ideapad_laptop.c but what do i do with it? Should I simply copy the 3 lines anywhere into the file? As far as I know, making a module is not that hard. make... sudo make install... and modprobe, however make outputs that it has nothing to do with the file. Thanks. – user268106 Apr 12 '14 at 7:38

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 https://www.kernel.org/doc/Documentation/kbuild/modules.txt 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!


BIOS update available solved it for me.

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.