Showing posts with label Dell. Show all posts
Showing posts with label Dell. Show all posts

Monday, September 17, 2012

Dell Latitude Freefall Sensor On Linux

Dell Latitude laptops come with a freefall sensor which is essentially a hidden accelerometer exposed to the system as an ACPI device, SMO8800. In Windows the device shows up as ACPI\SMO8800 for which Dell provides a driver. Unfortunately there is no existing Linux driver for this device until now that is :-)

I have written a Linux driver for this device after reverse engineering the DSDT tables of the laptop. This is how the device shows up in DSDT:

Scope (\_SB.PCI0)
    {
        Device (A_CC)
        {
            Name (_HID, "SMO8800")
            Method (_STA, 0, NotSerialized)
            {
                Return (0x0F)
            }

            Name (_UID, One)
            Name (BUF2, ResourceTemplate ()
            {
                Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, ,, )
                {
                    0x00000017,
                }
            })
            Method (_CRS, 0, Serialized)
            {
                Return (BUF2)
            }

            Method (_SRS, 1, Serialized)
            {
                Return (BUF2)
            }
        }
    } 

Essentially the device uses IRQ 23 to notify the system whenever it detects a free fall. Note that it does not expose any IO ports for more general programming or reading 3 Axes acceleration values.

I started with a basic Linux driver which detected freefall conditions and just did a printk(). I eventually enhanced the driver to add the /dev/freefall interface similar to LIS3LV02DL driver.

Grab the driver source from https://github.com/sonals/SMO8800

Update (June 11, 2014)

Thanks to Pali Rohár. The driver has been upstreamed; it would appear in Linux kernel 3.16.