/*
 * Copyright (C) 2014 STMicroelectronics (R&D) Limited.
 * Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
#include <dt-bindings/clock/stih407-clks.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/media/c8sectpfe.h>
/ {
	soc {
		sbc_serial0: serial@9530000 {
			status = "okay";
		};

		leds {
			compatible = "gpio-leds";
			red {
				label = "Front Panel LED";
				gpios = <&pio4 1 GPIO_ACTIVE_HIGH>;
				linux,default-trigger = "heartbeat";
			};
			green {
				gpios = <&pio1 3 GPIO_ACTIVE_HIGH>;
				default-state = "off";
			};
		};

		pwm0: pwm@9810000 {
			status = "okay";
		};

		pwm1: pwm@9510000 {
			status = "okay";
		};

		ssc2: i2c@9842000 {
			status = "okay";
			clock-frequency = <100000>;
			st,i2c-min-scl-pulse-width-us = <0>;
			st,i2c-min-sda-pulse-width-us = <5>;
		};

		ssc3: i2c@9843000 {
			status = "okay";
			clock-frequency = <100000>;
			st,i2c-min-scl-pulse-width-us = <0>;
			st,i2c-min-sda-pulse-width-us = <5>;
		};

		i2c@9844000 {
			status = "okay";
		};

		i2c@9845000 {
			status = "okay";
		};

		i2c@9540000 {
			status = "okay";
		};

		mmc0: sdhci@09060000 {
			non-removable;
			status = "okay";
		};

		mmc1: sdhci@09080000 {
			status = "okay";
		};

		/* SSC11 to HDMI */
		hdmiddc: i2c@9541000 {
			status = "okay";
			/* HDMI V1.3a supports Standard mode only */
			clock-frequency = <100000>;
			st,i2c-min-scl-pulse-width-us = <0>;
			st,i2c-min-sda-pulse-width-us = <5>;
		};

		miphy28lp_phy: miphy28lp@9b22000 {

			phy_port0: port@9b22000 {
				st,osc-rdy;
			};

			phy_port1: port@9b2a000 {
				st,osc-force-ext;
			};
		};

		st_dwc3: dwc3@8f94000 {
			status = "okay";
		};

		ethernet0: dwmac@9630000 {
			st,tx-retime-src = "clkgen";
			status = "okay";
			phy-mode = "rgmii";
			fixed-link = <0 1 1000 0 0>;
		};

		demux@08a20000 {
			compatible	= "st,stih407-c8sectpfe";
			status		= "okay";
			reg		= <0x08a20000 0x10000>,
					  <0x08a00000 0x4000>;
			reg-names	= "c8sectpfe", "c8sectpfe-ram";
			interrupts	= <GIC_SPI 34 IRQ_TYPE_NONE>,
					  <GIC_SPI 35 IRQ_TYPE_NONE>;
			interrupt-names	= "c8sectpfe-error-irq",
					  "c8sectpfe-idle-irq";
			pinctrl-0	= <&pinctrl_tsin0_serial>;
			pinctrl-1	= <&pinctrl_tsin0_parallel>;
			pinctrl-2	= <&pinctrl_tsin3_serial>;
			pinctrl-3	= <&pinctrl_tsin4_serial_alt3>;
			pinctrl-4	= <&pinctrl_tsin5_serial_alt1>;
			pinctrl-names	= "tsin0-serial",
					  "tsin0-parallel",
					  "tsin3-serial",
					  "tsin4-serial",
					  "tsin5-serial";
			clocks		= <&clk_s_c0_flexgen CLK_PROC_STFE>;
			clock-names	= "c8sectpfe";

			/* tsin0 is TSA on NIMA */
			tsin0: port@0 {
				tsin-num	= <0>;
				serial-not-parallel;
				i2c-bus		= <&ssc2>;
				reset-gpios	= <&pio15 4 GPIO_ACTIVE_HIGH>;
				dvb-card	= <STV0367_TDA18212_NIMA_1>;
			};
		};

		sti_uni_player0: sti-uni-player@8d80000 {
			status = "okay";
		};

		sti_uni_player2: sti-uni-player@8d82000 {
			status = "okay";
		};

		sti_uni_player3: sti-uni-player@8d85000 {
			status = "okay";
		};

		sti_sasg_codec: sti-sasg-codec {
			status = "okay";
			pinctrl-names = "default";
			pinctrl-0 = <&pinctrl_spdif_out>;
		};

		sound {
			compatible = "simple-audio-card";
			simple-audio-card,name = "STI-B2120";
			status = "okay";

			simple-audio-card,dai-link@0 {
				/* HDMI */
				format = "i2s";
				mclk-fs = <128>;
				cpu {
					sound-dai = <&sti_uni_player0>;
				};

				codec {
					sound-dai = <&sti_hdmi>;
				};
			};
			simple-audio-card,dai-link@1 {
				/* DAC */
				format = "i2s";
				mclk-fs = <256>;
				frame-inversion = <1>;
				cpu {
					sound-dai = <&sti_uni_player2>;
				};

				codec {
					sound-dai = <&sti_sasg_codec 1>;
				};
			};
			simple-audio-card,dai-link@2 {
				/* SPDIF */
				format = "left_j";
				mclk-fs = <128>;
				cpu {
					sound-dai = <&sti_uni_player3>;
				};

				codec {
					sound-dai = <&sti_sasg_codec 0>;
				};
			};
		};
	};
};
