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