/*
 * coral-enviro-board.dts
 * Device Tree Overlay to support Coral Environmental Sensor Board
 *
 * Copyright (C) 2019 Google LLC
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 */

/dts-v1/;
/plugin/;

/ {
	compatible = "fsl,imx8mq-phanbell", "fsl,imx8mq";

	fragment@0 {
		target-path = "/i2c@30a30000";
		__overlay__ {
			#address-cells = <1>;
			#size-cells = <0>;
			status = "okay";

			opt3002@44 {
				compatible = "ti,opt3001";
				reg = <0x45>; /* address */
			};

			hdc2010@40 {
				compatible = "hdc20x0";
				reg = <0x40>; /* address */
			};

			bmp280@76 {
				compatible = "bmp280";
				reg = <0x76>; /* address */
			};

			tla2021@49 {
				compatible = "ti,tla202x";
				pinctrl-names = "default";
				pinctrl-0 = <&pinctrl_enviro>;
				reg = <0x49>; /* address */
				#address-cells = <1>;
				#size-cells = <0>;

				channel@0 {
					reg = <0>;
					ti,gain = <0>; /* +/- 6.144 V range */
				};
			};
		};
	};

	fragment@1 {
		target-path = "/iomuxc@30330000";
		__overlay__ {
			status = "okay";
			imx8mq-phanbell {
				pinctrl_enviro: envirogrp {
					fsl,pins = <
						0x118 0x380 0x000 0x5 0x0 0xd8 /* MX8MQ_IOMUXC_NAND_DATA03_GPIO3_IO9 */
						0x18C 0x3F4 0x000 0x5 0x0 0xd8 /* MX8MQ_IOMUXC_SAI1_TXD0_GPIO4_IO12  */
					>;
				};
			};
		};
	};

	fragment@2 {
		target-path = "/sai@30010000";
		__overlay__ {
			status = "disabled";
		};
	};
};

