13d0407baSopenharmony_ci/*
23d0407baSopenharmony_ci * Copyright (c) 2017 Rockchip Electronics Co. Ltd.
33d0407baSopenharmony_ci *
43d0407baSopenharmony_ci * This program is free software; you can redistribute it and/or modify
53d0407baSopenharmony_ci * it under the terms of the GNU General Public License as published by
63d0407baSopenharmony_ci * the Free Software Foundation; either version 2 of the License, or
73d0407baSopenharmony_ci * (at your option) any later version.
83d0407baSopenharmony_ci *
93d0407baSopenharmony_ci * This program is distributed in the hope that it will be useful,
103d0407baSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
113d0407baSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
123d0407baSopenharmony_ci * GNU General Public License for more details.
133d0407baSopenharmony_ci */
143d0407baSopenharmony_ci
153d0407baSopenharmony_ci#ifndef __RK618_H__
163d0407baSopenharmony_ci#define __RK618_H__
173d0407baSopenharmony_ci
183d0407baSopenharmony_ci#include <linux/clk.h>
193d0407baSopenharmony_ci#include <linux/delay.h>
203d0407baSopenharmony_ci#include <linux/regmap.h>
213d0407baSopenharmony_ci
223d0407baSopenharmony_ci#define UPDATE(x, h, l)		(((x) << (l)) & GENMASK((h), (l)))
233d0407baSopenharmony_ci#define HIWORD_UPDATE(v, h, l)	(((v) << (l)) | (GENMASK((h), (l)) << 16))
243d0407baSopenharmony_ci
253d0407baSopenharmony_ci#define RK618_LVDS_CON			0x0084
263d0407baSopenharmony_ci#define LVDS_CON_START_PHASE(x)		HIWORD_UPDATE(x, 14, 14)
273d0407baSopenharmony_ci#define LVDS_DCLK_INV			HIWORD_UPDATE(1, 13, 13)
283d0407baSopenharmony_ci#define LVDS_CON_CHADS_10PF		HIWORD_UPDATE(3, 12, 11)
293d0407baSopenharmony_ci#define LVDS_CON_CHADS_5PF		HIWORD_UPDATE(2, 12, 11)
303d0407baSopenharmony_ci#define LVDS_CON_CHADS_7PF		HIWORD_UPDATE(1, 12, 11)
313d0407baSopenharmony_ci#define LVDS_CON_CHADS_3PF		HIWORD_UPDATE(0, 12, 11)
323d0407baSopenharmony_ci#define LVDS_CON_CHA1TTL_ENABLE		HIWORD_UPDATE(1, 10, 10)
333d0407baSopenharmony_ci#define LVDS_CON_CHA1TTL_DISABLE	HIWORD_UPDATE(0, 10, 10)
343d0407baSopenharmony_ci#define LVDS_CON_CHA0TTL_ENABLE		HIWORD_UPDATE(1, 9, 9)
353d0407baSopenharmony_ci#define LVDS_CON_CHA0TTL_DISABLE	HIWORD_UPDATE(0, 9, 9)
363d0407baSopenharmony_ci#define LVDS_CON_CHA1_POWER_UP		HIWORD_UPDATE(1, 8, 8)
373d0407baSopenharmony_ci#define LVDS_CON_CHA1_POWER_DOWN	HIWORD_UPDATE(0, 8, 8)
383d0407baSopenharmony_ci#define LVDS_CON_CHA0_POWER_UP		HIWORD_UPDATE(1, 7, 7)
393d0407baSopenharmony_ci#define LVDS_CON_CHA0_POWER_DOWN	HIWORD_UPDATE(0, 7, 7)
403d0407baSopenharmony_ci#define LVDS_CON_CBG_POWER_UP		HIWORD_UPDATE(1, 6, 6)
413d0407baSopenharmony_ci#define LVDS_CON_CBG_POWER_DOWN		HIWORD_UPDATE(0, 6, 6)
423d0407baSopenharmony_ci#define LVDS_CON_PLL_POWER_DOWN		HIWORD_UPDATE(1, 5, 5)
433d0407baSopenharmony_ci#define LVDS_CON_PLL_POWER_UP		HIWORD_UPDATE(0, 5, 5)
443d0407baSopenharmony_ci#define LVDS_CON_START_SEL_EVEN_PIXEL	HIWORD_UPDATE(1, 4, 4)
453d0407baSopenharmony_ci#define LVDS_CON_START_SEL_ODD_PIXEL	HIWORD_UPDATE(0, 4, 4)
463d0407baSopenharmony_ci#define LVDS_CON_CHASEL_DOUBLE_CHANNEL	HIWORD_UPDATE(1, 3, 3)
473d0407baSopenharmony_ci#define LVDS_CON_CHASEL_SINGLE_CHANNEL	HIWORD_UPDATE(0, 3, 3)
483d0407baSopenharmony_ci#define LVDS_CON_MSBSEL_D7		HIWORD_UPDATE(1, 2, 2)
493d0407baSopenharmony_ci#define LVDS_CON_MSBSEL_D0		HIWORD_UPDATE(0, 2, 2)
503d0407baSopenharmony_ci#define LVDS_CON_SELECT(x)		HIWORD_UPDATE(x, 1, 0)
513d0407baSopenharmony_ci#define LVDS_CON_SELECT_6BIT_MODE	HIWORD_UPDATE(3, 1, 0)
523d0407baSopenharmony_ci#define LVDS_CON_SELECT_8BIT_MODE_3	HIWORD_UPDATE(2, 1, 0)
533d0407baSopenharmony_ci#define LVDS_CON_SELECT_8BIT_MODE_2	HIWORD_UPDATE(1, 1, 0)
543d0407baSopenharmony_ci#define LVDS_CON_SELECT_8BIT_MODE_1	HIWORD_UPDATE(0, 1, 0)
553d0407baSopenharmony_ci#define RK618_IO_CON0			0x0088
563d0407baSopenharmony_ci#define VIF1_SYNC_MODE_ENABLE		HIWORD_UPDATE(1, 15, 15)
573d0407baSopenharmony_ci#define VIF1_SYNC_MODE_DISABLE		HIWORD_UPDATE(0, 15, 15)
583d0407baSopenharmony_ci#define VIF0_SYNC_MODE_ENABLE		HIWORD_UPDATE(1, 14, 14)
593d0407baSopenharmony_ci#define VIF0_SYNC_MODE_DISABLE		HIWORD_UPDATE(0, 14, 14)
603d0407baSopenharmony_ci#define PORT2_OUTPUT_LVDS		HIWORD_UPDATE(1, 11, 11)
613d0407baSopenharmony_ci#define PORT2_OUTPUT_TTL		HIWORD_UPDATE(0, 11, 11)
623d0407baSopenharmony_ci#define PORT1_OUTPUT_TTL_DISABLE	HIWORD_UPDATE(1, 10, 10)
633d0407baSopenharmony_ci#define PORT1_OUTPUT_TTL_ENABLE		HIWORD_UPDATE(0, 10, 10)
643d0407baSopenharmony_ci#define PORT2_IO_PULL_DOWN_DISABLE	HIWORD_UPDATE(1, 9, 9)
653d0407baSopenharmony_ci#define PORT2_IO_PULL_DOWN_ENABLE	HIWORD_UPDATE(0, 9, 9)
663d0407baSopenharmony_ci#define PORT1_IO_PULL_DOWN_DISABLE	HIWORD_UPDATE(1, 8, 8)
673d0407baSopenharmony_ci#define PORT1_IO_PULL_DOWN_ENABLE	HIWORD_UPDATE(0, 8, 8)
683d0407baSopenharmony_ci#define PORT0_IO_PULL_DOWN_DISABLE	HIWORD_UPDATE(1, 7, 7)
693d0407baSopenharmony_ci#define PORT0_IO_PULL_DOWN_ENABLE	HIWORD_UPDATE(0, 7, 7)
703d0407baSopenharmony_ci#define HDMI_IO_PULL_UP_DISABLE		HIWORD_UPDATE(1, 6, 6)
713d0407baSopenharmony_ci#define HDMI_IO_PULL_UP_ENABLE		HIWORD_UPDATE(0, 6, 6)
723d0407baSopenharmony_ci#define I2C_IO_PULL_UP_DISABLE		HIWORD_UPDATE(1, 2, 2)
733d0407baSopenharmony_ci#define I2C_IO_PULL_UP_ENABLE		HIWORD_UPDATE(0, 2, 2)
743d0407baSopenharmony_ci#define INT_IO_PULL_UP			HIWORD_UPDATE(1, 1, 1)
753d0407baSopenharmony_ci#define INT_IO_PULL_DOWN		HIWORD_UPDATE(0, 1, 1)
763d0407baSopenharmony_ci#define CLKIN_IO_PULL_UP		HIWORD_UPDATE(1, 0, 0)
773d0407baSopenharmony_ci#define CLKIN_IO_PULL_DOWN		HIWORD_UPDATE(0, 0, 0)
783d0407baSopenharmony_ci#define RK618_IO_CON1			0x008c
793d0407baSopenharmony_ci#define PORT2_IO_SCHMITT_INPUT_ENABLE	HIWORD_UPDATE(1, 9, 9)
803d0407baSopenharmony_ci#define PORT2_IO_SCHMITT_INPUT_DISABLE	HIWORD_UPDATE(0, 9, 9)
813d0407baSopenharmony_ci#define PORT1_IO_SCHMITT_INPUT_ENABLE	HIWORD_UPDATE(1, 8, 8)
823d0407baSopenharmony_ci#define PORT1_IO_SCHMITT_INPUT_DISABLE	HIWORD_UPDATE(0, 8, 8)
833d0407baSopenharmony_ci#define PORT0_IO_SCHMITT_INPUT_ENABLE	HIWORD_UPDATE(1, 7, 7)
843d0407baSopenharmony_ci#define PORT0_IO_SCHMITT_INPUT_DISABLE	HIWORD_UPDATE(0, 7, 7)
853d0407baSopenharmony_ci#define HDMI_IO_SCHMITT_INPUT_ENABLE	HIWORD_UPDATE(1, 6, 6)
863d0407baSopenharmony_ci#define HDMI_IO_SCHMITT_INPUT_DISABLE	HIWORD_UPDATE(0, 6, 6)
873d0407baSopenharmony_ci#define I2C_IO_SCHMITT_INPUT_ENABLE	HIWORD_UPDATE(1, 2, 2)
883d0407baSopenharmony_ci#define I2C_IO_SCHMITT_INPUT_DISABLE	HIWORD_UPDATE(0, 2, 2)
893d0407baSopenharmony_ci#define INT_IO_SCHMITT_INPUT_ENABLE	HIWORD_UPDATE(1, 1, 1)
903d0407baSopenharmony_ci#define INT_IO_SCHMITT_INPUT_DISABLE	HIWORD_UPDATE(0, 1, 1)
913d0407baSopenharmony_ci#define CLKIN_IO_SCHMITT_INPUT_ENABLE	HIWORD_UPDATE(1, 0, 0)
923d0407baSopenharmony_ci#define CLKIN_IO_SCHMITT_INPUT_DISABLE	HIWORD_UPDATE(0, 0, 0)
933d0407baSopenharmony_ci#define RK618_MISC_CON			0x009c
943d0407baSopenharmony_ci#define HDMI_INT_STATUS			BIT(20)
953d0407baSopenharmony_ci#define MIPI_INT_STATUS			BIT(19)
963d0407baSopenharmony_ci#define MIPI_EDPI_HALT			BIT(16)
973d0407baSopenharmony_ci#define HDMI_HSYNC_POL_INV		BIT(15)
983d0407baSopenharmony_ci#define HDMI_VSYNC_POL_INV		BIT(14)
993d0407baSopenharmony_ci#define HDMI_CLK_SEL_MASK		GENMASK(13, 12)
1003d0407baSopenharmony_ci#define HDMI_CLK_SEL_VIDEO_INF0_CLK	UPDATE(2, 13, 12)
1013d0407baSopenharmony_ci#define HDMI_CLK_SEL_SCALER_CLK		UPDATE(1, 13, 12)
1023d0407baSopenharmony_ci#define HDMI_CLK_SEL_VIDEO_INF1_CLK	0
1033d0407baSopenharmony_ci#define INT_ACTIVE_LOW			BIT(5)
1043d0407baSopenharmony_ci#define INT_ACTIVE_HIGH			0
1053d0407baSopenharmony_ci#define DOUBLE_CH_LVDS_DEN_POLARITY	BIT(4)
1063d0407baSopenharmony_ci#define DOUBLE_CH_LVDS_DEN_LOW		BIT(4)
1073d0407baSopenharmony_ci#define DOUBLE_CH_LVDS_DEN_HIGH		0
1083d0407baSopenharmony_ci#define DOUBLE_CH_LVDS_HSYNC_POLARITY	BIT(3)
1093d0407baSopenharmony_ci#define DOUBLE_CH_LVDS_HSYNC_LOW	BIT(3)
1103d0407baSopenharmony_ci#define DOUBLE_CH_LVDS_HSYNC_HIGH	0
1113d0407baSopenharmony_ci#define MIPI_DPICOLOM			BIT(2)
1123d0407baSopenharmony_ci#define MIPI_DPISHUTDN			BIT(1)
1133d0407baSopenharmony_ci
1143d0407baSopenharmony_cistruct rk618 {
1153d0407baSopenharmony_ci	struct device *dev;
1163d0407baSopenharmony_ci	struct i2c_client *client;
1173d0407baSopenharmony_ci	struct clk *clkin;
1183d0407baSopenharmony_ci	struct regmap *regmap;
1193d0407baSopenharmony_ci
1203d0407baSopenharmony_ci	struct regulator *supply;
1213d0407baSopenharmony_ci	struct gpio_desc *enable_gpio;
1223d0407baSopenharmony_ci	struct gpio_desc *reset_gpio;	/* power on reset */
1233d0407baSopenharmony_ci};
1243d0407baSopenharmony_ci
1253d0407baSopenharmony_ci#endif
126