/*
 * 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.
 */

#include "meson-c-series.dtsi"
#include <dt-bindings/gpio/meson-c1-gpio.h>
#include <dt-bindings/reset/amlogic,meson-gxbb-reset.h>

/ {
	compatible = "amlogic,meson-c1";

	vpu {
		compatible = "amlogic, vpu-g12a";
		status = "okay";
		/*clocks = <&clkc CLKID_VAPB_MUX>,
		 *	<&clkc CLKID_VPU_INTR>,
		 *	<&clkc CLKID_VPU_P0_COMP>,
		 *	<&clkc CLKID_VPU_P1_COMP>,
		 *	<&clkc CLKID_VPU_MUX>;
		 *clock-names = "vapb_clk",
		 *	"vpu_intr_gate",
		 *	"vpu_clk0",
		 *	"vpu_clk1",
		 *	"vpu_clk";
		 */
		clk_level = <7>;
		/* 0: 100.0M    1: 166.7M    2: 200.0M    3: 250.0M */
		/* 4: 333.3M    5: 400.0M    6: 500.0M    7: 666.7M */
	};

	meson-fb {
		status = "okay";
		logo_addr = "0x7f800000";
	};
};

&ethmac {
	compatible = "amlogic,g12a-eth-dwmac";
	reg = <0x0 0xff080000 0x0 0x10000
		0x0 0xFE009000 0x0 0x8
		0x0 0xFE009400 0x0 0xa0>;
	reg-names = "eth_base", "eth_top", "eth_cfg";
	phy_cntl1 = <0x41054147>;
	internal_phy = <1>;
	mc_val = <0x4be04>;
	pll_val = <0x9c0040a 0x927e0000 0xac5f49e5>;
	analog_val = <0x20200000 0x0000c000 0x00000023>;
	tx_amp_src = <0xfe005b30>;
//	clocks = <&clkc CLKID_ETH_CORE>,
//		 <&clkc CLKID_FCLK_DIV2>,
//		 <&clkc CLKID_MPLL2>;
//	clock-names = "stmmaceth", "clkin0", "clkin1";

	mdio0: mdio {
		#address-cells = <1>;
		#size-cells = <0>;
		compatible = "snps,dwmac-mdio";
	};
};

&cbus {
	pinctrl_periphs: pinctrl@0400 {
		compatible = "amlogic,meson-c1-periphs-pinctrl";
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;

		gpio: bank@0400 {
			reg = <0x0 0x0400 0x0 0x0040>,
			      <0x0 0x0480 0x0 0x01d8>;
			reg-names = "mux",
				    "gpio";
			gpio-controller;
			#gpio-cells = <2>;
			gpio-ranges = <&pinctrl_periphs 0 0 90>;
		};
	};
};

&periphs {

	eth-phy-mux {
		compatible = "mdio-mux-mmioreg", "mdio-mux";
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <0x0 0x15c 0x0 0x4>;
		mux-mask = <0xffffffff>;
		mdio-parent-bus = <&mdio0>;

		internal_mdio: mdio@e40908ff {
			reg = <0xe40908ff>;
			#address-cells = <1>;
			#size-cells = <0>;

			internal_phy: ethernet-phy@8 {
				compatible = "ethernet-phy-id0181.4400", "ethernet-phy-ieee802.3-c22";
				reg = <8>;
				max-speed = <100>;
			};
		};

		external_mdio: mdio@2009087f {
			reg = <0x2009087f>;
			#address-cells = <1>;
			#size-cells = <0>;
		};
	};
};

&saradc {
	compatible = "amlogic,meson-g12a-saradc", "amlogic,meson-saradc";
	clocks = <&xtal>,
		 <&clkc CLKID_SARADC_MUX>,
		 <&clkc CLKID_SARADC_DIV>,
		 <&clkc CLKID_SAR_ADC_GATE>;
	clock-names = "xtal", "adc_mux", "adc_div", "adc_gate";
};

&sd_emmc_a {
	clocks = <&clkc CLKID_SD_EMMC_A_MUX>,
		    <&clkc CLKID_SD_EMMC_A_DIV>,
			<&clkc CLKID_SD_EMMC_A_GATE>,
			<&clkc CLKID_FCLK_DIV2>,
			<&clkc CLKID_SD_EMMC_A_XTAL_GATE>;
			clock-names = "mux", "div", "gate", "clkin", "xtal";
};

&sd_emmc_b {
	clocks = <&clkc CLKID_SD_EMMC_B_MUX>,
		    <&clkc CLKID_SD_EMMC_B_DIV>,
			<&clkc CLKID_SD_EMMC_B_GATE>,
			<&clkc CLKID_FCLK_DIV2>,
			<&clkc CLKID_SD_EMMC_B_XTAL_GATE>;
			clock-names = "mux", "div", "gate", "clkin", "xtal";
};

&sd_emmc_c {
	clocks = <&clkc CLKID_SD_EMMC_C_MUX>,
			<&clkc CLKID_SD_EMMC_C_DIV>,
			<&clkc CLKID_SD_EMMC_C_GATE>,
			<&clkc CLKID_FCLK_DIV2>,
			<&clkc CLKID_SD_EMMC_C_XTAL_GATE>;
			clock-names = "mux", "div", "gate", "clkin", "xtal";
};

&nand {
	clocks = <&clkc CLKID_SD_EMMC_C_MUX>,
			<&clkc CLKID_SD_EMMC_C_DIV>,
			<&clkc CLKID_SD_EMMC_C_GATE>,
			<&clkc CLKID_FCLK_DIV2>,
			<&clkc CLKID_SD_EMMC_C_XTAL_GATE>;
	clock-names = "mux", "div", "gate", "fdiv2", "xtal";
};

&spicc0 {
	clocks = <&clkc CLKID_SPICC_A_DIV>, <&clkc CLKID_SPICC_A_GATE>;
	clock-names = "async", "async-gate";
	assigned-clocks = <&clkc CLKID_SPICC_A_MUX>, <&clkc CLKID_SPICC_A_DIV>;
	assigned-clock-parents = <&clkc CLKID_FCLK_DIV2>;
	assigned-clock-rates = <0>, <200000000>;
	/* =PM_SPICC, no set for power on already */
	/* pm-id = <22>; */
};

&spicc1 {
	clocks = <&clkc CLKID_SPICC_B_DIV>, <&clkc CLKID_SPICC_B_GATE>;
	clock-names = "async", "async-gate";
	assigned-clocks = <&clkc CLKID_SPICC_B_MUX>, <&clkc CLKID_SPICC_B_DIV>;
	assigned-clock-parents = <&clkc CLKID_FCLK_DIV2>;
	assigned-clock-rates = <0>, <200000000>;
	/* =PM_SPICC_B, must set to power on */
	pm-id = <39>;
};

&pinctrl_periphs {
	jtag_a_pins:jtag_a_pin {
		mux {
			groups = "jtag_a_clk",
			"jtag_a_tms",
			"jtag_a_tdi",
			"jtag_a_tdo";
			function = "jtag_a";
		};
	};

	jtag_b_pins:jtag_b_pin {
		mux {
			groups = "jtag_b_clk",
			"jtag_b_tms",
			"jtag_b_tdi",
			"jtag_b_tdo";
			function = "jtag_b";
		};
	};

	swd_a_pins:swd_a_pin {
		mux {
			groups = "swclk",
			"swdio";
			function = "sw";
		};
	};

	/*i2c0 pinmux*/
	i2c0_master_pins1:i2c0_pins1 {
		mux {
			groups = "i2c_a_scl_d",
				"i2c_a_sda_d";
			function = "i2c_a";
			bias-pull-up;
			drive-strength = <3>;
		};
	};

	i2c0_master_pins2:i2c0_pins2 {
		mux {
			groups = "i2c_a_scl_e",
				"i2c_a_sda_e";
			function = "i2c_a";
			bias-pull-up;
			drive-strength = <3>;
		};
	};

	/* i2c1 pinmux */
	i2c1_master_pins1:i2c1_pins1 {
		mux {
			groups = "i2c_b_scl_x",
				"i2c_b_sda_x";
			function = "i2c_b";
			bias-pull-up;
			drive-strength = <3>;
		};
	};

	i2c1_master_pins2:i2c1_pins2 {
		mux {
			groups = "i2c_b_scl_a",
				"i2c_b_sda_a";
			function = "i2c_b";
			bias-pull-up;
			drive-strength = <3>;
		};
	};

	i2c1_master_pins3:i2c1_pins3 {
		mux {
			groups = "i2c_b_scl_m",
				"i2c_b_sda_m";
			function = "i2c_b";
			bias-pull-up;
			drive-strength = <3>;
		};
	};

	/* i2c2 pinmux */
	i2c2_master_pins1:i2c2_pins1 {
		mux {
			groups = "i2c_c_scl_x",
				"i2c_c_sda_x";
			function = "i2c_c";
			bias-pull-up;
			drive-strength = <3>;
		};
	};

	i2c2_master_pins2:i2c2_pins2 {
		mux {
			groups = "i2c_c_scl_m",
				"i2c_c_sda_m";
			function = "i2c_c";
			bias-pull-up;
			drive-strength = <3>;
		};
	};

	i2c2_master_pins3:i2c2_pins3 {
		mux {
			groups = "i2c_c_scl_a",
				"i2c_c_sda_a";
			function = "i2c_c";
			bias-pull-up;
			drive-strength = <3>;
		};
	};

	/* i2c3 pinmux */
	i2c3_master_pins1:i2c3_pins1 {
		mux {
			groups = "i2c_d_scl_x",
				"i2c_d_sda_x";
			function = "i2c_d";
			bias-pull-up;
			drive-strength = <3>;
		};
	};

	i2c3_master_pins2:i2c3_pins2 {
		mux {
			groups = "i2c_d_scl_a",
				"i2c_d_sda_a";
			function = "i2c_d";
			bias-pull-up;
			drive-strength = <3>;
		};
	};

	i2c3_master_pins3:i2c3_pins3 {
		mux {
			groups = "i2c_d_scl_m",
				"i2c_d_sda_m";
			function = "i2c_d";
			bias-pull-up;
			drive-strength = <3>;
		};
	};

	/* i2c4 pinmux */
	i2c4_master_pins1:i2c4_pins1 {
		mux {
			groups = "i2c_e_scl_c",
				"i2c_e_sda_c";
			function = "i2c_e";
			bias-pull-up;
			drive-strength = <3>;
		};
	};

	i2c4_master_pins2:i2c4_pins2 {
		mux {
			groups = "i2c_e_scl_m",
				"i2c_e_sda_m";
			function = "i2c_e";
			bias-pull-up;
			drive-strength = <3>;
		};
	};

	i2c4_master_pins3:i2c4_pins3 {
		mux {
			groups = "i2c_e_scl_a",
				"i2c_e_sda_a";
			function = "i2c_e";
			bias-pull-up;
			drive-strength = <3>;
		};
	};

	pwm_a_pins1: pwm_a_pins1 {
		mux {
			groups = "pwm_a";
			function = "pwm_a";
		};
	};

	pwm_b_pins1: pwm_b_pins1 {
		mux {
			groups = "pwm_b";
			function = "pwm_b";
		};
	};

	pwm_c_pins1: pwm_c_pins1 {
		mux {
			groups = "pwm_c";
			function = "pwm_c";
		};
	};

	pwm_d_pins1: pwm_d_pins1 {
		mux {
			groups = "pwm_d";
			function = "pwm_d";
		};
	};

	pwm_e_pins1: pwm_e_pins1 {
		mux {
			groups = "pwm_e";
			function = "pwm_e";
		};
	};

	pwm_f_pins1: pwm_f_pins1 {
		mux {
			groups = "pwm_f_d";
			function = "pwm_f";
		};
	};

	pwm_f_pins2: pwm_f_pins2 {
		mux {
			groups = "pwm_f_m";
			function = "pwm_f";
		};
	};

	pwm_f_pins3: pwm_f_pins3 {
		mux {
			groups = "pwm_f_x";
			function = "pwm_f";
		};
	};

	pwm_g_pins1: pwm_g_pins1 {
		mux {
			groups = "pwm_g_d";
			function = "pwm_g";
		};
	};

	pwm_g_pins2: pwm_g_pins2 {
		mux {
			groups = "pwm_g_x";
			function = "pwm_g";
		};
	};

	pwm_g_pins3: pwm_g_pins3 {
		mux {
			groups = "pwm_g_m";
			function = "pwm_g";
		};
	};

	pwm_g_pins4: pwm_g_pins4 {
		mux {
			groups = "pwm_g_a7";
			function = "pwm_g";
		};
	};

	pwm_g_pins5: pwm_g_pins5 {
		mux {
			groups = "pwm_g_a1";
			function = "pwm_g";
		};
	};

	pwm_h_pins1: pwm_h_pins1 {
		mux {
			groups = "pwm_h_x";
			function = "pwm_h";
		};
	};

	pwm_h_pins2: pwm_h_pins2 {
		mux {
			groups = "pwm_h_m";
			function = "pwm_h";
		};
	};

	pwm_h_pins3: pwm_h_pins3 {
		mux {
			groups = "pwm_h_a8";
			function = "pwm_h";
		};
	};

	pwm_h_pins4: pwm_h_pins4 {
		mux {
			groups = "pwm_h_a2";
			function = "pwm_h";
		};
	};

	pwm_i_pins1: pwm_i_pins1 {
		mux {
			groups = "pwm_i_x";
			function = "pwm_i";
		};
	};

	pwm_i_pins2: pwm_i_pins2 {
		mux {
			groups = "pwm_i_m";
			function = "pwm_i";
		};
	};

	pwm_i_pins3: pwm_i_pins3 {
		mux {
			groups = "pwm_i_a9";
			function = "pwm_i";
		};
	};

	pwm_i_pins4: pwm_i_pins4 {
		mux {
			groups = "pwm_i_a3";
			function = "pwm_i";
		};
	};

	pwm_j_pins1: pwm_j_pins1 {
		mux {
			groups = "pwm_j_x";
			function = "pwm_j";
		};
	};

	pwm_j_pins2: pwm_j_pins2 {
		mux {
			groups = "pwm_j_m";
			function = "pwm_j";
		};
	};

	pwm_j_pins3: pwm_j_pins3 {
		mux {
			groups = "pwm_j_a10";
			function = "pwm_j";
		};
	};

	pwm_j_pins4: pwm_j_pins4 {
		mux {
			groups = "pwm_j_a4";
			function = "pwm_j";
		};
	};

	emmc_pins: emmc {
		mux {
			groups = "emmc_nand_d0",
				"emmc_nand_d1",
				"emmc_nand_d2",
				"emmc_nand_d3",
				"emmc_nand_d4",
				"emmc_nand_d5",
				"emmc_nand_d6",
				"emmc_nand_d7",
				"emmc_clk",
				"emmc_cmd";
			function = "emmc";
			bias-pull-up;
			input-enable;
		};
		mux1 {
			groups = "emmc_nand_ds";
			function = "emmc";
			input-enable;
			bias-pull-down;
		};
	};

	emmc_clk_gate_pins: emmc_clk_gate {
		mux {
			groups = "emmc_clk";
			function = "emmc";
			bias-pull-down;
		};
	};

	all_nand_pins: all_nand_pins {
		mux {
			groups =  "emmc_nand_d0",
				"emmc_nand_d1",
				"emmc_nand_d2",
				"emmc_nand_d3",
				"emmc_nand_d4",
				"emmc_nand_d5",
				"emmc_nand_d6",
				"emmc_nand_d7",
				"nand_ce0",
				"nand_ale",
				"nand_cle",
				"nand_wen_clk",
				"nand_ren_wr";
			function = "nand";
			input-enable;
		};
	};

	nand_cs_pins: nand_cs {
		mux {
			groups = "nand_ce0";
			function = "nand";
		};
	};

	sdcard_pins: sdcard {
		mux {
			groups = "sdcard_d0",
				"sdcard_d1",
				"sdcard_d2",
				"sdcard_d3",
				"sdcard_cmd";
			function = "sdcard";
			bias-pull-up;
			input-enable;
			drive-strength = <4>;
		};
		mux1 {
			groups ="sdcard_clk";
			function = "sdcard";
			bias-pull-up;
			output-high;
			drive-strength = <4>;
		};
	};

	sdcard_clk_gate_pins: sdcard_clk_gate {
		mux {
			groups = "sdcard_clk";
			function = "sdcard";
			bias-pull-down;
		};
	};

	to_sduart_pins: to_sduart_pins{
		mux {
			groups = "uart_b_rx_c", "uart_b_tx_c";
			function = "uart_b";
			bias-pull-up;
			input-enable;
		};
	};

	sd_to_uart_pins: sd_to_uart_pins{
		mux {
			groups = "uart_b_rx_d", "uart_b_tx_d";
			function = "uart_b";
			bias-pull-up;
			input-enable;
		};
	};

	spicc0_pins1: spicc0_pins1 {
		mux {
			groups = "spi_a_mosi_a",
				 "spi_a_miso_a",
				 "spi_a_sclk_a";
			function = "spi_a";
			drive-strength = <2>;
		};
	};

	spicc0_pins2: spicc0_pins2 {
		mux {
			groups = "spi_a_mosi_c",
				 "spi_a_miso_c",
				 "spi_a_sclk_c";
			function = "spi_a";
			drive-strength = <2>;
		};
	};

	spicc1_pins1: spicc1_pins1 {
		mux {
			groups = "spi_b_mosi_a",
				 "spi_b_miso_a",
				 "spi_b_sclk_a";
			function = "spi_b";
			drive-strength = <2>;
		};
	};

	spifc_pins: spifc_pins {
		mux {
			groups = "spif_mo",
				 "spif_mi",
				 "spif_clk",
				 "spif_cs",
				 "spif_hold",
				 "spif_wp_n";
			function = "spif";
			drive-strength = <3>;
		};
	};
};
