2

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
  • Try pressing F7 to disable Airplane mode, and see if it helps.
    – Mitch
    Mar 15, 2014 at 10:46
  • I tried befor... good tip or... not wokring
    – oliverbedi
    Mar 15, 2014 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, 2014 at 7:38

3 Answers 3

2

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!

-1

BIOS update available solved it for me.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .