Commit Graph
5 Commits
Author SHA1 Message Date
Daniel Drake ebf482e7cd hwdb: Endless ELT-NL3 accelerometer support
The Endless ELT-NL3 laptop has an accelerometer but its values are
not being interpreted correctly, meaning that it's very easy to end up
with the screen rotated inappropriately.

Add an appropriate mount matrix to correct the values.

P: /devices/LNXSYSTM:00/LNXSYBUS:00/ACCE0001:00
E: DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/ACCE0001:00
E: DRIVER=cmpc_accel_v4
E: ID_VENDOR_FROM_DATABASE=Accton Technology Corporation
E: MODALIAS=acpi:ACCE0001:
E: SUBSYSTEM=acpi

P: /devices/LNXSYSTM:00/LNXSYBUS:00/ACCE0001:00/input/input8
E: ABS=7
E: ACCEL_MOUNT_MATRIX=0, 1, 0; 0, 0, -1; -1, 0, 0
E: DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/ACCE0001:00/input/input8
E: EV=9
E: ID_FOR_SEAT=input-acpi-ACCE0001_00
E: ID_INPUT=1
E: ID_INPUT_ACCELEROMETER=1
E: ID_PATH=acpi-ACCE0001:00
E: ID_PATH_TAG=acpi-ACCE0001_00
E: IIO_SENSOR_PROXY_TYPE=input-accel
E: MODALIAS=input:b0000v0000p0000e0000-e0,3,kra0,1,2,mlsfw
E: NAME="cmpc_accel_v4"
E: PRODUCT=0/0/0/0
E: PROP=0
E: SUBSYSTEM=input
E: SYSTEMD_WANTS=iio-sensor-proxy.service
E: TAGS=:seat:systemd:

P: /devices/LNXSYSTM:00/LNXSYBUS:00/ACCE0001:00/input/input8/event7
N: input/event7
E: ACCEL_MOUNT_MATRIX=0, 1, 0; 0, 0, -1; -1, 0, 0
E: DEVNAME=/dev/input/event7
E: DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/ACCE0001:00/input/input8/event7
E: ID_INPUT=1
E: ID_INPUT_ACCELEROMETER=1
E: ID_PATH=acpi-ACCE0001:00
E: ID_PATH_TAG=acpi-ACCE0001_00
E: IIO_SENSOR_PROXY_TYPE=input-accel
E: MAJOR=13
E: MINOR=71
E: SUBSYSTEM=input
E: SYSTEMD_WANTS=iio-sensor-proxy.service
E: TAGS=:power-switch:systemd:
2017-03-02 00:02:22 +01:00
Daniel Drake 906d8a2ac5 udev: Allow quirks for ACPI input accelerometers
The existing accelerometer rules only support IIO devices, however
iio-sensor-proxy can also work with accelerometers made available
through the input (evdev) subsystem.

In this case I am working with an accelerometer input device backed by an
ACPI driver for which the hierarchy is:
- ACCE0001 (ACPI device)
  -> input8
    -> event7

We want the mount matrix (from hwdb) to be applied to both input8 and
event7. However, to match in 60-sensor.hwdb, we need to be working
with the modalias of the parent device (ACCE0001), and it is tricky
to access that when processing the input8 device which has it's own
modalias.

Instead of working directly with modalias, this ACPI-specific rule
uses the "hid" attribute to reconstruct the ACPI modalias. Since input
and event devices do not provide a hid attribute we will always get this
from the ACPI parent.

The modalias is constructed according to the definition in the kernel's
Documentation/acpi/namespace.txt and create_pnp_modalias(). We will only
use the first _CID/_HID value available, i.e. in some cases we will only
reconstruct the first part of the modalias, but that should be enough
granularity for our needs.
2017-03-02 00:02:22 +01:00
Daniel Drake d84071d569 rules: identify internal sound cards on platform bus (#4893)
We have a system which has the HDMI audio capability internally,
but pulseaudio is not giving it a very high priority compared
to e.g. USB sound cards.

The sound device appears on the platform bus and it is not
currently tagged with any form factor information.

It seems safe to assume that any sound card that is directly on the
platform bus is of internal form factor, but we must be careful because
udev rules will match all parent devices, not just the immediate parent,
and you will frequently encounter setups such as:

 Platform bus -> USB host controller -> USB sound card

In that case, SUBSYSTEMS==platform would match even though we're
clearly working with an external USB sound card.

In order to detect true platform devices here, we rely on the observation
that if any parent devices of the sound card are PCI, USB or firewire
devices, then this sound card cannot directly connected to the platform
bus. Otherwise, if we find a parent device on the platform bus, we assume
this is an internal sound card connected directly to the platform bus.
2016-12-15 23:11:11 +01:00
Daniel Drake 7163e1ca11 Create initrd-root-device.target synchronization point (#3239)
Add a synchronization point so that custom initramfs units can run
after the root device becomes available, before it is fsck'd and
mounted.

This is useful for custom initramfs units that may modify the
root disk partition table, where the root device is not known in
advance (it's dynamically selected by the generators).
2016-05-12 18:42:39 +02:00
Daniel Drake 07ba8037bf udevd: fix synchronization with settle when handling inotify events
udev uses inotify to implement a scheme where when the user closes
a writable device node, a change uevent is forcefully generated.
In the case of block devices, it actually requests a partition rescan.

This currently can't be synchronized with "udevadm settle", i.e. this
is not reliable in a script:

 sfdisk --change-id /dev/sda 1 81
 udevadm settle
 mount /dev/sda1 /foo

The settle call doesn't synchronize there, so at the same time we try
to mount the device, udevd is busy removing the partition device nodes and
readding them again. The mount call often happens in that moment where the
partition node has been removed but not readded yet.

This exact issue was fixed long ago:
http://git.kernel.org/cgit/linux/hotplug/udev.git/commit/?id=bb38678e3ccc02bcd970ccde3d8166a40edf92d3

but that fix is no longer valid now that sequence numbers are no longer
used.

Fix this by forcing another mainloop iteration after handling inotify events
before unblocking settle. If the inotify event caused us to generate a
"change" event, we'll pick that up in the following loop iteration, before
we reach the end of the loop where we respond to settle's control message,
unblocking it.
2015-04-11 13:10:52 +02:00