/* * Copyright (c) 2020 The Chromium OS Authors * * SPDX-License-Identifier: Apache-2.0 */ #include / { aliases { /* * motion sense's <>_INT_EVENT is handled * by alias. Using the alias, each driver creates * its own <>_INT_EVENT. */ bmi260-int = &base_accel; tcs3400-int = &als_clear; }; /* * Declare mutexes used by sensor drivers. * A mutex node is used to create an instance of mutex_t. * A mutex node is referenced by a sensor node if the * corresponding sensor driver needs to use the * instance of the mutex. */ motionsense-mutex { compatible = "cros-ec,motionsense-mutex"; mutex_bma255: bma255-mutex { label = "BMA255_MUTEX"; }; mutex_bmi260: bmi260-mutex { label = "BMI260_MUTEX"; }; }; /* Rotation matrix used by drivers. */ motionsense-rotation-ref { compatible = "cros-ec,motionsense-rotation-ref"; lid_rot_ref: lid-rotation-ref { mat33 = <1 0 0 0 (-1) 0 0 0 (-1)>; }; base_rot_ref: base-rotation-ref { mat33 = <0 1 0 (-1) 0 0 0 0 1>; }; }; /* * Driver specific data. A driver-specific data can be shared with * different motion sensors while they are using the same driver. * * If a node's compatible starts with "cros-ec,accelgyro-", it is for * a common structure defined in accelgyro.h. * e.g) compatible = "cros-ec,accelgyro-als-drv-data" is for * "struct als_drv_data_t" in accelgyro.h */ motionsense-sensor-data { bma255_data: bma255-drv-data { compatible = "cros-ec,drvdata-bma255"; status = "okay"; }; bmi260_data: bmi260-drv-data { compatible = "cros-ec,drvdata-bmi260"; status = "okay"; }; tcs_clear_data: tcs3400-clear-drv-data { compatible = "cros-ec,drvdata-tcs3400-clear"; status = "okay"; als-drv-data { compatible = "cros-ec,accelgyro-als-drv-data"; als-cal { scale = <1>; uscale = <0>; offset = <0>; als-channel-scale { compatible = "cros-ec,accelgyro-als-channel-scale"; k-channel-scale = <1>; cover-scale = <1>; }; }; }; }; tcs_rgb_data: tcs3400-rgb-drv-data { compatible = "cros-ec,drvdata-tcs3400-rgb"; status = "okay"; /* node for rgb_calibration_t defined in accelgyro.h */ rgb_calibration { compatible = "cros-ec,accelgyro-rgb-calibration"; irt = <1>; rgb-cal-x { offset = <0>; coeff = <0 0 0 0>; als-channel-scale { compatible = "cros-ec,accelgyro-als-channel-scale"; k-channel-scale = <1>; cover-scale = <1>; }; }; rgb-cal-y { offset = <0>; coeff = <0 0 0 0>; als-channel-scale { compatible = "cros-ec,accelgyro-als-channel-scale"; k-channel-scale = <1>; cover-scale = <1>; }; }; rgb-cal-z { offset = <0>; coeff = <0 0 0 0>; als-channel-scale { compatible = "cros-ec,accelgyro-als-channel-scale"; k-channel-scale = <1>; cover-scale = <1>; }; }; }; }; }; /* * List of motion sensors that creates motion_sensors array. * The label "lid_accel" and "base_accel" are used to indicate * motion sensor IDs for lid angle calculation. */ motionsense-sensor { lid_accel: lid-accel { compatible = "cros-ec,bma255"; status = "okay"; label = "Lid Accel"; active-mask = "SENSOR_ACTIVE_S0_S3"; location = "MOTIONSENSE_LOC_LID"; mutex = <&mutex_bma255>; port = <&i2c_sensor>; rot-standard-ref = <&lid_rot_ref>; default-range = <2>; drv-data = <&bma255_data>; i2c-spi-addr-flags = "BMA2x2_I2C_ADDR1_FLAGS"; configs { compatible = "cros-ec,motionsense-sensor-config"; ec-s0 { label = "SENSOR_CONFIG_EC_S0"; odr = <(10000 | ROUND_UP_FLAG)>; }; ec-s3 { label = "SENSOR_CONFIG_EC_S3"; odr = <(10000 | ROUND_UP_FLAG)>; }; }; }; base_accel: base-accel { compatible = "cros-ec,bmi260-accel"; status = "okay"; label = "Base Accel"; active-mask = "SENSOR_ACTIVE_S0_S3"; location = "MOTIONSENSE_LOC_BASE"; mutex = <&mutex_bmi260>; port = <&i2c_sensor>; rot-standard-ref = <&base_rot_ref>; default-range = <4>; drv-data = <&bmi260_data>; i2c-spi-addr-flags = "BMI260_ADDR0_FLAGS"; configs { compatible = "cros-ec,motionsense-sensor-config"; ec-s0 { label = "SENSOR_CONFIG_EC_S0"; odr = <(10000 | ROUND_UP_FLAG)>; ec-rate = <(100 * USEC_PER_MSEC)>; }; ec-s3 { label = "SENSOR_CONFIG_EC_S3"; odr = <(10000 | ROUND_UP_FLAG)>; ec-rate = <(100 * USEC_PER_MSEC)>; }; }; }; base-gyro { compatible = "cros-ec,bmi260-gyro"; status = "okay"; label = "Base Gyro"; active-mask = "SENSOR_ACTIVE_S0_S3"; location = "MOTIONSENSE_LOC_BASE"; mutex = <&mutex_bmi260>; port = <&i2c_sensor>; rot-standard-ref = <&base_rot_ref>; default-range = <1000>; /* dps */ drv-data = <&bmi260_data>; i2c-spi-addr-flags = "BMI260_ADDR0_FLAGS"; }; als_clear: base-als-clear { compatible = "cros-ec,tcs3400-clear"; status = "okay"; label = "Clear Light"; active-mask = "SENSOR_ACTIVE_S0_S3"; location = "MOTIONSENSE_LOC_BASE"; port = <&i2c_sensor>; default-range = <0x10000>; drv-data = <&tcs_clear_data>; i2c-spi-addr-flags = "TCS3400_I2C_ADDR_FLAGS"; configs { compatible = "cros-ec,motionsense-sensor-config"; ec-s0 { /* Run ALS sensor in S0 */ label = "SENSOR_CONFIG_EC_S0"; odr = <1000>; }; }; }; base-als-rgb { compatible = "cros-ec,tcs3400-rgb"; status = "okay"; label = "RGB Light"; active-mask = "SENSOR_ACTIVE_S0_S3"; location = "MOTIONSENSE_LOC_BASE"; default-range = <0x10000>; /* scale = 1x, uscale = 0 */ drv-data = <&tcs_rgb_data>; }; }; motionsense-sensor-info { compatible = "cros-ec,motionsense-sensor-info"; /* list of entries for motion_als_sensors */ als-sensors = <&als_clear>; /* * list of GPIO interrupts that have to * be enabled at initial stage */ sensor-irqs = <&gpio_ec_imu_int_l &gpio_ec_als_rgb_int_l>; /* list of sensors in force mode */ accel-force-mode-sensors = <&lid_accel &als_clear>; }; };