Kernel driver Author: Invensense Table of Contents: ================== - Description - Integrating the Driver in the Linux Kernel - Board and Platform Data > Platform Data - Board File Modifications for compass > AMI306 > YAS530/532/533 - IIO Subsystem > Communicating with the Driver in Userspace - Streaming Data to an Userspace Application - Test Applications > Running Test Applications with AMI306 or YAS53x Description =========== This document describes how to install the Invensense device driver for AMI306 and YAS53x series compass chip into a Linux kernel. The Invensense driver currently supports the following sensors: - AMI306 - YAS530 - YAS532 - YAS533 Please refer to the appropriate product specification document for further information regarding the slave address. The following files are included in this package: - Kconfig - Makefile - inv_ami306_core.c - inv_ami306_ring.c - inv_ami306_trigger.c - inv_ami306_iio.h - inv_yas53x_core.c - inv_yas53x_ring.c - inv_yas53x_trigger.c - inv_yas53x_iio.h Integrating the Driver in the Linux Kernel ========================================== Please add the files as follows: - Add all above files to drivers/staging/iio/magnetometer/inv_compass (another directory is acceptable, but this is the recommended destination) In order to see the driver in menuconfig when building the kernel, please make modifications as shown below: modify "drivers/staging/iio/magnetometer/Kconfig" with: >> source "drivers/staging/iio/magnetometer/inv_compass/Kconfig" modify "drivers/staging/iio/magnetometer/Makefile" with: >> obj-y += inv_compass/ Board and Platform Data ======================= In order to recognize the Invensense device on the I2C bus, the board file must be modified. The i2c_board_info instance must be defined as shown below. Platform Data ------------- The platform data (orientation matrix and secondary bus configurations) must be modified as show below, according to your particular platform configuration. Board File Modifications for Secondary I2C Configuration ======================================================== For the Panda Board, the board file can be found at arch/arm/mach-omap2/board-omap4panda.c. Please modify the pertinent baord file in your system according to the examples shown below: AMI306 ------------------------------------------------- static struct mpu_platform_data compass_data = { .orientation = { 0, 0, 1, 0, 1, 0, 1, 0, 0 }, }; static struct i2c_board_info __initdata chip_board_info[] = { { I2C_BOARD_INFO("ami306", 0x0E), .platform_data = &compass_data, }, }; YAS53x(Use YAS532 as an example) ------------------------------------------------- static struct mpu_platform_data compass_data = { .orientation = { 0, -1, 0, 1, 0, 0, 0, 0, 1 }, }; static struct i2c_board_info __initdata compass_board_info[] = { { I2C_BOARD_INFO("yas532", 0x2E), .platform_data = &compass_data, }, }; IIO subsystem ============= A successful installation will create the following two new directories under /sys/bus/iio/devices: - iio:device0 - trigger0 Also, a new file, "iio:device0", will be created in the /dev/ diretory. (if you have more than one IIO device, the file will be named "iio:deviceX", where X is a number) Communicating with the Driver in Userspace ------------------------------------------ The driver generates several files in sysfs upon installation. These files are used to communicate with the driver. The files can be found at /sys/bus/iio/devices/iio:device0 (or ../iio:deviceX as shown above). A brief description of the pertinent files for each Invensense device is shown below: AMI306 -------- compass_matrix (read-only) --show the orientation matrix obtained from the board file. sampling_frequency(read and write) --show and change the sampling rate of the sensor. YAS53x --------------------- YAS53x has all the attributes AMI306 has. It has one more additional attribute: overunderflow(read-only) --value 1 shows an overflow or underflow happens. Need to write into it to make it zero. Streaming Data to an Userspace Application ========================================== When streaming data to an userspace application, we recommend that you access compass data via /dev/iio:device0. Please follow the steps below to read data at a constant rate from the driver: 1. Write the desired output rate to sampling_frequency. 2. Write 1 to enable to turn on the event. 3. Read /dev/iio:device0 to get a string of gyro/accel/compass data. 4. Parse this string to obtain each compass element. Test Applications ================= A test application is located under software/simple_apps/mpu_iio. This application is stand-alone in that it cannot be run concurrently with other entities trying to access the device node(s) or sysfs entries; in particular, the Running Test Applications --------------------------------------------------------- To run test applications with AMI306 or YAS53x devices, please use the following commands: 1. for ami306: mpu_iio -n ami306 -c 10 -l 3 2. for yas532: mpu_iio -n yas532 -c 10 -l 3 Please use mpu_iio.c and iio_utils.h as example code for your development purposes.