/*
 * 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_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 audio card";
			status = "okay";

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

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

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