0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 #include <linux/bitfield.h>
0022 #include <linux/clk.h>
0023 #include <linux/device.h>
0024 #include <linux/gpio/consumer.h>
0025 #include <linux/i2c.h>
0026 #include <linux/kernel.h>
0027 #include <linux/media-bus-format.h>
0028 #include <linux/module.h>
0029 #include <linux/regmap.h>
0030 #include <linux/slab.h>
0031
0032 #include <drm/display/drm_dp_helper.h>
0033 #include <drm/drm_atomic_helper.h>
0034 #include <drm/drm_bridge.h>
0035 #include <drm/drm_edid.h>
0036 #include <drm/drm_mipi_dsi.h>
0037 #include <drm/drm_of.h>
0038 #include <drm/drm_panel.h>
0039 #include <drm/drm_print.h>
0040 #include <drm/drm_probe_helper.h>
0041
0042
0043
0044
0045 #define PPI_STARTPPI 0x0104
0046 #define PPI_LPTXTIMECNT 0x0114
0047 #define LPX_PERIOD 3
0048 #define PPI_LANEENABLE 0x0134
0049 #define PPI_TX_RX_TA 0x013c
0050 #define TTA_GET 0x40000
0051 #define TTA_SURE 6
0052 #define PPI_D0S_ATMR 0x0144
0053 #define PPI_D1S_ATMR 0x0148
0054 #define PPI_D0S_CLRSIPOCOUNT 0x0164
0055 #define PPI_D1S_CLRSIPOCOUNT 0x0168
0056 #define PPI_D2S_CLRSIPOCOUNT 0x016c
0057 #define PPI_D3S_CLRSIPOCOUNT 0x0170
0058 #define PPI_START_FUNCTION BIT(0)
0059
0060
0061 #define DSI_STARTDSI 0x0204
0062 #define DSI_LANEENABLE 0x0210
0063 #define DSI_RX_START BIT(0)
0064
0065
0066 #define LANEENABLE_CLEN BIT(0)
0067 #define LANEENABLE_L0EN BIT(1)
0068 #define LANEENABLE_L1EN BIT(2)
0069 #define LANEENABLE_L2EN BIT(1)
0070 #define LANEENABLE_L3EN BIT(2)
0071
0072
0073 #define DPIPXLFMT 0x0440
0074 #define VS_POL_ACTIVE_LOW (1 << 10)
0075 #define HS_POL_ACTIVE_LOW (1 << 9)
0076 #define DE_POL_ACTIVE_HIGH (0 << 8)
0077 #define SUB_CFG_TYPE_CONFIG1 (0 << 2)
0078 #define SUB_CFG_TYPE_CONFIG2 (1 << 2)
0079 #define SUB_CFG_TYPE_CONFIG3 (2 << 2)
0080 #define DPI_BPP_RGB888 (0 << 0)
0081 #define DPI_BPP_RGB666 (1 << 0)
0082 #define DPI_BPP_RGB565 (2 << 0)
0083
0084
0085 #define POCTRL 0x0448
0086 #define POCTRL_S2P BIT(7)
0087 #define POCTRL_PCLK_POL BIT(3)
0088 #define POCTRL_VS_POL BIT(2)
0089 #define POCTRL_HS_POL BIT(1)
0090 #define POCTRL_DE_POL BIT(0)
0091
0092
0093 #define VPCTRL0 0x0450
0094 #define VSDELAY GENMASK(31, 20)
0095 #define OPXLFMT_RGB666 (0 << 8)
0096 #define OPXLFMT_RGB888 (1 << 8)
0097 #define FRMSYNC_DISABLED (0 << 4)
0098 #define FRMSYNC_ENABLED (1 << 4)
0099 #define MSF_DISABLED (0 << 0)
0100 #define MSF_ENABLED (1 << 0)
0101 #define HTIM01 0x0454
0102 #define HPW GENMASK(8, 0)
0103 #define HBPR GENMASK(24, 16)
0104 #define HTIM02 0x0458
0105 #define HDISPR GENMASK(10, 0)
0106 #define HFPR GENMASK(24, 16)
0107 #define VTIM01 0x045c
0108 #define VSPR GENMASK(7, 0)
0109 #define VBPR GENMASK(23, 16)
0110 #define VTIM02 0x0460
0111 #define VFPR GENMASK(23, 16)
0112 #define VDISPR GENMASK(10, 0)
0113 #define VFUEN0 0x0464
0114 #define VFUEN BIT(0)
0115
0116
0117 #define TC_IDREG 0x0500
0118 #define SYSSTAT 0x0508
0119 #define SYSCTRL 0x0510
0120 #define DP0_AUDSRC_NO_INPUT (0 << 3)
0121 #define DP0_AUDSRC_I2S_RX (1 << 3)
0122 #define DP0_VIDSRC_NO_INPUT (0 << 0)
0123 #define DP0_VIDSRC_DSI_RX (1 << 0)
0124 #define DP0_VIDSRC_DPI_RX (2 << 0)
0125 #define DP0_VIDSRC_COLOR_BAR (3 << 0)
0126 #define SYSRSTENB 0x050c
0127 #define ENBI2C (1 << 0)
0128 #define ENBLCD0 (1 << 2)
0129 #define ENBBM (1 << 3)
0130 #define ENBDSIRX (1 << 4)
0131 #define ENBREG (1 << 5)
0132 #define ENBHDCP (1 << 8)
0133 #define GPIOM 0x0540
0134 #define GPIOC 0x0544
0135 #define GPIOO 0x0548
0136 #define GPIOI 0x054c
0137 #define INTCTL_G 0x0560
0138 #define INTSTS_G 0x0564
0139
0140 #define INT_SYSERR BIT(16)
0141 #define INT_GPIO_H(x) (1 << (x == 0 ? 2 : 10))
0142 #define INT_GPIO_LC(x) (1 << (x == 0 ? 3 : 11))
0143
0144 #define INT_GP0_LCNT 0x0584
0145 #define INT_GP1_LCNT 0x0588
0146
0147
0148 #define DP0CTL 0x0600
0149 #define VID_MN_GEN BIT(6)
0150 #define EF_EN BIT(5)
0151 #define VID_EN BIT(1)
0152 #define DP_EN BIT(0)
0153
0154
0155 #define DP0_VIDMNGEN0 0x0610
0156 #define DP0_VIDMNGEN1 0x0614
0157 #define DP0_VMNGENSTATUS 0x0618
0158
0159
0160 #define DP0_SECSAMPLE 0x0640
0161 #define DP0_VIDSYNCDELAY 0x0644
0162 #define VID_SYNC_DLY GENMASK(15, 0)
0163 #define THRESH_DLY GENMASK(31, 16)
0164
0165 #define DP0_TOTALVAL 0x0648
0166 #define H_TOTAL GENMASK(15, 0)
0167 #define V_TOTAL GENMASK(31, 16)
0168 #define DP0_STARTVAL 0x064c
0169 #define H_START GENMASK(15, 0)
0170 #define V_START GENMASK(31, 16)
0171 #define DP0_ACTIVEVAL 0x0650
0172 #define H_ACT GENMASK(15, 0)
0173 #define V_ACT GENMASK(31, 16)
0174
0175 #define DP0_SYNCVAL 0x0654
0176 #define VS_WIDTH GENMASK(30, 16)
0177 #define HS_WIDTH GENMASK(14, 0)
0178 #define SYNCVAL_HS_POL_ACTIVE_LOW (1 << 15)
0179 #define SYNCVAL_VS_POL_ACTIVE_LOW (1 << 31)
0180 #define DP0_MISC 0x0658
0181 #define TU_SIZE_RECOMMENDED (63)
0182 #define MAX_TU_SYMBOL GENMASK(28, 23)
0183 #define TU_SIZE GENMASK(21, 16)
0184 #define BPC_6 (0 << 5)
0185 #define BPC_8 (1 << 5)
0186
0187
0188 #define DP0_AUXCFG0 0x0660
0189 #define DP0_AUXCFG0_BSIZE GENMASK(11, 8)
0190 #define DP0_AUXCFG0_ADDR_ONLY BIT(4)
0191 #define DP0_AUXCFG1 0x0664
0192 #define AUX_RX_FILTER_EN BIT(16)
0193
0194 #define DP0_AUXADDR 0x0668
0195 #define DP0_AUXWDATA(i) (0x066c + (i) * 4)
0196 #define DP0_AUXRDATA(i) (0x067c + (i) * 4)
0197 #define DP0_AUXSTATUS 0x068c
0198 #define AUX_BYTES GENMASK(15, 8)
0199 #define AUX_STATUS GENMASK(7, 4)
0200 #define AUX_TIMEOUT BIT(1)
0201 #define AUX_BUSY BIT(0)
0202 #define DP0_AUXI2CADR 0x0698
0203
0204
0205 #define DP0_SRCCTRL 0x06a0
0206 #define DP0_SRCCTRL_SCRMBLDIS BIT(13)
0207 #define DP0_SRCCTRL_EN810B BIT(12)
0208 #define DP0_SRCCTRL_NOTP (0 << 8)
0209 #define DP0_SRCCTRL_TP1 (1 << 8)
0210 #define DP0_SRCCTRL_TP2 (2 << 8)
0211 #define DP0_SRCCTRL_LANESKEW BIT(7)
0212 #define DP0_SRCCTRL_SSCG BIT(3)
0213 #define DP0_SRCCTRL_LANES_1 (0 << 2)
0214 #define DP0_SRCCTRL_LANES_2 (1 << 2)
0215 #define DP0_SRCCTRL_BW27 (1 << 1)
0216 #define DP0_SRCCTRL_BW162 (0 << 1)
0217 #define DP0_SRCCTRL_AUTOCORRECT BIT(0)
0218 #define DP0_LTSTAT 0x06d0
0219 #define LT_LOOPDONE BIT(13)
0220 #define LT_STATUS_MASK (0x1f << 8)
0221 #define LT_CHANNEL1_EQ_BITS (DP_CHANNEL_EQ_BITS << 4)
0222 #define LT_INTERLANE_ALIGN_DONE BIT(3)
0223 #define LT_CHANNEL0_EQ_BITS (DP_CHANNEL_EQ_BITS)
0224 #define DP0_SNKLTCHGREQ 0x06d4
0225 #define DP0_LTLOOPCTRL 0x06d8
0226 #define DP0_SNKLTCTRL 0x06e4
0227
0228 #define DP1_SRCCTRL 0x07a0
0229
0230
0231 #define DP_PHY_CTRL 0x0800
0232 #define DP_PHY_RST BIT(28)
0233 #define BGREN BIT(25)
0234 #define PWR_SW_EN BIT(24)
0235 #define PHY_M1_RST BIT(12)
0236 #define PHY_RDY BIT(16)
0237 #define PHY_M0_RST BIT(8)
0238 #define PHY_2LANE BIT(2)
0239 #define PHY_A0_EN BIT(1)
0240 #define PHY_M0_EN BIT(0)
0241
0242
0243 #define DP0_PLLCTRL 0x0900
0244 #define DP1_PLLCTRL 0x0904
0245 #define PXL_PLLCTRL 0x0908
0246 #define PLLUPDATE BIT(2)
0247 #define PLLBYP BIT(1)
0248 #define PLLEN BIT(0)
0249 #define PXL_PLLPARAM 0x0914
0250 #define IN_SEL_REFCLK (0 << 14)
0251 #define SYS_PLLPARAM 0x0918
0252 #define REF_FREQ_38M4 (0 << 8)
0253 #define REF_FREQ_19M2 (1 << 8)
0254 #define REF_FREQ_26M (2 << 8)
0255 #define REF_FREQ_13M (3 << 8)
0256 #define SYSCLK_SEL_LSCLK (0 << 4)
0257 #define LSCLK_DIV_1 (0 << 0)
0258 #define LSCLK_DIV_2 (1 << 0)
0259
0260
0261 #define TSTCTL 0x0a00
0262 #define COLOR_R GENMASK(31, 24)
0263 #define COLOR_G GENMASK(23, 16)
0264 #define COLOR_B GENMASK(15, 8)
0265 #define ENI2CFILTER BIT(4)
0266 #define COLOR_BAR_MODE GENMASK(1, 0)
0267 #define COLOR_BAR_MODE_BARS 2
0268 #define PLL_DBG 0x0a04
0269
0270 static bool tc_test_pattern;
0271 module_param_named(test, tc_test_pattern, bool, 0644);
0272
0273 struct tc_edp_link {
0274 u8 dpcd[DP_RECEIVER_CAP_SIZE];
0275 unsigned int rate;
0276 u8 num_lanes;
0277 u8 assr;
0278 bool scrambler_dis;
0279 bool spread;
0280 };
0281
0282 struct tc_data {
0283 struct device *dev;
0284 struct regmap *regmap;
0285 struct drm_dp_aux aux;
0286
0287 struct drm_bridge bridge;
0288 struct drm_bridge *panel_bridge;
0289 struct drm_connector connector;
0290
0291 struct mipi_dsi_device *dsi;
0292
0293
0294 struct tc_edp_link link;
0295
0296
0297 struct drm_display_mode mode;
0298
0299 u32 rev;
0300 u8 assr;
0301
0302 struct gpio_desc *sd_gpio;
0303 struct gpio_desc *reset_gpio;
0304 struct clk *refclk;
0305
0306
0307 bool have_irq;
0308
0309
0310 bool input_connector_dsi;
0311
0312
0313 int hpd_pin;
0314 };
0315
0316 static inline struct tc_data *aux_to_tc(struct drm_dp_aux *a)
0317 {
0318 return container_of(a, struct tc_data, aux);
0319 }
0320
0321 static inline struct tc_data *bridge_to_tc(struct drm_bridge *b)
0322 {
0323 return container_of(b, struct tc_data, bridge);
0324 }
0325
0326 static inline struct tc_data *connector_to_tc(struct drm_connector *c)
0327 {
0328 return container_of(c, struct tc_data, connector);
0329 }
0330
0331 static inline int tc_poll_timeout(struct tc_data *tc, unsigned int addr,
0332 unsigned int cond_mask,
0333 unsigned int cond_value,
0334 unsigned long sleep_us, u64 timeout_us)
0335 {
0336 unsigned int val;
0337
0338 return regmap_read_poll_timeout(tc->regmap, addr, val,
0339 (val & cond_mask) == cond_value,
0340 sleep_us, timeout_us);
0341 }
0342
0343 static int tc_aux_wait_busy(struct tc_data *tc)
0344 {
0345 return tc_poll_timeout(tc, DP0_AUXSTATUS, AUX_BUSY, 0, 100, 100000);
0346 }
0347
0348 static int tc_aux_write_data(struct tc_data *tc, const void *data,
0349 size_t size)
0350 {
0351 u32 auxwdata[DP_AUX_MAX_PAYLOAD_BYTES / sizeof(u32)] = { 0 };
0352 int ret, count = ALIGN(size, sizeof(u32));
0353
0354 memcpy(auxwdata, data, size);
0355
0356 ret = regmap_raw_write(tc->regmap, DP0_AUXWDATA(0), auxwdata, count);
0357 if (ret)
0358 return ret;
0359
0360 return size;
0361 }
0362
0363 static int tc_aux_read_data(struct tc_data *tc, void *data, size_t size)
0364 {
0365 u32 auxrdata[DP_AUX_MAX_PAYLOAD_BYTES / sizeof(u32)];
0366 int ret, count = ALIGN(size, sizeof(u32));
0367
0368 ret = regmap_raw_read(tc->regmap, DP0_AUXRDATA(0), auxrdata, count);
0369 if (ret)
0370 return ret;
0371
0372 memcpy(data, auxrdata, size);
0373
0374 return size;
0375 }
0376
0377 static u32 tc_auxcfg0(struct drm_dp_aux_msg *msg, size_t size)
0378 {
0379 u32 auxcfg0 = msg->request;
0380
0381 if (size)
0382 auxcfg0 |= FIELD_PREP(DP0_AUXCFG0_BSIZE, size - 1);
0383 else
0384 auxcfg0 |= DP0_AUXCFG0_ADDR_ONLY;
0385
0386 return auxcfg0;
0387 }
0388
0389 static ssize_t tc_aux_transfer(struct drm_dp_aux *aux,
0390 struct drm_dp_aux_msg *msg)
0391 {
0392 struct tc_data *tc = aux_to_tc(aux);
0393 size_t size = min_t(size_t, DP_AUX_MAX_PAYLOAD_BYTES - 1, msg->size);
0394 u8 request = msg->request & ~DP_AUX_I2C_MOT;
0395 u32 auxstatus;
0396 int ret;
0397
0398 ret = tc_aux_wait_busy(tc);
0399 if (ret)
0400 return ret;
0401
0402 switch (request) {
0403 case DP_AUX_NATIVE_READ:
0404 case DP_AUX_I2C_READ:
0405 break;
0406 case DP_AUX_NATIVE_WRITE:
0407 case DP_AUX_I2C_WRITE:
0408 if (size) {
0409 ret = tc_aux_write_data(tc, msg->buffer, size);
0410 if (ret < 0)
0411 return ret;
0412 }
0413 break;
0414 default:
0415 return -EINVAL;
0416 }
0417
0418
0419 ret = regmap_write(tc->regmap, DP0_AUXADDR, msg->address);
0420 if (ret)
0421 return ret;
0422
0423 ret = regmap_write(tc->regmap, DP0_AUXCFG0, tc_auxcfg0(msg, size));
0424 if (ret)
0425 return ret;
0426
0427 ret = tc_aux_wait_busy(tc);
0428 if (ret)
0429 return ret;
0430
0431 ret = regmap_read(tc->regmap, DP0_AUXSTATUS, &auxstatus);
0432 if (ret)
0433 return ret;
0434
0435 if (auxstatus & AUX_TIMEOUT)
0436 return -ETIMEDOUT;
0437
0438
0439
0440
0441
0442
0443 if (size)
0444 size = FIELD_GET(AUX_BYTES, auxstatus);
0445 msg->reply = FIELD_GET(AUX_STATUS, auxstatus);
0446
0447 switch (request) {
0448 case DP_AUX_NATIVE_READ:
0449 case DP_AUX_I2C_READ:
0450 if (size)
0451 return tc_aux_read_data(tc, msg->buffer, size);
0452 break;
0453 }
0454
0455 return size;
0456 }
0457
0458 static const char * const training_pattern1_errors[] = {
0459 "No errors",
0460 "Aux write error",
0461 "Aux read error",
0462 "Max voltage reached error",
0463 "Loop counter expired error",
0464 "res", "res", "res"
0465 };
0466
0467 static const char * const training_pattern2_errors[] = {
0468 "No errors",
0469 "Aux write error",
0470 "Aux read error",
0471 "Clock recovery failed error",
0472 "Loop counter expired error",
0473 "res", "res", "res"
0474 };
0475
0476 static u32 tc_srcctrl(struct tc_data *tc)
0477 {
0478
0479
0480
0481
0482 u32 reg = DP0_SRCCTRL_NOTP | DP0_SRCCTRL_LANESKEW | DP0_SRCCTRL_EN810B;
0483
0484 if (tc->link.scrambler_dis)
0485 reg |= DP0_SRCCTRL_SCRMBLDIS;
0486 if (tc->link.spread)
0487 reg |= DP0_SRCCTRL_SSCG;
0488 if (tc->link.num_lanes == 2)
0489 reg |= DP0_SRCCTRL_LANES_2;
0490 if (tc->link.rate != 162000)
0491 reg |= DP0_SRCCTRL_BW27;
0492 return reg;
0493 }
0494
0495 static int tc_pllupdate(struct tc_data *tc, unsigned int pllctrl)
0496 {
0497 int ret;
0498
0499 ret = regmap_write(tc->regmap, pllctrl, PLLUPDATE | PLLEN);
0500 if (ret)
0501 return ret;
0502
0503
0504 usleep_range(3000, 6000);
0505
0506 return 0;
0507 }
0508
0509 static int tc_pxl_pll_en(struct tc_data *tc, u32 refclk, u32 pixelclock)
0510 {
0511 int ret;
0512 int i_pre, best_pre = 1;
0513 int i_post, best_post = 1;
0514 int div, best_div = 1;
0515 int mul, best_mul = 1;
0516 int delta, best_delta;
0517 int ext_div[] = {1, 2, 3, 5, 7};
0518 int clk_min, clk_max;
0519 int best_pixelclock = 0;
0520 int vco_hi = 0;
0521 u32 pxl_pllparam;
0522
0523
0524
0525
0526
0527
0528 if (tc->bridge.type == DRM_MODE_CONNECTOR_DPI) {
0529 clk_min = 0;
0530 clk_max = 100000000;
0531 } else {
0532 clk_min = 150000000;
0533 clk_max = 650000000;
0534 }
0535
0536 dev_dbg(tc->dev, "PLL: requested %d pixelclock, ref %d\n", pixelclock,
0537 refclk);
0538 best_delta = pixelclock;
0539
0540 for (i_pre = 0; i_pre < ARRAY_SIZE(ext_div); i_pre++) {
0541
0542
0543
0544
0545 if (refclk / ext_div[i_pre] < 1000000)
0546 continue;
0547 for (i_post = 0; i_post < ARRAY_SIZE(ext_div); i_post++) {
0548 for (div = 1; div <= 16; div++) {
0549 u32 clk;
0550 u64 tmp;
0551
0552 tmp = pixelclock * ext_div[i_pre] *
0553 ext_div[i_post] * div;
0554 do_div(tmp, refclk);
0555 mul = tmp;
0556
0557
0558 if ((mul < 1) || (mul > 128))
0559 continue;
0560
0561 clk = (refclk / ext_div[i_pre] / div) * mul;
0562 if ((clk > clk_max) || (clk < clk_min))
0563 continue;
0564
0565 clk = clk / ext_div[i_post];
0566 delta = clk - pixelclock;
0567
0568 if (abs(delta) < abs(best_delta)) {
0569 best_pre = i_pre;
0570 best_post = i_post;
0571 best_div = div;
0572 best_mul = mul;
0573 best_delta = delta;
0574 best_pixelclock = clk;
0575 }
0576 }
0577 }
0578 }
0579 if (best_pixelclock == 0) {
0580 dev_err(tc->dev, "Failed to calc clock for %d pixelclock\n",
0581 pixelclock);
0582 return -EINVAL;
0583 }
0584
0585 dev_dbg(tc->dev, "PLL: got %d, delta %d\n", best_pixelclock,
0586 best_delta);
0587 dev_dbg(tc->dev, "PLL: %d / %d / %d * %d / %d\n", refclk,
0588 ext_div[best_pre], best_div, best_mul, ext_div[best_post]);
0589
0590
0591 if (refclk / ext_div[best_pre] / best_div * best_mul >= 300000000)
0592 vco_hi = 1;
0593
0594 if (best_div == 16)
0595 best_div = 0;
0596 if (best_mul == 128)
0597 best_mul = 0;
0598
0599
0600 ret = regmap_write(tc->regmap, PXL_PLLCTRL, PLLBYP | PLLEN);
0601 if (ret)
0602 return ret;
0603
0604 pxl_pllparam = vco_hi << 24;
0605 pxl_pllparam |= ext_div[best_pre] << 20;
0606 pxl_pllparam |= ext_div[best_post] << 16;
0607 pxl_pllparam |= IN_SEL_REFCLK;
0608 pxl_pllparam |= best_div << 8;
0609 pxl_pllparam |= best_mul;
0610
0611 ret = regmap_write(tc->regmap, PXL_PLLPARAM, pxl_pllparam);
0612 if (ret)
0613 return ret;
0614
0615
0616 return tc_pllupdate(tc, PXL_PLLCTRL);
0617 }
0618
0619 static int tc_pxl_pll_dis(struct tc_data *tc)
0620 {
0621
0622 return regmap_write(tc->regmap, PXL_PLLCTRL, PLLBYP);
0623 }
0624
0625 static int tc_stream_clock_calc(struct tc_data *tc)
0626 {
0627
0628
0629
0630
0631
0632
0633
0634
0635
0636
0637
0638
0639
0640
0641
0642 return regmap_write(tc->regmap, DP0_VIDMNGEN1, 32768);
0643 }
0644
0645 static int tc_set_syspllparam(struct tc_data *tc)
0646 {
0647 unsigned long rate;
0648 u32 pllparam = SYSCLK_SEL_LSCLK | LSCLK_DIV_2;
0649
0650 rate = clk_get_rate(tc->refclk);
0651 switch (rate) {
0652 case 38400000:
0653 pllparam |= REF_FREQ_38M4;
0654 break;
0655 case 26000000:
0656 pllparam |= REF_FREQ_26M;
0657 break;
0658 case 19200000:
0659 pllparam |= REF_FREQ_19M2;
0660 break;
0661 case 13000000:
0662 pllparam |= REF_FREQ_13M;
0663 break;
0664 default:
0665 dev_err(tc->dev, "Invalid refclk rate: %lu Hz\n", rate);
0666 return -EINVAL;
0667 }
0668
0669 return regmap_write(tc->regmap, SYS_PLLPARAM, pllparam);
0670 }
0671
0672 static int tc_aux_link_setup(struct tc_data *tc)
0673 {
0674 int ret;
0675 u32 dp0_auxcfg1;
0676
0677
0678 ret = tc_set_syspllparam(tc);
0679 if (ret)
0680 goto err;
0681
0682 ret = regmap_write(tc->regmap, DP_PHY_CTRL,
0683 BGREN | PWR_SW_EN | PHY_A0_EN);
0684 if (ret)
0685 goto err;
0686
0687
0688
0689
0690 ret = tc_pllupdate(tc, DP0_PLLCTRL);
0691 if (ret)
0692 goto err;
0693
0694 ret = tc_pllupdate(tc, DP1_PLLCTRL);
0695 if (ret)
0696 goto err;
0697
0698 ret = tc_poll_timeout(tc, DP_PHY_CTRL, PHY_RDY, PHY_RDY, 100, 100000);
0699 if (ret == -ETIMEDOUT) {
0700 dev_err(tc->dev, "Timeout waiting for PHY to become ready");
0701 return ret;
0702 } else if (ret) {
0703 goto err;
0704 }
0705
0706
0707 dp0_auxcfg1 = AUX_RX_FILTER_EN;
0708 dp0_auxcfg1 |= 0x06 << 8;
0709 dp0_auxcfg1 |= 0x3f << 0;
0710
0711 ret = regmap_write(tc->regmap, DP0_AUXCFG1, dp0_auxcfg1);
0712 if (ret)
0713 goto err;
0714
0715
0716 tc->aux.name = "TC358767 AUX i2c adapter";
0717 tc->aux.dev = tc->dev;
0718 tc->aux.transfer = tc_aux_transfer;
0719 drm_dp_aux_init(&tc->aux);
0720
0721 return 0;
0722 err:
0723 dev_err(tc->dev, "tc_aux_link_setup failed: %d\n", ret);
0724 return ret;
0725 }
0726
0727 static int tc_get_display_props(struct tc_data *tc)
0728 {
0729 u8 revision, num_lanes;
0730 unsigned int rate;
0731 int ret;
0732 u8 reg;
0733
0734
0735 ret = drm_dp_dpcd_read(&tc->aux, DP_DPCD_REV, tc->link.dpcd,
0736 DP_RECEIVER_CAP_SIZE);
0737 if (ret < 0)
0738 goto err_dpcd_read;
0739
0740 revision = tc->link.dpcd[DP_DPCD_REV];
0741 rate = drm_dp_max_link_rate(tc->link.dpcd);
0742 num_lanes = drm_dp_max_lane_count(tc->link.dpcd);
0743
0744 if (rate != 162000 && rate != 270000) {
0745 dev_dbg(tc->dev, "Falling to 2.7 Gbps rate\n");
0746 rate = 270000;
0747 }
0748
0749 tc->link.rate = rate;
0750
0751 if (num_lanes > 2) {
0752 dev_dbg(tc->dev, "Falling to 2 lanes\n");
0753 num_lanes = 2;
0754 }
0755
0756 tc->link.num_lanes = num_lanes;
0757
0758 ret = drm_dp_dpcd_readb(&tc->aux, DP_MAX_DOWNSPREAD, ®);
0759 if (ret < 0)
0760 goto err_dpcd_read;
0761 tc->link.spread = reg & DP_MAX_DOWNSPREAD_0_5;
0762
0763 ret = drm_dp_dpcd_readb(&tc->aux, DP_MAIN_LINK_CHANNEL_CODING, ®);
0764 if (ret < 0)
0765 goto err_dpcd_read;
0766
0767 tc->link.scrambler_dis = false;
0768
0769 ret = drm_dp_dpcd_readb(&tc->aux, DP_EDP_CONFIGURATION_SET, ®);
0770 if (ret < 0)
0771 goto err_dpcd_read;
0772 tc->link.assr = reg & DP_ALTERNATE_SCRAMBLER_RESET_ENABLE;
0773
0774 dev_dbg(tc->dev, "DPCD rev: %d.%d, rate: %s, lanes: %d, framing: %s\n",
0775 revision >> 4, revision & 0x0f,
0776 (tc->link.rate == 162000) ? "1.62Gbps" : "2.7Gbps",
0777 tc->link.num_lanes,
0778 drm_dp_enhanced_frame_cap(tc->link.dpcd) ?
0779 "enhanced" : "default");
0780 dev_dbg(tc->dev, "Downspread: %s, scrambler: %s\n",
0781 tc->link.spread ? "0.5%" : "0.0%",
0782 tc->link.scrambler_dis ? "disabled" : "enabled");
0783 dev_dbg(tc->dev, "Display ASSR: %d, TC358767 ASSR: %d\n",
0784 tc->link.assr, tc->assr);
0785
0786 return 0;
0787
0788 err_dpcd_read:
0789 dev_err(tc->dev, "failed to read DPCD: %d\n", ret);
0790 return ret;
0791 }
0792
0793 static int tc_set_common_video_mode(struct tc_data *tc,
0794 const struct drm_display_mode *mode)
0795 {
0796 int left_margin = mode->htotal - mode->hsync_end;
0797 int right_margin = mode->hsync_start - mode->hdisplay;
0798 int hsync_len = mode->hsync_end - mode->hsync_start;
0799 int upper_margin = mode->vtotal - mode->vsync_end;
0800 int lower_margin = mode->vsync_start - mode->vdisplay;
0801 int vsync_len = mode->vsync_end - mode->vsync_start;
0802 int ret;
0803
0804 dev_dbg(tc->dev, "set mode %dx%d\n",
0805 mode->hdisplay, mode->vdisplay);
0806 dev_dbg(tc->dev, "H margin %d,%d sync %d\n",
0807 left_margin, right_margin, hsync_len);
0808 dev_dbg(tc->dev, "V margin %d,%d sync %d\n",
0809 upper_margin, lower_margin, vsync_len);
0810 dev_dbg(tc->dev, "total: %dx%d\n", mode->htotal, mode->vtotal);
0811
0812
0813
0814
0815
0816
0817
0818
0819 ret = regmap_write(tc->regmap, VPCTRL0,
0820 FIELD_PREP(VSDELAY, 0) |
0821 OPXLFMT_RGB888 | FRMSYNC_DISABLED | MSF_DISABLED);
0822 if (ret)
0823 return ret;
0824
0825 ret = regmap_write(tc->regmap, HTIM01,
0826 FIELD_PREP(HBPR, ALIGN(left_margin, 2)) |
0827 FIELD_PREP(HPW, ALIGN(hsync_len, 2)));
0828 if (ret)
0829 return ret;
0830
0831 ret = regmap_write(tc->regmap, HTIM02,
0832 FIELD_PREP(HDISPR, ALIGN(mode->hdisplay, 2)) |
0833 FIELD_PREP(HFPR, ALIGN(right_margin, 2)));
0834 if (ret)
0835 return ret;
0836
0837 ret = regmap_write(tc->regmap, VTIM01,
0838 FIELD_PREP(VBPR, upper_margin) |
0839 FIELD_PREP(VSPR, vsync_len));
0840 if (ret)
0841 return ret;
0842
0843 ret = regmap_write(tc->regmap, VTIM02,
0844 FIELD_PREP(VFPR, lower_margin) |
0845 FIELD_PREP(VDISPR, mode->vdisplay));
0846 if (ret)
0847 return ret;
0848
0849 ret = regmap_write(tc->regmap, VFUEN0, VFUEN);
0850 if (ret)
0851 return ret;
0852
0853
0854 ret = regmap_write(tc->regmap, TSTCTL,
0855 FIELD_PREP(COLOR_R, 120) |
0856 FIELD_PREP(COLOR_G, 20) |
0857 FIELD_PREP(COLOR_B, 99) |
0858 ENI2CFILTER |
0859 FIELD_PREP(COLOR_BAR_MODE, COLOR_BAR_MODE_BARS));
0860
0861 return ret;
0862 }
0863
0864 static int tc_set_dpi_video_mode(struct tc_data *tc,
0865 const struct drm_display_mode *mode)
0866 {
0867 u32 value = POCTRL_S2P;
0868
0869 if (tc->mode.flags & DRM_MODE_FLAG_NHSYNC)
0870 value |= POCTRL_HS_POL;
0871
0872 if (tc->mode.flags & DRM_MODE_FLAG_NVSYNC)
0873 value |= POCTRL_VS_POL;
0874
0875 return regmap_write(tc->regmap, POCTRL, value);
0876 }
0877
0878 static int tc_set_edp_video_mode(struct tc_data *tc,
0879 const struct drm_display_mode *mode)
0880 {
0881 int ret;
0882 int vid_sync_dly;
0883 int max_tu_symbol;
0884
0885 int left_margin = mode->htotal - mode->hsync_end;
0886 int hsync_len = mode->hsync_end - mode->hsync_start;
0887 int upper_margin = mode->vtotal - mode->vsync_end;
0888 int vsync_len = mode->vsync_end - mode->vsync_start;
0889 u32 dp0_syncval;
0890 u32 bits_per_pixel = 24;
0891 u32 in_bw, out_bw;
0892
0893
0894
0895
0896
0897
0898
0899
0900 in_bw = mode->clock * bits_per_pixel / 8;
0901 out_bw = tc->link.num_lanes * tc->link.rate;
0902 max_tu_symbol = DIV_ROUND_UP(in_bw * TU_SIZE_RECOMMENDED, out_bw);
0903
0904
0905 vid_sync_dly = hsync_len + left_margin + mode->hdisplay;
0906 ret = regmap_write(tc->regmap, DP0_VIDSYNCDELAY,
0907 FIELD_PREP(THRESH_DLY, max_tu_symbol) |
0908 FIELD_PREP(VID_SYNC_DLY, vid_sync_dly));
0909
0910 ret = regmap_write(tc->regmap, DP0_TOTALVAL,
0911 FIELD_PREP(H_TOTAL, mode->htotal) |
0912 FIELD_PREP(V_TOTAL, mode->vtotal));
0913 if (ret)
0914 return ret;
0915
0916 ret = regmap_write(tc->regmap, DP0_STARTVAL,
0917 FIELD_PREP(H_START, left_margin + hsync_len) |
0918 FIELD_PREP(V_START, upper_margin + vsync_len));
0919 if (ret)
0920 return ret;
0921
0922 ret = regmap_write(tc->regmap, DP0_ACTIVEVAL,
0923 FIELD_PREP(V_ACT, mode->vdisplay) |
0924 FIELD_PREP(H_ACT, mode->hdisplay));
0925 if (ret)
0926 return ret;
0927
0928 dp0_syncval = FIELD_PREP(VS_WIDTH, vsync_len) |
0929 FIELD_PREP(HS_WIDTH, hsync_len);
0930
0931 if (mode->flags & DRM_MODE_FLAG_NVSYNC)
0932 dp0_syncval |= SYNCVAL_VS_POL_ACTIVE_LOW;
0933
0934 if (mode->flags & DRM_MODE_FLAG_NHSYNC)
0935 dp0_syncval |= SYNCVAL_HS_POL_ACTIVE_LOW;
0936
0937 ret = regmap_write(tc->regmap, DP0_SYNCVAL, dp0_syncval);
0938 if (ret)
0939 return ret;
0940
0941 ret = regmap_write(tc->regmap, DPIPXLFMT,
0942 VS_POL_ACTIVE_LOW | HS_POL_ACTIVE_LOW |
0943 DE_POL_ACTIVE_HIGH | SUB_CFG_TYPE_CONFIG1 |
0944 DPI_BPP_RGB888);
0945 if (ret)
0946 return ret;
0947
0948 ret = regmap_write(tc->regmap, DP0_MISC,
0949 FIELD_PREP(MAX_TU_SYMBOL, max_tu_symbol) |
0950 FIELD_PREP(TU_SIZE, TU_SIZE_RECOMMENDED) |
0951 BPC_8);
0952 return ret;
0953 }
0954
0955 static int tc_wait_link_training(struct tc_data *tc)
0956 {
0957 u32 value;
0958 int ret;
0959
0960 ret = tc_poll_timeout(tc, DP0_LTSTAT, LT_LOOPDONE,
0961 LT_LOOPDONE, 500, 100000);
0962 if (ret) {
0963 dev_err(tc->dev, "Link training timeout waiting for LT_LOOPDONE!\n");
0964 return ret;
0965 }
0966
0967 ret = regmap_read(tc->regmap, DP0_LTSTAT, &value);
0968 if (ret)
0969 return ret;
0970
0971 return (value >> 8) & 0x7;
0972 }
0973
0974 static int tc_main_link_enable(struct tc_data *tc)
0975 {
0976 struct drm_dp_aux *aux = &tc->aux;
0977 struct device *dev = tc->dev;
0978 u32 dp_phy_ctrl;
0979 u32 value;
0980 int ret;
0981 u8 tmp[DP_LINK_STATUS_SIZE];
0982
0983 dev_dbg(tc->dev, "link enable\n");
0984
0985 ret = regmap_read(tc->regmap, DP0CTL, &value);
0986 if (ret)
0987 return ret;
0988
0989 if (WARN_ON(value & DP_EN)) {
0990 ret = regmap_write(tc->regmap, DP0CTL, 0);
0991 if (ret)
0992 return ret;
0993 }
0994
0995 ret = regmap_write(tc->regmap, DP0_SRCCTRL, tc_srcctrl(tc));
0996 if (ret)
0997 return ret;
0998
0999 ret = regmap_write(tc->regmap, DP1_SRCCTRL,
1000 (tc->link.spread ? DP0_SRCCTRL_SSCG : 0) |
1001 ((tc->link.rate != 162000) ? DP0_SRCCTRL_BW27 : 0));
1002 if (ret)
1003 return ret;
1004
1005 ret = tc_set_syspllparam(tc);
1006 if (ret)
1007 return ret;
1008
1009
1010 dp_phy_ctrl = BGREN | PWR_SW_EN | PHY_A0_EN | PHY_M0_EN;
1011 if (tc->link.num_lanes == 2)
1012 dp_phy_ctrl |= PHY_2LANE;
1013
1014 ret = regmap_write(tc->regmap, DP_PHY_CTRL, dp_phy_ctrl);
1015 if (ret)
1016 return ret;
1017
1018
1019 ret = tc_pllupdate(tc, DP0_PLLCTRL);
1020 if (ret)
1021 return ret;
1022
1023 ret = tc_pllupdate(tc, DP1_PLLCTRL);
1024 if (ret)
1025 return ret;
1026
1027
1028 dp_phy_ctrl |= DP_PHY_RST | PHY_M1_RST | PHY_M0_RST;
1029 ret = regmap_write(tc->regmap, DP_PHY_CTRL, dp_phy_ctrl);
1030 usleep_range(100, 200);
1031 dp_phy_ctrl &= ~(DP_PHY_RST | PHY_M1_RST | PHY_M0_RST);
1032 ret = regmap_write(tc->regmap, DP_PHY_CTRL, dp_phy_ctrl);
1033
1034 ret = tc_poll_timeout(tc, DP_PHY_CTRL, PHY_RDY, PHY_RDY, 500, 100000);
1035 if (ret) {
1036 dev_err(dev, "timeout waiting for phy become ready");
1037 return ret;
1038 }
1039
1040
1041 ret = regmap_update_bits(tc->regmap, DP0_MISC, BPC_8, BPC_8);
1042 if (ret)
1043 return ret;
1044
1045
1046
1047
1048
1049
1050
1051
1052 if (tc->assr != tc->link.assr) {
1053 dev_dbg(dev, "Trying to set display to ASSR: %d\n",
1054 tc->assr);
1055
1056 tmp[0] = tc->assr;
1057 ret = drm_dp_dpcd_writeb(aux, DP_EDP_CONFIGURATION_SET, tmp[0]);
1058 if (ret < 0)
1059 goto err_dpcd_read;
1060
1061 ret = drm_dp_dpcd_readb(aux, DP_EDP_CONFIGURATION_SET, tmp);
1062 if (ret < 0)
1063 goto err_dpcd_read;
1064
1065 if (tmp[0] != tc->assr) {
1066 dev_dbg(dev, "Failed to switch display ASSR to %d, falling back to unscrambled mode\n",
1067 tc->assr);
1068
1069 tc->link.scrambler_dis = true;
1070 }
1071 }
1072
1073
1074 tmp[0] = drm_dp_link_rate_to_bw_code(tc->link.rate);
1075 tmp[1] = tc->link.num_lanes;
1076
1077 if (drm_dp_enhanced_frame_cap(tc->link.dpcd))
1078 tmp[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN;
1079
1080 ret = drm_dp_dpcd_write(aux, DP_LINK_BW_SET, tmp, 2);
1081 if (ret < 0)
1082 goto err_dpcd_write;
1083
1084
1085 tmp[0] = tc->link.spread ? DP_SPREAD_AMP_0_5 : 0x00;
1086
1087 tmp[1] = DP_SET_ANSI_8B10B;
1088 ret = drm_dp_dpcd_write(aux, DP_DOWNSPREAD_CTRL, tmp, 2);
1089 if (ret < 0)
1090 goto err_dpcd_write;
1091
1092
1093 tmp[0] = tmp[1] = DP_TRAIN_VOLTAGE_SWING_LEVEL_0 |
1094 DP_TRAIN_PRE_EMPH_LEVEL_0;
1095 ret = drm_dp_dpcd_write(aux, DP_TRAINING_LANE0_SET, tmp, 2);
1096 if (ret < 0)
1097 goto err_dpcd_write;
1098
1099
1100
1101
1102 ret = regmap_write(tc->regmap, DP0_SNKLTCTRL,
1103 DP_LINK_SCRAMBLING_DISABLE |
1104 DP_TRAINING_PATTERN_1);
1105 if (ret)
1106 return ret;
1107
1108 ret = regmap_write(tc->regmap, DP0_LTLOOPCTRL,
1109 (15 << 28) |
1110 (15 << 24) |
1111 (0xd << 0));
1112 if (ret)
1113 return ret;
1114
1115 ret = regmap_write(tc->regmap, DP0_SRCCTRL,
1116 tc_srcctrl(tc) | DP0_SRCCTRL_SCRMBLDIS |
1117 DP0_SRCCTRL_AUTOCORRECT |
1118 DP0_SRCCTRL_TP1);
1119 if (ret)
1120 return ret;
1121
1122
1123 ret = regmap_write(tc->regmap, DP0CTL,
1124 (drm_dp_enhanced_frame_cap(tc->link.dpcd) ?
1125 EF_EN : 0) | DP_EN);
1126 if (ret)
1127 return ret;
1128
1129
1130
1131 ret = tc_wait_link_training(tc);
1132 if (ret < 0)
1133 return ret;
1134
1135 if (ret) {
1136 dev_err(tc->dev, "Link training phase 1 failed: %s\n",
1137 training_pattern1_errors[ret]);
1138 return -ENODEV;
1139 }
1140
1141
1142
1143
1144 ret = regmap_write(tc->regmap, DP0_SNKLTCTRL,
1145 DP_LINK_SCRAMBLING_DISABLE |
1146 DP_TRAINING_PATTERN_2);
1147 if (ret)
1148 return ret;
1149
1150 ret = regmap_write(tc->regmap, DP0_SRCCTRL,
1151 tc_srcctrl(tc) | DP0_SRCCTRL_SCRMBLDIS |
1152 DP0_SRCCTRL_AUTOCORRECT |
1153 DP0_SRCCTRL_TP2);
1154 if (ret)
1155 return ret;
1156
1157
1158 ret = tc_wait_link_training(tc);
1159 if (ret < 0)
1160 return ret;
1161
1162 if (ret) {
1163 dev_err(tc->dev, "Link training phase 2 failed: %s\n",
1164 training_pattern2_errors[ret]);
1165 return -ENODEV;
1166 }
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178 ret = regmap_write(tc->regmap, DP0_SRCCTRL, tc_srcctrl(tc) |
1179 DP0_SRCCTRL_AUTOCORRECT);
1180 if (ret)
1181 return ret;
1182
1183
1184
1185 tmp[0] = tc->link.scrambler_dis ? DP_LINK_SCRAMBLING_DISABLE : 0x00;
1186 ret = drm_dp_dpcd_writeb(aux, DP_TRAINING_PATTERN_SET, tmp[0]);
1187 if (ret < 0)
1188 goto err_dpcd_write;
1189
1190
1191 ret = drm_dp_dpcd_read_link_status(aux, tmp);
1192 if (ret < 0)
1193 goto err_dpcd_read;
1194
1195 ret = 0;
1196
1197 value = tmp[0] & DP_CHANNEL_EQ_BITS;
1198
1199 if (value != DP_CHANNEL_EQ_BITS) {
1200 dev_err(tc->dev, "Lane 0 failed: %x\n", value);
1201 ret = -ENODEV;
1202 }
1203
1204 if (tc->link.num_lanes == 2) {
1205 value = (tmp[0] >> 4) & DP_CHANNEL_EQ_BITS;
1206
1207 if (value != DP_CHANNEL_EQ_BITS) {
1208 dev_err(tc->dev, "Lane 1 failed: %x\n", value);
1209 ret = -ENODEV;
1210 }
1211
1212 if (!(tmp[2] & DP_INTERLANE_ALIGN_DONE)) {
1213 dev_err(tc->dev, "Interlane align failed\n");
1214 ret = -ENODEV;
1215 }
1216 }
1217
1218 if (ret) {
1219 dev_err(dev, "0x0202 LANE0_1_STATUS: 0x%02x\n", tmp[0]);
1220 dev_err(dev, "0x0203 LANE2_3_STATUS 0x%02x\n", tmp[1]);
1221 dev_err(dev, "0x0204 LANE_ALIGN_STATUS_UPDATED: 0x%02x\n", tmp[2]);
1222 dev_err(dev, "0x0205 SINK_STATUS: 0x%02x\n", tmp[3]);
1223 dev_err(dev, "0x0206 ADJUST_REQUEST_LANE0_1: 0x%02x\n", tmp[4]);
1224 dev_err(dev, "0x0207 ADJUST_REQUEST_LANE2_3: 0x%02x\n", tmp[5]);
1225 return ret;
1226 }
1227
1228 return 0;
1229 err_dpcd_read:
1230 dev_err(tc->dev, "Failed to read DPCD: %d\n", ret);
1231 return ret;
1232 err_dpcd_write:
1233 dev_err(tc->dev, "Failed to write DPCD: %d\n", ret);
1234 return ret;
1235 }
1236
1237 static int tc_main_link_disable(struct tc_data *tc)
1238 {
1239 int ret;
1240
1241 dev_dbg(tc->dev, "link disable\n");
1242
1243 ret = regmap_write(tc->regmap, DP0_SRCCTRL, 0);
1244 if (ret)
1245 return ret;
1246
1247 return regmap_write(tc->regmap, DP0CTL, 0);
1248 }
1249
1250 static int tc_dsi_rx_enable(struct tc_data *tc)
1251 {
1252 u32 value;
1253 int ret;
1254
1255 regmap_write(tc->regmap, PPI_D0S_CLRSIPOCOUNT, 3);
1256 regmap_write(tc->regmap, PPI_D1S_CLRSIPOCOUNT, 3);
1257 regmap_write(tc->regmap, PPI_D2S_CLRSIPOCOUNT, 3);
1258 regmap_write(tc->regmap, PPI_D3S_CLRSIPOCOUNT, 3);
1259 regmap_write(tc->regmap, PPI_D0S_ATMR, 0);
1260 regmap_write(tc->regmap, PPI_D1S_ATMR, 0);
1261 regmap_write(tc->regmap, PPI_TX_RX_TA, TTA_GET | TTA_SURE);
1262 regmap_write(tc->regmap, PPI_LPTXTIMECNT, LPX_PERIOD);
1263
1264 value = ((LANEENABLE_L0EN << tc->dsi->lanes) - LANEENABLE_L0EN) |
1265 LANEENABLE_CLEN;
1266 regmap_write(tc->regmap, PPI_LANEENABLE, value);
1267 regmap_write(tc->regmap, DSI_LANEENABLE, value);
1268
1269
1270 value = DP0_AUDSRC_NO_INPUT;
1271 if (tc_test_pattern)
1272 value |= DP0_VIDSRC_COLOR_BAR;
1273 else
1274 value |= DP0_VIDSRC_DSI_RX;
1275 ret = regmap_write(tc->regmap, SYSCTRL, value);
1276 if (ret)
1277 return ret;
1278
1279 usleep_range(120, 150);
1280
1281 regmap_write(tc->regmap, PPI_STARTPPI, PPI_START_FUNCTION);
1282 regmap_write(tc->regmap, DSI_STARTDSI, DSI_RX_START);
1283
1284 return 0;
1285 }
1286
1287 static int tc_dpi_rx_enable(struct tc_data *tc)
1288 {
1289 u32 value;
1290
1291
1292 value = DP0_AUDSRC_NO_INPUT;
1293 if (tc_test_pattern)
1294 value |= DP0_VIDSRC_COLOR_BAR;
1295 else
1296 value |= DP0_VIDSRC_DPI_RX;
1297 return regmap_write(tc->regmap, SYSCTRL, value);
1298 }
1299
1300 static int tc_dpi_stream_enable(struct tc_data *tc)
1301 {
1302 int ret;
1303
1304 dev_dbg(tc->dev, "enable video stream\n");
1305
1306
1307 ret = tc_set_syspllparam(tc);
1308 if (ret)
1309 return ret;
1310
1311
1312
1313
1314
1315 ret = tc_pllupdate(tc, DP0_PLLCTRL);
1316 if (ret)
1317 return ret;
1318
1319 ret = tc_pllupdate(tc, DP1_PLLCTRL);
1320 if (ret)
1321 return ret;
1322
1323
1324 ret = tc_pxl_pll_en(tc, clk_get_rate(tc->refclk),
1325 1000 * tc->mode.clock);
1326 if (ret)
1327 return ret;
1328
1329 ret = tc_set_common_video_mode(tc, &tc->mode);
1330 if (ret)
1331 return ret;
1332
1333 ret = tc_set_dpi_video_mode(tc, &tc->mode);
1334 if (ret)
1335 return ret;
1336
1337 return tc_dsi_rx_enable(tc);
1338 }
1339
1340 static int tc_dpi_stream_disable(struct tc_data *tc)
1341 {
1342 dev_dbg(tc->dev, "disable video stream\n");
1343
1344 tc_pxl_pll_dis(tc);
1345
1346 return 0;
1347 }
1348
1349 static int tc_edp_stream_enable(struct tc_data *tc)
1350 {
1351 int ret;
1352 u32 value;
1353
1354 dev_dbg(tc->dev, "enable video stream\n");
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367 if (tc->input_connector_dsi || tc_test_pattern) {
1368 ret = tc_pxl_pll_en(tc, clk_get_rate(tc->refclk),
1369 1000 * tc->mode.clock);
1370 if (ret)
1371 return ret;
1372 }
1373
1374 ret = tc_set_common_video_mode(tc, &tc->mode);
1375 if (ret)
1376 return ret;
1377
1378 ret = tc_set_edp_video_mode(tc, &tc->mode);
1379 if (ret)
1380 return ret;
1381
1382
1383 ret = tc_stream_clock_calc(tc);
1384 if (ret)
1385 return ret;
1386
1387 value = VID_MN_GEN | DP_EN;
1388 if (drm_dp_enhanced_frame_cap(tc->link.dpcd))
1389 value |= EF_EN;
1390 ret = regmap_write(tc->regmap, DP0CTL, value);
1391 if (ret)
1392 return ret;
1393
1394
1395
1396
1397
1398
1399
1400 usleep_range(500, 1000);
1401 value |= VID_EN;
1402 ret = regmap_write(tc->regmap, DP0CTL, value);
1403 if (ret)
1404 return ret;
1405
1406
1407 if (tc->input_connector_dsi)
1408 return tc_dsi_rx_enable(tc);
1409 else
1410 return tc_dpi_rx_enable(tc);
1411 }
1412
1413 static int tc_edp_stream_disable(struct tc_data *tc)
1414 {
1415 int ret;
1416
1417 dev_dbg(tc->dev, "disable video stream\n");
1418
1419 ret = regmap_update_bits(tc->regmap, DP0CTL, VID_EN, 0);
1420 if (ret)
1421 return ret;
1422
1423 tc_pxl_pll_dis(tc);
1424
1425 return 0;
1426 }
1427
1428 static void
1429 tc_dpi_bridge_atomic_enable(struct drm_bridge *bridge,
1430 struct drm_bridge_state *old_bridge_state)
1431
1432 {
1433 struct tc_data *tc = bridge_to_tc(bridge);
1434 int ret;
1435
1436 ret = tc_dpi_stream_enable(tc);
1437 if (ret < 0) {
1438 dev_err(tc->dev, "main link stream start error: %d\n", ret);
1439 tc_main_link_disable(tc);
1440 return;
1441 }
1442 }
1443
1444 static void
1445 tc_dpi_bridge_atomic_disable(struct drm_bridge *bridge,
1446 struct drm_bridge_state *old_bridge_state)
1447 {
1448 struct tc_data *tc = bridge_to_tc(bridge);
1449 int ret;
1450
1451 ret = tc_dpi_stream_disable(tc);
1452 if (ret < 0)
1453 dev_err(tc->dev, "main link stream stop error: %d\n", ret);
1454 }
1455
1456 static void
1457 tc_edp_bridge_atomic_enable(struct drm_bridge *bridge,
1458 struct drm_bridge_state *old_bridge_state)
1459 {
1460 struct tc_data *tc = bridge_to_tc(bridge);
1461 int ret;
1462
1463 ret = tc_get_display_props(tc);
1464 if (ret < 0) {
1465 dev_err(tc->dev, "failed to read display props: %d\n", ret);
1466 return;
1467 }
1468
1469 ret = tc_main_link_enable(tc);
1470 if (ret < 0) {
1471 dev_err(tc->dev, "main link enable error: %d\n", ret);
1472 return;
1473 }
1474
1475 ret = tc_edp_stream_enable(tc);
1476 if (ret < 0) {
1477 dev_err(tc->dev, "main link stream start error: %d\n", ret);
1478 tc_main_link_disable(tc);
1479 return;
1480 }
1481 }
1482
1483 static void
1484 tc_edp_bridge_atomic_disable(struct drm_bridge *bridge,
1485 struct drm_bridge_state *old_bridge_state)
1486 {
1487 struct tc_data *tc = bridge_to_tc(bridge);
1488 int ret;
1489
1490 ret = tc_edp_stream_disable(tc);
1491 if (ret < 0)
1492 dev_err(tc->dev, "main link stream stop error: %d\n", ret);
1493
1494 ret = tc_main_link_disable(tc);
1495 if (ret < 0)
1496 dev_err(tc->dev, "main link disable error: %d\n", ret);
1497 }
1498
1499 static bool tc_bridge_mode_fixup(struct drm_bridge *bridge,
1500 const struct drm_display_mode *mode,
1501 struct drm_display_mode *adj)
1502 {
1503
1504 adj->flags = mode->flags;
1505 adj->flags |= (DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC);
1506 adj->flags &= ~(DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC);
1507
1508 return true;
1509 }
1510
1511 static int tc_common_atomic_check(struct drm_bridge *bridge,
1512 struct drm_bridge_state *bridge_state,
1513 struct drm_crtc_state *crtc_state,
1514 struct drm_connector_state *conn_state,
1515 const unsigned int max_khz)
1516 {
1517 tc_bridge_mode_fixup(bridge, &crtc_state->mode,
1518 &crtc_state->adjusted_mode);
1519
1520 if (crtc_state->adjusted_mode.clock > max_khz)
1521 return -EINVAL;
1522
1523 return 0;
1524 }
1525
1526 static int tc_dpi_atomic_check(struct drm_bridge *bridge,
1527 struct drm_bridge_state *bridge_state,
1528 struct drm_crtc_state *crtc_state,
1529 struct drm_connector_state *conn_state)
1530 {
1531
1532 return tc_common_atomic_check(bridge, bridge_state, crtc_state,
1533 conn_state, 100000);
1534 }
1535
1536 static int tc_edp_atomic_check(struct drm_bridge *bridge,
1537 struct drm_bridge_state *bridge_state,
1538 struct drm_crtc_state *crtc_state,
1539 struct drm_connector_state *conn_state)
1540 {
1541
1542 return tc_common_atomic_check(bridge, bridge_state, crtc_state,
1543 conn_state, 154000);
1544 }
1545
1546 static enum drm_mode_status
1547 tc_dpi_mode_valid(struct drm_bridge *bridge,
1548 const struct drm_display_info *info,
1549 const struct drm_display_mode *mode)
1550 {
1551
1552 if (mode->clock > 100000)
1553 return MODE_CLOCK_HIGH;
1554
1555 return MODE_OK;
1556 }
1557
1558 static enum drm_mode_status
1559 tc_edp_mode_valid(struct drm_bridge *bridge,
1560 const struct drm_display_info *info,
1561 const struct drm_display_mode *mode)
1562 {
1563 struct tc_data *tc = bridge_to_tc(bridge);
1564 u32 req, avail;
1565 u32 bits_per_pixel = 24;
1566
1567
1568 if (mode->clock > 154000)
1569 return MODE_CLOCK_HIGH;
1570
1571 req = mode->clock * bits_per_pixel / 8;
1572 avail = tc->link.num_lanes * tc->link.rate;
1573
1574 if (req > avail)
1575 return MODE_BAD;
1576
1577 return MODE_OK;
1578 }
1579
1580 static void tc_bridge_mode_set(struct drm_bridge *bridge,
1581 const struct drm_display_mode *mode,
1582 const struct drm_display_mode *adj)
1583 {
1584 struct tc_data *tc = bridge_to_tc(bridge);
1585
1586 drm_mode_copy(&tc->mode, mode);
1587 }
1588
1589 static struct edid *tc_get_edid(struct drm_bridge *bridge,
1590 struct drm_connector *connector)
1591 {
1592 struct tc_data *tc = bridge_to_tc(bridge);
1593
1594 return drm_get_edid(connector, &tc->aux.ddc);
1595 }
1596
1597 static int tc_connector_get_modes(struct drm_connector *connector)
1598 {
1599 struct tc_data *tc = connector_to_tc(connector);
1600 int num_modes;
1601 struct edid *edid;
1602 int ret;
1603
1604 ret = tc_get_display_props(tc);
1605 if (ret < 0) {
1606 dev_err(tc->dev, "failed to read display props: %d\n", ret);
1607 return 0;
1608 }
1609
1610 if (tc->panel_bridge) {
1611 num_modes = drm_bridge_get_modes(tc->panel_bridge, connector);
1612 if (num_modes > 0)
1613 return num_modes;
1614 }
1615
1616 edid = tc_get_edid(&tc->bridge, connector);
1617 num_modes = drm_add_edid_modes(connector, edid);
1618 kfree(edid);
1619
1620 return num_modes;
1621 }
1622
1623 static const struct drm_connector_helper_funcs tc_connector_helper_funcs = {
1624 .get_modes = tc_connector_get_modes,
1625 };
1626
1627 static enum drm_connector_status tc_bridge_detect(struct drm_bridge *bridge)
1628 {
1629 struct tc_data *tc = bridge_to_tc(bridge);
1630 bool conn;
1631 u32 val;
1632 int ret;
1633
1634 ret = regmap_read(tc->regmap, GPIOI, &val);
1635 if (ret)
1636 return connector_status_unknown;
1637
1638 conn = val & BIT(tc->hpd_pin);
1639
1640 if (conn)
1641 return connector_status_connected;
1642 else
1643 return connector_status_disconnected;
1644 }
1645
1646 static enum drm_connector_status
1647 tc_connector_detect(struct drm_connector *connector, bool force)
1648 {
1649 struct tc_data *tc = connector_to_tc(connector);
1650
1651 if (tc->hpd_pin >= 0)
1652 return tc_bridge_detect(&tc->bridge);
1653
1654 if (tc->panel_bridge)
1655 return connector_status_connected;
1656 else
1657 return connector_status_unknown;
1658 }
1659
1660 static const struct drm_connector_funcs tc_connector_funcs = {
1661 .detect = tc_connector_detect,
1662 .fill_modes = drm_helper_probe_single_connector_modes,
1663 .destroy = drm_connector_cleanup,
1664 .reset = drm_atomic_helper_connector_reset,
1665 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
1666 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
1667 };
1668
1669 static int tc_dpi_bridge_attach(struct drm_bridge *bridge,
1670 enum drm_bridge_attach_flags flags)
1671 {
1672 struct tc_data *tc = bridge_to_tc(bridge);
1673
1674 if (!tc->panel_bridge)
1675 return 0;
1676
1677 return drm_bridge_attach(tc->bridge.encoder, tc->panel_bridge,
1678 &tc->bridge, flags);
1679 }
1680
1681 static int tc_edp_bridge_attach(struct drm_bridge *bridge,
1682 enum drm_bridge_attach_flags flags)
1683 {
1684 u32 bus_format = MEDIA_BUS_FMT_RGB888_1X24;
1685 struct tc_data *tc = bridge_to_tc(bridge);
1686 struct drm_device *drm = bridge->dev;
1687 int ret;
1688
1689 if (tc->panel_bridge) {
1690
1691 ret = drm_bridge_attach(tc->bridge.encoder, tc->panel_bridge,
1692 &tc->bridge, flags | DRM_BRIDGE_ATTACH_NO_CONNECTOR);
1693 if (ret)
1694 return ret;
1695 }
1696
1697 if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)
1698 return 0;
1699
1700 tc->aux.drm_dev = drm;
1701 ret = drm_dp_aux_register(&tc->aux);
1702 if (ret < 0)
1703 return ret;
1704
1705
1706 drm_connector_helper_add(&tc->connector, &tc_connector_helper_funcs);
1707 ret = drm_connector_init(drm, &tc->connector, &tc_connector_funcs, tc->bridge.type);
1708 if (ret)
1709 goto aux_unregister;
1710
1711
1712 if (tc->hpd_pin >= 0) {
1713 if (tc->have_irq)
1714 tc->connector.polled = DRM_CONNECTOR_POLL_HPD;
1715 else
1716 tc->connector.polled = DRM_CONNECTOR_POLL_CONNECT |
1717 DRM_CONNECTOR_POLL_DISCONNECT;
1718 }
1719
1720 drm_display_info_set_bus_formats(&tc->connector.display_info,
1721 &bus_format, 1);
1722 tc->connector.display_info.bus_flags =
1723 DRM_BUS_FLAG_DE_HIGH |
1724 DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE |
1725 DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE;
1726 drm_connector_attach_encoder(&tc->connector, tc->bridge.encoder);
1727
1728 return 0;
1729 aux_unregister:
1730 drm_dp_aux_unregister(&tc->aux);
1731 return ret;
1732 }
1733
1734 static void tc_edp_bridge_detach(struct drm_bridge *bridge)
1735 {
1736 drm_dp_aux_unregister(&bridge_to_tc(bridge)->aux);
1737 }
1738
1739 #define MAX_INPUT_SEL_FORMATS 1
1740
1741 static u32 *
1742 tc_dpi_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
1743 struct drm_bridge_state *bridge_state,
1744 struct drm_crtc_state *crtc_state,
1745 struct drm_connector_state *conn_state,
1746 u32 output_fmt,
1747 unsigned int *num_input_fmts)
1748 {
1749 u32 *input_fmts;
1750
1751 *num_input_fmts = 0;
1752
1753 input_fmts = kcalloc(MAX_INPUT_SEL_FORMATS, sizeof(*input_fmts),
1754 GFP_KERNEL);
1755 if (!input_fmts)
1756 return NULL;
1757
1758
1759 input_fmts[0] = MEDIA_BUS_FMT_RGB888_1X24;
1760 *num_input_fmts = 1;
1761
1762 return input_fmts;
1763 }
1764
1765 static const struct drm_bridge_funcs tc_dpi_bridge_funcs = {
1766 .attach = tc_dpi_bridge_attach,
1767 .mode_valid = tc_dpi_mode_valid,
1768 .mode_set = tc_bridge_mode_set,
1769 .atomic_check = tc_dpi_atomic_check,
1770 .atomic_enable = tc_dpi_bridge_atomic_enable,
1771 .atomic_disable = tc_dpi_bridge_atomic_disable,
1772 .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
1773 .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
1774 .atomic_reset = drm_atomic_helper_bridge_reset,
1775 .atomic_get_input_bus_fmts = tc_dpi_atomic_get_input_bus_fmts,
1776 };
1777
1778 static const struct drm_bridge_funcs tc_edp_bridge_funcs = {
1779 .attach = tc_edp_bridge_attach,
1780 .detach = tc_edp_bridge_detach,
1781 .mode_valid = tc_edp_mode_valid,
1782 .mode_set = tc_bridge_mode_set,
1783 .atomic_check = tc_edp_atomic_check,
1784 .atomic_enable = tc_edp_bridge_atomic_enable,
1785 .atomic_disable = tc_edp_bridge_atomic_disable,
1786 .mode_fixup = tc_bridge_mode_fixup,
1787 .detect = tc_bridge_detect,
1788 .get_edid = tc_get_edid,
1789 .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
1790 .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
1791 .atomic_reset = drm_atomic_helper_bridge_reset,
1792 };
1793
1794 static bool tc_readable_reg(struct device *dev, unsigned int reg)
1795 {
1796 return reg != SYSCTRL;
1797 }
1798
1799 static const struct regmap_range tc_volatile_ranges[] = {
1800 regmap_reg_range(DP0_AUXWDATA(0), DP0_AUXSTATUS),
1801 regmap_reg_range(DP0_LTSTAT, DP0_SNKLTCHGREQ),
1802 regmap_reg_range(DP_PHY_CTRL, DP_PHY_CTRL),
1803 regmap_reg_range(DP0_PLLCTRL, PXL_PLLCTRL),
1804 regmap_reg_range(VFUEN0, VFUEN0),
1805 regmap_reg_range(INTSTS_G, INTSTS_G),
1806 regmap_reg_range(GPIOI, GPIOI),
1807 };
1808
1809 static const struct regmap_access_table tc_volatile_table = {
1810 .yes_ranges = tc_volatile_ranges,
1811 .n_yes_ranges = ARRAY_SIZE(tc_volatile_ranges),
1812 };
1813
1814 static bool tc_writeable_reg(struct device *dev, unsigned int reg)
1815 {
1816 return (reg != TC_IDREG) &&
1817 (reg != DP0_LTSTAT) &&
1818 (reg != DP0_SNKLTCHGREQ);
1819 }
1820
1821 static const struct regmap_config tc_regmap_config = {
1822 .name = "tc358767",
1823 .reg_bits = 16,
1824 .val_bits = 32,
1825 .reg_stride = 4,
1826 .max_register = PLL_DBG,
1827 .cache_type = REGCACHE_RBTREE,
1828 .readable_reg = tc_readable_reg,
1829 .volatile_table = &tc_volatile_table,
1830 .writeable_reg = tc_writeable_reg,
1831 .reg_format_endian = REGMAP_ENDIAN_BIG,
1832 .val_format_endian = REGMAP_ENDIAN_LITTLE,
1833 };
1834
1835 static irqreturn_t tc_irq_handler(int irq, void *arg)
1836 {
1837 struct tc_data *tc = arg;
1838 u32 val;
1839 int r;
1840
1841 r = regmap_read(tc->regmap, INTSTS_G, &val);
1842 if (r)
1843 return IRQ_NONE;
1844
1845 if (!val)
1846 return IRQ_NONE;
1847
1848 if (val & INT_SYSERR) {
1849 u32 stat = 0;
1850
1851 regmap_read(tc->regmap, SYSSTAT, &stat);
1852
1853 dev_err(tc->dev, "syserr %x\n", stat);
1854 }
1855
1856 if (tc->hpd_pin >= 0 && tc->bridge.dev) {
1857
1858
1859
1860
1861
1862
1863 bool h = val & INT_GPIO_H(tc->hpd_pin);
1864 bool lc = val & INT_GPIO_LC(tc->hpd_pin);
1865
1866 dev_dbg(tc->dev, "GPIO%d: %s %s\n", tc->hpd_pin,
1867 h ? "H" : "", lc ? "LC" : "");
1868
1869 if (h || lc)
1870 drm_kms_helper_hotplug_event(tc->bridge.dev);
1871 }
1872
1873 regmap_write(tc->regmap, INTSTS_G, val);
1874
1875 return IRQ_HANDLED;
1876 }
1877
1878 static int tc_mipi_dsi_host_attach(struct tc_data *tc)
1879 {
1880 struct device *dev = tc->dev;
1881 struct device_node *host_node;
1882 struct device_node *endpoint;
1883 struct mipi_dsi_device *dsi;
1884 struct mipi_dsi_host *host;
1885 const struct mipi_dsi_device_info info = {
1886 .type = "tc358767",
1887 .channel = 0,
1888 .node = NULL,
1889 };
1890 int dsi_lanes, ret;
1891
1892 endpoint = of_graph_get_endpoint_by_regs(dev->of_node, 0, -1);
1893 dsi_lanes = drm_of_get_data_lanes_count(endpoint, 1, 4);
1894 host_node = of_graph_get_remote_port_parent(endpoint);
1895 host = of_find_mipi_dsi_host_by_node(host_node);
1896 of_node_put(host_node);
1897 of_node_put(endpoint);
1898
1899 if (!host)
1900 return -EPROBE_DEFER;
1901
1902 if (dsi_lanes < 0)
1903 return dsi_lanes;
1904
1905 dsi = mipi_dsi_device_register_full(host, &info);
1906 if (IS_ERR(dsi))
1907 return dev_err_probe(dev, PTR_ERR(dsi),
1908 "failed to create dsi device\n");
1909
1910 tc->dsi = dsi;
1911
1912 dsi->lanes = dsi_lanes;
1913 dsi->format = MIPI_DSI_FMT_RGB888;
1914 dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
1915
1916 ret = mipi_dsi_attach(dsi);
1917 if (ret < 0) {
1918 dev_err(dev, "failed to attach dsi to host: %d\n", ret);
1919 return ret;
1920 }
1921
1922 return 0;
1923 }
1924
1925 static int tc_probe_dpi_bridge_endpoint(struct tc_data *tc)
1926 {
1927 struct device *dev = tc->dev;
1928 struct drm_panel *panel;
1929 int ret;
1930
1931
1932 ret = drm_of_find_panel_or_bridge(dev->of_node, 1, 0, &panel, NULL);
1933 if (ret && ret != -ENODEV)
1934 return ret;
1935
1936 if (panel) {
1937 struct drm_bridge *panel_bridge;
1938
1939 panel_bridge = devm_drm_panel_bridge_add(dev, panel);
1940 if (IS_ERR(panel_bridge))
1941 return PTR_ERR(panel_bridge);
1942
1943 tc->panel_bridge = panel_bridge;
1944 tc->bridge.type = DRM_MODE_CONNECTOR_DPI;
1945 tc->bridge.funcs = &tc_dpi_bridge_funcs;
1946
1947 return 0;
1948 }
1949
1950 return ret;
1951 }
1952
1953 static int tc_probe_edp_bridge_endpoint(struct tc_data *tc)
1954 {
1955 struct device *dev = tc->dev;
1956 struct drm_panel *panel;
1957 int ret;
1958
1959
1960 ret = drm_of_find_panel_or_bridge(dev->of_node, 2, 0, &panel, NULL);
1961 if (ret && ret != -ENODEV)
1962 return ret;
1963
1964 if (panel) {
1965 struct drm_bridge *panel_bridge;
1966
1967 panel_bridge = devm_drm_panel_bridge_add(dev, panel);
1968 if (IS_ERR(panel_bridge))
1969 return PTR_ERR(panel_bridge);
1970
1971 tc->panel_bridge = panel_bridge;
1972 tc->bridge.type = DRM_MODE_CONNECTOR_eDP;
1973 } else {
1974 tc->bridge.type = DRM_MODE_CONNECTOR_DisplayPort;
1975 }
1976
1977 tc->bridge.funcs = &tc_edp_bridge_funcs;
1978 if (tc->hpd_pin >= 0)
1979 tc->bridge.ops |= DRM_BRIDGE_OP_DETECT;
1980 tc->bridge.ops |= DRM_BRIDGE_OP_EDID;
1981
1982 return 0;
1983 }
1984
1985 static int tc_probe_bridge_endpoint(struct tc_data *tc)
1986 {
1987 struct device *dev = tc->dev;
1988 struct of_endpoint endpoint;
1989 struct device_node *node = NULL;
1990 const u8 mode_dpi_to_edp = BIT(1) | BIT(2);
1991 const u8 mode_dpi_to_dp = BIT(1);
1992 const u8 mode_dsi_to_edp = BIT(0) | BIT(2);
1993 const u8 mode_dsi_to_dp = BIT(0);
1994 const u8 mode_dsi_to_dpi = BIT(0) | BIT(1);
1995 u8 mode = 0;
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011 for_each_endpoint_of_node(dev->of_node, node) {
2012 of_graph_parse_endpoint(node, &endpoint);
2013 if (endpoint.port > 2)
2014 return -EINVAL;
2015
2016 mode |= BIT(endpoint.port);
2017 }
2018
2019 if (mode == mode_dpi_to_edp || mode == mode_dpi_to_dp) {
2020 tc->input_connector_dsi = false;
2021 return tc_probe_edp_bridge_endpoint(tc);
2022 } else if (mode == mode_dsi_to_dpi) {
2023 tc->input_connector_dsi = true;
2024 return tc_probe_dpi_bridge_endpoint(tc);
2025 } else if (mode == mode_dsi_to_edp || mode == mode_dsi_to_dp) {
2026 tc->input_connector_dsi = true;
2027 return tc_probe_edp_bridge_endpoint(tc);
2028 }
2029
2030 dev_warn(dev, "Invalid mode (0x%x) is not supported!\n", mode);
2031
2032 return -EINVAL;
2033 }
2034
2035 static void tc_clk_disable(void *data)
2036 {
2037 struct clk *refclk = data;
2038
2039 clk_disable_unprepare(refclk);
2040 }
2041
2042 static int tc_probe(struct i2c_client *client, const struct i2c_device_id *id)
2043 {
2044 struct device *dev = &client->dev;
2045 struct tc_data *tc;
2046 int ret;
2047
2048 tc = devm_kzalloc(dev, sizeof(*tc), GFP_KERNEL);
2049 if (!tc)
2050 return -ENOMEM;
2051
2052 tc->dev = dev;
2053
2054 ret = tc_probe_bridge_endpoint(tc);
2055 if (ret)
2056 return ret;
2057
2058 tc->refclk = devm_clk_get(dev, "ref");
2059 if (IS_ERR(tc->refclk)) {
2060 ret = PTR_ERR(tc->refclk);
2061 dev_err(dev, "Failed to get refclk: %d\n", ret);
2062 return ret;
2063 }
2064
2065 ret = clk_prepare_enable(tc->refclk);
2066 if (ret)
2067 return ret;
2068
2069 ret = devm_add_action_or_reset(dev, tc_clk_disable, tc->refclk);
2070 if (ret)
2071 return ret;
2072
2073
2074 usleep_range(10, 15);
2075
2076
2077 tc->sd_gpio = devm_gpiod_get_optional(dev, "shutdown", GPIOD_OUT_HIGH);
2078 if (IS_ERR(tc->sd_gpio))
2079 return PTR_ERR(tc->sd_gpio);
2080
2081 if (tc->sd_gpio) {
2082 gpiod_set_value_cansleep(tc->sd_gpio, 0);
2083 usleep_range(5000, 10000);
2084 }
2085
2086
2087 tc->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
2088 if (IS_ERR(tc->reset_gpio))
2089 return PTR_ERR(tc->reset_gpio);
2090
2091 if (tc->reset_gpio) {
2092 gpiod_set_value_cansleep(tc->reset_gpio, 1);
2093 usleep_range(5000, 10000);
2094 }
2095
2096 tc->regmap = devm_regmap_init_i2c(client, &tc_regmap_config);
2097 if (IS_ERR(tc->regmap)) {
2098 ret = PTR_ERR(tc->regmap);
2099 dev_err(dev, "Failed to initialize regmap: %d\n", ret);
2100 return ret;
2101 }
2102
2103 ret = of_property_read_u32(dev->of_node, "toshiba,hpd-pin",
2104 &tc->hpd_pin);
2105 if (ret) {
2106 tc->hpd_pin = -ENODEV;
2107 } else {
2108 if (tc->hpd_pin < 0 || tc->hpd_pin > 1) {
2109 dev_err(dev, "failed to parse HPD number\n");
2110 return ret;
2111 }
2112 }
2113
2114 if (client->irq > 0) {
2115
2116 regmap_write(tc->regmap, INTCTL_G, INT_SYSERR);
2117
2118 ret = devm_request_threaded_irq(dev, client->irq,
2119 NULL, tc_irq_handler,
2120 IRQF_ONESHOT,
2121 "tc358767-irq", tc);
2122 if (ret) {
2123 dev_err(dev, "failed to register dp interrupt\n");
2124 return ret;
2125 }
2126
2127 tc->have_irq = true;
2128 }
2129
2130 ret = regmap_read(tc->regmap, TC_IDREG, &tc->rev);
2131 if (ret) {
2132 dev_err(tc->dev, "can not read device ID: %d\n", ret);
2133 return ret;
2134 }
2135
2136 if ((tc->rev != 0x6601) && (tc->rev != 0x6603)) {
2137 dev_err(tc->dev, "invalid device ID: 0x%08x\n", tc->rev);
2138 return -EINVAL;
2139 }
2140
2141 tc->assr = (tc->rev == 0x6601);
2142
2143 if (!tc->reset_gpio) {
2144
2145
2146
2147
2148
2149
2150 regmap_update_bits(tc->regmap, SYSRSTENB,
2151 ENBLCD0 | ENBBM | ENBDSIRX | ENBREG | ENBHDCP,
2152 0);
2153 regmap_update_bits(tc->regmap, SYSRSTENB,
2154 ENBLCD0 | ENBBM | ENBDSIRX | ENBREG | ENBHDCP,
2155 ENBLCD0 | ENBBM | ENBDSIRX | ENBREG | ENBHDCP);
2156 usleep_range(5000, 10000);
2157 }
2158
2159 if (tc->hpd_pin >= 0) {
2160 u32 lcnt_reg = tc->hpd_pin == 0 ? INT_GP0_LCNT : INT_GP1_LCNT;
2161 u32 h_lc = INT_GPIO_H(tc->hpd_pin) | INT_GPIO_LC(tc->hpd_pin);
2162
2163
2164 regmap_write(tc->regmap, lcnt_reg,
2165 clk_get_rate(tc->refclk) * 2 / 1000);
2166
2167 regmap_write(tc->regmap, GPIOM, BIT(tc->hpd_pin));
2168
2169 if (tc->have_irq) {
2170
2171 regmap_update_bits(tc->regmap, INTCTL_G, h_lc, h_lc);
2172 }
2173 }
2174
2175 if (tc->bridge.type != DRM_MODE_CONNECTOR_DPI) {
2176 ret = tc_aux_link_setup(tc);
2177 if (ret)
2178 return ret;
2179 }
2180
2181 tc->bridge.of_node = dev->of_node;
2182 drm_bridge_add(&tc->bridge);
2183
2184 i2c_set_clientdata(client, tc);
2185
2186 if (tc->input_connector_dsi) {
2187 ret = tc_mipi_dsi_host_attach(tc);
2188 if (ret) {
2189 drm_bridge_remove(&tc->bridge);
2190 return ret;
2191 }
2192 }
2193
2194 return 0;
2195 }
2196
2197 static int tc_remove(struct i2c_client *client)
2198 {
2199 struct tc_data *tc = i2c_get_clientdata(client);
2200
2201 drm_bridge_remove(&tc->bridge);
2202
2203 return 0;
2204 }
2205
2206 static const struct i2c_device_id tc358767_i2c_ids[] = {
2207 { "tc358767", 0 },
2208 { }
2209 };
2210 MODULE_DEVICE_TABLE(i2c, tc358767_i2c_ids);
2211
2212 static const struct of_device_id tc358767_of_ids[] = {
2213 { .compatible = "toshiba,tc358767", },
2214 { }
2215 };
2216 MODULE_DEVICE_TABLE(of, tc358767_of_ids);
2217
2218 static struct i2c_driver tc358767_driver = {
2219 .driver = {
2220 .name = "tc358767",
2221 .of_match_table = tc358767_of_ids,
2222 },
2223 .id_table = tc358767_i2c_ids,
2224 .probe = tc_probe,
2225 .remove = tc_remove,
2226 };
2227 module_i2c_driver(tc358767_driver);
2228
2229 MODULE_AUTHOR("Andrey Gusakov <andrey.gusakov@cogentembedded.com>");
2230 MODULE_DESCRIPTION("tc358767 eDP encoder driver");
2231 MODULE_LICENSE("GPL");