Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v4.10-rc5 1501 lines 36 kB view raw
1/* 2 * Copyright(c) 2016, Analogix Semiconductor. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 and 6 * only version 2 as published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 * Based on anx7808 driver obtained from chromeos with copyright: 14 * Copyright(c) 2013, Google Inc. 15 * 16 */ 17#include <linux/delay.h> 18#include <linux/err.h> 19#include <linux/interrupt.h> 20#include <linux/i2c.h> 21#include <linux/kernel.h> 22#include <linux/module.h> 23#include <linux/of_gpio.h> 24#include <linux/of_irq.h> 25#include <linux/of_platform.h> 26#include <linux/regmap.h> 27#include <linux/types.h> 28#include <linux/gpio/consumer.h> 29#include <linux/regulator/consumer.h> 30 31#include <drm/drmP.h> 32#include <drm/drm_atomic_helper.h> 33#include <drm/drm_crtc.h> 34#include <drm/drm_crtc_helper.h> 35#include <drm/drm_dp_helper.h> 36#include <drm/drm_edid.h> 37 38#include "analogix-anx78xx.h" 39 40#define I2C_NUM_ADDRESSES 5 41#define I2C_IDX_TX_P0 0 42#define I2C_IDX_TX_P1 1 43#define I2C_IDX_TX_P2 2 44#define I2C_IDX_RX_P0 3 45#define I2C_IDX_RX_P1 4 46 47#define XTAL_CLK 270 /* 27M */ 48#define AUX_CH_BUFFER_SIZE 16 49#define AUX_WAIT_TIMEOUT_MS 15 50 51static const u8 anx78xx_i2c_addresses[] = { 52 [I2C_IDX_TX_P0] = TX_P0, 53 [I2C_IDX_TX_P1] = TX_P1, 54 [I2C_IDX_TX_P2] = TX_P2, 55 [I2C_IDX_RX_P0] = RX_P0, 56 [I2C_IDX_RX_P1] = RX_P1, 57}; 58 59struct anx78xx_platform_data { 60 struct regulator *dvdd10; 61 struct gpio_desc *gpiod_hpd; 62 struct gpio_desc *gpiod_pd; 63 struct gpio_desc *gpiod_reset; 64 65 int hpd_irq; 66 int intp_irq; 67}; 68 69struct anx78xx { 70 struct drm_dp_aux aux; 71 struct drm_bridge bridge; 72 struct i2c_client *client; 73 struct edid *edid; 74 struct drm_connector connector; 75 struct drm_dp_link link; 76 struct anx78xx_platform_data pdata; 77 struct mutex lock; 78 79 /* 80 * I2C Slave addresses of ANX7814 are mapped as TX_P0, TX_P1, TX_P2, 81 * RX_P0 and RX_P1. 82 */ 83 struct i2c_client *i2c_dummy[I2C_NUM_ADDRESSES]; 84 struct regmap *map[I2C_NUM_ADDRESSES]; 85 86 u16 chipid; 87 u8 dpcd[DP_RECEIVER_CAP_SIZE]; 88 89 bool powered; 90}; 91 92static inline struct anx78xx *connector_to_anx78xx(struct drm_connector *c) 93{ 94 return container_of(c, struct anx78xx, connector); 95} 96 97static inline struct anx78xx *bridge_to_anx78xx(struct drm_bridge *bridge) 98{ 99 return container_of(bridge, struct anx78xx, bridge); 100} 101 102static int anx78xx_set_bits(struct regmap *map, u8 reg, u8 mask) 103{ 104 return regmap_update_bits(map, reg, mask, mask); 105} 106 107static int anx78xx_clear_bits(struct regmap *map, u8 reg, u8 mask) 108{ 109 return regmap_update_bits(map, reg, mask, 0); 110} 111 112static bool anx78xx_aux_op_finished(struct anx78xx *anx78xx) 113{ 114 unsigned int value; 115 int err; 116 117 err = regmap_read(anx78xx->map[I2C_IDX_TX_P0], SP_DP_AUX_CH_CTRL2_REG, 118 &value); 119 if (err < 0) 120 return false; 121 122 return (value & SP_AUX_EN) == 0; 123} 124 125static int anx78xx_aux_wait(struct anx78xx *anx78xx) 126{ 127 unsigned long timeout; 128 unsigned int status; 129 int err; 130 131 timeout = jiffies + msecs_to_jiffies(AUX_WAIT_TIMEOUT_MS) + 1; 132 133 while (!anx78xx_aux_op_finished(anx78xx)) { 134 if (time_after(jiffies, timeout)) { 135 if (!anx78xx_aux_op_finished(anx78xx)) { 136 DRM_ERROR("Timed out waiting AUX to finish\n"); 137 return -ETIMEDOUT; 138 } 139 140 break; 141 } 142 143 usleep_range(1000, 2000); 144 } 145 146 /* Read the AUX channel access status */ 147 err = regmap_read(anx78xx->map[I2C_IDX_TX_P0], SP_AUX_CH_STATUS_REG, 148 &status); 149 if (err < 0) { 150 DRM_ERROR("Failed to read from AUX channel: %d\n", err); 151 return err; 152 } 153 154 if (status & SP_AUX_STATUS) { 155 DRM_ERROR("Failed to wait for AUX channel (status: %02x)\n", 156 status); 157 return -ETIMEDOUT; 158 } 159 160 return 0; 161} 162 163static int anx78xx_aux_address(struct anx78xx *anx78xx, unsigned int addr) 164{ 165 int err; 166 167 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_AUX_ADDR_7_0_REG, 168 addr & 0xff); 169 if (err) 170 return err; 171 172 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_AUX_ADDR_15_8_REG, 173 (addr & 0xff00) >> 8); 174 if (err) 175 return err; 176 177 /* 178 * DP AUX CH Address Register #2, only update bits[3:0] 179 * [7:4] RESERVED 180 * [3:0] AUX_ADDR[19:16], Register control AUX CH address. 181 */ 182 err = regmap_update_bits(anx78xx->map[I2C_IDX_TX_P0], 183 SP_AUX_ADDR_19_16_REG, 184 SP_AUX_ADDR_19_16_MASK, 185 (addr & 0xf0000) >> 16); 186 187 if (err) 188 return err; 189 190 return 0; 191} 192 193static ssize_t anx78xx_aux_transfer(struct drm_dp_aux *aux, 194 struct drm_dp_aux_msg *msg) 195{ 196 struct anx78xx *anx78xx = container_of(aux, struct anx78xx, aux); 197 u8 ctrl1 = msg->request; 198 u8 ctrl2 = SP_AUX_EN; 199 u8 *buffer = msg->buffer; 200 int err; 201 202 /* The DP AUX transmit and receive buffer has 16 bytes. */ 203 if (WARN_ON(msg->size > AUX_CH_BUFFER_SIZE)) 204 return -E2BIG; 205 206 /* Zero-sized messages specify address-only transactions. */ 207 if (msg->size < 1) 208 ctrl2 |= SP_ADDR_ONLY; 209 else /* For non-zero-sized set the length field. */ 210 ctrl1 |= (msg->size - 1) << SP_AUX_LENGTH_SHIFT; 211 212 if ((msg->request & DP_AUX_I2C_READ) == 0) { 213 /* When WRITE | MOT write values to data buffer */ 214 err = regmap_bulk_write(anx78xx->map[I2C_IDX_TX_P0], 215 SP_DP_BUF_DATA0_REG, buffer, 216 msg->size); 217 if (err) 218 return err; 219 } 220 221 /* Write address and request */ 222 err = anx78xx_aux_address(anx78xx, msg->address); 223 if (err) 224 return err; 225 226 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_DP_AUX_CH_CTRL1_REG, 227 ctrl1); 228 if (err) 229 return err; 230 231 /* Start transaction */ 232 err = regmap_update_bits(anx78xx->map[I2C_IDX_TX_P0], 233 SP_DP_AUX_CH_CTRL2_REG, SP_ADDR_ONLY | 234 SP_AUX_EN, ctrl2); 235 if (err) 236 return err; 237 238 err = anx78xx_aux_wait(anx78xx); 239 if (err) 240 return err; 241 242 msg->reply = DP_AUX_I2C_REPLY_ACK; 243 244 if ((msg->size > 0) && (msg->request & DP_AUX_I2C_READ)) { 245 /* Read values from data buffer */ 246 err = regmap_bulk_read(anx78xx->map[I2C_IDX_TX_P0], 247 SP_DP_BUF_DATA0_REG, buffer, 248 msg->size); 249 if (err) 250 return err; 251 } 252 253 err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P0], 254 SP_DP_AUX_CH_CTRL2_REG, SP_ADDR_ONLY); 255 if (err) 256 return err; 257 258 return msg->size; 259} 260 261static int anx78xx_set_hpd(struct anx78xx *anx78xx) 262{ 263 int err; 264 265 err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_RX_P0], 266 SP_TMDS_CTRL_BASE + 7, SP_PD_RT); 267 if (err) 268 return err; 269 270 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL3_REG, 271 SP_HPD_OUT); 272 if (err) 273 return err; 274 275 return 0; 276} 277 278static int anx78xx_clear_hpd(struct anx78xx *anx78xx) 279{ 280 int err; 281 282 err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL3_REG, 283 SP_HPD_OUT); 284 if (err) 285 return err; 286 287 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0], 288 SP_TMDS_CTRL_BASE + 7, SP_PD_RT); 289 if (err) 290 return err; 291 292 return 0; 293} 294 295static const struct reg_sequence tmds_phy_initialization[] = { 296 { SP_TMDS_CTRL_BASE + 1, 0x90 }, 297 { SP_TMDS_CTRL_BASE + 2, 0xa9 }, 298 { SP_TMDS_CTRL_BASE + 6, 0x92 }, 299 { SP_TMDS_CTRL_BASE + 7, 0x80 }, 300 { SP_TMDS_CTRL_BASE + 20, 0xf2 }, 301 { SP_TMDS_CTRL_BASE + 22, 0xc4 }, 302 { SP_TMDS_CTRL_BASE + 23, 0x18 }, 303}; 304 305static int anx78xx_rx_initialization(struct anx78xx *anx78xx) 306{ 307 int err; 308 309 err = regmap_write(anx78xx->map[I2C_IDX_RX_P0], SP_HDMI_MUTE_CTRL_REG, 310 SP_AUD_MUTE | SP_VID_MUTE); 311 if (err) 312 return err; 313 314 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0], SP_CHIP_CTRL_REG, 315 SP_MAN_HDMI5V_DET | SP_PLLLOCK_CKDT_EN | 316 SP_DIGITAL_CKDT_EN); 317 if (err) 318 return err; 319 320 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0], 321 SP_SOFTWARE_RESET1_REG, SP_HDCP_MAN_RST | 322 SP_SW_MAN_RST | SP_TMDS_RST | SP_VIDEO_RST); 323 if (err) 324 return err; 325 326 err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_RX_P0], 327 SP_SOFTWARE_RESET1_REG, SP_HDCP_MAN_RST | 328 SP_SW_MAN_RST | SP_TMDS_RST | SP_VIDEO_RST); 329 if (err) 330 return err; 331 332 /* Sync detect change, GP set mute */ 333 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0], 334 SP_AUD_EXCEPTION_ENABLE_BASE + 1, BIT(5) | 335 BIT(6)); 336 if (err) 337 return err; 338 339 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0], 340 SP_AUD_EXCEPTION_ENABLE_BASE + 3, 341 SP_AEC_EN21); 342 if (err) 343 return err; 344 345 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0], SP_AUDVID_CTRL_REG, 346 SP_AVC_EN | SP_AAC_OE | SP_AAC_EN); 347 if (err) 348 return err; 349 350 err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_RX_P0], 351 SP_SYSTEM_POWER_DOWN1_REG, SP_PWDN_CTRL); 352 if (err) 353 return err; 354 355 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0], 356 SP_VID_DATA_RANGE_CTRL_REG, SP_R2Y_INPUT_LIMIT); 357 if (err) 358 return err; 359 360 /* Enable DDC stretch */ 361 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], 362 SP_DP_EXTRA_I2C_DEV_ADDR_REG, SP_I2C_EXTRA_ADDR); 363 if (err) 364 return err; 365 366 /* TMDS phy initialization */ 367 err = regmap_multi_reg_write(anx78xx->map[I2C_IDX_RX_P0], 368 tmds_phy_initialization, 369 ARRAY_SIZE(tmds_phy_initialization)); 370 if (err) 371 return err; 372 373 err = anx78xx_clear_hpd(anx78xx); 374 if (err) 375 return err; 376 377 return 0; 378} 379 380static const u8 dp_tx_output_precise_tune_bits[20] = { 381 0x01, 0x03, 0x07, 0x7f, 0x71, 0x6b, 0x7f, 382 0x73, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 383 0x0c, 0x42, 0x1e, 0x3e, 0x72, 0x7e, 384}; 385 386static int anx78xx_link_phy_initialization(struct anx78xx *anx78xx) 387{ 388 int err; 389 390 /* 391 * REVISIT : It is writing to a RESERVED bits in Analog Control 0 392 * register. 393 */ 394 err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], SP_ANALOG_CTRL0_REG, 395 0x02); 396 if (err) 397 return err; 398 399 /* 400 * Write DP TX output emphasis precise tune bits. 401 */ 402 err = regmap_bulk_write(anx78xx->map[I2C_IDX_TX_P1], 403 SP_DP_TX_LT_CTRL0_REG, 404 dp_tx_output_precise_tune_bits, 405 ARRAY_SIZE(dp_tx_output_precise_tune_bits)); 406 407 if (err) 408 return err; 409 410 return 0; 411} 412 413static int anx78xx_xtal_clk_sel(struct anx78xx *anx78xx) 414{ 415 unsigned int value; 416 int err; 417 418 err = regmap_update_bits(anx78xx->map[I2C_IDX_TX_P2], 419 SP_ANALOG_DEBUG2_REG, 420 SP_XTAL_FRQ | SP_FORCE_SW_OFF_BYPASS, 421 SP_XTAL_FRQ_27M); 422 if (err) 423 return err; 424 425 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_DP_AUX_CH_CTRL3_REG, 426 XTAL_CLK & SP_WAIT_COUNTER_7_0_MASK); 427 if (err) 428 return err; 429 430 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_DP_AUX_CH_CTRL4_REG, 431 ((XTAL_CLK & 0xff00) >> 2) | (XTAL_CLK / 10)); 432 if (err) 433 return err; 434 435 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], 436 SP_I2C_GEN_10US_TIMER0_REG, XTAL_CLK & 0xff); 437 if (err) 438 return err; 439 440 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], 441 SP_I2C_GEN_10US_TIMER1_REG, 442 (XTAL_CLK & 0xff00) >> 8); 443 if (err) 444 return err; 445 446 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_AUX_MISC_CTRL_REG, 447 XTAL_CLK / 10 - 1); 448 if (err) 449 return err; 450 451 err = regmap_read(anx78xx->map[I2C_IDX_RX_P0], 452 SP_HDMI_US_TIMER_CTRL_REG, 453 &value); 454 if (err) 455 return err; 456 457 err = regmap_write(anx78xx->map[I2C_IDX_RX_P0], 458 SP_HDMI_US_TIMER_CTRL_REG, 459 (value & SP_MS_TIMER_MARGIN_10_8_MASK) | 460 ((((XTAL_CLK / 10) >> 1) - 2) << 3)); 461 if (err) 462 return err; 463 464 return 0; 465} 466 467static const struct reg_sequence otp_key_protect[] = { 468 { SP_OTP_KEY_PROTECT1_REG, SP_OTP_PSW1 }, 469 { SP_OTP_KEY_PROTECT2_REG, SP_OTP_PSW2 }, 470 { SP_OTP_KEY_PROTECT3_REG, SP_OTP_PSW3 }, 471}; 472 473static int anx78xx_tx_initialization(struct anx78xx *anx78xx) 474{ 475 int err; 476 477 /* Set terminal resistor to 50 ohm */ 478 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_DP_AUX_CH_CTRL2_REG, 479 0x30); 480 if (err) 481 return err; 482 483 /* Enable aux double diff output */ 484 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], 485 SP_DP_AUX_CH_CTRL2_REG, 0x08); 486 if (err) 487 return err; 488 489 err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P0], 490 SP_DP_HDCP_CTRL_REG, SP_AUTO_EN | 491 SP_AUTO_START); 492 if (err) 493 return err; 494 495 err = regmap_multi_reg_write(anx78xx->map[I2C_IDX_TX_P0], 496 otp_key_protect, 497 ARRAY_SIZE(otp_key_protect)); 498 if (err) 499 return err; 500 501 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], 502 SP_HDCP_KEY_COMMAND_REG, SP_DISABLE_SYNC_HDCP); 503 if (err) 504 return err; 505 506 err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL8_REG, 507 SP_VID_VRES_TH); 508 if (err) 509 return err; 510 511 /* 512 * DP HDCP auto authentication wait timer (when downstream starts to 513 * auth, DP side will wait for this period then do auth automatically) 514 */ 515 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_HDCP_AUTO_TIMER_REG, 516 0x00); 517 if (err) 518 return err; 519 520 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], 521 SP_DP_HDCP_CTRL_REG, SP_LINK_POLLING); 522 if (err) 523 return err; 524 525 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], 526 SP_DP_LINK_DEBUG_CTRL_REG, SP_M_VID_DEBUG); 527 if (err) 528 return err; 529 530 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], 531 SP_ANALOG_DEBUG2_REG, SP_POWERON_TIME_1P5MS); 532 if (err) 533 return err; 534 535 err = anx78xx_xtal_clk_sel(anx78xx); 536 if (err) 537 return err; 538 539 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_AUX_DEFER_CTRL_REG, 540 SP_DEFER_CTRL_EN | 0x0c); 541 if (err) 542 return err; 543 544 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], 545 SP_DP_POLLING_CTRL_REG, 546 SP_AUTO_POLLING_DISABLE); 547 if (err) 548 return err; 549 550 /* 551 * Short the link integrity check timer to speed up bstatus 552 * polling for HDCP CTS item 1A-07 553 */ 554 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], 555 SP_HDCP_LINK_CHECK_TIMER_REG, 0x1d); 556 if (err) 557 return err; 558 559 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], 560 SP_DP_MISC_CTRL_REG, SP_EQ_TRAINING_LOOP); 561 if (err) 562 return err; 563 564 /* Power down the main link by default */ 565 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], 566 SP_DP_ANALOG_POWER_DOWN_REG, SP_CH0_PD); 567 if (err) 568 return err; 569 570 err = anx78xx_link_phy_initialization(anx78xx); 571 if (err) 572 return err; 573 574 /* Gen m_clk with downspreading */ 575 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], 576 SP_DP_M_CALCULATION_CTRL_REG, SP_M_GEN_CLK_SEL); 577 if (err) 578 return err; 579 580 return 0; 581} 582 583static int anx78xx_enable_interrupts(struct anx78xx *anx78xx) 584{ 585 int err; 586 587 /* 588 * BIT0: INT pin assertion polarity: 1 = assert high 589 * BIT1: INT pin output type: 0 = push/pull 590 */ 591 err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], SP_INT_CTRL_REG, 0x01); 592 if (err) 593 return err; 594 595 err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], 596 SP_COMMON_INT_MASK4_REG, SP_HPD_LOST | SP_HPD_PLUG); 597 if (err) 598 return err; 599 600 err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], SP_DP_INT_MASK1_REG, 601 SP_TRAINING_FINISH); 602 if (err) 603 return err; 604 605 err = regmap_write(anx78xx->map[I2C_IDX_RX_P0], SP_INT_MASK1_REG, 606 SP_CKDT_CHG | SP_SCDT_CHG); 607 if (err) 608 return err; 609 610 return 0; 611} 612 613static void anx78xx_poweron(struct anx78xx *anx78xx) 614{ 615 struct anx78xx_platform_data *pdata = &anx78xx->pdata; 616 int err; 617 618 if (WARN_ON(anx78xx->powered)) 619 return; 620 621 if (pdata->dvdd10) { 622 err = regulator_enable(pdata->dvdd10); 623 if (err) { 624 DRM_ERROR("Failed to enable DVDD10 regulator: %d\n", 625 err); 626 return; 627 } 628 629 usleep_range(1000, 2000); 630 } 631 632 gpiod_set_value_cansleep(pdata->gpiod_reset, 1); 633 usleep_range(1000, 2000); 634 635 gpiod_set_value_cansleep(pdata->gpiod_pd, 0); 636 usleep_range(1000, 2000); 637 638 gpiod_set_value_cansleep(pdata->gpiod_reset, 0); 639 640 /* Power on registers module */ 641 anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], SP_POWERDOWN_CTRL_REG, 642 SP_HDCP_PD | SP_AUDIO_PD | SP_VIDEO_PD | SP_LINK_PD); 643 anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2], SP_POWERDOWN_CTRL_REG, 644 SP_REGISTER_PD | SP_TOTAL_PD); 645 646 anx78xx->powered = true; 647} 648 649static void anx78xx_poweroff(struct anx78xx *anx78xx) 650{ 651 struct anx78xx_platform_data *pdata = &anx78xx->pdata; 652 int err; 653 654 if (WARN_ON(!anx78xx->powered)) 655 return; 656 657 gpiod_set_value_cansleep(pdata->gpiod_reset, 1); 658 usleep_range(1000, 2000); 659 660 gpiod_set_value_cansleep(pdata->gpiod_pd, 1); 661 usleep_range(1000, 2000); 662 663 if (pdata->dvdd10) { 664 err = regulator_disable(pdata->dvdd10); 665 if (err) { 666 DRM_ERROR("Failed to disable DVDD10 regulator: %d\n", 667 err); 668 return; 669 } 670 671 usleep_range(1000, 2000); 672 } 673 674 anx78xx->powered = false; 675} 676 677static int anx78xx_start(struct anx78xx *anx78xx) 678{ 679 int err; 680 681 /* Power on all modules */ 682 err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2], 683 SP_POWERDOWN_CTRL_REG, 684 SP_HDCP_PD | SP_AUDIO_PD | SP_VIDEO_PD | 685 SP_LINK_PD); 686 687 err = anx78xx_enable_interrupts(anx78xx); 688 if (err) { 689 DRM_ERROR("Failed to enable interrupts: %d\n", err); 690 goto err_poweroff; 691 } 692 693 err = anx78xx_rx_initialization(anx78xx); 694 if (err) { 695 DRM_ERROR("Failed receiver initialization: %d\n", err); 696 goto err_poweroff; 697 } 698 699 err = anx78xx_tx_initialization(anx78xx); 700 if (err) { 701 DRM_ERROR("Failed transmitter initialization: %d\n", err); 702 goto err_poweroff; 703 } 704 705 /* 706 * This delay seems to help keep the hardware in a good state. Without 707 * it, there are times where it fails silently. 708 */ 709 usleep_range(10000, 15000); 710 711 return 0; 712 713err_poweroff: 714 DRM_ERROR("Failed SlimPort transmitter initialization: %d\n", err); 715 anx78xx_poweroff(anx78xx); 716 717 return err; 718} 719 720static int anx78xx_init_pdata(struct anx78xx *anx78xx) 721{ 722 struct anx78xx_platform_data *pdata = &anx78xx->pdata; 723 struct device *dev = &anx78xx->client->dev; 724 725 /* 1.0V digital core power regulator */ 726 pdata->dvdd10 = devm_regulator_get(dev, "dvdd10"); 727 if (IS_ERR(pdata->dvdd10)) { 728 DRM_ERROR("DVDD10 regulator not found\n"); 729 return PTR_ERR(pdata->dvdd10); 730 } 731 732 /* GPIO for HPD */ 733 pdata->gpiod_hpd = devm_gpiod_get(dev, "hpd", GPIOD_IN); 734 if (IS_ERR(pdata->gpiod_hpd)) 735 return PTR_ERR(pdata->gpiod_hpd); 736 737 /* GPIO for chip power down */ 738 pdata->gpiod_pd = devm_gpiod_get(dev, "pd", GPIOD_OUT_HIGH); 739 if (IS_ERR(pdata->gpiod_pd)) 740 return PTR_ERR(pdata->gpiod_pd); 741 742 /* GPIO for chip reset */ 743 pdata->gpiod_reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); 744 745 return PTR_ERR_OR_ZERO(pdata->gpiod_reset); 746} 747 748static int anx78xx_dp_link_training(struct anx78xx *anx78xx) 749{ 750 u8 dp_bw, value; 751 int err; 752 753 err = regmap_write(anx78xx->map[I2C_IDX_RX_P0], SP_HDMI_MUTE_CTRL_REG, 754 0x0); 755 if (err) 756 return err; 757 758 err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2], 759 SP_POWERDOWN_CTRL_REG, 760 SP_TOTAL_PD); 761 if (err) 762 return err; 763 764 err = drm_dp_dpcd_readb(&anx78xx->aux, DP_MAX_LINK_RATE, &dp_bw); 765 if (err < 0) 766 return err; 767 768 switch (dp_bw) { 769 case DP_LINK_BW_1_62: 770 case DP_LINK_BW_2_7: 771 case DP_LINK_BW_5_4: 772 break; 773 774 default: 775 DRM_DEBUG_KMS("DP bandwidth (%#02x) not supported\n", dp_bw); 776 return -EINVAL; 777 } 778 779 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL1_REG, 780 SP_VIDEO_MUTE); 781 if (err) 782 return err; 783 784 err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2], 785 SP_VID_CTRL1_REG, SP_VIDEO_EN); 786 if (err) 787 return err; 788 789 /* Get DPCD info */ 790 err = drm_dp_dpcd_read(&anx78xx->aux, DP_DPCD_REV, 791 &anx78xx->dpcd, DP_RECEIVER_CAP_SIZE); 792 if (err < 0) { 793 DRM_ERROR("Failed to read DPCD: %d\n", err); 794 return err; 795 } 796 797 /* Clear channel x SERDES power down */ 798 err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P0], 799 SP_DP_ANALOG_POWER_DOWN_REG, SP_CH0_PD); 800 if (err) 801 return err; 802 803 /* Check link capabilities */ 804 err = drm_dp_link_probe(&anx78xx->aux, &anx78xx->link); 805 if (err < 0) { 806 DRM_ERROR("Failed to probe link capabilities: %d\n", err); 807 return err; 808 } 809 810 /* Power up the sink */ 811 err = drm_dp_link_power_up(&anx78xx->aux, &anx78xx->link); 812 if (err < 0) { 813 DRM_ERROR("Failed to power up DisplayPort link: %d\n", err); 814 return err; 815 } 816 817 /* Possibly enable downspread on the sink */ 818 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], 819 SP_DP_DOWNSPREAD_CTRL1_REG, 0); 820 if (err) 821 return err; 822 823 if (anx78xx->dpcd[DP_MAX_DOWNSPREAD] & DP_MAX_DOWNSPREAD_0_5) { 824 DRM_DEBUG("Enable downspread on the sink\n"); 825 /* 4000PPM */ 826 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], 827 SP_DP_DOWNSPREAD_CTRL1_REG, 8); 828 if (err) 829 return err; 830 831 err = drm_dp_dpcd_writeb(&anx78xx->aux, DP_DOWNSPREAD_CTRL, 832 DP_SPREAD_AMP_0_5); 833 if (err < 0) 834 return err; 835 } else { 836 err = drm_dp_dpcd_writeb(&anx78xx->aux, DP_DOWNSPREAD_CTRL, 0); 837 if (err < 0) 838 return err; 839 } 840 841 /* Set the lane count and the link rate on the sink */ 842 if (drm_dp_enhanced_frame_cap(anx78xx->dpcd)) 843 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], 844 SP_DP_SYSTEM_CTRL_BASE + 4, 845 SP_ENHANCED_MODE); 846 else 847 err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P0], 848 SP_DP_SYSTEM_CTRL_BASE + 4, 849 SP_ENHANCED_MODE); 850 if (err) 851 return err; 852 853 value = drm_dp_link_rate_to_bw_code(anx78xx->link.rate); 854 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], 855 SP_DP_MAIN_LINK_BW_SET_REG, value); 856 if (err) 857 return err; 858 859 err = drm_dp_link_configure(&anx78xx->aux, &anx78xx->link); 860 if (err < 0) { 861 DRM_ERROR("Failed to configure DisplayPort link: %d\n", err); 862 return err; 863 } 864 865 /* Start training on the source */ 866 err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_DP_LT_CTRL_REG, 867 SP_LT_EN); 868 if (err) 869 return err; 870 871 return 0; 872} 873 874static int anx78xx_config_dp_output(struct anx78xx *anx78xx) 875{ 876 int err; 877 878 err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL1_REG, 879 SP_VIDEO_MUTE); 880 if (err) 881 return err; 882 883 /* Enable DP output */ 884 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL1_REG, 885 SP_VIDEO_EN); 886 if (err) 887 return err; 888 889 return 0; 890} 891 892static int anx78xx_send_video_infoframe(struct anx78xx *anx78xx, 893 struct hdmi_avi_infoframe *frame) 894{ 895 u8 buffer[HDMI_INFOFRAME_HEADER_SIZE + HDMI_AVI_INFOFRAME_SIZE]; 896 int err; 897 898 err = hdmi_avi_infoframe_pack(frame, buffer, sizeof(buffer)); 899 if (err < 0) { 900 DRM_ERROR("Failed to pack AVI infoframe: %d\n", err); 901 return err; 902 } 903 904 err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P0], 905 SP_PACKET_SEND_CTRL_REG, SP_AVI_IF_EN); 906 if (err) 907 return err; 908 909 err = regmap_bulk_write(anx78xx->map[I2C_IDX_TX_P2], 910 SP_INFOFRAME_AVI_DB1_REG, buffer, 911 frame->length); 912 if (err) 913 return err; 914 915 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], 916 SP_PACKET_SEND_CTRL_REG, SP_AVI_IF_UD); 917 if (err) 918 return err; 919 920 err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], 921 SP_PACKET_SEND_CTRL_REG, SP_AVI_IF_EN); 922 if (err) 923 return err; 924 925 return 0; 926} 927 928static int anx78xx_get_downstream_info(struct anx78xx *anx78xx) 929{ 930 u8 value; 931 int err; 932 933 err = drm_dp_dpcd_readb(&anx78xx->aux, DP_SINK_COUNT, &value); 934 if (err < 0) { 935 DRM_ERROR("Get sink count failed %d\n", err); 936 return err; 937 } 938 939 if (!DP_GET_SINK_COUNT(value)) { 940 DRM_ERROR("Downstream disconnected\n"); 941 return -EIO; 942 } 943 944 return 0; 945} 946 947static int anx78xx_get_modes(struct drm_connector *connector) 948{ 949 struct anx78xx *anx78xx = connector_to_anx78xx(connector); 950 int err, num_modes = 0; 951 952 if (WARN_ON(!anx78xx->powered)) 953 return 0; 954 955 if (anx78xx->edid) 956 return drm_add_edid_modes(connector, anx78xx->edid); 957 958 mutex_lock(&anx78xx->lock); 959 960 err = anx78xx_get_downstream_info(anx78xx); 961 if (err) { 962 DRM_ERROR("Failed to get downstream info: %d\n", err); 963 goto unlock; 964 } 965 966 anx78xx->edid = drm_get_edid(connector, &anx78xx->aux.ddc); 967 if (!anx78xx->edid) { 968 DRM_ERROR("Failed to read EDID\n"); 969 goto unlock; 970 } 971 972 err = drm_mode_connector_update_edid_property(connector, 973 anx78xx->edid); 974 if (err) { 975 DRM_ERROR("Failed to update EDID property: %d\n", err); 976 goto unlock; 977 } 978 979 num_modes = drm_add_edid_modes(connector, anx78xx->edid); 980 /* Store the ELD */ 981 drm_edid_to_eld(connector, anx78xx->edid); 982 983unlock: 984 mutex_unlock(&anx78xx->lock); 985 986 return num_modes; 987} 988 989static const struct drm_connector_helper_funcs anx78xx_connector_helper_funcs = { 990 .get_modes = anx78xx_get_modes, 991}; 992 993static enum drm_connector_status anx78xx_detect(struct drm_connector *connector, 994 bool force) 995{ 996 struct anx78xx *anx78xx = connector_to_anx78xx(connector); 997 998 if (!gpiod_get_value(anx78xx->pdata.gpiod_hpd)) 999 return connector_status_disconnected; 1000 1001 return connector_status_connected; 1002} 1003 1004static const struct drm_connector_funcs anx78xx_connector_funcs = { 1005 .dpms = drm_atomic_helper_connector_dpms, 1006 .fill_modes = drm_helper_probe_single_connector_modes, 1007 .detect = anx78xx_detect, 1008 .destroy = drm_connector_cleanup, 1009 .reset = drm_atomic_helper_connector_reset, 1010 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, 1011 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, 1012}; 1013 1014static int anx78xx_bridge_attach(struct drm_bridge *bridge) 1015{ 1016 struct anx78xx *anx78xx = bridge_to_anx78xx(bridge); 1017 int err; 1018 1019 if (!bridge->encoder) { 1020 DRM_ERROR("Parent encoder object not found"); 1021 return -ENODEV; 1022 } 1023 1024 /* Register aux channel */ 1025 anx78xx->aux.name = "DP-AUX"; 1026 anx78xx->aux.dev = &anx78xx->client->dev; 1027 anx78xx->aux.transfer = anx78xx_aux_transfer; 1028 1029 err = drm_dp_aux_register(&anx78xx->aux); 1030 if (err < 0) { 1031 DRM_ERROR("Failed to register aux channel: %d\n", err); 1032 return err; 1033 } 1034 1035 err = drm_connector_init(bridge->dev, &anx78xx->connector, 1036 &anx78xx_connector_funcs, 1037 DRM_MODE_CONNECTOR_DisplayPort); 1038 if (err) { 1039 DRM_ERROR("Failed to initialize connector: %d\n", err); 1040 return err; 1041 } 1042 1043 drm_connector_helper_add(&anx78xx->connector, 1044 &anx78xx_connector_helper_funcs); 1045 1046 err = drm_connector_register(&anx78xx->connector); 1047 if (err) { 1048 DRM_ERROR("Failed to register connector: %d\n", err); 1049 return err; 1050 } 1051 1052 anx78xx->connector.polled = DRM_CONNECTOR_POLL_HPD; 1053 1054 err = drm_mode_connector_attach_encoder(&anx78xx->connector, 1055 bridge->encoder); 1056 if (err) { 1057 DRM_ERROR("Failed to link up connector to encoder: %d\n", err); 1058 return err; 1059 } 1060 1061 return 0; 1062} 1063 1064static bool anx78xx_bridge_mode_fixup(struct drm_bridge *bridge, 1065 const struct drm_display_mode *mode, 1066 struct drm_display_mode *adjusted_mode) 1067{ 1068 if (mode->flags & DRM_MODE_FLAG_INTERLACE) 1069 return false; 1070 1071 /* Max 1200p at 5.4 Ghz, one lane */ 1072 if (mode->clock > 154000) 1073 return false; 1074 1075 return true; 1076} 1077 1078static void anx78xx_bridge_disable(struct drm_bridge *bridge) 1079{ 1080 struct anx78xx *anx78xx = bridge_to_anx78xx(bridge); 1081 1082 /* Power off all modules except configuration registers access */ 1083 anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], SP_POWERDOWN_CTRL_REG, 1084 SP_HDCP_PD | SP_AUDIO_PD | SP_VIDEO_PD | SP_LINK_PD); 1085} 1086 1087static void anx78xx_bridge_mode_set(struct drm_bridge *bridge, 1088 struct drm_display_mode *mode, 1089 struct drm_display_mode *adjusted_mode) 1090{ 1091 struct anx78xx *anx78xx = bridge_to_anx78xx(bridge); 1092 struct hdmi_avi_infoframe frame; 1093 int err; 1094 1095 if (WARN_ON(!anx78xx->powered)) 1096 return; 1097 1098 mutex_lock(&anx78xx->lock); 1099 1100 err = drm_hdmi_avi_infoframe_from_display_mode(&frame, adjusted_mode); 1101 if (err) { 1102 DRM_ERROR("Failed to setup AVI infoframe: %d\n", err); 1103 goto unlock; 1104 } 1105 1106 err = anx78xx_send_video_infoframe(anx78xx, &frame); 1107 if (err) 1108 DRM_ERROR("Failed to send AVI infoframe: %d\n", err); 1109 1110unlock: 1111 mutex_unlock(&anx78xx->lock); 1112} 1113 1114static void anx78xx_bridge_enable(struct drm_bridge *bridge) 1115{ 1116 struct anx78xx *anx78xx = bridge_to_anx78xx(bridge); 1117 int err; 1118 1119 err = anx78xx_start(anx78xx); 1120 if (err) { 1121 DRM_ERROR("Failed to initialize: %d\n", err); 1122 return; 1123 } 1124 1125 err = anx78xx_set_hpd(anx78xx); 1126 if (err) 1127 DRM_ERROR("Failed to set HPD: %d\n", err); 1128} 1129 1130static const struct drm_bridge_funcs anx78xx_bridge_funcs = { 1131 .attach = anx78xx_bridge_attach, 1132 .mode_fixup = anx78xx_bridge_mode_fixup, 1133 .disable = anx78xx_bridge_disable, 1134 .mode_set = anx78xx_bridge_mode_set, 1135 .enable = anx78xx_bridge_enable, 1136}; 1137 1138static irqreturn_t anx78xx_hpd_threaded_handler(int irq, void *data) 1139{ 1140 struct anx78xx *anx78xx = data; 1141 int err; 1142 1143 if (anx78xx->powered) 1144 return IRQ_HANDLED; 1145 1146 mutex_lock(&anx78xx->lock); 1147 1148 /* Cable is pulled, power on the chip */ 1149 anx78xx_poweron(anx78xx); 1150 1151 err = anx78xx_enable_interrupts(anx78xx); 1152 if (err) 1153 DRM_ERROR("Failed to enable interrupts: %d\n", err); 1154 1155 mutex_unlock(&anx78xx->lock); 1156 1157 return IRQ_HANDLED; 1158} 1159 1160static int anx78xx_handle_dp_int_1(struct anx78xx *anx78xx, u8 irq) 1161{ 1162 int err; 1163 1164 DRM_DEBUG_KMS("Handle DP interrupt 1: %02x\n", irq); 1165 1166 err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], SP_DP_INT_STATUS1_REG, 1167 irq); 1168 if (err) 1169 return err; 1170 1171 if (irq & SP_TRAINING_FINISH) { 1172 DRM_DEBUG_KMS("IRQ: hardware link training finished\n"); 1173 err = anx78xx_config_dp_output(anx78xx); 1174 } 1175 1176 return err; 1177} 1178 1179static bool anx78xx_handle_common_int_4(struct anx78xx *anx78xx, u8 irq) 1180{ 1181 bool event = false; 1182 int err; 1183 1184 DRM_DEBUG_KMS("Handle common interrupt 4: %02x\n", irq); 1185 1186 err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], 1187 SP_COMMON_INT_STATUS4_REG, irq); 1188 if (err) { 1189 DRM_ERROR("Failed to write SP_COMMON_INT_STATUS4 %d\n", err); 1190 return event; 1191 } 1192 1193 if (irq & SP_HPD_LOST) { 1194 DRM_DEBUG_KMS("IRQ: Hot plug detect - cable is pulled out\n"); 1195 event = true; 1196 anx78xx_poweroff(anx78xx); 1197 /* Free cached EDID */ 1198 kfree(anx78xx->edid); 1199 anx78xx->edid = NULL; 1200 } else if (irq & SP_HPD_PLUG) { 1201 DRM_DEBUG_KMS("IRQ: Hot plug detect - cable plug\n"); 1202 event = true; 1203 } 1204 1205 return event; 1206} 1207 1208static void anx78xx_handle_hdmi_int_1(struct anx78xx *anx78xx, u8 irq) 1209{ 1210 unsigned int value; 1211 int err; 1212 1213 DRM_DEBUG_KMS("Handle HDMI interrupt 1: %02x\n", irq); 1214 1215 err = regmap_write(anx78xx->map[I2C_IDX_RX_P0], SP_INT_STATUS1_REG, 1216 irq); 1217 if (err) { 1218 DRM_ERROR("Write HDMI int 1 failed: %d\n", err); 1219 return; 1220 } 1221 1222 if ((irq & SP_CKDT_CHG) || (irq & SP_SCDT_CHG)) { 1223 DRM_DEBUG_KMS("IRQ: HDMI input detected\n"); 1224 1225 err = regmap_read(anx78xx->map[I2C_IDX_RX_P0], 1226 SP_SYSTEM_STATUS_REG, &value); 1227 if (err) { 1228 DRM_ERROR("Read system status reg failed: %d\n", err); 1229 return; 1230 } 1231 1232 if (!(value & SP_TMDS_CLOCK_DET)) { 1233 DRM_DEBUG_KMS("IRQ: *** Waiting for HDMI clock ***\n"); 1234 return; 1235 } 1236 1237 if (!(value & SP_TMDS_DE_DET)) { 1238 DRM_DEBUG_KMS("IRQ: *** Waiting for HDMI signal ***\n"); 1239 return; 1240 } 1241 1242 err = anx78xx_dp_link_training(anx78xx); 1243 if (err) 1244 DRM_ERROR("Failed to start link training: %d\n", err); 1245 } 1246} 1247 1248static irqreturn_t anx78xx_intp_threaded_handler(int unused, void *data) 1249{ 1250 struct anx78xx *anx78xx = data; 1251 bool event = false; 1252 unsigned int irq; 1253 int err; 1254 1255 mutex_lock(&anx78xx->lock); 1256 1257 err = regmap_read(anx78xx->map[I2C_IDX_TX_P2], SP_DP_INT_STATUS1_REG, 1258 &irq); 1259 if (err) { 1260 DRM_ERROR("Failed to read DP interrupt 1 status: %d\n", err); 1261 goto unlock; 1262 } 1263 1264 if (irq) 1265 anx78xx_handle_dp_int_1(anx78xx, irq); 1266 1267 err = regmap_read(anx78xx->map[I2C_IDX_TX_P2], 1268 SP_COMMON_INT_STATUS4_REG, &irq); 1269 if (err) { 1270 DRM_ERROR("Failed to read common interrupt 4 status: %d\n", 1271 err); 1272 goto unlock; 1273 } 1274 1275 if (irq) 1276 event = anx78xx_handle_common_int_4(anx78xx, irq); 1277 1278 /* Make sure we are still powered after handle HPD events */ 1279 if (!anx78xx->powered) 1280 goto unlock; 1281 1282 err = regmap_read(anx78xx->map[I2C_IDX_RX_P0], SP_INT_STATUS1_REG, 1283 &irq); 1284 if (err) { 1285 DRM_ERROR("Failed to read HDMI int 1 status: %d\n", err); 1286 goto unlock; 1287 } 1288 1289 if (irq) 1290 anx78xx_handle_hdmi_int_1(anx78xx, irq); 1291 1292unlock: 1293 mutex_unlock(&anx78xx->lock); 1294 1295 if (event) 1296 drm_helper_hpd_irq_event(anx78xx->connector.dev); 1297 1298 return IRQ_HANDLED; 1299} 1300 1301static void unregister_i2c_dummy_clients(struct anx78xx *anx78xx) 1302{ 1303 unsigned int i; 1304 1305 for (i = 0; i < ARRAY_SIZE(anx78xx->i2c_dummy); i++) 1306 if (anx78xx->i2c_dummy[i]) 1307 i2c_unregister_device(anx78xx->i2c_dummy[i]); 1308} 1309 1310static const struct regmap_config anx78xx_regmap_config = { 1311 .reg_bits = 8, 1312 .val_bits = 8, 1313}; 1314 1315static const u16 anx78xx_chipid_list[] = { 1316 0x7812, 1317 0x7814, 1318 0x7818, 1319}; 1320 1321static int anx78xx_i2c_probe(struct i2c_client *client, 1322 const struct i2c_device_id *id) 1323{ 1324 struct anx78xx *anx78xx; 1325 struct anx78xx_platform_data *pdata; 1326 unsigned int i, idl, idh, version; 1327 bool found = false; 1328 int err; 1329 1330 anx78xx = devm_kzalloc(&client->dev, sizeof(*anx78xx), GFP_KERNEL); 1331 if (!anx78xx) 1332 return -ENOMEM; 1333 1334 pdata = &anx78xx->pdata; 1335 1336 mutex_init(&anx78xx->lock); 1337 1338#if IS_ENABLED(CONFIG_OF) 1339 anx78xx->bridge.of_node = client->dev.of_node; 1340#endif 1341 1342 anx78xx->client = client; 1343 i2c_set_clientdata(client, anx78xx); 1344 1345 err = anx78xx_init_pdata(anx78xx); 1346 if (err) { 1347 DRM_ERROR("Failed to initialize pdata: %d\n", err); 1348 return err; 1349 } 1350 1351 pdata->hpd_irq = gpiod_to_irq(pdata->gpiod_hpd); 1352 if (pdata->hpd_irq < 0) { 1353 DRM_ERROR("Failed to get HPD IRQ: %d\n", pdata->hpd_irq); 1354 return -ENODEV; 1355 } 1356 1357 pdata->intp_irq = client->irq; 1358 if (!pdata->intp_irq) { 1359 DRM_ERROR("Failed to get CABLE_DET and INTP IRQ\n"); 1360 return -ENODEV; 1361 } 1362 1363 /* Map slave addresses of ANX7814 */ 1364 for (i = 0; i < I2C_NUM_ADDRESSES; i++) { 1365 anx78xx->i2c_dummy[i] = i2c_new_dummy(client->adapter, 1366 anx78xx_i2c_addresses[i] >> 1); 1367 if (!anx78xx->i2c_dummy[i]) { 1368 err = -ENOMEM; 1369 DRM_ERROR("Failed to reserve I2C bus %02x\n", 1370 anx78xx_i2c_addresses[i]); 1371 goto err_unregister_i2c; 1372 } 1373 1374 anx78xx->map[i] = devm_regmap_init_i2c(anx78xx->i2c_dummy[i], 1375 &anx78xx_regmap_config); 1376 if (IS_ERR(anx78xx->map[i])) { 1377 err = PTR_ERR(anx78xx->map[i]); 1378 DRM_ERROR("Failed regmap initialization %02x\n", 1379 anx78xx_i2c_addresses[i]); 1380 goto err_unregister_i2c; 1381 } 1382 } 1383 1384 /* Look for supported chip ID */ 1385 anx78xx_poweron(anx78xx); 1386 1387 err = regmap_read(anx78xx->map[I2C_IDX_TX_P2], SP_DEVICE_IDL_REG, 1388 &idl); 1389 if (err) 1390 goto err_poweroff; 1391 1392 err = regmap_read(anx78xx->map[I2C_IDX_TX_P2], SP_DEVICE_IDH_REG, 1393 &idh); 1394 if (err) 1395 goto err_poweroff; 1396 1397 anx78xx->chipid = (u8)idl | ((u8)idh << 8); 1398 1399 err = regmap_read(anx78xx->map[I2C_IDX_TX_P2], SP_DEVICE_VERSION_REG, 1400 &version); 1401 if (err) 1402 goto err_poweroff; 1403 1404 for (i = 0; i < ARRAY_SIZE(anx78xx_chipid_list); i++) { 1405 if (anx78xx->chipid == anx78xx_chipid_list[i]) { 1406 DRM_INFO("Found ANX%x (ver. %d) SlimPort Transmitter\n", 1407 anx78xx->chipid, version); 1408 found = true; 1409 break; 1410 } 1411 } 1412 1413 if (!found) { 1414 DRM_ERROR("ANX%x (ver. %d) not supported by this driver\n", 1415 anx78xx->chipid, version); 1416 err = -ENODEV; 1417 goto err_poweroff; 1418 } 1419 1420 err = devm_request_threaded_irq(&client->dev, pdata->hpd_irq, NULL, 1421 anx78xx_hpd_threaded_handler, 1422 IRQF_TRIGGER_RISING | IRQF_ONESHOT, 1423 "anx78xx-hpd", anx78xx); 1424 if (err) { 1425 DRM_ERROR("Failed to request CABLE_DET threaded IRQ: %d\n", 1426 err); 1427 goto err_poweroff; 1428 } 1429 1430 err = devm_request_threaded_irq(&client->dev, pdata->intp_irq, NULL, 1431 anx78xx_intp_threaded_handler, 1432 IRQF_TRIGGER_RISING | IRQF_ONESHOT, 1433 "anx78xx-intp", anx78xx); 1434 if (err) { 1435 DRM_ERROR("Failed to request INTP threaded IRQ: %d\n", err); 1436 goto err_poweroff; 1437 } 1438 1439 anx78xx->bridge.funcs = &anx78xx_bridge_funcs; 1440 1441 err = drm_bridge_add(&anx78xx->bridge); 1442 if (err < 0) { 1443 DRM_ERROR("Failed to add drm bridge: %d\n", err); 1444 goto err_poweroff; 1445 } 1446 1447 /* If cable is pulled out, just poweroff and wait for HPD event */ 1448 if (!gpiod_get_value(anx78xx->pdata.gpiod_hpd)) 1449 anx78xx_poweroff(anx78xx); 1450 1451 return 0; 1452 1453err_poweroff: 1454 anx78xx_poweroff(anx78xx); 1455 1456err_unregister_i2c: 1457 unregister_i2c_dummy_clients(anx78xx); 1458 return err; 1459} 1460 1461static int anx78xx_i2c_remove(struct i2c_client *client) 1462{ 1463 struct anx78xx *anx78xx = i2c_get_clientdata(client); 1464 1465 drm_bridge_remove(&anx78xx->bridge); 1466 1467 unregister_i2c_dummy_clients(anx78xx); 1468 1469 kfree(anx78xx->edid); 1470 1471 return 0; 1472} 1473 1474static const struct i2c_device_id anx78xx_id[] = { 1475 { "anx7814", 0 }, 1476 { /* sentinel */ } 1477}; 1478MODULE_DEVICE_TABLE(i2c, anx78xx_id); 1479 1480#if IS_ENABLED(CONFIG_OF) 1481static const struct of_device_id anx78xx_match_table[] = { 1482 { .compatible = "analogix,anx7814", }, 1483 { /* sentinel */ }, 1484}; 1485MODULE_DEVICE_TABLE(of, anx78xx_match_table); 1486#endif 1487 1488static struct i2c_driver anx78xx_driver = { 1489 .driver = { 1490 .name = "anx7814", 1491 .of_match_table = of_match_ptr(anx78xx_match_table), 1492 }, 1493 .probe = anx78xx_i2c_probe, 1494 .remove = anx78xx_i2c_remove, 1495 .id_table = anx78xx_id, 1496}; 1497module_i2c_driver(anx78xx_driver); 1498 1499MODULE_DESCRIPTION("ANX78xx SlimPort Transmitter driver"); 1500MODULE_AUTHOR("Enric Balletbo i Serra <enric.balletbo@collabora.com>"); 1501MODULE_LICENSE("GPL v2");