summaryrefslogtreecommitdiff
path: root/drivers/iio/imu-aosp/inv_mpu6515/README
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/iio/imu-aosp/inv_mpu6515/README')
-rwxr-xr-xdrivers/iio/imu-aosp/inv_mpu6515/README659
1 files changed, 0 insertions, 659 deletions
diff --git a/drivers/iio/imu-aosp/inv_mpu6515/README b/drivers/iio/imu-aosp/inv_mpu6515/README
deleted file mode 100755
index 0963954a844..00000000000
--- a/drivers/iio/imu-aosp/inv_mpu6515/README
+++ /dev/null
@@ -1,659 +0,0 @@
-Kernel driver inv-mpu-iio
-Author: Invensense <http://invensense.com>
-
-Table of Contents:
-==================
-- Description
-- Integrating the Driver in the Linux Kernel
-- Board and Platform Data
- > Interrupt Pin
- > Platform Data
-- Board File Modifications for Secondary I2C Configuration
- > MPU-6050 + AKM8963 on the secondary I2C interface
- > MPU-6500 + AKM8963 on the secondary I2C interface
- > MPU-6515 + AKM8975 and BMP280 on the secondary I2C interface
- > MPU-9150
- > MPU-9250
- > MPU-3050 + BMA250 on the secondary I2C interface
-- Board File Modifications for Invensense Devices
- > MPU-3050
- > ITG-3500
- > MPU-6050
- > MPU-6515
- > MPU-6500
- > MPU-6XXX
- > MPU-9150
- > MPU-9250
-- IIO Subsystem
- > Communicating with the Driver in Userspace
- > ITG-3500
- > MPU-6050 and MPU-6500
- > MPU-9150
- > MPU-9250
- > MPU-3050 + BMA250 on the secondary I2C interface
-- Suspend and Resume
-- Wake up CPU using event interrupt
-- DMP Event
-- Motion Event
-- Streaming Data to an Userspace Application
-- Recommended Sysfs Entry Setup Sequence
- > With DMP Firmware
- > Without DMP Firmware
-- Test Applications
- > Running Test Applications with MPU-9150/MPU-6050/MPU-6500/MPU-9250
- > Running Test Applications with MPU-3050/ITG-3500
-
-
-Description
-===========
-This document describes how to install the Invensense device driver into a
-Linux kernel. The Invensense driver currently supports the following sensors:
-- ITG-3500
-- MPU-6050
-- MPU-9150
-- MPU-6500
-- MPU-9250
-- MPU-3050
-- MPU-6XXX(either MPU6050 or MPU6500, driver to do auto detection)
-
-The slave address of each device is either 0x68 or 0x69, depending on the AD0
-pin value of the device. Please refer to the appropriate product specification
-document for further information regarding the AD0 pin. The driver supports both
-addresses.
-
-The following files are included in this package:
-- Kconfig
-- Makefile
-- inv_mpu_core.c
-- inv_mpu_misc.c
-- inv_mpu_trigger.c
-- inv_mpu3050_iio.c
-- inv_mpu_iio.h
-- inv_mpu_ring.c
-- inv_slave_bma250.c
-- inv_slave_compass.c
-- dmpDefaultMPU6050.c
-- dmpkey.h
-- dmpmap.h
-- mpu.h
-
-
-Integrating the Driver in the Linux Kernel
-==========================================
-Please add the files as follows:
-- Add mpu.h to "kernel/include/linux".
-- Add all other files to drivers/staging/iio/imu/inv_mpu
-(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/imu/Kconfig" with:
- >> source "drivers/staging/iio/imu/inv_mpu/Kconfig"
-
- modify "drivers/staging/iio/imu/Makefile" with:
- >> obj-y += inv_mpu/
-
-
-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.
-
-Interrupt Pin
--------------
-The hardcoded value of 140 corresponds to the GPIO input pin connected to the
-Invensense device's interrupt pin.
-This pin will most likely be different for your platform, and the value should
-be changed accordingly.
-
-Platform Data
--------------
-The platform data (orientation matrix and secondary bus configurations) must be
-modified as show below, according to your particular platform configuration.
-
-Please note that the MPU-9150 it is treated as a MPU-6050 with AKM8975 on the
-device's secondary I2C interface. Thus the secondary I2C address must be
-provided.
-
-Please note that the MPU-9250 it is treated as a MPU-6500 with AKM8963 on the
-device's secondary I2C interface. Thus the secondary I2C address must be
-provided.
-
-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:
-
-MPU-6050 + AKM8963 on the secondary I2C interface
--------------------------------------------------
-static struct mpu_platform_data gyro_platform_data = {
- .int_config = 0x00,
- .level_shifter = 0,
- .orientation = { -1, 0, 0,
- 0, 1, 0,
- 0, 0, -1 },
- .sec_slave_type = SECONDARY_SLAVE_TYPE_COMPASS,
- .sec_slave_id = COMPASS_ID_AK8963,
- .secondary_i2c_addr = 0x0E,
- .secondary_orientation = { 0, 1, 0,
- 1, 0, 0,
- 0, 0, -1 },
-};
-
-MPU-6500 + AKM8963 on the secondary I2C interface
--------------------------------------------------
-static struct mpu_platform_data gyro_platform_data = {
- .int_config = 0x00,
- .level_shifter = 0,
- .orientation = { -1, 0, 0,
- 0, 1, 0,
- 0, 0, -1 },
- .sec_slave_type = SECONDARY_SLAVE_TYPE_COMPASS,
- .sec_slave_id = COMPASS_ID_AK8963,
- .secondary_i2c_addr = 0x0E,
- .secondary_orientation = { 0, 1, 0,
- 1, 0, 0,
- 0, 0, -1 },
-};
-
-MPU-6500 + AK09911 on the secondary I2C interface
--------------------------------------------------
-static struct mpu_platform_data gyro_platform_data = {
- .int_config = 0x00,
- .level_shifter = 0,
- .orientation = { -1, 0, 0,
- 0, 1, 0,
- 0, 0, -1 },
- .sec_slave_type = SECONDARY_SLAVE_TYPE_COMPASS,
- .sec_slave_id = COMPASS_ID_AK09911,
- .secondary_i2c_addr = 0x0D,
- .secondary_orientation = { 0, 1, 0,
- 1, 0, 0,
- 0, 0, -1 },
-};
-
-MPU-6515 + AK8975 + BMP280 on the secondary I2C interface
-Note: sec_slave_XXX can only be compass or accelerometer in 3050 case.
- aux_slave_XXX can only be pressure.
---------------------------------------------------
-static struct mpu_platform_data mpu_data = {
- .int_config = 0x00,
- .level_shifter = 0,
- .orientation = { -1, 0, 0,
- 0, 1, 0,
- 0, 0, -1 },
- .sec_slave_type = SECONDARY_SLAVE_TYPE_COMPASS,
- .sec_slave_id = COMPASS_ID_AK8975,
- .secondary_i2c_addr = 0x0E,
- .secondary_orientation = { 0, 1, 0,
- 1, 0, 0,
- 0, 0, -1 },
- .aux_slave_type = SECONDARY_SLAVE_TYPE_PRESSURE,
- .aux_slave_id = PRESSURE_ID_BMP280,
- .aux_i2c_addr = 0x77,
-};
-static struct i2c_board_info __initdata chip_board_info[] = {
- {
- I2C_BOARD_INFO("mpu6515", 0x68),
- .irq = (IH_GPIO_BASE + MPUIRQ_GPIO),
- .platform_data = &mpu_data,
- }
-};
-
-MPU-9150
---------
-For MPU-9150, please provide the following secondary I2C bus information.
-
-static struct mpu_platform_data gyro_platform_data = {
- .int_config = 0x10,
- .level_shifter = 0,
- .orientation = { 1, 0, 0,
- 0, 1, 0,
- 0, 0, 1 },
- .sec_slave_type = SECONDARY_SLAVE_TYPE_COMPASS,
- .sec_slave_id = COMPASS_ID_AK8975,
- .secondary_i2c_addr = 0x0C,
- .secondary_orientation = { 0, 1, 0,
- 1, 0, 0,
- 0, 0, -1 },
-};
-
-MPU-9250
---------
-For MPU-9250, please provide the following secondary I2C bus information.
-
-static struct mpu_platform_data gyro_platform_data = {
- .int_config = 0x00,
- .level_shifter = 0,
- .orientation = { 1, 0, 0,
- 0, 1, 0,
- 0, 0, 1 },
- .sec_slave_type = SECONDARY_SLAVE_TYPE_COMPASS,
- .sec_slave_id = COMPASS_ID_AK8963,
- .secondary_i2c_addr = 0x0C,
- .secondary_orientation = { 0, 1, 0,
- -1, 0, 0,
- 0, 0, 1 },
-};
-
-MPU-3050 + BMA250 on the secondary I2C interface
-------------------------------------------------
-For BMA250 on the secondary I2C bus, please provide the following information.
-
-static struct mpu_platform_data gyro_platform_data = {
- .int_config = 0x10,
- .level_shifter = 0,
- .orientation = { -1, 0, 0,
- 0, 1, 0,
- 0, 0, -1 },
- .sec_slave_type = SECONDARY_SLAVE_TYPE_ACCEL,
- .sec_slave_id = ACCEL_ID_BMA250,
- .secondary_i2c_addr = 0x18,
-};
-
-
-Board File Modifications for Invensense Devices
-===============================================
-For Invensense devices, please provide the i2c init data as shown in the
-examples below.
-
-In the _i2c_init function, the device is registered in the following manner:
-
- // arch/arm/mach-omap2/board-omap4panda.c
- // in static int __init omap4_panda_i2c_init(void)
- omap_register_i2c_bus(4, 400,
- single_chip_board_info,
- ARRAY_SIZE(single_chip_board_info));
-
-MPU-3050
---------
-static struct i2c_board_info __initdata single_chip_board_info[] = {
- {
- I2C_BOARD_INFO("mpu3050", 0x68),
- .irq = (IH_GPIO_BASE + MPUIRQ_GPIO),
- .platform_data = &gyro_platform_data,
- },
-};
-
-ITG-3500
---------
-static struct i2c_board_info __initdata single_chip_board_info[] = {
- {
- I2C_BOARD_INFO("itg3500", 0x68),
- .irq = (IH_GPIO_BASE + MPUIRQ_GPIO),
- .platform_data = &gyro_platform_data,
- },
-};
-
-MPU6050
--------
-static struct i2c_board_info __initdata single_chip_board_info[] = {
- {
- I2C_BOARD_INFO("mpu6050", 0x68),
- .irq = (IH_GPIO_BASE + MPUIRQ_GPIO),
- .platform_data = &gyro_platform_data,
- },
-};
-
-MPU6500
--------
-static struct i2c_board_info __initdata single_chip_board_info[] = {
- {
- I2C_BOARD_INFO("mpu6500", 0x68),
- .irq = (IH_GPIO_BASE + MPUIRQ_GPIO),
- .platform_data = &gyro_platform_data,
- },
-};
-
-MPU6XXX
--------
-static struct i2c_board_info __initdata single_chip_board_info[] = {
- {
- I2C_BOARD_INFO("mpu6xxx", 0x68),
- .irq = (IH_GPIO_BASE + MPUIRQ_GPIO),
- .platform_data = &gyro_platform_data,
- },
-};
-
-MPU9150
--------
-arch/arm/mach-omap2/board-omap4panda.c
-static struct i2c_board_info __initdata single_chip_board_info[] = {
- {
- I2C_BOARD_INFO("mpu9150", 0x68),
- .irq = (IH_GPIO_BASE + MPUIRQ_GPIO),
- .platform_data = &gyro_platform_data,
- },
-};
-
-MPU9250
--------
-arch/arm/mach-omap2/board-omap4panda.c
-static struct i2c_board_info __initdata single_chip_board_info[] = {
- {
- I2C_BOARD_INFO("mpu9250", 0x68),
- .irq = (IH_GPIO_BASE + MPUIRQ_GPIO),
- .platform_data = &gyro_platform_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:
-
-ITG-3500
---------
-temperature (Read-only)
---Read temperature data directly from the temperature register.
-
-sampling_frequency (Read/write)
---Configure the ADC sampling rate and FIFO output rate.
-
-sampling_frequency_available(read-only)
---show commonly used frequency
-
-clock_source (Read-only)
---Check which clock-source is used by the chip.
-
-power_state (Read/write)
---turn on/off the power supply
-
-self_test (read-only)
---read this entry trigger self test. The return value is D.
-D is the success/fail.
-For different chip, the result is different for success/fail.
-1 means success 0 means fail. The LSB of D is for gyro; the bit
-next to LSB of D is for accel. The bit 2 of D is for compass result.
-
-key (read-only)
---show the key value of this driver. Used by MPL.
-
-gyro_matrix (read-only)
---show the orientation matrix obtained from the board file.
-
-MPU-6050 and MPU-6500
----------------------
-MPU-6050 and MPU-6500 have all sysfs files belonging to ITG-3500 (shown above).
-In addition, it has the files below:
-
-gyro_enable (read/write)
---enable/disable gyro functionality. Affects raw_gyro. Turning this off this
- will shut down gyro and save power.
-
-accl_enable (read/write)
---enable/disable accelerometer functionality. Affects raw_accl.
-Turning this off this will shut down accel and save power.
-
-firmware_loaded (read/write)
---Flag indicating the whether firmware is loaded or not in the DMP engine.
-0 means no firmware loaded. 1 means firmware is already loaded . This
-flag can only be written as 0. It internally updates to 1.
-
-dmp_on(read/write)
---This entry controls whether to run DMP or not.
-Write 1 to enable DMP and write 0 to disable dmp.
-Please note that firmware_loaded must be 1 in order to enable DMP.
-
-dmp_int_on(read/write)
---This entry controls whether dmp interrupt is on/off.
-Please note that firmware_loaded must be 1.
-Also, we'd like to remind you that it is sometimes advantageous to
-turn interrupts off while the DMP is running.
-
-dmp_output_rate
---control dmp output rate when dmp is on.
-
-dmp_event_int_on(read/write)
---This entry controls whether dmp event interrupt is on/off.
-Please note that turning this on will turn off the data interrupt.
-Interrupts will be generated only when events occur.
-This is useful for saving power when the system is waiting for a special event
-to wake up.
-
-dmp_firmware (write only binary file)
---DMP firmware code is loaded into this entry.
-If loading is successful, the firmware_loaded flag will be updated to 1.
-In order to load new firmware, the firmware_loaded flag must be first set to 0.
-
-accel_matrix
---orientation matrix for accelerometer.
-
-quaternion_on
---Turn on/off quaterniion data output. DMP is required for this feature.
-
-pedometer_time
-pedometer_steps,
---Pedometer related entries
-
-event_tap
-event_display_orientation
-event_accel_motion
-event_smd
---Event related entries.
-Please poll these entries to read their values. Direct reads will yield
-meaningless results.
-Further details are provided in the DMP Events section of this README.
-
-tap_on
---Controls tap function of DMP
-
-tap_time
-tap_min_count
-tap_threshold
---Tap related entries. Controls various parameters of tap function.
-
-display_orientation_on
---Turn on/off display orientation function of DMP.
-
-smd_enable
-enable SMD(Significant Motion Detection) detection.
-
-smd_threshold
-This set the threshold of the motion when SMD start to be triggered. The
-value is in acclerometer counts.
-
-smd_delay_threshold
-This sets the threshold of time after which SMD can be triggered.
-The value is in seconds.
-
-smd_delay_threshold2
-This sets the threshold of time during which SMD can be triggered (after the
-smd_delay_threshold timer has expired).
-The value is in seconds.
-
-quaternion_on
---Turn on/off quaterniion data output. DMP is required for this feature.
-
-Low power accel motion interrupt related settings.
-if motion_lpa_on is set, this will disable all engines except accel. Accel will
-enter low power mode and the whole chip will be turned on/off at specific frequency.
------------------------------------------------------------------------------
-motion_lpa_threshold
---set motion threshold. in mg. The maximum is 1020mg and resolution is 32mg.
-
-motion_lpa_on
---turn on/off motion function.
-
-motion_lpa_freq
---motion lpa frequency. which determines power on/off frequency.
-------------------------------------------------------------------------------
-MPU-9150
---------
-MPU-9150 has all of MPU-6050's entries. It also has two additional entries,
-described below.
-
-compass_enable (read/write)
---Enables compass function.
-
-compass_matrix (read-only)
---Compass orientation matrix
-
-MPU-3050 with BMA250 on secondary I2C interface
------------------------------------------------
-MPU-3050 with BMA250 on the secondary I2C interface has ever ITG-3500 entry.
-It also has two additional entries, shown below:
-
-accl_matrix
-
-accl_enable
-
-Suspend and Resume
-===================================================
-The suspend and resume functions are call backs registered to the system
-and executed when the system goes in suspend and resumes.
-It is enabled when CONFIG_PM is defined.
-The current behavior is simple:
-- suspend will turn off the chip
-- resume will turn on the chip
-
-However, it is possible for the driver to do more complex things;
-for example, leaving pedometers running when system is off. This can save whole
-system power while letting pedometer working. Other behaviors are possible
-too.
-
-Wake up CPU using event interrupt
-====================================================
-It is common practice in current mobile device to save power as much as
-possible. Ususally the device can sleep when not use and only be wake up when in use.
-Invensense MPU series provides an efficient way of waking up CPU by events.
-The events could be pedometer steps, tap action, SMD(significant Motion Detection),
-or any customer defined actions. CPU can sleep to save power, when event happens,
-DMP will calculate the motion data to detemine whether a pre-defined event happens
-or not. If an pre-defined happens, an interrupt is generated to wake up the CPU
-to do further processing.
-The requirements of doing event wake is the following:
-1. Add enable_irq_wake() either in the driver or in the board file.
-2. Connect the interrupt pin to the CPU wake up pin.
-3. Configure CPU to be woken up by wake up pin.
-
-DMP Event
-=========
-A DMP Event is an event that is output by the DMP unit within the Invensense
-device (MPU).
-Only the MPU-6050, MPU-6500, MPU-9250, MPU-9150, MPU-9250 feature the DMP.
-
-There are four sysfs entries for DMP events:
-- event_tap
-- event_display_orientation
-- event_accel_motion
-- event_smd
-
-These events must be polled before reading.
-
-The proper method to poll sysfs is as follows:
-1. open file.
-2. dummy read.
-3. poll.
-4. once the poll passed, use fopen and fread to read the sysfs entry.
-5. interpret the data.
-
-Streaming Data to an Userspace Application
-==========================================
-When streaming data to an userspace application, we recommend that you access
-gyro/accel/compass data via /dev/iio:device0.
-
-Please follow the steps below to read data at a constant rate from the driver:
-
-1. Write a 1 to power_state to turn on the chip. This is the default setting
- after installing the driver.
-2. Write the desired output rate to fifo_rate.
-3. Write 1 to enable to turn on the event.
-4. Read /dev/iio:device0 to get a string of gyro/accel/compass data.
-5. Parse this string to obtain each gyro/accel/compass element.
-6. If dmp firmware code is loaded, use "dmp_on" to enable/disable dmp.
-7. If compass is enabled, the output will contain compass data.
-
-
-Recommended Sysfs Entry Setup Senquence
-=======================================
-
-Without DMP Firmware
---------------------
-1. Set "power_state" to 1,
-2. Set the scale and fifo rate values according to your needs.
-3. Set gyro_enable, accel_enable, and compass_enable according to your needs.
- For example:
- - If you only want gyro data, set accel_enable to 0 (and compass_enable to
- 0, if applicable).
- - If you only want accel data, set gyro_enable to 0 (and compass_enable to
- 0, if applicable).
- - If you only want compass data, set gyro_enable to 0 and accel_enable to 0.
-4. Set "enable" to 1.
-5. You will now get the output that you want.
-
-With DMP Firmware
------------------
-1. Set "power_state" to 1.
-2. Write "0" to firmware_loaded if it is not zero already.
-3. Load firmware into "dmp_firmware" as a whole. Don't split the DMP firmware
- image.
-4. Make sure firmware_loaded is 1 after loading the DMP image.
-5. Make appropriate configurations as shown above in the "without DMP firmware"
- case.
-6. Set dmp_on to 1.
-7. Set "enable" to 1.
-
-Please note that the enable function uses the enable entry under
-"/sys/bus/iio/devices/iio:device0/buffer"
-
-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 with MPU-9150/MPU-6050/MPU-6500/MPU-9250
----------------------------------------------------------
-To run test applications with MPU-9150, MPU-9250, MPU-6050, or MPU-6500 devices,
-please use the following commands:
-
-1. For tap/display orientation events:
- mpu_iio -c 10 -l 3 -p
-
-2. In addition, to test the motion interrupt (and no_motion on MPU6050) use:
- mpu_iio -c 10 -l 3 -p -m
-
-3. For printing data normally:
- mpu_iio -c 10 -l 3 -r
-
-Running Test Applications with MPU-3050/ITG-3500
-------------------------------------------------
-To run test applications with MPU-3050 or ITG-3500 devices,
-please use the following command:
-
-1. For printing data normally:
- mpu_iio -c 10 -l 3 -r
-
-Please use mpu_iio.c and iio_utils.h as example code for your development
-purposes.
-
-Stress test application
-=================================
-A stress test application is located under software/simple_apps/stress_iio.
-This application simulates HAL's usage calls to the driver. It creates three
-threads. One for data read; one for event read; one for sysfs control.
-It can run without any parameters or run with some control parameters. Please
-see README in the same directories for details.
-