/*
 * Device Tree Include file for the Conexant Digicolor CX92755 SoC
 *
 * Author: Baruch Siach <baruch@tkos.co.il>
 *
 *  Copyright (C) 2014 Paradox Innovation Ltd.
 *
 * 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 file 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 file 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.
 */

/ {
	#address-cells = <1>;
	#size-cells = <1>;
	compatible = "cnxt,cx92755";

	interrupt-parent = <&intc>;

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;
		cpu@0 {
			device_type = "cpu";
			compatible = "arm,cortex-a8";
			reg = <0x0>;
		};
	};

	main_clk: main_clk {
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency  = <200000000>;
	};

	intc: interrupt-controller@f0000040 {
		compatible = "cnxt,cx92755-ic";
		interrupt-controller;
		#interrupt-cells = <1>;
		reg = <0xf0000040 0x40>;
		syscon = <&uc_regs>;
	};

	timer@f0000fc0 {
		compatible = "cnxt,cx92755-timer";
		reg = <0xf0000fc0 0x40>;
		interrupts = <19>, <31>, <34>, <35>, <52>, <53>, <54>, <55>;
		clocks = <&main_clk>;
	};

	rtc@f0000c30 {
		compatible = "cnxt,cx92755-rtc";
		reg = <0xf0000c30 0x18>;
		interrupts = <25>;
	};

	watchdog@f0000fc0 {
		compatible = "cnxt,cx92755-wdt";
		reg = <0xf0000fc0 0x8>;
		clocks = <&main_clk>;
		timeout-sec = <15>;
	};

	pinctrl: pinctrl@f0000e20 {
		compatible = "cnxt,cx92755-pinctrl";
		reg = <0xf0000e20 0x100>;
		gpio-controller;
		#gpio-cells = <2>;
	};

	uc_regs: syscon@f00003a0 {
		compatible = "cnxt,cx92755-uc", "syscon";
		reg = <0xf00003a0 0x10>;
	};

	uart0: uart@f0000740 {
		compatible = "cnxt,cx92755-usart";
		reg = <0xf0000740 0x20>;
		clocks = <&main_clk>;
		interrupts = <44>;
		status = "disabled";
	};

	uart1: uart@f0000760 {
		compatible = "cnxt,cx92755-usart";
		reg = <0xf0000760 0x20>;
		clocks = <&main_clk>;
		interrupts = <45>;
		status = "disabled";
	};

	uart2: uart@f0000780 {
		compatible = "cnxt,cx92755-usart";
		reg = <0xf0000780 0x20>;
		clocks = <&main_clk>;
		interrupts = <46>;
		status = "disabled";
	};

	i2c: i2c@f0000120 {
		compatible = "cnxt,cx92755-i2c";
		reg = <0xf0000120 0x10>;
		interrupts = <28>;
		clocks = <&main_clk>;
		clock-frequency = <100000>;
		#address-cells = <1>;
		#size-cells = <0>;
		status = "disabled";
	};
};
