| .. | .. |
|---|
| 13 | 13 | #include <linux/regmap.h> |
|---|
| 14 | 14 | #include <linux/mfd/core.h> |
|---|
| 15 | 15 | |
|---|
| 16 | | -#ifndef HIWORD_UPDATE |
|---|
| 17 | 16 | #define UPDATE(x, h, l) (((x) << (l)) & GENMASK((h), (l))) |
|---|
| 18 | 17 | #define HIWORD_MASK(h, l) ((GENMASK((h), (l)) << 16) | GENMASK((h), (l))) |
|---|
| 19 | 18 | #define HIWORD_UPDATE(v, h, l) ((((v) << (l)) & GENMASK((h), (l))) | (GENMASK((h), (l)) << 16)) |
|---|
| 20 | | -#endif |
|---|
| 21 | 19 | |
|---|
| 22 | 20 | #define RTC_REG(x) ((x) + 0x60000) |
|---|
| 23 | 21 | #define RTC_SET_SECONDS RTC_REG(0x0) |
|---|
| .. | .. |
|---|
| 63 | 61 | |
|---|
| 64 | 62 | #define GRF_REG(x) ((x) + 0x20000) |
|---|
| 65 | 63 | #define PLUMAGE_GRF_GPIO0A_IOMUX GRF_REG(0x0000) |
|---|
| 64 | +#define GPIO0A0_SEL_MASK HIWORD_MASK(1, 0) |
|---|
| 65 | +#define GPIO0A0_SEL(x) HIWORD_UPDATE(x, 1, 0) |
|---|
| 66 | +#define GPIO0A1_SEL_MASK HIWORD_MASK(3, 2) |
|---|
| 67 | +#define GPIO0A1_SEL(x) HIWORD_UPDATE(x, 3, 2) |
|---|
| 68 | +#define GPIO0A2_SEL_MASK HIWORD_MASK(5, 4) |
|---|
| 69 | +#define GPIO0A2_SEL(x) HIWORD_UPDATE(x, 5, 4) |
|---|
| 70 | +#define GPIO0A3_SEL_MASK HIWORD_MASK(7, 6) |
|---|
| 71 | +#define GPIO0A3_SEL(x) HIWORD_UPDATE(x, 7, 6) |
|---|
| 72 | +#define GPIO0A4_SEL_MASK HIWORD_MASK(9, 8) |
|---|
| 73 | +#define GPIO0A4_SEL(x) HIWORD_UPDATE(x, 9, 8) |
|---|
| 74 | +#define GPIO0A5_SEL_MASK HIWORD_MASK(11, 10) |
|---|
| 75 | +#define GPIO0A5_SEL(x) HIWORD_UPDATE(x, 11, 10) |
|---|
| 76 | +#define GPIO0A6_SEL_MASK HIWORD_MASK(13, 12) |
|---|
| 77 | +#define GPIO0A6_SEL(x) HIWORD_UPDATE(x, 13, 12) |
|---|
| 78 | +#define GPIO0A7_SEL_MASK HIWORD_MASK(15, 14) |
|---|
| 79 | +#define GPIO0A7_SEL(x) HIWORD_UPDATE(x, 15, 14) |
|---|
| 66 | 80 | #define PLUMAGE_GRF_GPIO0B_IOMUX GRF_REG(0x0008) |
|---|
| 81 | +#define GPIO0B0_SEL_MASK HIWORD_MASK(1, 0) |
|---|
| 82 | +#define GPIO0B0_SEL(x) HIWORD_UPDATE(x, 1, 0) |
|---|
| 67 | 83 | #define PLUMAGE_GRF_GPIO0C_IOMUX GRF_REG(0x0010) |
|---|
| 68 | 84 | #define PLUMAGE_GRF_GPIO0D_IOMUX GRF_REG(0x0018) |
|---|
| 69 | 85 | #define PLUMAGE_GRF_GPIO1A_IOMUX GRF_REG(0x0020) |
|---|
| 70 | 86 | #define PLUMAGE_GRF_GPIO1B_IOMUX GRF_REG(0x0028) |
|---|
| 71 | | -#define PIN0_SEL_MASK HIWORD_MASK(1, 0) |
|---|
| 72 | | -#define PIN0_SEL(x) HIWORD_UPDATE(x, 1, 0) |
|---|
| 73 | | -#define PIN1_SEL_MASK HIWORD_MASK(3, 2) |
|---|
| 74 | | -#define PIN1_SEL(x) HIWORD_UPDATE(x, 3, 2) |
|---|
| 75 | | -#define PIN2_SEL_MASK HIWORD_MASK(5, 4) |
|---|
| 76 | | -#define PIN2_SEL(x) HIWORD_UPDATE(x, 5, 4) |
|---|
| 77 | | -#define PIN3_SEL_MASK HIWORD_MASK(7, 6) |
|---|
| 78 | | -#define PIN3_SEL(x) HIWORD_UPDATE(x, 7, 6) |
|---|
| 79 | | -#define PIN4_SEL_MASK HIWORD_MASK(9, 8) |
|---|
| 80 | | -#define PIN4_SEL(x) HIWORD_UPDATE(x, 9, 8) |
|---|
| 81 | | -#define PIN5_SEL_MASK HIWORD_MASK(11, 10) |
|---|
| 82 | | -#define PIN5_SEL(x) HIWORD_UPDATE(x, 11, 10) |
|---|
| 83 | | -#define PIN6_SEL_MASK HIWORD_MASK(13, 12) |
|---|
| 84 | | -#define PIN6_SEL(x) HIWORD_UPDATE(x, 13, 12) |
|---|
| 85 | | -#define PIN7_SEL_MASK HIWORD_MASK(15, 14) |
|---|
| 86 | | -#define PIN7_SEL(x) HIWORD_UPDATE(x, 15, 14) |
|---|
| 87 | 87 | #define PLUMAGE_GRF_GPIO0A_P GRF_REG(0x0080) |
|---|
| 88 | 88 | #define PLUMAGE_GRF_GPIO0B_P GRF_REG(0x0084) |
|---|
| 89 | 89 | #define PLUMAGE_GRF_GPIO0C_P GRF_REG(0x0088) |
|---|
| .. | .. |
|---|
| 110 | 110 | #define PLUMAGE_GRF_SOC_CON1 GRF_REG(0x0404) |
|---|
| 111 | 111 | #define PLUMAGE_GRF_SOC_CON2 GRF_REG(0x0408) |
|---|
| 112 | 112 | #define PLUMAGE_GRF_SOC_CON3 GRF_REG(0x040C) |
|---|
| 113 | | -#define DCLK_UPSAMPLE_2X4X_MASK HIWORD_MASK(15, 15) |
|---|
| 114 | | -#define DCLK_UPSAMPLE_2X4X(x) HIWORD_UPDATE(x, 15, 15) |
|---|
| 115 | 113 | #define VDAC_ENVBG_MASK HIWORD_MASK(12, 12) |
|---|
| 116 | 114 | #define VDAC_ENVBG(x) HIWORD_UPDATE(x, 12, 12) |
|---|
| 117 | 115 | #define VDAC_ENSC0_MASK HIWORD_MASK(11, 11) |
|---|
| .. | .. |
|---|
| 164 | 162 | #define CRU_CLKSEL_CON2 CRU_REG(0x0038) |
|---|
| 165 | 163 | #define CRU_CLKSEL_CON3 CRU_REG(0x003c) |
|---|
| 166 | 164 | #define CRU_GATE_CON0 CRU_REG(0x0040) |
|---|
| 167 | | -#define PCLK_EFUSE_EN_MASK BIT(14 + 16) |
|---|
| 168 | | -#define PCLK_EFUSE_DISABLE BIT(14) |
|---|
| 169 | | -#define DCLK_CVBS_1X_PLL_CLK_GATE_MASK HIWORD_MASK(12, 12) |
|---|
| 170 | | -#define DCLK_CVBS_1X_PLL_CLK_GATE(x) HIWORD_UPDATE(x, 12, 12) |
|---|
| 171 | | -#define DCLK_CVBS_4X_PLL_CLK_GATE_MASK HIWORD_MASK(11, 11) |
|---|
| 172 | | -#define DCLK_CVBS_4X_PLL_CLK_GATE(x) HIWORD_UPDATE(x, 11, 11) |
|---|
| 173 | 165 | #define CRU_SOFTRST_CON0 CRU_REG(0x0050) |
|---|
| 174 | 166 | #define DRESETN_CVBS_1X_MASK HIWORD_MASK(10, 10) |
|---|
| 175 | 167 | #define DRESETN_CVBS_1X(x) HIWORD_UPDATE(x, 10, 10) |
|---|
| .. | .. |
|---|
| 180 | 172 | #define PRESETN_GRF_MASK HIWORD_MASK(3, 3) |
|---|
| 181 | 173 | #define PRESETN_GRF(x) HIWORD_UPDATE(x, 3, 3) |
|---|
| 182 | 174 | #define CRU_MAX_REGISTER CRU_SOFTRST_CON0 |
|---|
| 183 | | - |
|---|
| 184 | | -#define GPIO0_BASE 0x30000 |
|---|
| 185 | | -#define GPIO1_BASE 0x40000 |
|---|
| 186 | | -#define GPIO_SWPORT_DR_L 0x00 |
|---|
| 187 | | -#define GPIO_SWPORT_DR_H 0x04 |
|---|
| 188 | | -#define GPIO_SWPORT_DDR_L 0x08 |
|---|
| 189 | | -#define GPIO_SWPORT_DDR_H 0x0c |
|---|
| 190 | | -#define GPIO_INT_EN_L 0x10 |
|---|
| 191 | | -#define GPIO_INT_EN_H 0x14 |
|---|
| 192 | | -#define GPIO_INT_MASK_L 0x18 |
|---|
| 193 | | -#define GPIO_INT_MASK_H 0x1c |
|---|
| 194 | | -#define GPIO_INT_TYPE_L 0x20 |
|---|
| 195 | | -#define GPIO_INT_TYPE_H 0x24 |
|---|
| 196 | | -#define GPIO_INT_POLARITY_L 0x28 |
|---|
| 197 | | -#define GPIO_INT_POLARITY_H 0x2c |
|---|
| 198 | | -#define GPIO_INT_BOTHEDGE_L 0x30 |
|---|
| 199 | | -#define GPIO_INT_BOTHEDGE_H 0x34 |
|---|
| 200 | | -#define GPIO_DEBOUNCE_L 0x38 |
|---|
| 201 | | -#define GPIO_DEBOUNCE_H 0x3c |
|---|
| 202 | | -#define GPIO_DBCLK_DIV_EN_L 0x40 |
|---|
| 203 | | -#define GPIO_DBCLK_DIV_EN_H 0x44 |
|---|
| 204 | | -#define GPIO_DBCLK_DIV_CON 0x48 |
|---|
| 205 | | -#define GPIO_INT_STATUS 0x50 |
|---|
| 206 | | -#define GPIO_INT_RAWSTATUS 0x58 |
|---|
| 207 | | -#define GPIO_PORT_EOI_L 0x60 |
|---|
| 208 | | -#define GPIO_PORT_EOI_H 0x64 |
|---|
| 209 | | -#define GPIO_EXT_PORT 0x70 |
|---|
| 210 | | -#define GPIO_VER_ID 0x78 |
|---|
| 211 | | -#define GPIO_MAX_REGISTER (GPIO1_BASE + GPIO_VER_ID) |
|---|
| 212 | 175 | |
|---|
| 213 | 176 | #define TVE_REG(x) ((x) + 0x10000) |
|---|
| 214 | 177 | #define BT656_DECODER_CTRL TVE_REG(0x3D00) |
|---|
| .. | .. |
|---|
| 258 | 221 | struct rk630 { |
|---|
| 259 | 222 | struct device *dev; |
|---|
| 260 | 223 | struct i2c_client *client; |
|---|
| 261 | | - struct clk *ref_clk; |
|---|
| 262 | 224 | struct regmap *grf; |
|---|
| 263 | | - struct regmap *pinctrl; |
|---|
| 264 | 225 | struct regmap *cru; |
|---|
| 265 | 226 | struct regmap *tve; |
|---|
| 266 | 227 | struct regmap *rtc; |
|---|
| 267 | | - struct regmap *efuse; |
|---|
| 268 | | - struct regmap *codec; |
|---|
| 269 | 228 | struct gpio_desc *reset_gpio; |
|---|
| 270 | 229 | int irq; |
|---|
| 271 | 230 | struct regmap_irq_chip_data *irq_data; |
|---|
| 272 | 231 | const struct regmap_irq_chip *regmap_irq_chip; |
|---|
| 273 | 232 | }; |
|---|
| 274 | 233 | |
|---|
| 275 | | -extern const struct regmap_config rk630_efuse_regmap_config; |
|---|
| 276 | 234 | extern const struct regmap_config rk630_rtc_regmap_config; |
|---|
| 277 | 235 | extern const struct regmap_config rk630_grf_regmap_config; |
|---|
| 278 | | -extern const struct regmap_config rk630_pinctrl_regmap_config; |
|---|
| 279 | 236 | extern const struct regmap_config rk630_cru_regmap_config; |
|---|
| 280 | 237 | extern const struct regmap_config rk630_tve_regmap_config; |
|---|
| 281 | | -extern const struct regmap_config rk630_codec_regmap_config; |
|---|
| 282 | 238 | |
|---|
| 283 | 239 | int rk630_core_probe(struct rk630 *rk630); |
|---|
| 284 | 240 | int rk630_core_remove(struct rk630 *rk630); |
|---|