/*
 * Copyright (c) 2020 STMicroelectronics
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/*
 * Mode 1: Standard Mode
 *
 *   JP7 => 1-2, 3-4 (I2C1 = I2C2, I2Cx=GND)
 *   JP8 => 1-2, 3-4 (I2C1 = I2C2, I2Cx=GND)
 *
 * ISM330DHCX, IIS2MDC and IIS2DLPC sensors are accessible from the main board mcu.
 */

/ {
	aliases {
		accel0 = &iis2dlpc_19_x_nucleo_iks02a1;
		accel1 = &ism330dhcx_6b_x_nucleo_iks02a1;
	};
};

&arduino_i2c {

	iis2dlpc_19_x_nucleo_iks02a1: iis2dlpc@19 {
		compatible = "st,iis2dlpc";
		reg = <0x19>;
		drdy-gpios =  <&arduino_header 4 GPIO_ACTIVE_HIGH>; /* A4 - INT2 */
		drdy-int =  <2>;
	};

	iis2mdc_x_nucleo_iks02a1: iis2mdc@1e {
		compatible = "st,iis2mdc";
		reg = <0x1e>;
		drdy-gpios =  <&arduino_header 2 GPIO_ACTIVE_HIGH>; /* A2 */
	};

	ism330dhcx_6b_x_nucleo_iks02a1: ism330dhcx@6b {
		compatible = "st,ism330dhcx";
		reg = <0x6b>;
		drdy-gpios =  <&arduino_header 11 GPIO_ACTIVE_HIGH>; /* D5 - INT2 */
		int-pin = <2>;
	};
};
