/*
 * Copyright (c) 2016 Endless Computers, Inc.
 * Author: Carlo Caione <carlo@endlessm.com>
 *
 * This file is dual-licensed: you can use it either under the terms
 * of the GPL or the X11 license, at your option. Note that this dual
 * licensing only applies to this file, and not this project as a
 * whole.
 *
 *  a) This library 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 library 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.
 *
 * Or, alternatively,
 *
 *  b) Permission is hereby granted, free of charge, to any person
 *     obtaining a copy of this software and associated documentation
 *     files (the "Software"), to deal in the Software without
 *     restriction, including without limitation the rights to use,
 *     copy, modify, merge, publish, distribute, sublicense, and/or
 *     sell copies of the Software, and to permit persons to whom the
 *     Software is furnished to do so, subject to the following
 *     conditions:
 *
 *     The above copyright notice and this permission notice shall be
 *     included in all copies or substantial portions of the Software.
 *
 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 *     OTHER DEALINGS IN THE SOFTWARE.
 */

/dts-v1/;

#include <dt-bindings/usb/pd.h>
#include "meson-s4-t211.dtsi"
#include "meson-s4_skt-panel.dtsi"

/ {
	compatible = "amlogic,s4-t211", "amlogic,s4-txxx", "amlogic,meson-s4";
	model = "Amlogic Meson S4 T211 Board";
};

/* This UART is brought out to the DB9 connector */
&uart_a {
	status = "okay";
};

&uart_b {
	status = "disabled";
};

&saradc {
	status = "okay";
};

&i2c0 {
	status = "okay";
	pinctrl-names="default";
	pinctrl-0=<&i2c0_pins1>;
	clock-frequency = <100000>;
};

/* demo for i2c user */
&i2c3 {
	status= "disabled";
	clock-frequency = <100000>;
	/* pinctrl-names = "default";*/
	/* pinctrl-0 = <&i2c3_master_pins2>;*/
};

&i2c4 {
	status = "okay";
	pinctrl-names="default";
	pinctrl-0=<&i2c4_pins2>;
	clock-frequency = <100000>;
	rt1711h@4e {
		compatible = "richtek,rt1711h";
		reg = <0x4e>;
		label = "rt1711h";
		gpios = <&gpio GPIOC_7 GPIO_ACTIVE_LOW>;

		usb_con: connector {
			compatible = "usb-c-connector";
			label = "USB-C";
			power-role = "sink";
			data-role = "dual";
			/* Only support one sink-pdo instead of many */
			sink-pdo = <PDO_FIXED(5000, 900, PDO_FIXED_USB_COMM)>;
			op-sink-microwatt = <4500000>;
			no-vconn;

			ports {
				#address-cells = <1>;
				#size-cells = <0>;

				port@1 {
					reg = <1>;
				};
			};

		};
	};
};


&pinctrl_periphs {
	bl_pwm_off_pins:bl_pwm_off_pin {
		mux {
			groups = "GPIOH_5";
			function = "gpio_periphs";
			output-high;
		};
	};
}; /* end of pinctrl_periphs */

&fb {
	logo_addr = "0x3f800000";
};
