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.