| /* Copyright 2016 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| /* BMA2x2 gsensor module for Chrome EC */ |
| |
| #ifndef __CROS_EC_ACCEL_BMA2x2_H |
| #define __CROS_EC_ACCEL_BMA2x2_H |
| |
| extern const struct accelgyro_drv bma2x2_accel_drv; |
| |
| /* I2C ADDRESS DEFINITIONS */ |
| /* The following definition of I2C address is used for the following sensors |
| * BMA255 |
| * BMA355 |
| * BMA280 |
| * BMA282 |
| * BMA223 |
| * BMA254 |
| * BMA284 |
| * BMA250E |
| * BMA222E |
| */ |
| #define BMA2x2_I2C_ADDR1 0x30 |
| #define BMA2x2_I2C_ADDR2 0x19 |
| |
| /* The following definition of I2C address is used for the following sensors |
| * BMC150 |
| * BMC056 |
| * BMC156 |
| */ |
| #define BMA2x2_I2C_ADDR3 0x10 |
| #define BMA2x2_I2C_ADDR4 0x11 |
| |
| /*** Chip-specific registers ***/ |
| /* REGISTER ADDRESS DEFINITIONS */ |
| #define BMA2x2_EEP_OFFSET 0x16 |
| #define BMA2x2_IMAGE_BASE 0x38 |
| #define BMA2x2_IMAGE_LEN 22 |
| #define BMA2x2_CHIP_ID_ADDR 0x00 |
| #define BMA255_CHIP_ID_MAJOR 0xfa |
| |
| /* DATA ADDRESS DEFINITIONS */ |
| #define BMA2x2_X_AXIS_LSB_ADDR 0x02 |
| #define BMA2x2_X_AXIS_MSB_ADDR 0x03 |
| #define BMA2x2_Y_AXIS_LSB_ADDR 0x04 |
| #define BMA2x2_Y_AXIS_MSB_ADDR 0x05 |
| #define BMA2x2_Z_AXIS_LSB_ADDR 0x06 |
| #define BMA2x2_Z_AXIS_MSB_ADDR 0x07 |
| #define BMA2x2_TEMP_ADDR 0x08 |
| |
| /* STATUS ADDRESS DEFINITIONS */ |
| #define BMA2x2_STAT1_ADDR 0x09 |
| #define BMA2x2_STAT2_ADDR 0x0A |
| #define BMA2x2_STAT_TAP_SLOPE_ADDR 0x0B |
| #define BMA2x2_STAT_ORIENT_HIGH_ADDR 0x0C |
| #define BMA2x2_STAT_FIFO_ADDR 0x0E |
| #define BMA2x2_RANGE_SELECT_ADDR 0x0F |
| #define BMA2x2_RANGE_SELECT_MSK 0x0F |
| #define BMA2x2_RANGE_2G 3 |
| #define BMA2x2_RANGE_4G 5 |
| #define BMA2x2_RANGE_8G 8 |
| #define BMA2x2_RANGE_16G 12 |
| |
| #define BMA2x2_RANGE_TO_REG(_range) \ |
| ((_range) < 8 ? BMA2x2_RANGE_2G + ((_range) / 4) * 2 : \ |
| BMA2x2_RANGE_8G + ((_range) / 16) * 4) |
| |
| #define BMA2x2_REG_TO_RANGE(_reg) \ |
| ((_reg) < BMA2x2_RANGE_8G ? 2 + (_reg) - BMA2x2_RANGE_2G : \ |
| 8 + ((_reg) - BMA2x2_RANGE_8G) * 2) |
| |
| #define BMA2x2_BW_SELECT_ADDR 0x10 |
| #define BMA2x2_BW_MSK 0x1F |
| #define BMA2x2_BW_7_81HZ 0x08 /* LowPass 7.81HZ */ |
| #define BMA2x2_BW_15_63HZ 0x09 /* LowPass 15.63HZ */ |
| #define BMA2x2_BW_31_25HZ 0x0A /* LowPass 31.25HZ */ |
| #define BMA2x2_BW_62_50HZ 0x0B /* LowPass 62.50HZ */ |
| #define BMA2x2_BW_125HZ 0x0C /* LowPass 125HZ */ |
| #define BMA2x2_BW_250HZ 0x0D /* LowPass 250HZ */ |
| #define BMA2x2_BW_500HZ 0x0E /* LowPass 500HZ */ |
| #define BMA2x2_BW_1000HZ 0x0F /* LowPass 1000HZ */ |
| |
| #define BMA2x2_BW_TO_REG(_bw) \ |
| ((_bw) < 125000 ? BMA2x2_BW_7_81HZ + __fls((_bw) / 7810) : \ |
| BMA2x2_BW_125HZ + __fls((_bw) / 125000)) |
| |
| #define BMA2x2_REG_TO_BW(_reg) \ |
| ((_reg) < BMA2x2_BW_125HZ ? 7810 << ((_reg) - BMA2x2_BW_7_81HZ) : \ |
| 125000 << ((_reg) - BMA2x2_BW_125HZ)) |
| |
| #define BMA2x2_MODE_CTRL_ADDR 0x11 |
| #define BMA2x2_LOW_NOISE_CTRL_ADDR 0x12 |
| #define BMA2x2_DATA_CTRL_ADDR 0x13 |
| #define BMA2x2_RST_ADDR 0x14 |
| #define BMA2x2_CMD_SOFT_RESET 0xb6 |
| |
| /* INTERRUPT ADDRESS DEFINITIONS */ |
| #define BMA2x2_INTR_ENABLE1_ADDR 0x16 |
| #define BMA2x2_INTR_ENABLE2_ADDR 0x17 |
| #define BMA2x2_INTR_SLOW_NO_MOTION_ADDR 0x18 |
| #define BMA2x2_INTR1_PAD_SELECT_ADDR 0x19 |
| #define BMA2x2_INTR_DATA_SELECT_ADDR 0x1A |
| #define BMA2x2_INTR2_PAD_SELECT_ADDR 0x1B |
| #define BMA2x2_INTR_SOURCE_ADDR 0x1E |
| #define BMA2x2_INTR_SET_ADDR 0x20 |
| #define BMA2x2_INTR_CTRL_ADDR 0x21 |
| |
| /* FEATURE ADDRESS DEFINITIONS */ |
| #define BMA2x2_LOW_DURN_ADDR 0x22 |
| #define BMA2x2_LOW_THRES_ADDR 0x23 |
| #define BMA2x2_LOW_HIGH_HYST_ADDR 0x24 |
| #define BMA2x2_HIGH_DURN_ADDR 0x25 |
| #define BMA2x2_HIGH_THRES_ADDR 0x26 |
| #define BMA2x2_SLOPE_DURN_ADDR 0x27 |
| #define BMA2x2_SLOPE_THRES_ADDR 0x28 |
| #define BMA2x2_SLOW_NO_MOTION_THRES_ADDR 0x29 |
| #define BMA2x2_TAP_PARAM_ADDR 0x2A |
| #define BMA2x2_TAP_THRES_ADDR 0x2B |
| #define BMA2x2_ORIENT_PARAM_ADDR 0x2C |
| #define BMA2x2_THETA_BLOCK_ADDR 0x2D |
| #define BMA2x2_THETA_FLAT_ADDR 0x2E |
| #define BMA2x2_FLAT_HOLD_TIME_ADDR 0x2F |
| #define BMA2x2_SELFTEST_ADDR 0x32 |
| #define BMA2x2_EEPROM_CTRL_ADDR 0x33 |
| #define BMA2x2_SERIAL_CTRL_ADDR 0x34 |
| |
| /* OFFSET ADDRESS DEFINITIONS */ |
| #define BMA2x2_OFFSET_CTRL_ADDR 0x36 |
| #define BMA2x2_OFFSET_RESET 0x80 |
| #define BMA2x2_OFFSET_TRIGGER_OFF 5 |
| #define BMA2x2_OFFSET_TRIGGER_MASK (0x3 << BMA2x2_OFFSET_TRIGGER_OFF) |
| #define BMA2x2_OFFSET_CAL_READY 0x10 |
| |
| #define BMA2x2_OFC_SETTING_ADDR 0x37 |
| #define BMA2x2_OFC_TARGET_AXIS_OFF 1 |
| #define BMA2x2_OFC_TARGET_AXIS_LEN 2 |
| #define BMA2x2_OFC_TARGET_AXIS(_axis) \ |
| (BMA2x2_OFC_TARGET_AXIS_LEN * (_axis) + BMA2x2_OFC_TARGET_AXIS_OFF) |
| #define BMA2x2_OFC_TARGET_0G 0 |
| #define BMA2x2_OFC_TARGET_PLUS_1G 1 |
| #define BMA2x2_OFC_TARGET_MINUS_1G 2 |
| |
| #define BMA2x2_OFFSET_X_AXIS_ADDR 0x38 |
| #define BMA2x2_OFFSET_Y_AXIS_ADDR 0x39 |
| #define BMA2x2_OFFSET_Z_AXIS_ADDR 0x3A |
| |
| /* GP ADDRESS DEFINITIONS */ |
| #define BMA2x2_GP0_ADDR 0x3B |
| #define BMA2x2_GP1_ADDR 0x3C |
| |
| /* FIFO ADDRESS DEFINITIONS */ |
| #define BMA2x2_FIFO_MODE_ADDR 0x3E |
| #define BMA2x2_FIFO_DATA_OUTPUT_ADDR 0x3F |
| #define BMA2x2_FIFO_WML_TRIG 0x30 |
| |
| /* Sensor resolution in number of bits. This sensor has fixed resolution. */ |
| #define BMA2x2_RESOLUTION 12 |
| |
| /* Min and Max sampling frequency in mHz */ |
| #define BMA255_ACCEL_MIN_FREQ 7810 |
| #define BMA255_ACCEL_MAX_FREQ 1000000 |
| #endif /* __CROS_EC_ACCEL_BMA2x2_H */ |