STMicroelectronics STi c8sectpfe binding
============================================

This document describes the c8sectpfe device bindings that is used to get transport
stream data into the SoC on the TS pins, and into DDR for further processing.

It is typically used in conjunction with one or more demodulator and tuner devices
which converts from the RF to digital domain. Demodulators and tuners are usually
located on an external DVB frontend card connected to SoC TS input pins.

Currently 7 TS input (tsin) channels are supported on the stih407 family SoC.

Required properties (controller (parent) node):
- compatible	: Should be "stih407-c8sectpfe"

- reg		: Address and length of register sets for each device in
		  "reg-names"

- reg-names	: The names of the register addresses corresponding to the
		  registers filled in "reg":
			- c8sectpfe: c8sectpfe registers
			- c8sectpfe-ram: c8sectpfe internal sram

- clocks	: phandle list of c8sectpfe clocks
- clock-names	: should be "c8sectpfe"
See: Documentation/devicetree/bindings/clock/clock-bindings.txt

- pinctrl-names	: a pinctrl state named tsin%d-serial or tsin%d-parallel (where %d is tsin-num)
		   must be defined for each tsin child node.
- pinctrl-0	: phandle referencing pin configuration for this tsin configuration
See: Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt


Required properties (tsin (child) node):

- tsin-num	: tsin id of the InputBlock (must be between 0 to 6)
- i2c-bus	: phandle to the I2C bus DT node which the demodulators & tuners on this tsin channel are connected.
- reset-gpios	: reset gpio for this tsin channel.

Optional properties (tsin (child) node):

- invert-ts-clk		: Bool property to control sense of ts input clock (data stored on falling edge of clk).
- serial-not-parallel	: Bool property to configure input bus width (serial on ts_data<7>).
- async-not-sync	: Bool property to control if data is received in asynchronous mode
			   (all bits/bytes with ts_valid or ts_packet asserted are valid).

- dvb-card		: Describes the NIM card connected to this tsin channel.

Example:

/* stih410 SoC b2120 + b2004a + stv0367-pll(NIMB) + stv0367-tda18212 (NIMA) DT example) */

	c8sectpfe@8a20000 {
		compatible = "st,stih407-c8sectpfe";
		reg = <0x08a20000 0x10000>, <0x08a00000 0x4000>;
		reg-names = "stfe", "stfe-ram";
		interrupts = <GIC_SPI 34 IRQ_TYPE_NONE>, <GIC_SPI 35 IRQ_TYPE_NONE>;
		interrupt-names = "stfe-error-irq", "stfe-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>;
		};

		tsin3: port@3 {
			tsin-num		= <3>;
			serial-not-parallel;
			i2c-bus			= <&ssc3>;
			reset-gpios		= <&pio15 7 GPIO_ACTIVE_HIGH>;
			dvb-card		= <STV0367_TDA18212_NIMB_1>;
		};
	};
