13d0407baSopenharmony_ci/*
23d0407baSopenharmony_ci * tc35874x - Toshiba HDMI to CSI-2 bridge
33d0407baSopenharmony_ci *
43d0407baSopenharmony_ci * Copyright 2015 Cisco Systems, Inc. and/or its affiliates. All rights
53d0407baSopenharmony_ci * reserved.
63d0407baSopenharmony_ci *
73d0407baSopenharmony_ci * This program is free software; you may redistribute it and/or modify
83d0407baSopenharmony_ci * it under the terms of the GNU General Public License as published by
93d0407baSopenharmony_ci * the Free Software Foundation; version 2 of the License.
103d0407baSopenharmony_ci *
113d0407baSopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
123d0407baSopenharmony_ci * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
133d0407baSopenharmony_ci * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
143d0407baSopenharmony_ci * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
153d0407baSopenharmony_ci * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
163d0407baSopenharmony_ci * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
173d0407baSopenharmony_ci * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
183d0407baSopenharmony_ci * SOFTWARE.
193d0407baSopenharmony_ci *
203d0407baSopenharmony_ci */
213d0407baSopenharmony_ci
223d0407baSopenharmony_ci/*
233d0407baSopenharmony_ci * References (c = chapter, p = page):
243d0407baSopenharmony_ci * REF_01 - Toshiba, TC358743XBG (H2C), Functional Specification, Rev 0.60
253d0407baSopenharmony_ci * REF_02 - Toshiba, TC358743XBG_HDMI-CSI_Tv11p_nm.xls
263d0407baSopenharmony_ci * REF_03 - Toshiba, TC358749XBG (H2C+), Functional Specification, Rev 0.74
273d0407baSopenharmony_ci */
283d0407baSopenharmony_ci
293d0407baSopenharmony_ci#ifndef _TC35874X_
303d0407baSopenharmony_ci#define _TC35874X_
313d0407baSopenharmony_ci
323d0407baSopenharmony_cienum tc35874x_ddc5v_delays {
333d0407baSopenharmony_ci	DDC5V_DELAY_0_MS,
343d0407baSopenharmony_ci	DDC5V_DELAY_50_MS,
353d0407baSopenharmony_ci	DDC5V_DELAY_100_MS,
363d0407baSopenharmony_ci	DDC5V_DELAY_200_MS,
373d0407baSopenharmony_ci};
383d0407baSopenharmony_ci
393d0407baSopenharmony_cienum tc35874x_hdmi_detection_delay {
403d0407baSopenharmony_ci	HDMI_MODE_DELAY_0_MS,
413d0407baSopenharmony_ci	HDMI_MODE_DELAY_25_MS,
423d0407baSopenharmony_ci	HDMI_MODE_DELAY_50_MS,
433d0407baSopenharmony_ci	HDMI_MODE_DELAY_100_MS,
443d0407baSopenharmony_ci};
453d0407baSopenharmony_ci
463d0407baSopenharmony_cistruct tc35874x_platform_data {
473d0407baSopenharmony_ci	/* System clock connected to REFCLK (pin H5) */
483d0407baSopenharmony_ci	u32 refclk_hz; /* 26 MHz, 27 MHz or 42 MHz */
493d0407baSopenharmony_ci
503d0407baSopenharmony_ci	/* DDC +5V debounce delay to avoid spurious interrupts when the cable
513d0407baSopenharmony_ci	 * is connected.
523d0407baSopenharmony_ci	 * Sets DDC5V_MODE in register DDC_CTL.
533d0407baSopenharmony_ci	 * Default: DDC5V_DELAY_0_MS
543d0407baSopenharmony_ci	 */
553d0407baSopenharmony_ci	enum tc35874x_ddc5v_delays ddc5v_delay;
563d0407baSopenharmony_ci
573d0407baSopenharmony_ci	bool enable_hdcp;
583d0407baSopenharmony_ci
593d0407baSopenharmony_ci	/*
603d0407baSopenharmony_ci	 * The FIFO size is 512x32, so Toshiba recommend to set the default FIFO
613d0407baSopenharmony_ci	 * level to somewhere in the middle (e.g. 300), so it can cover speed
623d0407baSopenharmony_ci	 * mismatches in input and output ports.
633d0407baSopenharmony_ci	 */
643d0407baSopenharmony_ci	u16 fifo_level;
653d0407baSopenharmony_ci
663d0407baSopenharmony_ci	/* Bps pr lane is (refclk_hz / pll_prd) * pll_fbd */
673d0407baSopenharmony_ci	u16 pll_prd;
683d0407baSopenharmony_ci	u16 pll_fbd;
693d0407baSopenharmony_ci
703d0407baSopenharmony_ci	/* CSI
713d0407baSopenharmony_ci	 * Calculate CSI parameters with REF_02 for the highest resolution your
723d0407baSopenharmony_ci	 * CSI interface can handle. The driver will adjust the number of CSI
733d0407baSopenharmony_ci	 * lanes in use according to the pixel clock.
743d0407baSopenharmony_ci	 *
753d0407baSopenharmony_ci	 * The values in brackets are calculated with REF_02 when the number of
763d0407baSopenharmony_ci	 * bps pr lane is 823.5 MHz, and can serve as a starting point.
773d0407baSopenharmony_ci	 */
783d0407baSopenharmony_ci	u32 lineinitcnt;	/* (0x00001770) */
793d0407baSopenharmony_ci	u32 lptxtimecnt;	/* (0x00000005) */
803d0407baSopenharmony_ci	u32 tclk_headercnt;	/* (0x00001d04) */
813d0407baSopenharmony_ci	u32 tclk_trailcnt;	/* (0x00000000) */
823d0407baSopenharmony_ci	u32 ths_headercnt;	/* (0x00000505) */
833d0407baSopenharmony_ci	u32 twakeup;		/* (0x00004650) */
843d0407baSopenharmony_ci	u32 tclk_postcnt;	/* (0x00000000) */
853d0407baSopenharmony_ci	u32 ths_trailcnt;	/* (0x00000004) */
863d0407baSopenharmony_ci	u32 hstxvregcnt;	/* (0x00000005) */
873d0407baSopenharmony_ci
883d0407baSopenharmony_ci	/* DVI->HDMI detection delay to avoid unnecessary switching between DVI
893d0407baSopenharmony_ci	 * and HDMI mode.
903d0407baSopenharmony_ci	 * Sets HDMI_DET_V in register HDMI_DET.
913d0407baSopenharmony_ci	 * Default: HDMI_MODE_DELAY_0_MS
923d0407baSopenharmony_ci	 */
933d0407baSopenharmony_ci	enum tc35874x_hdmi_detection_delay hdmi_detection_delay;
943d0407baSopenharmony_ci
953d0407baSopenharmony_ci	/* Reset PHY automatically when TMDS clock goes from DC to AC.
963d0407baSopenharmony_ci	 * Sets PHY_AUTO_RST2 in register PHY_CTL2.
973d0407baSopenharmony_ci	 * Default: false
983d0407baSopenharmony_ci	 */
993d0407baSopenharmony_ci	bool hdmi_phy_auto_reset_tmds_detected;
1003d0407baSopenharmony_ci
1013d0407baSopenharmony_ci	/* Reset PHY automatically when TMDS clock passes 21 MHz.
1023d0407baSopenharmony_ci	 * Sets PHY_AUTO_RST3 in register PHY_CTL2.
1033d0407baSopenharmony_ci	 * Default: false
1043d0407baSopenharmony_ci	 */
1053d0407baSopenharmony_ci	bool hdmi_phy_auto_reset_tmds_in_range;
1063d0407baSopenharmony_ci
1073d0407baSopenharmony_ci	/* Reset PHY automatically when TMDS clock is detected.
1083d0407baSopenharmony_ci	 * Sets PHY_AUTO_RST4 in register PHY_CTL2.
1093d0407baSopenharmony_ci	 * Default: false
1103d0407baSopenharmony_ci	 */
1113d0407baSopenharmony_ci	bool hdmi_phy_auto_reset_tmds_valid;
1123d0407baSopenharmony_ci
1133d0407baSopenharmony_ci	/* Reset HDMI PHY automatically when hsync period is out of range.
1143d0407baSopenharmony_ci	 * Sets H_PI_RST in register HV_RST.
1153d0407baSopenharmony_ci	 * Default: false
1163d0407baSopenharmony_ci	 */
1173d0407baSopenharmony_ci	bool hdmi_phy_auto_reset_hsync_out_of_range;
1183d0407baSopenharmony_ci
1193d0407baSopenharmony_ci	/* Reset HDMI PHY automatically when vsync period is out of range.
1203d0407baSopenharmony_ci	 * Sets V_PI_RST in register HV_RST.
1213d0407baSopenharmony_ci	 * Default: false
1223d0407baSopenharmony_ci	 */
1233d0407baSopenharmony_ci	bool hdmi_phy_auto_reset_vsync_out_of_range;
1243d0407baSopenharmony_ci};
1253d0407baSopenharmony_ci
1263d0407baSopenharmony_ci/* custom controls */
1273d0407baSopenharmony_ci/* Audio sample rate in Hz */
1283d0407baSopenharmony_ci#define TC35874X_CID_AUDIO_SAMPLING_RATE (V4L2_CID_USER_TC35874X_BASE + 0)
1293d0407baSopenharmony_ci/* Audio present status */
1303d0407baSopenharmony_ci#define TC35874X_CID_AUDIO_PRESENT       (V4L2_CID_USER_TC35874X_BASE + 1)
1313d0407baSopenharmony_ci
1323d0407baSopenharmony_ci#endif