# Lenovo Yoga 900 Hardware Kernel Options

## Spargeltarzan

Hello,

I am brand new in Gentoo and I struggle to set all kernel options for my touchpad, touchscreen, audio and controllers in my Lenovo Yoga 900-13ISK correctly.

I tried to get my touchpad work with evdev synaptics as well as libinput. I completely worked through the handbook. Use Kernel 4.9.

Currently I have the x86-synaptics driver installed and have a 50-synaptics.conf in /etc/X11/xorg.conf.d/.

Firstly I would like to fix my touchpad, controllers, afterwards touchscreen and audio. I only managed to fix wifi. It is very hard to find the right kernel options in make menuconfig from the kernel modules in use from the internet lspci -k for my notebook. Also I didn't find the right options in the Internet. 

Here is my prompt of

```
 lspci -k

00:00.0 Host bridge: Intel Corporation Skylake Host Bridge/DRAM Registers (rev 08)

   Subsystem: Lenovo Skylake Host Bridge/DRAM Registers

   Kernel driver in use: skl_uncore

00:02.0 VGA compatible controller: Intel Corporation HD Graphics 520 (rev 07)

   Subsystem: Lenovo HD Graphics 520

   Kernel driver in use: i915

00:04.0 Signal processing controller: Intel Corporation Skylake Processor Thermal Subsystem (rev 08)

   Subsystem: Lenovo Skylake Processor Thermal Subsystem

00:14.0 USB controller: Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller (rev 21)

   Subsystem: Lenovo Sunrise Point-LP USB 3.0 xHCI Controller

   Kernel driver in use: xhci_hcd

   Kernel modules: xhci_pci

00:14.2 Signal processing controller: Intel Corporation Sunrise Point-LP Thermal subsystem (rev 21)

   Subsystem: Lenovo Sunrise Point-LP Thermal subsystem

00:15.0 Signal processing controller: Intel Corporation Sunrise Point-LP Serial IO I2C Controller #0 (rev 21)

   Subsystem: Lenovo Sunrise Point-LP Serial IO I2C Controller

00:15.1 Signal processing controller: Intel Corporation Sunrise Point-LP Serial IO I2C Controller #1 (rev 21)

   Subsystem: Lenovo Sunrise Point-LP Serial IO I2C Controller

00:15.3 Signal processing controller: Intel Corporation Sunrise Point-LP Serial IO I2C Controller #3 (rev 21)

   Subsystem: Lenovo Sunrise Point-LP Serial IO I2C Controller

00:16.0 Communication controller: Intel Corporation Sunrise Point-LP CSME HECI #1 (rev 21)

   Subsystem: Lenovo Sunrise Point-LP CSME HECI

00:17.0 SATA controller: Intel Corporation Sunrise Point-LP SATA Controller [AHCI mode] (rev 21)

   Subsystem: Lenovo Sunrise Point-LP SATA Controller [AHCI mode]

   Kernel driver in use: ahci

00:1c.0 PCI bridge: Intel Corporation Sunrise Point-LP PCI Express Root Port #5 (rev f1)

   Kernel driver in use: pcieport

00:1c.5 PCI bridge: Intel Corporation Sunrise Point-LP PCI Express Root Port #6 (rev f1)

   Kernel driver in use: pcieport

00:1f.0 ISA bridge: Intel Corporation Sunrise Point-LP LPC Controller (rev 21)

   Subsystem: Lenovo Sunrise Point-LP LPC Controller

00:1f.2 Memory controller: Intel Corporation Sunrise Point-LP PMC (rev 21)

   Subsystem: Lenovo Sunrise Point-LP PMC

00:1f.3 Audio device: Intel Corporation Sunrise Point-LP HD Audio (rev 21)

   Subsystem: Lenovo Sunrise Point-LP HD Audio

   Kernel driver in use: snd_hda_intel

00:1f.4 SMBus: Intel Corporation Sunrise Point-LP SMBus (rev 21)

   Subsystem: Lenovo Sunrise Point-LP SMBus

   Kernel driver in use: i801_smbus

01:00.0 Network controller: Intel Corporation Wireless 8260 (rev 3a)

   Subsystem: Intel Corporation Wireless 8260

   Kernel driver in use: iwlwifi

   Kernel modules: iwlwifi

02:00.0 SD Host controller: O2 Micro, Inc. Device 8620 (rev 01)

   Subsystem: Lenovo Device 3800

```

```

lsusb

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

Bus 001 Device 004: ID 8087:0a2b Intel Corp. 

Bus 001 Device 003: ID 5986:068c Acer, Inc 

Bus 001 Device 002: ID 04d9:a086 Holtek Semiconductor, Inc. 

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

```

From the internet and a working fedora live stick I see that several pci devices not use a driver yet:

```

00:00.0 Host bridge [0600]: Intel Corporation Sky Lake Host Bridge/DRAM Registers [8086:1904] (rev 08)

    Subsystem: Lenovo Skylake Host Bridge/DRAM Registers [17aa:3800]

00:02.0 VGA compatible controller [0300]: Intel Corporation Sky Lake Integrated Graphics [8086:1916] (rev 07)

    Subsystem: Lenovo Skylake Integrated Graphics [17aa:3800]

    Kernel driver in use: i915_bpo

    Kernel modules: i915_bpo

00:04.0 Signal processing controller [1180]: Intel Corporation Skylake Processor Thermal Subsystem [8086:1903] (rev 08)

    Subsystem: Lenovo Skylake Processor Thermal Subsystem [17aa:3800]

    Kernel driver in use: proc_thermal

    Kernel modules: processor_thermal_device

00:14.0 USB controller [0c03]: Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller [8086:9d2f] (rev 21)

    Subsystem: Lenovo Sunrise Point-LP USB 3.0 xHCI Controller [17aa:3800]

    Kernel driver in use: xhci_hcd

00:14.2 Signal processing controller [1180]: Intel Corporation Sunrise Point-LP Thermal subsystem [8086:9d31] (rev 21)

    Subsystem: Lenovo Sunrise Point-LP Thermal subsystem [17aa:3800]

00:15.0 Signal processing controller [1180]: Intel Corporation Sunrise Point-LP Serial IO I2C Controller [8086:9d60] (rev 21)

    Subsystem: Lenovo Sunrise Point-LP Serial IO I2C Controller [17aa:3800]

    Kernel driver in use: intel-lpss

    Kernel modules: intel_lpss_pci

00:15.1 Signal processing controller [1180]: Intel Corporation Sunrise Point-LP Serial IO I2C Controller [8086:9d61] (rev 21)

    Subsystem: Lenovo Sunrise Point-LP Serial IO I2C Controller [17aa:3800]

    Kernel driver in use: intel-lpss

    Kernel modules: intel_lpss_pci

00:15.3 Signal processing controller [1180]: Intel Corporation Sunrise Point-LP Serial IO I2C Controller [8086:9d63] (rev 21)

    Subsystem: Lenovo Sunrise Point-LP Serial IO I2C Controller [17aa:3800]

    Kernel driver in use: intel-lpss

    Kernel modules: intel_lpss_pci

00:16.0 Communication controller [0780]: Intel Corporation Sunrise Point-LP CSME HECI [8086:9d3a] (rev 21)

    Subsystem: Lenovo Sunrise Point-LP CSME HECI [17aa:3800]

    Kernel driver in use: mei_me

    Kernel modules: mei_me

00:17.0 SATA controller [0106]: Intel Corporation Sunrise Point-LP SATA Controller [AHCI mode] [8086:9d03] (rev 21)

    Subsystem: Lenovo Sunrise Point-LP SATA Controller [AHCI mode] [17aa:3800]

    Kernel driver in use: ahci

    Kernel modules: ahci

00:1c.0 PCI bridge [0604]: Intel Corporation Sunrise Point-LP PCI Express Root Port [8086:9d14] (rev f1)

    Kernel driver in use: pcieport

    Kernel modules: shpchp

00:1c.5 PCI bridge [0604]: Intel Corporation Sunrise Point-LP PCI Express Root Port [8086:9d15] (rev f1)

    Kernel driver in use: pcieport

    Kernel modules: shpchp

00:1f.0 ISA bridge [0601]: Intel Corporation Sunrise Point-LP LPC Controller [8086:9d48] (rev 21)

    Subsystem: Lenovo Sunrise Point-LP LPC Controller [17aa:3800]

00:1f.2 Memory controller [0580]: Intel Corporation Sunrise Point-LP PMC [8086:9d21] (rev 21)

    Subsystem: Lenovo Sunrise Point-LP PMC [17aa:3800]

00:1f.3 Audio device [0403]: Intel Corporation Sunrise Point-LP HD Audio [8086:9d70] (rev 21)

    Subsystem: Lenovo Sunrise Point-LP HD Audio [17aa:3800]

    Kernel driver in use: snd_hda_intel

    Kernel modules: snd_hda_intel, snd_soc_skl

00:1f.4 SMBus [0c05]: Intel Corporation Sunrise Point-LP SMBus [8086:9d23] (rev 21)

    Subsystem: Lenovo Sunrise Point-LP SMBus [17aa:3800]

    Kernel modules: i2c_i801

01:00.0 Network controller [0280]: Intel Corporation Wireless 8260 [8086:24f3] (rev 42)

    Subsystem: Intel Corporation Wireless 8260 [8086:1130]

    Kernel driver in use: iwlwifi

    Kernel modules: iwlwifi, wl

02:00.0 SD Host controller [0805]: O2 Micro, Inc. Device [1217:8620] (rev 01)

    Subsystem: Lenovo Device [17aa:3800]

    Kernel driver in use: sdhci-pci

    Kernel modules: sdhci_pci

```

As far as I realise I miss the following modules/drivers:

SD Host card: sdhci_pci

Intel Corporation Sunrise Point-LP PCI Express Root Port: shpchp 

Intel Audio: snd_hda_intel, snd_soc_skl 

Intel Corporation Sunrise Point-LP CSME HECI: mei_me 

Intel Corporation Sunrise Point-LP Serial IO I2C Controller: intel_lpss_pci 

Intel Corporation Skylake Processor Thermal Subsystem: processor_thermal_device 

How can I activate/load them?

Many thanks in advance! Urgent help is very appreciated!

Regards

Richard

----------

## Telemin

Dear Richard,

Welcome to Gentoo  :Smile: 

This seems to be a common issue at the moment because people aren't expecting their touchpads to be on the I2C bus.  You are on the right lines, you should enable the CONFIG_MFD_INTEL_LPSS_PCI option in the kernel, that will get you the drivers to talk to the I2C bus.

You will also need most likely need CONFIG_I2C_HID and CONFIG_I2C_DESIGNWARE_*

(Hint hit "/" in menuconfig and search for LPSS and I2C to help you find things)

-Telemin-

----------

## NeddySeagoon

Spargeltarzan,

Welcome to Gentoo.

Here is a process that will find most of the modules.  You have done the hard bit by discovering the module names.

You can use the 

```
make menuconfig
```

seach function.

Go into make menuconfig and press /.

Enter 

```
i915
```

anh the search will show you all the kernel symbols with i915 in their name.

They will have a number next to them. Press the number to go to the place in the configuration where you can change that option.

That was just for practice but do it anyway.  Now it gets harder.

You are missing shpchp, so try that. If it does not work, there are two reasons.

The module name does not appear in the kernel symbol name.  Unfortunately there are a few like that.

More commonly, something that the symbol you are searching for is needed to be on for the symbol to be visible.

There are a few extra steps.  Press the 'z' key to show all the hidden symbols.

Now the search will work but the item you want cannot be selected. Go to the item and read the help. 

Using shpchp an an example, You will discover that the help includes 

```
Depends on: HOTPLUG_PCI [=n] 
```

This means that 

```
SHPC PCI Hotplug driver
```

 cannot be selected until the depends on evaluates to true.

If it appears at all it will be

```
 - -   SHPC PCI Hotplug driver
```

where '- -' means forced off.

Apply the process recursively, in this case, find  HOTPLUG_PCI. 

Rebuild and reinstall your kernel.  Reboot to test.

----------

## Spargeltarzan

Thank you both, I have got the touchpad working! In my gnome settings the touchpad is not listed, do I need to install something additional?

Currently in my lspci -k only two drivers are missing:

```

00:1f.0 ISA bridge: Intel Corporation Sunrise Point-LP LPC Controller (rev 21)

   Subsystem: Lenovo Sunrise Point-LP LPC Controller

00:1f.2 Memory controller: Intel Corporation Sunrise Point-LP PMC (rev 21)

   Subsystem: Lenovo Sunrise Point-LP PMC

```

I activated the INTEL_PMC_CORE (http://cateee.net/lkddb/web-lkddb/INTEL_PMC_CORE.html)and LPC_ICH (http://cateee.net/lkddb/web-lkddb/LPC_ICH.html) as I found evidence for fixing this but for me it doesn't work still. Any idea what is missing?

For my HD Audio the snd_hda_intel is active only but in my live stick snd_hda_intel and snd_soc_skl is active. I didn't work through pulseaudio section yet, will I need the additional driver to get audio work?

Currently I have

```
<M>   ALSA for SoC audio support  --->  

 --- ALSA for SoC audio support   
```

and nothing else in the section is selected. Can't activate ALSA for SoC audio support, this is my help output:

```
│ Symbol: SND_SOC [=m]                                                    │  

  │ Type  : tristate                                                        │  

  │ Prompt: ALSA for SoC audio support                                      │  

  │   Location:                                                             │  

  │     -> Device Drivers                                                   │  

  │       -> Sound card support (SOUND [=y])                                │  

  │         -> Advanced Linux Sound Architecture (SND [=y])                 │  

  │   Defined at sound/soc/Kconfig:5                                        │  

  │   Depends on: SOUND [=y] && !M68K && !UML && SND [=y]                   │  

  │   Selects: SND_PCM [=y] && AC97_BUS [=n] && SND_JACK [=y] && \          │  

  │ REGMAP_I2C [=y] && REGMAP_SPI [=n] 
```

I actually fulfill "depends on" SOUND=y SND=y. M68K and UML is unknown. 

Can you see what blocks this driver?

[Moderator edit: changed [quote] tags to [code] tags to preserve output layout; added [code] tags to preserve output layout. -Hu]Last edited by Spargeltarzan on Sun Jul 23, 2017 5:06 pm; edited 2 times in total

----------

## NeddySeagoon

Spargeltarzan,

Make friends with wgetpaste and put your entire dmesg onto a pastbin site.

Its too large for a post.  Post the link.

Its all the kernel startup messages.

----------

## Spargeltarzan

Cool feature, here is the link https://paste.pound-python.org/show/BLY86K3aTuUGJ6h1T5rX/

If you know how to highlight the output correctly, let me know and I will repost.

I can see some direct firmware loading failures for i915 and iwlwifi...

Thank you,

Regards

Richard

----------

## NeddySeagoon

Spargeltarzan,

Things like i915 and iwlwifi come in two pieces.  The kernel driver and firmware.

The firmware must be available when the kernel driver is initialised.

So for i915,  i915/skl_dmc_ver1_26.bin must be built into the kernel binary.

For iwlwifi, which is a loadable module,

```
 emerge linux-firmware
```

will fix at the next start of iwlwifi.

linux-firmware actually provides both sets of firmware.

After linux-firmware is installed, rebuild your kernel to include i915/skl_dmc_ver1_26.bin

```
[    3.175304] sdhci: Secure Digital Host Controller Interface driver

[    3.175304] sdhci: Copyright(c) Pierre Ossman

[    3.176636] sdhci_pci: Unknown symbol sdhci_pci_spt_drive_strength (err 0)
```

indicates that you have a bit missing.

Possibly the kernel binary and the modules don't match because you forgot to mount /boot for the kernel install?

```
[    0.000000] Linux version 4.9.34-gentoo (root@lenovo-yoga) (gcc version 5.4.0 (Gentoo 5.4.0-r3 p1.3, pie-0.6.5) ) #9 SMP Sun Jul 23 16:16:28 CEST 2017
```

Thats the 9th build of this kernel and it was built at Sun Jul 23 16:16:28 CEST 2017.  Does that look right?

Your SD card reader is not working. 

```
[    1.902598] hdaudio hdaudioC0D0: Unable to bind the codec

[    1.902769] hdaudio hdaudioC0D2: Unable to bind the codec
```

You have two sound devices. One, HDMI, may not have a codec but the codec is the bit that that makes you analogue speakers work.

In the Sound HDA Intel menu, there is a whole list of codecs.  Select them all.

Once you know the one you need, you can deselect the rest at some future kernel update.

----------

## Spargeltarzan

 *NeddySeagoon wrote:*   

> Spargeltarzan,
> 
> Things like i915 and iwlwifi come in two pieces.  The kernel driver and firmware.
> 
> The firmware must be available when the kernel driver is initialised.
> ...

 

I had linux-firmware already installed, I did now a recompile with /boot mounted. Did make && make modules_install and finally make install for the new kernel. Hope you meant this with include i915/skl_dmc_ver1_26.bin... But I think nothing changed since linux-firmware was already installed.

 *Quote:*   

> 
> 
> ```
> [    3.175304] sdhci: Secure Digital Host Controller Interface driver
> 
> ...

 

Yes, I did many, many recompiles. Don't have a SD card with me now to check.

 *Quote:*   

> 
> 
> ```
> [    1.902598] hdaudio hdaudioC0D0: Unable to bind the codec
> 
> ...

 

Unfortunately in Gnome I only have a dummy audio. No audio card at all. I included all codecs in HD Audio PCI. I didn't find a specific Intel Codec Menu...

```

<*> HD Audio PCI                                                                                                      │ │  

  │ │                                               [*] Build hwdep interface for HD-audio driver                                                                         │ │  

  │ │                                               -*- Allow dynamic codec reconfiguration                                                                               │ │  

  │ │                                               [*] Support digital beep via input layer                                                                              │ │  

  │ │                                               (1)   Digital beep registration mode (0=off, 1=on)                                                                    │ │  

  │ │                                               [*] Support initialization patch loading for HD-audio                                                                 │ │  

  │ │                                               <M> Build Realtek HD-audio codec support                                                                              │ │  

  │ │                                                     *** Set to Y if you want auto-loading the codec driver ***                                                      │ │  

  │ │                                               <M> Build Analog Device HD-audio codec support                                                                        │ │  

  │ │                                                     *** Set to Y if you want auto-loading the codec driver ***                                                      │ │  

  │ │                                               <M> Build IDT/Sigmatel HD-audio codec support                                                                         │ │  

  │ │                                                     *** Set to Y if you want auto-loading the codec driver ***                                                      │ │  

  │ │                                               <M> Build VIA HD-audio codec support                                                                                  │ │  

  │ │                                                     *** Set to Y if you want auto-loading the codec driver ***                                                      │ │  

  │ │                                               <M> Build HDMI/DisplayPort HD-audio codec support                                                                     │ │  

  │ │                                                     *** Set to Y if you want auto-loading the codec driver ***                                                      │ │  

  │ │                                               <M> Build Cirrus Logic codec support                                                                                  │ │  

  │ │                                                     *** Set to Y if you want auto-loading the codec driver ***                                                      │ │  

  │ │                                               <M> Build Conexant HD-audio codec support                                                                             │ │  

  │ │                                                     *** Set to Y if you want auto-loading the codec driver ***                                                      │ │  

  │ │                                               <M> Build Creative CA0110-IBG codec support                                                                           │ │  

  │ │                                                     *** Set to Y if you want auto-loading the codec driver ***                                                      │ │  

  │ │                                               <M> Build Creative CA0132 codec support                                                                               │ │  

  │ │                                                     *** Set to Y if you want auto-loading the codec driver ***                                                      │ │  

  │ │                                               [ ]   Support new DSP code for CA0132 codec                                                                           │ │  

  │ │                                               <M> Build C-Media HD-audio codec support                                                                              │ │  

  │ │                                                     *** Set to Y if you want auto-loading the codec driver ***                                                      │ │  

  │ │                                               <M> Build Silicon Labs 3054 HD-modem codec support                                                                    │ │  

  │ │                                                     *** Set to Y if you want auto-loading the codec driver ***                                                      │ │  

  │ │                                               {M} Enable generic HD-audio codec parser                                                                              │ │  

  │ │                                                     *** Set to Y if you want auto-loading the codec driver ***                                                      │ │  

  │ │                                               (0) Default time-out for HD-audio power-save mode        

```

----------

## NeddySeagoon

Spargeltarzan,

You need to find and populate 

```
CONFIG_EXTRA_FIRMWARE
```

in menuconfig.

Press / enter EXTRA_FIRMWARE to find the location.

When you populate that, another entry will appear. 

```
 (firmware) Firmware blobs root directory (NEW)
```

Change it to (/lib/firmare) Firmware blobs root directory, so that the kernel picks up firmware from /lib/firmware

and populate EXTRA_FIRMWARE with i915/skl_dmc_ver1_26.bin.

This a a space separated list of firmware files to be included, with respect to Firmware blobs root directory 

What does lsmod show for codecs? 

The kernel says 

```
*** Set to Y if you want auto-loading the codec driver *** 
```

 Y is * not M, so your codes may not load.

You can load them one at a time with modprobe .. if you can discover their .ko names.

modprobe <name> drop the .ko.

They will be in /lib/modules/<kernel-ver>/... somewhere.

----------

## Spargeltarzan

 *NeddySeagoon wrote:*   

> Spargeltarzan,
> 
> You need to find and populate 
> 
> ```
> ...

 

Thank you! This dmesg error for i915 disappeared now! It only remains for the iwlwifi

 *Quote:*   

> 
> 
> [    3.161068] iwlwifi 0000:01:00.0: Direct firmware load for iwlwifi-8000C-26.ucode failed with error -2
> 
> [    3.161232] iwlwifi 0000:01:00.0: Direct firmware load for iwlwifi-8000C-25.ucode failed with error -2
> ...

 

It is actually not a big deal since wifi works, I am very impressed about all possible customization Gentoo gives and therefore I ask myself, can I fix this 4 errors in a similar way? Maybe with the same flag?

Thus, do you think future updates might break my system when the 915/skl_dmc_ver1_26.bin increases in version?

 *Quote:*   

> 
> 
> What does lsmod show for codecs? 
> 
> The kernel says 
> ...

 

Thanks for this hint too! Reading carefully helps, now my system plays sound!

Here is my recent dmesg output https://paste.pound-python.org/show/pAKcglU51Wm0Fgfogzb3/

It seems that snd_hda_codec_realtek is my codec, I will disable all others again.

Regards

Richard

----------

## NeddySeagoon

Spargeltarzan,

It looks like the iwlwifi has some future proofing

```
[    3.158675] Intel(R) Wireless WiFi driver for Linux

[    3.158676] Copyright(c) 2003- 2015 Intel Corporation

[    3.161068] iwlwifi 0000:01:00.0: Direct firmware load for iwlwifi-8000C-26.ucode failed with error -2

[    3.161232] iwlwifi 0000:01:00.0: Direct firmware load for iwlwifi-8000C-25.ucode failed with error -2

[    3.162203] iwlwifi 0000:01:00.0: Direct firmware load for iwlwifi-8000C-24.ucode failed with error -2

[    3.162213] iwlwifi 0000:01:00.0: Direct firmware load for iwlwifi-8000C-23.ucode failed with error -2

[    3.171863] iwlwifi 0000:01:00.0: loaded firmware version 22.391740.0 op_mode iwlmvm
```

It tried to load progressively lower versions of firmmare until  22.391740.0 worked.

The other errors can be ignored.

Your 

```
[    3.161442] sdhci: Secure Digital Host Controller Interface driver
```

missing symbol error has gone.

And you are on 

```
[    0.000000] Linux version 4.9.34-gentoo (root@lenovo-yoga) (gcc version 5.4.0 (Gentoo 5.4.0-r3 p1.3, pie-0.6.5) ) #19 SMP Sun Jul 23 22:48:08 CEST 2017
```

version 19 of your kernel built today.

If 915/skl_dmc_ver1_26.bin increases in versiot it will not harm your current kernel as its built in.

Its something to look out for at kernel upgrades though.

All in all, your dmesg looks good.

----------

## Spargeltarzan

Hi,

I am trying my best to get automatic screen rotation of my Yoga working. Loaded every sensor as a module in the menu, but still nothing happens. As I read in Gnome documentation iio-sensors should be included in Gnome 3.22. 

With lspci and lsusb I cannot find a hint for the sensors.

Under fedora screen rotation works fine. However, after the screen was rotating, the touchscreen input didn't rotate with it so it was impossible to "hit" all the buttons.

Anyone has experience to get this working with Gentoo?

----------

## Spargeltarzan

Nobody knows how to get the gyroscope working?

----------

## NeddySeagoon

Spargeltarzan,

Its the accelerometer you need, not the gyroscope.

Screen rotation is detected by measuring earths gravity.

If the accelerometer does not appear in lsusb or lspci, it will be on the i2c bus or even a GPIO pin.

Not everything rotating when it should is a bit harder to fix.

----------

## Spargeltarzan

Hi,

I activated every driver in Device Drivers --> Industrial I/O Support --> Accelerometers as a module. (M)

Software IIO device, software triggers support, IIO configuration via configfs, IIO callback buffer for push in-kernel interfaces in the upper menu I have still deactivated. 

Have Kernel 4.12.5 and Gnome 3.22 with X11. 

My current lspci -k shows I2C is active. 

```

lenovo-yoga /usr/src/linux # lspci -k

00:00.0 Host bridge: Intel Corporation Skylake Host Bridge/DRAM Registers (rev 08)

   Subsystem: Lenovo Skylake Host Bridge/DRAM Registers

   Kernel driver in use: skl_uncore

00:02.0 VGA compatible controller: Intel Corporation HD Graphics 520 (rev 07)

   Subsystem: Lenovo HD Graphics 520

   Kernel driver in use: i915

00:04.0 Signal processing controller: Intel Corporation Skylake Processor Thermal Subsystem (rev 08)

   Subsystem: Lenovo Skylake Processor Thermal Subsystem

   Kernel driver in use: proc_thermal

   Kernel modules: processor_thermal_device

00:14.0 USB controller: Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller (rev 21)

   Subsystem: Lenovo Sunrise Point-LP USB 3.0 xHCI Controller

   Kernel driver in use: xhci_hcd

   Kernel modules: xhci_pci

00:14.2 Signal processing controller: Intel Corporation Sunrise Point-LP Thermal subsystem (rev 21)

   Subsystem: Lenovo Sunrise Point-LP Thermal subsystem

   Kernel driver in use: intel_pch_thermal

   Kernel modules: intel_pch_thermal

00:15.0 Signal processing controller: Intel Corporation Sunrise Point-LP Serial IO I2C Controller #0 (rev 21)

   Subsystem: Lenovo Sunrise Point-LP Serial IO I2C Controller

   Kernel driver in use: intel-lpss

   Kernel modules: intel_lpss_pci

00:15.1 Signal processing controller: Intel Corporation Sunrise Point-LP Serial IO I2C Controller #1 (rev 21)

   Subsystem: Lenovo Sunrise Point-LP Serial IO I2C Controller

   Kernel driver in use: intel-lpss

   Kernel modules: intel_lpss_pci

00:15.3 Signal processing controller: Intel Corporation Sunrise Point-LP Serial IO I2C Controller #3 (rev 21)

   Subsystem: Lenovo Sunrise Point-LP Serial IO I2C Controller

   Kernel driver in use: intel-lpss

   Kernel modules: intel_lpss_pci

00:16.0 Communication controller: Intel Corporation Sunrise Point-LP CSME HECI #1 (rev 21)

   Subsystem: Lenovo Sunrise Point-LP CSME HECI

   Kernel driver in use: mei_me

   Kernel modules: mei_me

00:17.0 SATA controller: Intel Corporation Sunrise Point-LP SATA Controller [AHCI mode] (rev 21)

   Subsystem: Lenovo Sunrise Point-LP SATA Controller [AHCI mode]

   Kernel driver in use: ahci

00:1c.0 PCI bridge: Intel Corporation Sunrise Point-LP PCI Express Root Port #5 (rev f1)

   Kernel driver in use: pcieport

   Kernel modules: shpchp

00:1c.5 PCI bridge: Intel Corporation Sunrise Point-LP PCI Express Root Port #6 (rev f1)

   Kernel driver in use: pcieport

   Kernel modules: shpchp

00:1f.0 ISA bridge: Intel Corporation Sunrise Point-LP LPC Controller (rev 21)

   Subsystem: Lenovo Sunrise Point-LP LPC Controller

00:1f.2 Memory controller: Intel Corporation Sunrise Point-LP PMC (rev 21)

   Subsystem: Lenovo Sunrise Point-LP PMC

   Kernel driver in use: intel_pmc_core

00:1f.3 Audio device: Intel Corporation Sunrise Point-LP HD Audio (rev 21)

   Subsystem: Lenovo Sunrise Point-LP HD Audio

   Kernel driver in use: snd_hda_intel

00:1f.4 SMBus: Intel Corporation Sunrise Point-LP SMBus (rev 21)

   Subsystem: Lenovo Sunrise Point-LP SMBus

   Kernel driver in use: i801_smbus

01:00.0 Network controller: Intel Corporation Wireless 8260 (rev 3a)

   Subsystem: Intel Corporation Wireless 8260

   Kernel driver in use: iwlwifi

   Kernel modules: iwlwifi

02:00.0 SD Host controller: O2 Micro, Inc. Device 8620 (rev 01)

   Subsystem: Lenovo Device 3800

   Kernel driver in use: sdhci-pci

   Kernel modules: sdhci_pci

```

In lsusb -t also for every device a driver is active.

```

lenovo-yoga /usr/src/linux # lsusb -t

/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M

/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M

    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M

    |__ Port 6: Dev 3, If 0, Class=Video, Driver=uvcvideo, 480M

    |__ Port 6: Dev 3, If 1, Class=Video, Driver=uvcvideo, 480M

    |__ Port 7: Dev 4, If 0, Class=Wireless, Driver=btusb, 12M

    |__ Port 7: Dev 4, If 1, Class=Wireless, Driver=btusb, 12M

```

In the Gnome settings I can rotate the screen and the touchscreen input rotates with it; so if we fix the accelerometer I believe all will work as supposed to. 

Any idea how to find my accelerometer?

Regards,

----------

## NeddySeagoon

Spargeltarzan,

It looks like the accelerometer is an i2c bus or a GPIO pin.

Making drivers for these devices as modules is a good first step but the are not normally auto loaded.

Look in the lsmod output.

Modprobe the drivers one at a time and test.

Do not keep anything loaded you don't need. Some drivers fight with other drivers then neither will work.

Its also possible that Fedora has a kernel patch that Gentoo does not.  If its easy to boot Fedora, where it works, remove modules until it doesn't work.

Then you have found a needed module.

----------

## Spargeltarzan

Hi,

thanks for quick reply!

In my fedora I see that several modules are loaded:

hid_sensor_gyro_3d

hid_sensor_accel_3d

hid_sensor_magn_3d

hid_sensor_incl_3d

hid_sensor_rotation

hid_sensor_als

hid_sensor_trigger

hid_sensor_iio_common

where in my gentoo only 4 modules are loaded.

hid_sensor_gyro_3d

hid_sensor_accel_3d

hid_sensor_trigger

hid_sensor_iio_common

I tried to modprobe the rest of the modules, but:

```

modprobe: FATAL: Module hid_sensors_rotation not found in directory /lib/modules/4.12.5-gentoo

```

There are plenty of I2C or GPIO entries in the kernel available all with very non-self-explaining names and descriptions. How to figure out what is missing? Or any other issue why the modules are not available?

Regards

----------

## NeddySeagoon

Spargeltarzan,

Make friends with the search and goto features in make menuconfig.

Press / to search and enter a symbol name, or a symbol name fragment. Try hid_sensor (its not case sensitive)

This will give you a list of kernel symbols and the help, that contain your search fragment.

Notice that they are numbered, in recent kernels anyway. Press the number to go to the option.

Read the Depends on: ...

Heres an example from my kernel.

```
  │ Symbol: HID_SENSOR_ACCEL_3D [=n]                                                                                                        │  

  │ Type  : tristate                                                                                                                        │  

  │ Prompt: HID Accelerometers 3D                                                                                                           │  

  │   Location:                                                                                                                             │  

  │     -> Device Drivers                                                                                                                   │  

  │ (1)   -> Industrial I/O support (IIO [=n])                                                                                              │  

  │         -> Accelerometers                                                                                                               │  

  │   Defined at drivers/iio/accel/Kconfig:137                                                                                              │  

  │   Depends on: IIO [=n] && HID_SENSOR_HUB [=n]                                                                                           │  

  │   Selects: IIO_BUFFER [=n] && IIO_TRIGGERED_BUFFER [=n] && HID_SENSOR_IIO_COMMON [=n] && HID_SENSOR_IIO_TRIGGER [=n] 
```

For me,  HID_SENSOR_ACCEL_3D cannot be selected as it Depends on: IIO [=n] && HID_SENSOR_HUB [=n]  which are both off.

The Depends on: must evaluate to true before the option can be selected, so I would need to choose those to options too.

In some places in the kernel, anything whose Depends on: is false will not appear in menuconfig, nor in searches.

Pressing z toggles show/hide hidden symbols, you may need to do that too. 

A point to ponder.  Are you using the kernel you think you are?

If, say  HID_SENSOR_DEVICE_ROTATION is on when you look but its not in your modules, something went wrong with your kernel build/install.

Run 

```
uname -a
```

and look at the time/date.  That's the time/date when your running kernel was built.

If you have made a new kernel since then, you are not using it.  Maybe you forgot to mount /boot ?

----------

## Spargeltarzan

Thanks for quick reply, there really was an issue with my kernel built. My clock had a wrong time and config files were from future. However, I didn't trust to delete these files that's why I set my pc time to future now. With this successful build I will wait until time moves...

These modules are loaded shown with lsmod

```

hid_sensor_incl_3d     16384  0

hid_sensor_rotation    16384  0

hid_sensor_custom      20480  0

hid_sensor_magn_3d     16384  0

hid_sensor_accel_3d    16384  0

hid_sensor_gyro_3d     16384  0

hid_sensor_als         16384  0

hid_sensor_trigger     16384  12 hid_sensor_incl_3d,hid_sensor_als,hid_sensor_accel_3d,hid_sensor_magn_3d,hid_sensor_gyro_3d,hid_sensor_rotation

hid_sensor_iio_common    16384  7 hid_sensor_incl_3d,hid_sensor_als,hid_sensor_accel_3d,hid_sensor_trigger,hid_sensor_magn_3d,hid_sensor_gyro_3d,hid_sensor_rotation

```

However, my screen doesn't rotate. In my fedora in the panel there is a "lock autorotating" button which enables/disables it. Any idea how I find out the sensor is recognized and how to enable it in GNOME? There is nothing in the settings...

In my fedora some modules are marked as "used":

```

hid_sensor_als         16384  1

hid_sensor_magn_3d     16384  1

hid_sensor_gyro_3d     16384  0

hid_sensor_accel_3d    16384  1

hid_sensor_incl_3d     16384  0

hid_sensor_rotation    16384  0

hid_sensor_trigger     16384  12 hid_sensor_incl_3d,hid_sensor_als,hid_sensor_accel_3d,hid_sensor_magn_3d,hid_sensor_gyro_3d,hid_sensor_rotation

hid_sensor_iio_common    16384  7 hid_sensor_incl_3d,hid_sensor_als,hid_sensor_accel_3d,hid_sensor_trigger,hid_sensor_magn_3d,hid_sensor_gyro_3d,hid_sensor_rotation

industrialio_triggered_buffer    16384  6 hid_sensor_incl_3d,hid_sensor_als,hid_sensor_accel_3d,hid_sensor_magn_3d,hid_sensor_gyro_3d,hid_sensor_rotation

```

Regards

----------

## NeddySeagoon

Spargeltarzan,

It probably worth starting a new thread. I don't have a Lenovo Yoga 900 and I gave up Gnome early in Gnome 3.

Your clock being in error will mess up most rebuilds.

Make compares the timestamp of output files with that of the files needed to make the output file.

If the output file is newer than all the input files, there is nothing to to.

If time goes backwards, that may not be correct.

Some build systems check that the output file is newer than all the input files and rebuild the output file if the check fails.

On a system with no RTC, that check can take 48 years to pass.

In the case of the kernel, starting the build with the 

```
make clean
```

   step removes all the output files, so that they all have to be regenerated anyway.

----------

## Spargeltarzan

Hi,

I managed to get the rotation working with the iio-sensor-proxy. I needed to build a custom ebuild from github sources since its not available in Gentoo repos but it works! (I needed to migrate to GNOME with systemd since iio-sensor-proxy needs it. Systemd fixed also some little other stuff, wifi autoconnecting with networkmanager works now and remembering display brightness after reboot)

The github known issues page states that it might only work after suspending/resuming the notebook but the issue should be fixed with a commit in kernel 4.12, but the correct version number is not stated. For me in kernel 4.12.5 I observed the standby issue. Will probably try a later kernel later.

Also the keyboard becomes locked when turning the yoga into a tablet, what is really comfortable, but the touchpad is not disabled - well, not so important. Probably this results due to non-working F6 key to disable/enable it, as stated also in Archlinux docu. Someone maybe knows a fix in the meantime? But it is interesting that auto-disabling the touchpad while typing on the keyboard works! So somehow the touchpad can be disabled.

I am happy that rotation works now!!

----------

## jlm

Hi there!

I dig dead threads.... I'm new to gentoo, and just acquired a yoga 900-13ISK

after strugling with windows and my dualboot, I'm configuring the laptop.... I just discover this thread after lot of test and probe

I started a wiki page on https://wiki.gentoo.org/wiki/Yoga_900

so far I got almost all working appart the wifi and the sound (of course not even tried to perform rotation etc...) and seems that I miss some usb driver too according to the post

I wonder if you can send me your kernel config and help me update the wiki to make an install guide.... because it's pain in the ass... 

thanks a lot, hopping you still have the 900!

----------

## jlm

at this time when trying to  

```
modprobe snd_hda_codec_realtek
```

 I get 

```
[  524.924113] soundcore: exports duplicate symbol register_sound_dsp (owned by kernel)
```

same things seems to happen for wifi 

```
[    3.562830] rfkill: exports duplicate symbol rfkill_alloc (owned by kernel)
```

  :Rolling Eyes:  but I can' t find what builtin driver has the symbol....

----------

## NeddySeagoon

jlm,

The duplicate symbol errors mean you have made a mess of installing the kernel or its modules.

You now have some things both built in and as modules.

You made snd_hda_codec_realtek as a module and everything installed properly.

Then you rebuilt the kernel with it built in but failed to install the matching modules.

If you used genkernel, the initrd can also be involved.

To get back to being self consistent, mount /boot, regenerate your initrd, if any, and do the kernel and modules install steps.

There is no need to rebuild your kernel. It will be self consistent in the build location.

Well, it will unless your system time took a step backwards.

----------

## jlm

right! indeed, got some issue with wrong kernel modules installed.... after cleanup all is loading fine now...

got somehow the iw working, at least the scan, but still have issues with wpa_suplicant... didn't tried the webcam and sdcard, soundcard yet.....

----------

## Lambduh

Digging up a dead topic again, alot of the options the guide mentions to be in the make menu for the kernel seem to be nonexistent, haven't compiled yet but it kind of concerns me. 

If I end up having any headaches resolved I will report them here, but if anyone knows how I should handle things like:

```
.config - Linux/x86 4.9.95-gentoo Kernel Configuration

 → to complete

→ Device Drivers → Generic Driver Options

-*- Userspace firmware loading support

[*]   Include in-kernel firmware blobs in kernel binary

(i915/skl_dmc_ver1_26.bin) External firmware blobs to build into the kernel binary

(/lib/firmware) Firmware blobs root directory
```

Please do let me know  :Smile: 

----------

