Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
lenovo_x1_carbon_7th_generation_vs._ubuntu_19.10 [07.11.2019 22:08]
Pascal Suter [trackpad stops working]
lenovo_x1_carbon_7th_generation_vs._ubuntu_19.10 [07.11.2019 22:24] (current)
Pascal Suter [internal LTE modem does not work]
Line 17: Line 17:
 the 7th gen comes with a L850-GL modem. It is started in PCIe mode but there are no linux drivers for the module in pcie mode and there will never be pcie drivers. The module has however also a USB mode and in USB mode it behaves like a normal USB dongle and can be used in Linux as well! the 7th gen comes with a L850-GL modem. It is started in PCIe mode but there are no linux drivers for the module in pcie mode and there will never be pcie drivers. The module has however also a USB mode and in USB mode it behaves like a normal USB dongle and can be used in Linux as well!
  
-there is a [[https://​github.com/​abrasive/​xmm7360|script]] available.called [[https://​github.com/​abrasive/​xmm7360|xmm2usb]] ​which can be run to switch the modem into usb mode. After switching the modem into usb mode for the first time, the usb mode must be changed from ''​0''​ to ''​7''​. Once this is done, ubuntu will detect a broadband modem and off you go. +the best solution i've found so far is to use the [[https://​github.com/​juhovh/​xmm7360_usb|xmm7360_usb]] module which basically is a module to disable the pci device so that the modem initializes as usb device. It seems to work nicely and there is no further action needed except for installing the module. It will automatically be loaded on every boot.  
 + 
 +one inconvenience might be, that the module needs to be recompiled upon a kernel update, but this can be automated with dkms.  
 + 
 +here is how i've successfully installed the module.  
 + 
 +  - disable secure boot (actually i'm not sure if this is needed but i had mine disabled anyways) 
 +  - download the latest version of the xmm7360_usb module from the link above  
 +  - unpack it to ''/​usr/​src/​xmm7360_usb-master''​ where "​master"​ is the verison 
 +  - inside this directory, create a ''​dkms.conf''​ file with the following contents<​code conf> 
 +MAKE="​make"​ 
 +CLEAN="​make clean"​ 
 +BUILT_MODULE_NAME="​xmm7360_usb"​ 
 +BUILT_MODULE_LOCATION=./​ 
 +PACKAGE_NAME=xmm7360_usb 
 +PACKAGE_VERSION=master 
 +REMAKE_INITRD=yes 
 +DEST_MODULE_LOCATION=/​extra 
 +</​conf>​  
 +  - add moudle to dkms <​code>​dkms add xmm7360_usb -v master</​code>​ 
 +  - build the module using dkms: <​code>​dkms build xmm7360_usb -v master</​code>​ 
 +  - install the module using dkms: <​code>​dkms install xmm7360_usb -v master</​code>​ 
 + 
 +after that either load the module using 
 +  modprobe xmm7360_usb 
 +or reboot your pc 
 + 
 +you should now see the modem with ''​lsusb'':​  
 +  Bus 001 Device 007: ID 2cb7:0007 Fibocom MBIM + 3 CDC-ACM 
 + 
 +next the modem needs to be configured to turn on and stay on as usb serial device. this needs to be done only once and it will be permanently kept this way even after a reboot.  
 + 
 +on my X1 gen 7 i had to run these commands to disable the FCC lock and enable the modem:  
 +<​code>​ 
 +at@nvm:​fix_cat_fcclock.fcclock_mode=0 
 +at@store_nvm(fix_cat_fcclock) 
 +AT+GTUSBMODE?​ 
 +AT+GTUSBMODE=7 
 +AT+CFUN? 
 +AT+CFUN=15 
 +</​code>​ 
 + 
 +the modem should now show up in your network manager drop-down and you should be able to click through the gui to configure your phone provider and dial in.  
 + 
 +===== other solutions ===== 
 +there is a [[https://​github.com/​abrasive/​xmm7360|script]] available. ​It'​s ​called [[https://​github.com/​abrasive/​xmm7360|xmm2usb]] ​and can be run to switch the modem into usb mode. The above module was inspired by this script. After switching the modem into usb mode for the first time, the usb mode must be changed from ''​0''​ to ''​7''​. Once this is done, ubuntu will detect a broadband modem and off you go. 
  
 The **problem** with this solution is, that you need to run this script every time the PCI card is re-initialized which is at least aver every reboot if not after every wakeup (haven'​t tried this yet). This alone would be no problem, but the script needs a kernel module called [[https://​github.com/​mkottman/​acpi_call|acpi_call]] which is poorly maintained and won't compile on newer kernels (4.5.5 and newer iirc) without modification of the source code. The modification is very simple however, simply make sure that at the begining of the file ''​acpi_call.c''​ the two ''​include''​ statements for ''​acpi.h''​ and ''​uaccess.h''​ contain the path ''​linux/​acpi.h''​ and ''​linux/​uaccess.h''​ and not ''​acpi/​acpi.h''​ etc.. once this is changed the module will compile but ''​make install''​ won't install it and it will not be loadable using ''​insmod''​ because of secure boot. So you need to disable secure boot and then you can load the module via ''​sudo insmod acpi_call.ko''​. once this is done, the xmm2usb script can be run. however, the script will try to load the module via modprobe which won't work because ''​make install''​ failed.. I simply commented out the ''​modprobe''​ line in the script and it worked. ​ The **problem** with this solution is, that you need to run this script every time the PCI card is re-initialized which is at least aver every reboot if not after every wakeup (haven'​t tried this yet). This alone would be no problem, but the script needs a kernel module called [[https://​github.com/​mkottman/​acpi_call|acpi_call]] which is poorly maintained and won't compile on newer kernels (4.5.5 and newer iirc) without modification of the source code. The modification is very simple however, simply make sure that at the begining of the file ''​acpi_call.c''​ the two ''​include''​ statements for ''​acpi.h''​ and ''​uaccess.h''​ contain the path ''​linux/​acpi.h''​ and ''​linux/​uaccess.h''​ and not ''​acpi/​acpi.h''​ etc.. once this is changed the module will compile but ''​make install''​ won't install it and it will not be loadable using ''​insmod''​ because of secure boot. So you need to disable secure boot and then you can load the module via ''​sudo insmod acpi_call.ko''​. once this is done, the xmm2usb script can be run. however, the script will try to load the module via modprobe which won't work because ''​make install''​ failed.. I simply commented out the ''​modprobe''​ line in the script and it worked. ​
Line 27: Line 72:
 I've therefore tried to disable the PCIe link on the original card, so that it will start as USB device (that'​s the documented behaviour, the card will first try to establish a PCI link, if that fails it will start as USB device). I believe i was successful by covering up all odd pins from 41 to 55, but the problem is, that in this case the card is again blocked by the bios because the USB mode is not whitelisted either! ​ I've therefore tried to disable the PCIe link on the original card, so that it will start as USB device (that'​s the documented behaviour, the card will first try to establish a PCI link, if that fails it will start as USB device). I believe i was successful by covering up all odd pins from 41 to 55, but the problem is, that in this case the card is again blocked by the bios because the USB mode is not whitelisted either! ​
  
-so currently ​the software hack is the only solution+so the best solution ​to date seems to be the module as described above
  
 ===== the speaker volume can only be 100% or 0% ===== ===== the speaker volume can only be 100% or 0% =====