Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
   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");