13d0407baSopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 23d0407baSopenharmony_ci/* 33d0407baSopenharmony_ci * Copyright (c) 2020 Rockchip Electronics Co. Ltd. 43d0407baSopenharmony_ci * 53d0407baSopenharmony_ci * Author: Algea Cao <algea.cao@rock-chips.com> 63d0407baSopenharmony_ci */ 73d0407baSopenharmony_ci 83d0407baSopenharmony_ci#ifndef _rk630_H 93d0407baSopenharmony_ci#define _rk630_H 103d0407baSopenharmony_ci 113d0407baSopenharmony_ci#include <linux/clk.h> 123d0407baSopenharmony_ci#include <linux/delay.h> 133d0407baSopenharmony_ci#include <linux/regmap.h> 143d0407baSopenharmony_ci#include <linux/mfd/core.h> 153d0407baSopenharmony_ci 163d0407baSopenharmony_ci#define UPDATE(x, h, l) (((x) << (l)) & GENMASK((h), (l))) 173d0407baSopenharmony_ci#define HIWORD_MASK(h, l) ((GENMASK((h), (l)) << 16) | GENMASK((h), (l))) 183d0407baSopenharmony_ci#define HIWORD_UPDATE(v, h, l) ((((v) << (l)) & GENMASK((h), (l))) | (GENMASK((h), (l)) << 16)) 193d0407baSopenharmony_ci 203d0407baSopenharmony_ci#define GRF_REG(x) ((x) + 0x20000) 213d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO0A_IOMUX GRF_REG(0x0000) 223d0407baSopenharmony_ci#define GPIO0A0_SEL_MASK HIWORD_MASK(1, 0) 233d0407baSopenharmony_ci#define GPIO0A0_SEL(x) HIWORD_UPDATE(x, 1, 0) 243d0407baSopenharmony_ci#define GPIO0A1_SEL_MASK HIWORD_MASK(3, 2) 253d0407baSopenharmony_ci#define GPIO0A1_SEL(x) HIWORD_UPDATE(x, 3, 2) 263d0407baSopenharmony_ci#define GPIO0A2_SEL_MASK HIWORD_MASK(5, 4) 273d0407baSopenharmony_ci#define GPIO0A2_SEL(x) HIWORD_UPDATE(x, 5, 4) 283d0407baSopenharmony_ci#define GPIO0A3_SEL_MASK HIWORD_MASK(7, 6) 293d0407baSopenharmony_ci#define GPIO0A3_SEL(x) HIWORD_UPDATE(x, 7, 6) 303d0407baSopenharmony_ci#define GPIO0A4_SEL_MASK HIWORD_MASK(9, 8) 313d0407baSopenharmony_ci#define GPIO0A4_SEL(x) HIWORD_UPDATE(x, 9, 8) 323d0407baSopenharmony_ci#define GPIO0A5_SEL_MASK HIWORD_MASK(11, 10) 333d0407baSopenharmony_ci#define GPIO0A5_SEL(x) HIWORD_UPDATE(x, 11, 10) 343d0407baSopenharmony_ci#define GPIO0A6_SEL_MASK HIWORD_MASK(13, 12) 353d0407baSopenharmony_ci#define GPIO0A6_SEL(x) HIWORD_UPDATE(x, 13, 12) 363d0407baSopenharmony_ci#define GPIO0A7_SEL_MASK HIWORD_MASK(15, 14) 373d0407baSopenharmony_ci#define GPIO0A7_SEL(x) HIWORD_UPDATE(x, 15, 14) 383d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO0B_IOMUX GRF_REG(0x0008) 393d0407baSopenharmony_ci#define GPIO0B0_SEL_MASK HIWORD_MASK(1, 0) 403d0407baSopenharmony_ci#define GPIO0B0_SEL(x) HIWORD_UPDATE(x, 1, 0) 413d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO0C_IOMUX GRF_REG(0x0010) 423d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO0D_IOMUX GRF_REG(0x0018) 433d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO1A_IOMUX GRF_REG(0x0020) 443d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO1B_IOMUX GRF_REG(0x0028) 453d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO0A_P GRF_REG(0x0080) 463d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO0B_P GRF_REG(0x0084) 473d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO0C_P GRF_REG(0x0088) 483d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO0D_P GRF_REG(0x008C) 493d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO1A_P GRF_REG(0x0090) 503d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO1B_P GRF_REG(0x0094) 513d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO1B_SR GRF_REG(0x00D4) 523d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO1B_E GRF_REG(0x0154) 533d0407baSopenharmony_ci#define PLUMAGE_GRF_SOC_CON0 GRF_REG(0x0400) 543d0407baSopenharmony_ci#define SW_TVE_DCLK_POL_MASK HIWORD_MASK(4, 4) 553d0407baSopenharmony_ci#define SW_TVE_DCLK_POL(x) HIWORD_UPDATE(x, 4, 4) 563d0407baSopenharmony_ci#define SW_TVE_DCLK_EN_MASK HIWORD_MASK(3, 3) 573d0407baSopenharmony_ci#define SW_TVE_DCLK_EN(x) HIWORD_UPDATE(x, 3, 3) 583d0407baSopenharmony_ci#define SW_DCLK_UPSAMPLE_EN_MASK HIWORD_MASK(2, 2) 593d0407baSopenharmony_ci#define SW_DCLK_UPSAMPLE_EN(x) HIWORD_UPDATE(x, 2, 2) 603d0407baSopenharmony_ci#define SW_TVE_MODE_MASK HIWORD_MASK(1, 1) 613d0407baSopenharmony_ci#define SW_TVE_MODE(x) HIWORD_UPDATE(x, 1, 1) 623d0407baSopenharmony_ci#define SW_TVE_EN_MASK HIWORD_MASK(0, 0) 633d0407baSopenharmony_ci#define SW_TVE_EN(x) HIWORD_UPDATE(x, 0, 0) 643d0407baSopenharmony_ci#define PLUMAGE_GRF_SOC_CON1 GRF_REG(0x0404) 653d0407baSopenharmony_ci#define PLUMAGE_GRF_SOC_CON2 GRF_REG(0x0408) 663d0407baSopenharmony_ci#define PLUMAGE_GRF_SOC_CON3 GRF_REG(0x040C) 673d0407baSopenharmony_ci#define VDAC_ENVBG_MASK HIWORD_MASK(12, 12) 683d0407baSopenharmony_ci#define VDAC_ENVBG(x) HIWORD_UPDATE(x, 12, 12) 693d0407baSopenharmony_ci#define VDAC_ENSC0_MASK HIWORD_MASK(11, 11) 703d0407baSopenharmony_ci#define VDAC_ENSC0(x) HIWORD_UPDATE(x, 11, 11) 713d0407baSopenharmony_ci#define VDAC_ENEXTREF_MASK HIWORD_MASK(10, 10) 723d0407baSopenharmony_ci#define VDAC_ENEXTREF(x) HIWORD_UPDATE(x, 10, 10) 733d0407baSopenharmony_ci#define VDAC_ENDAC0_MASK HIWORD_MASK(9, 9) 743d0407baSopenharmony_ci#define VDAC_ENDAC0(x) HIWORD_UPDATE(x, 9, 9) 753d0407baSopenharmony_ci#define VDAC_ENCTR2_MASK HIWORD_MASK(8, 8) 763d0407baSopenharmony_ci#define VDAC_ENCTR2(x) HIWORD_UPDATE(x, 8, 8) 773d0407baSopenharmony_ci#define VDAC_ENCTR1_MASK HIWORD_MASK(7, 7) 783d0407baSopenharmony_ci#define VDAC_ENCTR1(x) HIWORD_UPDATE(x, 7, 7) 793d0407baSopenharmony_ci#define VDAC_ENCTR0_MASK HIWORD_MASK(6, 6) 803d0407baSopenharmony_ci#define VDAC_ENCTR0(x) HIWORD_UPDATE(x, 6, 6) 813d0407baSopenharmony_ci#define VDAC_GAIN_MASK GENMASK(x, 5, 0) 823d0407baSopenharmony_ci#define VDAC_GAIN(x) HIWORD_UPDATE(x, 5, 0) 833d0407baSopenharmony_ci#define PLUMAGE_GRF_SOC_CON4 GRF_REG(0x0410) 843d0407baSopenharmony_ci#define PLUMAGE_GRF_SOC_STATUS GRF_REG(0x0480) 853d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO0_REN0 GRF_REG(0x0500) 863d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO0_REN1 GRF_REG(0x0504) 873d0407baSopenharmony_ci#define PLUMAGE_GRF_GPIO1_REN0 GRF_REG(0x0508) 883d0407baSopenharmony_ci#define GRF_MAX_REGISTER PLUMAGE_GRF_GPIO1_REN0 893d0407baSopenharmony_ci 903d0407baSopenharmony_ci#define CRU_REG(x) ((x) + 0x140000) 913d0407baSopenharmony_ci#define CRU_SPLL_CON0 CRU_REG(0x0000) 923d0407baSopenharmony_ci#define POSTDIV1_MASK HIWORD_MASK(14, 12) 933d0407baSopenharmony_ci#define POSTDIV1(x) HIWORD_UPDATE(x, 14, 12) 943d0407baSopenharmony_ci#define FBDIV_MASK HIWORD_MASK(14, 12) 953d0407baSopenharmony_ci#define FBDIV(x) HIWORD_UPDATE(x, 14, 12) 963d0407baSopenharmony_ci#define CRU_SPLL_CON1 CRU_REG(0x0004) 973d0407baSopenharmony_ci#define PLLPD0_MASK HIWORD_MASK(13, 13) 983d0407baSopenharmony_ci#define PLLPD0(x) HIWORD_UPDATE(x, 13, 13) 993d0407baSopenharmony_ci#define PLL_LOCK BIT(10) 1003d0407baSopenharmony_ci#define POSTDIV2_MASK HIWORD_MASK(8, 6) 1013d0407baSopenharmony_ci#define POSTDIV2(x) HIWORD_UPDATE(x, 8, 6) 1023d0407baSopenharmony_ci#define REFDIV_MASK HIWORD_MASK(5, 0) 1033d0407baSopenharmony_ci#define REFDIV(x) HIWORD_UPDATE(x, 5, 0) 1043d0407baSopenharmony_ci#define CRU_SPLL_CON2 CRU_REG(0x0008) 1053d0407baSopenharmony_ci#define CRU_MODE_CON CRU_REG(0x0020) 1063d0407baSopenharmony_ci#define CLK_SPLL_MODE_MASK HIWORD_MASK(2, 0) 1073d0407baSopenharmony_ci#define CLK_SPLL_MODE(x) HIWORD_UPDATE(x, 2, 0) 1083d0407baSopenharmony_ci#define CRU_CLKSEL_CON0 CRU_REG(0x0030) 1093d0407baSopenharmony_ci#define CRU_CLKSEL_CON1 CRU_REG(0x0034) 1103d0407baSopenharmony_ci#define DCLK_CVBS_4X_DIV_CON_MASK HIWORD_MASK(12, 8) 1113d0407baSopenharmony_ci#define DCLK_CVBS_4X_DIV_CON(x) HIWORD_UPDATE(x, 12, 8) 1123d0407baSopenharmony_ci#define CRU_CLKSEL_CON2 CRU_REG(0x0038) 1133d0407baSopenharmony_ci#define CRU_CLKSEL_CON3 CRU_REG(0x003c) 1143d0407baSopenharmony_ci#define CRU_GATE_CON0 CRU_REG(0x0040) 1153d0407baSopenharmony_ci#define CRU_SOFTRST_CON0 CRU_REG(0x0050) 1163d0407baSopenharmony_ci#define DRESETN_CVBS_1X_MASK HIWORD_MASK(10, 10) 1173d0407baSopenharmony_ci#define DRESETN_CVBS_1X(x) HIWORD_UPDATE(x, 10, 10) 1183d0407baSopenharmony_ci#define DRESETN_CVBS_4X_MASK HIWORD_MASK(9, 9) 1193d0407baSopenharmony_ci#define DRESETN_CVBS_4X(x) HIWORD_UPDATE(x, 9, 9) 1203d0407baSopenharmony_ci#define PRESETN_CVBS_MASK HIWORD_MASK(8, 8) 1213d0407baSopenharmony_ci#define PRESETN_CVBS(x) HIWORD_UPDATE(x, 8, 8) 1223d0407baSopenharmony_ci#define PRESETN_GRF_MASK HIWORD_MASK(3, 3) 1233d0407baSopenharmony_ci#define PRESETN_GRF(x) HIWORD_UPDATE(x, 3, 3) 1243d0407baSopenharmony_ci#define CRU_MAX_REGISTER CRU_SOFTRST_CON0 1253d0407baSopenharmony_ci 1263d0407baSopenharmony_ci#define TVE_REG(x) ((x) + 0x10000) 1273d0407baSopenharmony_ci#define BT656_DECODER_CTRL TVE_REG(0x3D00) 1283d0407baSopenharmony_ci#define BT656_DECODER_CROP TVE_REG(0x3D04) 1293d0407baSopenharmony_ci#define BT656_DECODER_SIZE TVE_REG(0x3D08) 1303d0407baSopenharmony_ci#define BT656_DECODER_HTOTAL_HS_END TVE_REG(0x3D0C) 1313d0407baSopenharmony_ci#define BT656_DECODER_VACT_ST_HACT_ST TVE_REG(0x3D10) 1323d0407baSopenharmony_ci#define BT656_DECODER_VTOTAL_VS_END TVE_REG(0x3D14) 1333d0407baSopenharmony_ci#define BT656_DECODER_VS_ST_END_F1 TVE_REG(0x3D18) 1343d0407baSopenharmony_ci#define BT656_DECODER_DBG_REG TVE_REG(0x3D1C) 1353d0407baSopenharmony_ci#define TVE_MODE_CTRL TVE_REG(0x3E00) 1363d0407baSopenharmony_ci#define TVE_HOR_TIMING1 TVE_REG(0x3E04) 1373d0407baSopenharmony_ci#define TVE_HOR_TIMING2 TVE_REG(0x3E08) 1383d0407baSopenharmony_ci#define TVE_HOR_TIMING3 TVE_REG(0x3E0C) 1393d0407baSopenharmony_ci#define TVE_SUB_CAR_FRQ TVE_REG(0x3E10) 1403d0407baSopenharmony_ci#define TVE_LUMA_FILTER1 TVE_REG(0x3E14) 1413d0407baSopenharmony_ci#define TVE_LUMA_FILTER2 TVE_REG(0x3E18) 1423d0407baSopenharmony_ci#define TVE_LUMA_FILTER3 TVE_REG(0x3E1C) 1433d0407baSopenharmony_ci#define TVE_LUMA_FILTER4 TVE_REG(0x3E20) 1443d0407baSopenharmony_ci#define TVE_LUMA_FILTER5 TVE_REG(0x3E24) 1453d0407baSopenharmony_ci#define TVE_LUMA_FILTER6 TVE_REG(0x3E28) 1463d0407baSopenharmony_ci#define TVE_LUMA_FILTER7 TVE_REG(0x3E2C) 1473d0407baSopenharmony_ci#define TVE_LUMA_FILTER8 TVE_REG(0x3E30) 1483d0407baSopenharmony_ci#define TVE_IMAGE_POSITION TVE_REG(0x3E34) 1493d0407baSopenharmony_ci#define TVE_ROUTING TVE_REG(0x3E38) 1503d0407baSopenharmony_ci#define TVE_SYNC_ADJUST TVE_REG(0x3E50) 1513d0407baSopenharmony_ci#define TVE_STATUS TVE_REG(0x3E54) 1523d0407baSopenharmony_ci#define TVE_CTRL TVE_REG(0x3E68) 1533d0407baSopenharmony_ci#define TVE_INTR_STATUS TVE_REG(0x3E6C) 1543d0407baSopenharmony_ci#define TVE_INTR_EN TVE_REG(0x3E70) 1553d0407baSopenharmony_ci#define TVE_INTR_CLR TVE_REG(0x3E74) 1563d0407baSopenharmony_ci#define TVE_COLOR_BUSRT_SAT TVE_REG(0x3E78) 1573d0407baSopenharmony_ci#define TVE_CHROMA_BANDWIDTH TVE_REG(0x3E8C) 1583d0407baSopenharmony_ci#define TVE_BRIGHTNESS_CONTRAST TVE_REG(0x3E90) 1593d0407baSopenharmony_ci#define TVE_ID TVE_REG(0x3E98) 1603d0407baSopenharmony_ci#define TVE_REVISION TVE_REG(0x3E9C) 1613d0407baSopenharmony_ci#define TVE_CLAMP TVE_REG(0x3EA0) 1623d0407baSopenharmony_ci#define TVE_MAX_REGISTER TVE_CLAMP 1633d0407baSopenharmony_ci 1643d0407baSopenharmony_cistruct rk630 { 1653d0407baSopenharmony_ci struct device *dev; 1663d0407baSopenharmony_ci struct i2c_client *client; 1673d0407baSopenharmony_ci struct regmap *grf; 1683d0407baSopenharmony_ci struct regmap *cru; 1693d0407baSopenharmony_ci struct regmap *tve; 1703d0407baSopenharmony_ci struct gpio_desc *reset_gpio; 1713d0407baSopenharmony_ci}; 1723d0407baSopenharmony_ci 1733d0407baSopenharmony_ciextern const struct regmap_config rk630_grf_regmap_config; 1743d0407baSopenharmony_ciextern const struct regmap_config rk630_cru_regmap_config; 1753d0407baSopenharmony_ciextern const struct regmap_config rk630_tve_regmap_config; 1763d0407baSopenharmony_ci 1773d0407baSopenharmony_ciint rk630_core_probe(struct rk630 *rk630); 1783d0407baSopenharmony_ciint rk630_core_remove(struct rk630 *rk630); 1793d0407baSopenharmony_ci 1803d0407baSopenharmony_ci#endif 181