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

Merge branch 'tda998x-devel' of git://ftp.arm.linux.org.uk/~rmk/linux-cubox into drm-next

Updates from Jean-Fracois for the TDA998x driver, which are on top of
the fixes you have previously pulled, except these changes aren't
intended for -rc, but the next merge window.

Several of these are issues of correctness - passing more correct HDMI
info packets, not reading registers in older chips documented as write
only (despite appearing to be read/write in later chips). Others are
code cleanups (using definitions rather than constants where we have
them already in the kernel).

Additional functionality is also added by way of optional support for
the IRQ from the TDA998x, which allows us to avoid busy-waiting for
the EDID reads.

* 'tda998x-devel' of git://ftp.arm.linux.org.uk/~rmk/linux-cubox:
drm/i2c: tda998x: always use the same device for all kernel messages
drm/i2c: tda998x: adjust the audio clock divider for S/PDIF
drm/i2c: tda998x: code optimization
drm/i2c: tda998x: remove the unused variable ca_i2s
drm/i2c: tda998x: make the audio code more readable
drm/i2c: tda998x: use irq for connection status and EDID read
drm/i2c: tda998x: always enable EDID read IRQ
drm/i2c: tda998x: add DT documentation
drm/i2c: tda998x: add DT support
drm/i2c: tda998x: don't read write-only registers
drm/i2c: tda998x: don't freeze the system at audio startup time
drm/i2c: tda998x: change probe message origin
drm/i2c: tda998x: code cleanup
drm/i2c: tda998x: clean up error chip version checking
drm/i2c: tda998x: check more I/O errors
drm/i2c: tda998x: simplify the i2c read/write functions
drm/i2c: tda998x: use ALSA IEC958 definitions and update audio frequency
drm/i2c: tda998x: add the active aspect in HDMI AVI frame
drm/i2c: tda998x: use HDMI constants

+410 -219
+27
Documentation/devicetree/bindings/drm/i2c/tda998x.txt
··· 1 + Device-Tree bindings for the NXP TDA998x HDMI transmitter 2 + 3 + Required properties; 4 + - compatible: must be "nxp,tda998x" 5 + 6 + Optional properties: 7 + - interrupts: interrupt number and trigger type 8 + default: polling 9 + 10 + - pinctrl-0: pin control group to be used for 11 + screen plug/unplug interrupt. 12 + 13 + - pinctrl-names: must contain a "default" entry. 14 + 15 + - video-ports: 24 bits value which defines how the video controller 16 + output is wired to the TDA998x input - default: <0x230145> 17 + 18 + Example: 19 + 20 + tda998x: hdmi-encoder { 21 + compatible = "nxp,tda998x"; 22 + reg = <0x70>; 23 + interrupt-parent = <&gpio0>; 24 + interrupts = <27 2>; /* falling edge */ 25 + pinctrl-0 = <&pmx_camera>; 26 + pinctrl-names = "default"; 27 + };
+383 -219
drivers/gpu/drm/i2c/tda998x_drv.c
··· 19 19 20 20 #include <linux/hdmi.h> 21 21 #include <linux/module.h> 22 + #include <linux/irq.h> 23 + #include <sound/asoundef.h> 22 24 23 25 #include <drm/drmP.h> 24 26 #include <drm/drm_crtc_helper.h> ··· 32 30 33 31 struct tda998x_priv { 34 32 struct i2c_client *cec; 33 + struct i2c_client *hdmi; 35 34 uint16_t rev; 36 35 uint8_t current_page; 37 36 int dpms; ··· 41 38 u8 vip_cntrl_1; 42 39 u8 vip_cntrl_2; 43 40 struct tda998x_encoder_params params; 41 + 42 + wait_queue_head_t wq_edid; 43 + volatile int wq_edid_wait; 44 + struct drm_encoder *encoder; 44 45 }; 45 46 46 47 #define to_tda998x_priv(x) ((struct tda998x_priv *)to_encoder_slave(x)->slave_priv) ··· 127 120 # define VIP_CNTRL_5_CKCASE (1 << 0) 128 121 # define VIP_CNTRL_5_SP_CNT(x) (((x) & 3) << 1) 129 122 #define REG_MUX_AP REG(0x00, 0x26) /* read/write */ 123 + # define MUX_AP_SELECT_I2S 0x64 124 + # define MUX_AP_SELECT_SPDIF 0x40 130 125 #define REG_MUX_VP_VIP_OUT REG(0x00, 0x27) /* read/write */ 131 126 #define REG_MAT_CONTRL REG(0x00, 0x80) /* write */ 132 127 # define MAT_CONTRL_MAT_SC(x) (((x) & 3) << 0) ··· 206 197 #define REG_I2S_FORMAT REG(0x00, 0xfc) /* read/write */ 207 198 # define I2S_FORMAT(x) (((x) & 3) << 0) 208 199 #define REG_AIP_CLKSEL REG(0x00, 0xfd) /* write */ 209 - # define AIP_CLKSEL_FS(x) (((x) & 3) << 0) 210 - # define AIP_CLKSEL_CLK_POL(x) (((x) & 1) << 2) 211 - # define AIP_CLKSEL_AIP(x) (((x) & 7) << 3) 212 - 200 + # define AIP_CLKSEL_AIP_SPDIF (0 << 3) 201 + # define AIP_CLKSEL_AIP_I2S (1 << 3) 202 + # define AIP_CLKSEL_FS_ACLK (0 << 0) 203 + # define AIP_CLKSEL_FS_MCLK (1 << 0) 204 + # define AIP_CLKSEL_FS_FS64SPDIF (2 << 0) 213 205 214 206 /* Page 02h: PLL settings */ 215 207 #define REG_PLL_SERIAL_1 REG(0x02, 0x00) /* read/write */ ··· 314 304 315 305 /* CEC registers: (not paged) 316 306 */ 307 + #define REG_CEC_INTSTATUS 0xee /* read */ 308 + # define CEC_INTSTATUS_CEC (1 << 0) 309 + # define CEC_INTSTATUS_HDMI (1 << 1) 317 310 #define REG_CEC_FRO_IM_CLK_CTRL 0xfb /* read/write */ 318 311 # define CEC_FRO_IM_CLK_CTRL_GHOST_DIS (1 << 7) 319 312 # define CEC_FRO_IM_CLK_CTRL_ENA_OTP (1 << 6) 320 313 # define CEC_FRO_IM_CLK_CTRL_IMCLK_SEL (1 << 1) 321 314 # define CEC_FRO_IM_CLK_CTRL_FRO_DIV (1 << 0) 315 + #define REG_CEC_RXSHPDINTENA 0xfc /* read/write */ 316 + #define REG_CEC_RXSHPDINT 0xfd /* read */ 322 317 #define REG_CEC_RXSHPDLEV 0xfe /* read */ 323 318 # define CEC_RXSHPDLEV_RXSENS (1 << 0) 324 319 # define CEC_RXSHPDLEV_HPD (1 << 1) ··· 343 328 #define TDA19988 0x0301 344 329 345 330 static void 346 - cec_write(struct drm_encoder *encoder, uint16_t addr, uint8_t val) 331 + cec_write(struct tda998x_priv *priv, uint16_t addr, uint8_t val) 347 332 { 348 - struct i2c_client *client = to_tda998x_priv(encoder)->cec; 333 + struct i2c_client *client = priv->cec; 349 334 uint8_t buf[] = {addr, val}; 350 335 int ret; 351 336 352 - ret = i2c_master_send(client, buf, ARRAY_SIZE(buf)); 337 + ret = i2c_master_send(client, buf, sizeof(buf)); 353 338 if (ret < 0) 354 339 dev_err(&client->dev, "Error %d writing to cec:0x%x\n", ret, addr); 355 340 } 356 341 357 342 static uint8_t 358 - cec_read(struct drm_encoder *encoder, uint8_t addr) 343 + cec_read(struct tda998x_priv *priv, uint8_t addr) 359 344 { 360 - struct i2c_client *client = to_tda998x_priv(encoder)->cec; 345 + struct i2c_client *client = priv->cec; 361 346 uint8_t val; 362 347 int ret; 363 348 ··· 376 361 return 0; 377 362 } 378 363 379 - static void 380 - set_page(struct drm_encoder *encoder, uint16_t reg) 364 + static int 365 + set_page(struct tda998x_priv *priv, uint16_t reg) 381 366 { 382 - struct tda998x_priv *priv = to_tda998x_priv(encoder); 383 - 384 367 if (REG2PAGE(reg) != priv->current_page) { 385 - struct i2c_client *client = drm_i2c_encoder_get_client(encoder); 368 + struct i2c_client *client = priv->hdmi; 386 369 uint8_t buf[] = { 387 370 REG_CURPAGE, REG2PAGE(reg) 388 371 }; 389 372 int ret = i2c_master_send(client, buf, sizeof(buf)); 390 - if (ret < 0) 391 - dev_err(&client->dev, "Error %d writing to REG_CURPAGE\n", ret); 373 + if (ret < 0) { 374 + dev_err(&client->dev, "setpage %04x err %d\n", 375 + reg, ret); 376 + return ret; 377 + } 392 378 393 379 priv->current_page = REG2PAGE(reg); 394 380 } 381 + return 0; 395 382 } 396 383 397 384 static int 398 - reg_read_range(struct drm_encoder *encoder, uint16_t reg, char *buf, int cnt) 385 + reg_read_range(struct tda998x_priv *priv, uint16_t reg, char *buf, int cnt) 399 386 { 400 - struct i2c_client *client = drm_i2c_encoder_get_client(encoder); 387 + struct i2c_client *client = priv->hdmi; 401 388 uint8_t addr = REG2ADDR(reg); 402 389 int ret; 403 390 404 - set_page(encoder, reg); 391 + ret = set_page(priv, reg); 392 + if (ret < 0) 393 + return ret; 405 394 406 395 ret = i2c_master_send(client, &addr, sizeof(addr)); 407 396 if (ret < 0) ··· 423 404 } 424 405 425 406 static void 426 - reg_write_range(struct drm_encoder *encoder, uint16_t reg, uint8_t *p, int cnt) 407 + reg_write_range(struct tda998x_priv *priv, uint16_t reg, uint8_t *p, int cnt) 427 408 { 428 - struct i2c_client *client = drm_i2c_encoder_get_client(encoder); 409 + struct i2c_client *client = priv->hdmi; 429 410 uint8_t buf[cnt+1]; 430 411 int ret; 431 412 432 413 buf[0] = REG2ADDR(reg); 433 414 memcpy(&buf[1], p, cnt); 434 415 435 - set_page(encoder, reg); 416 + ret = set_page(priv, reg); 417 + if (ret < 0) 418 + return; 436 419 437 420 ret = i2c_master_send(client, buf, cnt + 1); 438 421 if (ret < 0) 439 422 dev_err(&client->dev, "Error %d writing to 0x%x\n", ret, reg); 440 423 } 441 424 442 - static uint8_t 443 - reg_read(struct drm_encoder *encoder, uint16_t reg) 425 + static int 426 + reg_read(struct tda998x_priv *priv, uint16_t reg) 444 427 { 445 428 uint8_t val = 0; 446 - reg_read_range(encoder, reg, &val, sizeof(val)); 429 + int ret; 430 + 431 + ret = reg_read_range(priv, reg, &val, sizeof(val)); 432 + if (ret < 0) 433 + return ret; 447 434 return val; 448 435 } 449 436 450 437 static void 451 - reg_write(struct drm_encoder *encoder, uint16_t reg, uint8_t val) 438 + reg_write(struct tda998x_priv *priv, uint16_t reg, uint8_t val) 452 439 { 453 - struct i2c_client *client = drm_i2c_encoder_get_client(encoder); 440 + struct i2c_client *client = priv->hdmi; 454 441 uint8_t buf[] = {REG2ADDR(reg), val}; 455 442 int ret; 456 443 457 - set_page(encoder, reg); 444 + ret = set_page(priv, reg); 445 + if (ret < 0) 446 + return; 458 447 459 - ret = i2c_master_send(client, buf, ARRAY_SIZE(buf)); 448 + ret = i2c_master_send(client, buf, sizeof(buf)); 460 449 if (ret < 0) 461 450 dev_err(&client->dev, "Error %d writing to 0x%x\n", ret, reg); 462 451 } 463 452 464 453 static void 465 - reg_write16(struct drm_encoder *encoder, uint16_t reg, uint16_t val) 454 + reg_write16(struct tda998x_priv *priv, uint16_t reg, uint16_t val) 466 455 { 467 - struct i2c_client *client = drm_i2c_encoder_get_client(encoder); 456 + struct i2c_client *client = priv->hdmi; 468 457 uint8_t buf[] = {REG2ADDR(reg), val >> 8, val}; 469 458 int ret; 470 459 471 - set_page(encoder, reg); 460 + ret = set_page(priv, reg); 461 + if (ret < 0) 462 + return; 472 463 473 - ret = i2c_master_send(client, buf, ARRAY_SIZE(buf)); 464 + ret = i2c_master_send(client, buf, sizeof(buf)); 474 465 if (ret < 0) 475 466 dev_err(&client->dev, "Error %d writing to 0x%x\n", ret, reg); 476 467 } 477 468 478 469 static void 479 - reg_set(struct drm_encoder *encoder, uint16_t reg, uint8_t val) 470 + reg_set(struct tda998x_priv *priv, uint16_t reg, uint8_t val) 480 471 { 481 - reg_write(encoder, reg, reg_read(encoder, reg) | val); 472 + int old_val; 473 + 474 + old_val = reg_read(priv, reg); 475 + if (old_val >= 0) 476 + reg_write(priv, reg, old_val | val); 482 477 } 483 478 484 479 static void 485 - reg_clear(struct drm_encoder *encoder, uint16_t reg, uint8_t val) 480 + reg_clear(struct tda998x_priv *priv, uint16_t reg, uint8_t val) 486 481 { 487 - reg_write(encoder, reg, reg_read(encoder, reg) & ~val); 482 + int old_val; 483 + 484 + old_val = reg_read(priv, reg); 485 + if (old_val >= 0) 486 + reg_write(priv, reg, old_val & ~val); 488 487 } 489 488 490 489 static void 491 - tda998x_reset(struct drm_encoder *encoder) 490 + tda998x_reset(struct tda998x_priv *priv) 492 491 { 493 492 /* reset audio and i2c master: */ 494 - reg_set(encoder, REG_SOFTRESET, SOFTRESET_AUDIO | SOFTRESET_I2C_MASTER); 493 + reg_write(priv, REG_SOFTRESET, SOFTRESET_AUDIO | SOFTRESET_I2C_MASTER); 495 494 msleep(50); 496 - reg_clear(encoder, REG_SOFTRESET, SOFTRESET_AUDIO | SOFTRESET_I2C_MASTER); 495 + reg_write(priv, REG_SOFTRESET, 0); 497 496 msleep(50); 498 497 499 498 /* reset transmitter: */ 500 - reg_set(encoder, REG_MAIN_CNTRL0, MAIN_CNTRL0_SR); 501 - reg_clear(encoder, REG_MAIN_CNTRL0, MAIN_CNTRL0_SR); 499 + reg_set(priv, REG_MAIN_CNTRL0, MAIN_CNTRL0_SR); 500 + reg_clear(priv, REG_MAIN_CNTRL0, MAIN_CNTRL0_SR); 502 501 503 502 /* PLL registers common configuration */ 504 - reg_write(encoder, REG_PLL_SERIAL_1, 0x00); 505 - reg_write(encoder, REG_PLL_SERIAL_2, PLL_SERIAL_2_SRL_NOSC(1)); 506 - reg_write(encoder, REG_PLL_SERIAL_3, 0x00); 507 - reg_write(encoder, REG_SERIALIZER, 0x00); 508 - reg_write(encoder, REG_BUFFER_OUT, 0x00); 509 - reg_write(encoder, REG_PLL_SCG1, 0x00); 510 - reg_write(encoder, REG_AUDIO_DIV, AUDIO_DIV_SERCLK_8); 511 - reg_write(encoder, REG_SEL_CLK, SEL_CLK_SEL_CLK1 | SEL_CLK_ENA_SC_CLK); 512 - reg_write(encoder, REG_PLL_SCGN1, 0xfa); 513 - reg_write(encoder, REG_PLL_SCGN2, 0x00); 514 - reg_write(encoder, REG_PLL_SCGR1, 0x5b); 515 - reg_write(encoder, REG_PLL_SCGR2, 0x00); 516 - reg_write(encoder, REG_PLL_SCG2, 0x10); 503 + reg_write(priv, REG_PLL_SERIAL_1, 0x00); 504 + reg_write(priv, REG_PLL_SERIAL_2, PLL_SERIAL_2_SRL_NOSC(1)); 505 + reg_write(priv, REG_PLL_SERIAL_3, 0x00); 506 + reg_write(priv, REG_SERIALIZER, 0x00); 507 + reg_write(priv, REG_BUFFER_OUT, 0x00); 508 + reg_write(priv, REG_PLL_SCG1, 0x00); 509 + reg_write(priv, REG_AUDIO_DIV, AUDIO_DIV_SERCLK_8); 510 + reg_write(priv, REG_SEL_CLK, SEL_CLK_SEL_CLK1 | SEL_CLK_ENA_SC_CLK); 511 + reg_write(priv, REG_PLL_SCGN1, 0xfa); 512 + reg_write(priv, REG_PLL_SCGN2, 0x00); 513 + reg_write(priv, REG_PLL_SCGR1, 0x5b); 514 + reg_write(priv, REG_PLL_SCGR2, 0x00); 515 + reg_write(priv, REG_PLL_SCG2, 0x10); 517 516 518 517 /* Write the default value MUX register */ 519 - reg_write(encoder, REG_MUX_VP_VIP_OUT, 0x24); 518 + reg_write(priv, REG_MUX_VP_VIP_OUT, 0x24); 519 + } 520 + 521 + /* 522 + * only 2 interrupts may occur: screen plug/unplug and EDID read 523 + */ 524 + static irqreturn_t tda998x_irq_thread(int irq, void *data) 525 + { 526 + struct tda998x_priv *priv = data; 527 + u8 sta, cec, lvl, flag0, flag1, flag2; 528 + 529 + if (!priv) 530 + return IRQ_HANDLED; 531 + sta = cec_read(priv, REG_CEC_INTSTATUS); 532 + cec = cec_read(priv, REG_CEC_RXSHPDINT); 533 + lvl = cec_read(priv, REG_CEC_RXSHPDLEV); 534 + flag0 = reg_read(priv, REG_INT_FLAGS_0); 535 + flag1 = reg_read(priv, REG_INT_FLAGS_1); 536 + flag2 = reg_read(priv, REG_INT_FLAGS_2); 537 + DRM_DEBUG_DRIVER( 538 + "tda irq sta %02x cec %02x lvl %02x f0 %02x f1 %02x f2 %02x\n", 539 + sta, cec, lvl, flag0, flag1, flag2); 540 + if ((flag2 & INT_FLAGS_2_EDID_BLK_RD) && priv->wq_edid_wait) { 541 + priv->wq_edid_wait = 0; 542 + wake_up(&priv->wq_edid); 543 + } else if (cec != 0) { /* HPD change */ 544 + if (priv->encoder && priv->encoder->dev) 545 + drm_helper_hpd_irq_event(priv->encoder->dev); 546 + } 547 + return IRQ_HANDLED; 520 548 } 521 549 522 550 static uint8_t tda998x_cksum(uint8_t *buf, size_t bytes) ··· 579 513 #define PB(x) (HB(2) + 1 + (x)) 580 514 581 515 static void 582 - tda998x_write_if(struct drm_encoder *encoder, uint8_t bit, uint16_t addr, 516 + tda998x_write_if(struct tda998x_priv *priv, uint8_t bit, uint16_t addr, 583 517 uint8_t *buf, size_t size) 584 518 { 585 519 buf[PB(0)] = tda998x_cksum(buf, size); 586 520 587 - reg_clear(encoder, REG_DIP_IF_FLAGS, bit); 588 - reg_write_range(encoder, addr, buf, size); 589 - reg_set(encoder, REG_DIP_IF_FLAGS, bit); 521 + reg_clear(priv, REG_DIP_IF_FLAGS, bit); 522 + reg_write_range(priv, addr, buf, size); 523 + reg_set(priv, REG_DIP_IF_FLAGS, bit); 590 524 } 591 525 592 526 static void 593 - tda998x_write_aif(struct drm_encoder *encoder, struct tda998x_encoder_params *p) 527 + tda998x_write_aif(struct tda998x_priv *priv, struct tda998x_encoder_params *p) 594 528 { 595 - uint8_t buf[PB(5) + 1]; 529 + u8 buf[PB(HDMI_AUDIO_INFOFRAME_SIZE) + 1]; 596 530 597 531 memset(buf, 0, sizeof(buf)); 598 - buf[HB(0)] = 0x84; 532 + buf[HB(0)] = HDMI_INFOFRAME_TYPE_AUDIO; 599 533 buf[HB(1)] = 0x01; 600 - buf[HB(2)] = 10; 534 + buf[HB(2)] = HDMI_AUDIO_INFOFRAME_SIZE; 601 535 buf[PB(1)] = p->audio_frame[1] & 0x07; /* CC */ 602 536 buf[PB(2)] = p->audio_frame[2] & 0x1c; /* SF */ 603 537 buf[PB(4)] = p->audio_frame[4]; 604 538 buf[PB(5)] = p->audio_frame[5] & 0xf8; /* DM_INH + LSV */ 605 539 606 - tda998x_write_if(encoder, DIP_IF_FLAGS_IF4, REG_IF4_HB0, buf, 540 + tda998x_write_if(priv, DIP_IF_FLAGS_IF4, REG_IF4_HB0, buf, 607 541 sizeof(buf)); 608 542 } 609 543 610 544 static void 611 - tda998x_write_avi(struct drm_encoder *encoder, struct drm_display_mode *mode) 545 + tda998x_write_avi(struct tda998x_priv *priv, struct drm_display_mode *mode) 612 546 { 613 - uint8_t buf[PB(13) + 1]; 547 + u8 buf[PB(HDMI_AVI_INFOFRAME_SIZE) + 1]; 614 548 615 549 memset(buf, 0, sizeof(buf)); 616 - buf[HB(0)] = 0x82; 550 + buf[HB(0)] = HDMI_INFOFRAME_TYPE_AVI; 617 551 buf[HB(1)] = 0x02; 618 - buf[HB(2)] = 13; 552 + buf[HB(2)] = HDMI_AVI_INFOFRAME_SIZE; 619 553 buf[PB(1)] = HDMI_SCAN_MODE_UNDERSCAN; 554 + buf[PB(2)] = HDMI_ACTIVE_ASPECT_PICTURE; 620 555 buf[PB(3)] = HDMI_QUANTIZATION_RANGE_FULL << 2; 621 556 buf[PB(4)] = drm_match_cea_mode(mode); 622 557 623 - tda998x_write_if(encoder, DIP_IF_FLAGS_IF2, REG_IF2_HB0, buf, 558 + tda998x_write_if(priv, DIP_IF_FLAGS_IF2, REG_IF2_HB0, buf, 624 559 sizeof(buf)); 625 560 } 626 561 627 - static void tda998x_audio_mute(struct drm_encoder *encoder, bool on) 562 + static void tda998x_audio_mute(struct tda998x_priv *priv, bool on) 628 563 { 629 564 if (on) { 630 - reg_set(encoder, REG_SOFTRESET, SOFTRESET_AUDIO); 631 - reg_clear(encoder, REG_SOFTRESET, SOFTRESET_AUDIO); 632 - reg_set(encoder, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_FIFO); 565 + reg_set(priv, REG_SOFTRESET, SOFTRESET_AUDIO); 566 + reg_clear(priv, REG_SOFTRESET, SOFTRESET_AUDIO); 567 + reg_set(priv, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_FIFO); 633 568 } else { 634 - reg_clear(encoder, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_FIFO); 569 + reg_clear(priv, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_FIFO); 635 570 } 636 571 } 637 572 638 573 static void 639 - tda998x_configure_audio(struct drm_encoder *encoder, 574 + tda998x_configure_audio(struct tda998x_priv *priv, 640 575 struct drm_display_mode *mode, struct tda998x_encoder_params *p) 641 576 { 642 - uint8_t buf[6], clksel_aip, clksel_fs, ca_i2s, cts_n, adiv; 577 + uint8_t buf[6], clksel_aip, clksel_fs, cts_n, adiv; 643 578 uint32_t n; 644 579 645 580 /* Enable audio ports */ 646 - reg_write(encoder, REG_ENA_AP, p->audio_cfg); 647 - reg_write(encoder, REG_ENA_ACLK, p->audio_clk_cfg); 581 + reg_write(priv, REG_ENA_AP, p->audio_cfg); 582 + reg_write(priv, REG_ENA_ACLK, p->audio_clk_cfg); 648 583 649 584 /* Set audio input source */ 650 585 switch (p->audio_format) { 651 586 case AFMT_SPDIF: 652 - reg_write(encoder, REG_MUX_AP, 0x40); 653 - clksel_aip = AIP_CLKSEL_AIP(0); 654 - /* FS64SPDIF */ 655 - clksel_fs = AIP_CLKSEL_FS(2); 587 + reg_write(priv, REG_MUX_AP, MUX_AP_SELECT_SPDIF); 588 + clksel_aip = AIP_CLKSEL_AIP_SPDIF; 589 + clksel_fs = AIP_CLKSEL_FS_FS64SPDIF; 656 590 cts_n = CTS_N_M(3) | CTS_N_K(3); 657 - ca_i2s = 0; 658 591 break; 659 592 660 593 case AFMT_I2S: 661 - reg_write(encoder, REG_MUX_AP, 0x64); 662 - clksel_aip = AIP_CLKSEL_AIP(1); 663 - /* ACLK */ 664 - clksel_fs = AIP_CLKSEL_FS(0); 594 + reg_write(priv, REG_MUX_AP, MUX_AP_SELECT_I2S); 595 + clksel_aip = AIP_CLKSEL_AIP_I2S; 596 + clksel_fs = AIP_CLKSEL_FS_ACLK; 665 597 cts_n = CTS_N_M(3) | CTS_N_K(3); 666 - ca_i2s = CA_I2S_CA_I2S(0); 667 598 break; 668 599 669 600 default: ··· 668 605 return; 669 606 } 670 607 671 - reg_write(encoder, REG_AIP_CLKSEL, clksel_aip); 672 - reg_clear(encoder, REG_AIP_CNTRL_0, AIP_CNTRL_0_LAYOUT); 673 - 674 - /* Enable automatic CTS generation */ 675 - reg_clear(encoder, REG_AIP_CNTRL_0, AIP_CNTRL_0_ACR_MAN); 676 - reg_write(encoder, REG_CTS_N, cts_n); 608 + reg_write(priv, REG_AIP_CLKSEL, clksel_aip); 609 + reg_clear(priv, REG_AIP_CNTRL_0, AIP_CNTRL_0_LAYOUT | 610 + AIP_CNTRL_0_ACR_MAN); /* auto CTS */ 611 + reg_write(priv, REG_CTS_N, cts_n); 677 612 678 613 /* 679 614 * Audio input somehow depends on HDMI line rate which is ··· 680 619 * There is no detailed info in the datasheet, so we just 681 620 * assume 100MHz requires larger divider. 682 621 */ 622 + adiv = AUDIO_DIV_SERCLK_8; 683 623 if (mode->clock > 100000) 684 - adiv = AUDIO_DIV_SERCLK_16; 685 - else 686 - adiv = AUDIO_DIV_SERCLK_8; 687 - reg_write(encoder, REG_AUDIO_DIV, adiv); 624 + adiv++; /* AUDIO_DIV_SERCLK_16 */ 625 + 626 + /* S/PDIF asks for a larger divider */ 627 + if (p->audio_format == AFMT_SPDIF) 628 + adiv++; /* AUDIO_DIV_SERCLK_16 or _32 */ 629 + 630 + reg_write(priv, REG_AUDIO_DIV, adiv); 688 631 689 632 /* 690 633 * This is the approximate value of N, which happens to be ··· 703 638 buf[3] = n; 704 639 buf[4] = n >> 8; 705 640 buf[5] = n >> 16; 706 - reg_write_range(encoder, REG_ACR_CTS_0, buf, 6); 641 + reg_write_range(priv, REG_ACR_CTS_0, buf, 6); 707 642 708 643 /* Set CTS clock reference */ 709 - reg_write(encoder, REG_AIP_CLKSEL, clksel_aip | clksel_fs); 644 + reg_write(priv, REG_AIP_CLKSEL, clksel_aip | clksel_fs); 710 645 711 646 /* Reset CTS generator */ 712 - reg_set(encoder, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_CTS); 713 - reg_clear(encoder, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_CTS); 647 + reg_set(priv, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_CTS); 648 + reg_clear(priv, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_CTS); 714 649 715 650 /* Write the channel status */ 716 - buf[0] = 0x04; 651 + buf[0] = IEC958_AES0_CON_NOT_COPYRIGHT; 717 652 buf[1] = 0x00; 718 - buf[2] = 0x00; 719 - buf[3] = 0xf1; 720 - reg_write_range(encoder, REG_CH_STAT_B(0), buf, 4); 653 + buf[2] = IEC958_AES3_CON_FS_NOTID; 654 + buf[3] = IEC958_AES4_CON_ORIGFS_NOTID | 655 + IEC958_AES4_CON_MAX_WORDLEN_24; 656 + reg_write_range(priv, REG_CH_STAT_B(0), buf, 4); 721 657 722 - tda998x_audio_mute(encoder, true); 723 - mdelay(20); 724 - tda998x_audio_mute(encoder, false); 658 + tda998x_audio_mute(priv, true); 659 + msleep(20); 660 + tda998x_audio_mute(priv, false); 725 661 726 662 /* Write the audio information packet */ 727 - tda998x_write_aif(encoder, p); 663 + tda998x_write_aif(priv, p); 728 664 } 729 665 730 666 /* DRM encoder functions */ ··· 767 701 switch (mode) { 768 702 case DRM_MODE_DPMS_ON: 769 703 /* enable video ports, audio will be enabled later */ 770 - reg_write(encoder, REG_ENA_VP_0, 0xff); 771 - reg_write(encoder, REG_ENA_VP_1, 0xff); 772 - reg_write(encoder, REG_ENA_VP_2, 0xff); 704 + reg_write(priv, REG_ENA_VP_0, 0xff); 705 + reg_write(priv, REG_ENA_VP_1, 0xff); 706 + reg_write(priv, REG_ENA_VP_2, 0xff); 773 707 /* set muxing after enabling ports: */ 774 - reg_write(encoder, REG_VIP_CNTRL_0, priv->vip_cntrl_0); 775 - reg_write(encoder, REG_VIP_CNTRL_1, priv->vip_cntrl_1); 776 - reg_write(encoder, REG_VIP_CNTRL_2, priv->vip_cntrl_2); 708 + reg_write(priv, REG_VIP_CNTRL_0, priv->vip_cntrl_0); 709 + reg_write(priv, REG_VIP_CNTRL_1, priv->vip_cntrl_1); 710 + reg_write(priv, REG_VIP_CNTRL_2, priv->vip_cntrl_2); 777 711 break; 778 712 case DRM_MODE_DPMS_OFF: 779 713 /* disable video ports */ 780 - reg_write(encoder, REG_ENA_VP_0, 0x00); 781 - reg_write(encoder, REG_ENA_VP_1, 0x00); 782 - reg_write(encoder, REG_ENA_VP_2, 0x00); 714 + reg_write(priv, REG_ENA_VP_0, 0x00); 715 + reg_write(priv, REG_ENA_VP_1, 0x00); 716 + reg_write(priv, REG_ENA_VP_2, 0x00); 783 717 break; 784 718 } 785 719 ··· 897 831 } 898 832 899 833 /* mute the audio FIFO: */ 900 - reg_set(encoder, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_FIFO); 834 + reg_set(priv, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_FIFO); 901 835 902 836 /* set HDMI HDCP mode off: */ 903 - reg_set(encoder, REG_TBG_CNTRL_1, TBG_CNTRL_1_DWIN_DIS); 904 - reg_clear(encoder, REG_TX33, TX33_HDMI); 837 + reg_write(priv, REG_TBG_CNTRL_1, TBG_CNTRL_1_DWIN_DIS); 838 + reg_clear(priv, REG_TX33, TX33_HDMI); 839 + reg_write(priv, REG_ENC_CNTRL, ENC_CNTRL_CTL_CODE(0)); 905 840 906 - reg_write(encoder, REG_ENC_CNTRL, ENC_CNTRL_CTL_CODE(0)); 907 841 /* no pre-filter or interpolator: */ 908 - reg_write(encoder, REG_HVF_CNTRL_0, HVF_CNTRL_0_PREFIL(0) | 842 + reg_write(priv, REG_HVF_CNTRL_0, HVF_CNTRL_0_PREFIL(0) | 909 843 HVF_CNTRL_0_INTPOL(0)); 910 - reg_write(encoder, REG_VIP_CNTRL_5, VIP_CNTRL_5_SP_CNT(0)); 911 - reg_write(encoder, REG_VIP_CNTRL_4, VIP_CNTRL_4_BLANKIT(0) | 844 + reg_write(priv, REG_VIP_CNTRL_5, VIP_CNTRL_5_SP_CNT(0)); 845 + reg_write(priv, REG_VIP_CNTRL_4, VIP_CNTRL_4_BLANKIT(0) | 912 846 VIP_CNTRL_4_BLC(0)); 913 - reg_clear(encoder, REG_PLL_SERIAL_3, PLL_SERIAL_3_SRL_CCIR); 914 847 915 - reg_clear(encoder, REG_PLL_SERIAL_1, PLL_SERIAL_1_SRL_MAN_IZ); 916 - reg_clear(encoder, REG_PLL_SERIAL_3, PLL_SERIAL_3_SRL_DE); 917 - reg_write(encoder, REG_SERIALIZER, 0); 918 - reg_write(encoder, REG_HVF_CNTRL_1, HVF_CNTRL_1_VQR(0)); 848 + reg_clear(priv, REG_PLL_SERIAL_1, PLL_SERIAL_1_SRL_MAN_IZ); 849 + reg_clear(priv, REG_PLL_SERIAL_3, PLL_SERIAL_3_SRL_CCIR | 850 + PLL_SERIAL_3_SRL_DE); 851 + reg_write(priv, REG_SERIALIZER, 0); 852 + reg_write(priv, REG_HVF_CNTRL_1, HVF_CNTRL_1_VQR(0)); 919 853 920 854 /* TODO enable pixel repeat for pixel rates less than 25Msamp/s */ 921 855 rep = 0; 922 - reg_write(encoder, REG_RPT_CNTRL, 0); 923 - reg_write(encoder, REG_SEL_CLK, SEL_CLK_SEL_VRF_CLK(0) | 856 + reg_write(priv, REG_RPT_CNTRL, 0); 857 + reg_write(priv, REG_SEL_CLK, SEL_CLK_SEL_VRF_CLK(0) | 924 858 SEL_CLK_SEL_CLK1 | SEL_CLK_ENA_SC_CLK); 925 859 926 - reg_write(encoder, REG_PLL_SERIAL_2, PLL_SERIAL_2_SRL_NOSC(div) | 860 + reg_write(priv, REG_PLL_SERIAL_2, PLL_SERIAL_2_SRL_NOSC(div) | 927 861 PLL_SERIAL_2_SRL_PR(rep)); 928 862 929 863 /* set color matrix bypass flag: */ 930 - reg_set(encoder, REG_MAT_CONTRL, MAT_CONTRL_MAT_BP); 864 + reg_write(priv, REG_MAT_CONTRL, MAT_CONTRL_MAT_BP | 865 + MAT_CONTRL_MAT_SC(1)); 931 866 932 867 /* set BIAS tmds value: */ 933 - reg_write(encoder, REG_ANA_GENERAL, 0x09); 934 - 935 - reg_clear(encoder, REG_TBG_CNTRL_0, TBG_CNTRL_0_SYNC_MTHD); 868 + reg_write(priv, REG_ANA_GENERAL, 0x09); 936 869 937 870 /* 938 871 * Sync on rising HSYNC/VSYNC 939 872 */ 940 - reg_write(encoder, REG_VIP_CNTRL_3, 0); 941 - reg_set(encoder, REG_VIP_CNTRL_3, VIP_CNTRL_3_SYNC_HS); 873 + reg = VIP_CNTRL_3_SYNC_HS; 942 874 943 875 /* 944 876 * TDA19988 requires high-active sync at input stage, 945 877 * so invert low-active sync provided by master encoder here 946 878 */ 947 879 if (mode->flags & DRM_MODE_FLAG_NHSYNC) 948 - reg_set(encoder, REG_VIP_CNTRL_3, VIP_CNTRL_3_H_TGL); 880 + reg |= VIP_CNTRL_3_H_TGL; 949 881 if (mode->flags & DRM_MODE_FLAG_NVSYNC) 950 - reg_set(encoder, REG_VIP_CNTRL_3, VIP_CNTRL_3_V_TGL); 882 + reg |= VIP_CNTRL_3_V_TGL; 883 + reg_write(priv, REG_VIP_CNTRL_3, reg); 884 + 885 + reg_write(priv, REG_VIDFORMAT, 0x00); 886 + reg_write16(priv, REG_REFPIX_MSB, ref_pix); 887 + reg_write16(priv, REG_REFLINE_MSB, ref_line); 888 + reg_write16(priv, REG_NPIX_MSB, n_pix); 889 + reg_write16(priv, REG_NLINE_MSB, n_line); 890 + reg_write16(priv, REG_VS_LINE_STRT_1_MSB, vs1_line_s); 891 + reg_write16(priv, REG_VS_PIX_STRT_1_MSB, vs1_pix_s); 892 + reg_write16(priv, REG_VS_LINE_END_1_MSB, vs1_line_e); 893 + reg_write16(priv, REG_VS_PIX_END_1_MSB, vs1_pix_e); 894 + reg_write16(priv, REG_VS_LINE_STRT_2_MSB, vs2_line_s); 895 + reg_write16(priv, REG_VS_PIX_STRT_2_MSB, vs2_pix_s); 896 + reg_write16(priv, REG_VS_LINE_END_2_MSB, vs2_line_e); 897 + reg_write16(priv, REG_VS_PIX_END_2_MSB, vs2_pix_e); 898 + reg_write16(priv, REG_HS_PIX_START_MSB, hs_pix_s); 899 + reg_write16(priv, REG_HS_PIX_STOP_MSB, hs_pix_e); 900 + reg_write16(priv, REG_VWIN_START_1_MSB, vwin1_line_s); 901 + reg_write16(priv, REG_VWIN_END_1_MSB, vwin1_line_e); 902 + reg_write16(priv, REG_VWIN_START_2_MSB, vwin2_line_s); 903 + reg_write16(priv, REG_VWIN_END_2_MSB, vwin2_line_e); 904 + reg_write16(priv, REG_DE_START_MSB, de_pix_s); 905 + reg_write16(priv, REG_DE_STOP_MSB, de_pix_e); 906 + 907 + if (priv->rev == TDA19988) { 908 + /* let incoming pixels fill the active space (if any) */ 909 + reg_write(priv, REG_ENABLE_SPACE, 0x00); 910 + } 951 911 952 912 /* 953 913 * Always generate sync polarity relative to input sync and 954 914 * revert input stage toggled sync at output stage 955 915 */ 956 - reg = TBG_CNTRL_1_TGL_EN; 916 + reg = TBG_CNTRL_1_DWIN_DIS | TBG_CNTRL_1_TGL_EN; 957 917 if (mode->flags & DRM_MODE_FLAG_NHSYNC) 958 918 reg |= TBG_CNTRL_1_H_TGL; 959 919 if (mode->flags & DRM_MODE_FLAG_NVSYNC) 960 920 reg |= TBG_CNTRL_1_V_TGL; 961 - reg_write(encoder, REG_TBG_CNTRL_1, reg); 962 - 963 - reg_write(encoder, REG_VIDFORMAT, 0x00); 964 - reg_write16(encoder, REG_REFPIX_MSB, ref_pix); 965 - reg_write16(encoder, REG_REFLINE_MSB, ref_line); 966 - reg_write16(encoder, REG_NPIX_MSB, n_pix); 967 - reg_write16(encoder, REG_NLINE_MSB, n_line); 968 - reg_write16(encoder, REG_VS_LINE_STRT_1_MSB, vs1_line_s); 969 - reg_write16(encoder, REG_VS_PIX_STRT_1_MSB, vs1_pix_s); 970 - reg_write16(encoder, REG_VS_LINE_END_1_MSB, vs1_line_e); 971 - reg_write16(encoder, REG_VS_PIX_END_1_MSB, vs1_pix_e); 972 - reg_write16(encoder, REG_VS_LINE_STRT_2_MSB, vs2_line_s); 973 - reg_write16(encoder, REG_VS_PIX_STRT_2_MSB, vs2_pix_s); 974 - reg_write16(encoder, REG_VS_LINE_END_2_MSB, vs2_line_e); 975 - reg_write16(encoder, REG_VS_PIX_END_2_MSB, vs2_pix_e); 976 - reg_write16(encoder, REG_HS_PIX_START_MSB, hs_pix_s); 977 - reg_write16(encoder, REG_HS_PIX_STOP_MSB, hs_pix_e); 978 - reg_write16(encoder, REG_VWIN_START_1_MSB, vwin1_line_s); 979 - reg_write16(encoder, REG_VWIN_END_1_MSB, vwin1_line_e); 980 - reg_write16(encoder, REG_VWIN_START_2_MSB, vwin2_line_s); 981 - reg_write16(encoder, REG_VWIN_END_2_MSB, vwin2_line_e); 982 - reg_write16(encoder, REG_DE_START_MSB, de_pix_s); 983 - reg_write16(encoder, REG_DE_STOP_MSB, de_pix_e); 984 - 985 - if (priv->rev == TDA19988) { 986 - /* let incoming pixels fill the active space (if any) */ 987 - reg_write(encoder, REG_ENABLE_SPACE, 0x00); 988 - } 921 + reg_write(priv, REG_TBG_CNTRL_1, reg); 989 922 990 923 /* must be last register set: */ 991 - reg_clear(encoder, REG_TBG_CNTRL_0, TBG_CNTRL_0_SYNC_ONCE); 924 + reg_write(priv, REG_TBG_CNTRL_0, 0); 992 925 993 926 /* Only setup the info frames if the sink is HDMI */ 994 927 if (priv->is_hdmi_sink) { 995 928 /* We need to turn HDMI HDCP stuff on to get audio through */ 996 - reg_clear(encoder, REG_TBG_CNTRL_1, TBG_CNTRL_1_DWIN_DIS); 997 - reg_write(encoder, REG_ENC_CNTRL, ENC_CNTRL_CTL_CODE(1)); 998 - reg_set(encoder, REG_TX33, TX33_HDMI); 929 + reg &= ~TBG_CNTRL_1_DWIN_DIS; 930 + reg_write(priv, REG_TBG_CNTRL_1, reg); 931 + reg_write(priv, REG_ENC_CNTRL, ENC_CNTRL_CTL_CODE(1)); 932 + reg_set(priv, REG_TX33, TX33_HDMI); 999 933 1000 - tda998x_write_avi(encoder, adjusted_mode); 934 + tda998x_write_avi(priv, adjusted_mode); 1001 935 1002 936 if (priv->params.audio_cfg) 1003 - tda998x_configure_audio(encoder, adjusted_mode, 937 + tda998x_configure_audio(priv, adjusted_mode, 1004 938 &priv->params); 1005 939 } 1006 940 } ··· 1009 943 tda998x_encoder_detect(struct drm_encoder *encoder, 1010 944 struct drm_connector *connector) 1011 945 { 1012 - uint8_t val = cec_read(encoder, REG_CEC_RXSHPDLEV); 946 + struct tda998x_priv *priv = to_tda998x_priv(encoder); 947 + uint8_t val = cec_read(priv, REG_CEC_RXSHPDLEV); 948 + 1013 949 return (val & CEC_RXSHPDLEV_HPD) ? connector_status_connected : 1014 950 connector_status_disconnected; 1015 951 } ··· 1019 951 static int 1020 952 read_edid_block(struct drm_encoder *encoder, uint8_t *buf, int blk) 1021 953 { 954 + struct tda998x_priv *priv = to_tda998x_priv(encoder); 1022 955 uint8_t offset, segptr; 1023 956 int ret, i; 1024 - 1025 - /* enable EDID read irq: */ 1026 - reg_set(encoder, REG_INT_FLAGS_2, INT_FLAGS_2_EDID_BLK_RD); 1027 957 1028 958 offset = (blk & 1) ? 128 : 0; 1029 959 segptr = blk / 2; 1030 960 1031 - reg_write(encoder, REG_DDC_ADDR, 0xa0); 1032 - reg_write(encoder, REG_DDC_OFFS, offset); 1033 - reg_write(encoder, REG_DDC_SEGM_ADDR, 0x60); 1034 - reg_write(encoder, REG_DDC_SEGM, segptr); 961 + reg_write(priv, REG_DDC_ADDR, 0xa0); 962 + reg_write(priv, REG_DDC_OFFS, offset); 963 + reg_write(priv, REG_DDC_SEGM_ADDR, 0x60); 964 + reg_write(priv, REG_DDC_SEGM, segptr); 1035 965 1036 966 /* enable reading EDID: */ 1037 - reg_write(encoder, REG_EDID_CTRL, 0x1); 967 + priv->wq_edid_wait = 1; 968 + reg_write(priv, REG_EDID_CTRL, 0x1); 1038 969 1039 970 /* flag must be cleared by sw: */ 1040 - reg_write(encoder, REG_EDID_CTRL, 0x0); 971 + reg_write(priv, REG_EDID_CTRL, 0x0); 1041 972 1042 973 /* wait for block read to complete: */ 1043 - for (i = 100; i > 0; i--) { 1044 - uint8_t val = reg_read(encoder, REG_INT_FLAGS_2); 1045 - if (val & INT_FLAGS_2_EDID_BLK_RD) 1046 - break; 1047 - msleep(1); 974 + if (priv->hdmi->irq) { 975 + i = wait_event_timeout(priv->wq_edid, 976 + !priv->wq_edid_wait, 977 + msecs_to_jiffies(100)); 978 + if (i < 0) { 979 + dev_err(&priv->hdmi->dev, "read edid wait err %d\n", i); 980 + return i; 981 + } 982 + } else { 983 + for (i = 10; i > 0; i--) { 984 + msleep(10); 985 + ret = reg_read(priv, REG_INT_FLAGS_2); 986 + if (ret < 0) 987 + return ret; 988 + if (ret & INT_FLAGS_2_EDID_BLK_RD) 989 + break; 990 + } 1048 991 } 1049 992 1050 - if (i == 0) 993 + if (i == 0) { 994 + dev_err(&priv->hdmi->dev, "read edid timeout\n"); 1051 995 return -ETIMEDOUT; 996 + } 1052 997 1053 - ret = reg_read_range(encoder, REG_EDID_DATA_0, buf, EDID_LENGTH); 998 + ret = reg_read_range(priv, REG_EDID_DATA_0, buf, EDID_LENGTH); 1054 999 if (ret != EDID_LENGTH) { 1055 - dev_err(encoder->dev->dev, "failed to read edid block %d: %d", 1056 - blk, ret); 1000 + dev_err(&priv->hdmi->dev, "failed to read edid block %d: %d\n", 1001 + blk, ret); 1057 1002 return ret; 1058 1003 } 1059 - 1060 - reg_clear(encoder, REG_INT_FLAGS_2, INT_FLAGS_2_EDID_BLK_RD); 1061 1004 1062 1005 return 0; 1063 1006 } ··· 1077 998 do_get_edid(struct drm_encoder *encoder) 1078 999 { 1079 1000 struct tda998x_priv *priv = to_tda998x_priv(encoder); 1080 - int j = 0, valid_extensions = 0; 1001 + int j, valid_extensions = 0; 1081 1002 uint8_t *block, *new; 1082 1003 bool print_bad_edid = drm_debug & DRM_UT_KMS; 1083 1004 ··· 1085 1006 return NULL; 1086 1007 1087 1008 if (priv->rev == TDA19988) 1088 - reg_clear(encoder, REG_TX4, TX4_PD_RAM); 1009 + reg_clear(priv, REG_TX4, TX4_PD_RAM); 1089 1010 1090 1011 /* base block fetch */ 1091 1012 if (read_edid_block(encoder, block, 0)) ··· 1125 1046 1126 1047 done: 1127 1048 if (priv->rev == TDA19988) 1128 - reg_set(encoder, REG_TX4, TX4_PD_RAM); 1049 + reg_set(priv, REG_TX4, TX4_PD_RAM); 1129 1050 1130 1051 return block; 1131 1052 1132 1053 fail: 1133 1054 if (priv->rev == TDA19988) 1134 - reg_set(encoder, REG_TX4, TX4_PD_RAM); 1135 - dev_warn(encoder->dev->dev, "failed to read EDID\n"); 1055 + reg_set(priv, REG_TX4, TX4_PD_RAM); 1056 + dev_warn(&priv->hdmi->dev, "failed to read EDID\n"); 1136 1057 kfree(block); 1137 1058 return NULL; 1138 1059 } ··· 1159 1080 tda998x_encoder_create_resources(struct drm_encoder *encoder, 1160 1081 struct drm_connector *connector) 1161 1082 { 1162 - DBG(""); 1083 + struct tda998x_priv *priv = to_tda998x_priv(encoder); 1084 + 1085 + if (priv->hdmi->irq) 1086 + connector->polled = DRM_CONNECTOR_POLL_HPD; 1087 + else 1088 + connector->polled = DRM_CONNECTOR_POLL_CONNECT | 1089 + DRM_CONNECTOR_POLL_DISCONNECT; 1163 1090 return 0; 1164 1091 } 1165 1092 ··· 1184 1099 { 1185 1100 struct tda998x_priv *priv = to_tda998x_priv(encoder); 1186 1101 drm_i2c_encoder_destroy(encoder); 1102 + 1103 + /* disable all IRQs and free the IRQ handler */ 1104 + cec_write(priv, REG_CEC_RXSHPDINTENA, 0); 1105 + reg_clear(priv, REG_INT_FLAGS_2, INT_FLAGS_2_EDID_BLK_RD); 1106 + if (priv->hdmi->irq) 1107 + free_irq(priv->hdmi->irq, priv); 1108 + 1187 1109 if (priv->cec) 1188 1110 i2c_unregister_device(priv->cec); 1189 1111 kfree(priv); ··· 1230 1138 struct drm_device *dev, 1231 1139 struct drm_encoder_slave *encoder_slave) 1232 1140 { 1233 - struct drm_encoder *encoder = &encoder_slave->base; 1234 1141 struct tda998x_priv *priv; 1142 + struct device_node *np = client->dev.of_node; 1143 + u32 video; 1144 + int rev_lo, rev_hi, ret; 1235 1145 1236 1146 priv = kzalloc(sizeof(*priv), GFP_KERNEL); 1237 1147 if (!priv) ··· 1244 1150 priv->vip_cntrl_2 = VIP_CNTRL_2_SWAP_E(4) | VIP_CNTRL_2_SWAP_F(5); 1245 1151 1246 1152 priv->current_page = 0xff; 1153 + priv->hdmi = client; 1247 1154 priv->cec = i2c_new_dummy(client->adapter, 0x34); 1248 1155 if (!priv->cec) { 1249 1156 kfree(priv); 1250 1157 return -ENODEV; 1251 1158 } 1159 + 1160 + priv->encoder = &encoder_slave->base; 1252 1161 priv->dpms = DRM_MODE_DPMS_OFF; 1253 1162 1254 1163 encoder_slave->slave_priv = priv; 1255 1164 encoder_slave->slave_funcs = &tda998x_encoder_funcs; 1256 1165 1257 1166 /* wake up the device: */ 1258 - cec_write(encoder, REG_CEC_ENAMODS, 1167 + cec_write(priv, REG_CEC_ENAMODS, 1259 1168 CEC_ENAMODS_EN_RXSENS | CEC_ENAMODS_EN_HDMI); 1260 1169 1261 - tda998x_reset(encoder); 1170 + tda998x_reset(priv); 1262 1171 1263 1172 /* read version: */ 1264 - priv->rev = reg_read(encoder, REG_VERSION_LSB) | 1265 - reg_read(encoder, REG_VERSION_MSB) << 8; 1173 + rev_lo = reg_read(priv, REG_VERSION_LSB); 1174 + rev_hi = reg_read(priv, REG_VERSION_MSB); 1175 + if (rev_lo < 0 || rev_hi < 0) { 1176 + ret = rev_lo < 0 ? rev_lo : rev_hi; 1177 + goto fail; 1178 + } 1179 + 1180 + priv->rev = rev_lo | rev_hi << 8; 1266 1181 1267 1182 /* mask off feature bits: */ 1268 1183 priv->rev &= ~0x30; /* not-hdcp and not-scalar bit */ 1269 1184 1270 1185 switch (priv->rev) { 1271 - case TDA9989N2: dev_info(dev->dev, "found TDA9989 n2"); break; 1272 - case TDA19989: dev_info(dev->dev, "found TDA19989"); break; 1273 - case TDA19989N2: dev_info(dev->dev, "found TDA19989 n2"); break; 1274 - case TDA19988: dev_info(dev->dev, "found TDA19988"); break; 1186 + case TDA9989N2: 1187 + dev_info(&client->dev, "found TDA9989 n2"); 1188 + break; 1189 + case TDA19989: 1190 + dev_info(&client->dev, "found TDA19989"); 1191 + break; 1192 + case TDA19989N2: 1193 + dev_info(&client->dev, "found TDA19989 n2"); 1194 + break; 1195 + case TDA19988: 1196 + dev_info(&client->dev, "found TDA19988"); 1197 + break; 1275 1198 default: 1276 - DBG("found unsupported device: %04x", priv->rev); 1199 + dev_err(&client->dev, "found unsupported device: %04x\n", 1200 + priv->rev); 1277 1201 goto fail; 1278 1202 } 1279 1203 1280 1204 /* after reset, enable DDC: */ 1281 - reg_write(encoder, REG_DDC_DISABLE, 0x00); 1205 + reg_write(priv, REG_DDC_DISABLE, 0x00); 1282 1206 1283 1207 /* set clock on DDC channel: */ 1284 - reg_write(encoder, REG_TX3, 39); 1208 + reg_write(priv, REG_TX3, 39); 1285 1209 1286 1210 /* if necessary, disable multi-master: */ 1287 1211 if (priv->rev == TDA19989) 1288 - reg_set(encoder, REG_I2C_MASTER, I2C_MASTER_DIS_MM); 1212 + reg_set(priv, REG_I2C_MASTER, I2C_MASTER_DIS_MM); 1289 1213 1290 - cec_write(encoder, REG_CEC_FRO_IM_CLK_CTRL, 1214 + cec_write(priv, REG_CEC_FRO_IM_CLK_CTRL, 1291 1215 CEC_FRO_IM_CLK_CTRL_GHOST_DIS | CEC_FRO_IM_CLK_CTRL_IMCLK_SEL); 1216 + 1217 + /* initialize the optional IRQ */ 1218 + if (client->irq) { 1219 + int irqf_trigger; 1220 + 1221 + /* init read EDID waitqueue */ 1222 + init_waitqueue_head(&priv->wq_edid); 1223 + 1224 + /* clear pending interrupts */ 1225 + reg_read(priv, REG_INT_FLAGS_0); 1226 + reg_read(priv, REG_INT_FLAGS_1); 1227 + reg_read(priv, REG_INT_FLAGS_2); 1228 + 1229 + irqf_trigger = 1230 + irqd_get_trigger_type(irq_get_irq_data(client->irq)); 1231 + ret = request_threaded_irq(client->irq, NULL, 1232 + tda998x_irq_thread, 1233 + irqf_trigger | IRQF_ONESHOT, 1234 + "tda998x", priv); 1235 + if (ret) { 1236 + dev_err(&client->dev, 1237 + "failed to request IRQ#%u: %d\n", 1238 + client->irq, ret); 1239 + goto fail; 1240 + } 1241 + 1242 + /* enable HPD irq */ 1243 + cec_write(priv, REG_CEC_RXSHPDINTENA, CEC_RXSHPDLEV_HPD); 1244 + } 1245 + 1246 + /* enable EDID read irq: */ 1247 + reg_set(priv, REG_INT_FLAGS_2, INT_FLAGS_2_EDID_BLK_RD); 1248 + 1249 + if (!np) 1250 + return 0; /* non-DT */ 1251 + 1252 + /* get the optional video properties */ 1253 + ret = of_property_read_u32(np, "video-ports", &video); 1254 + if (ret == 0) { 1255 + priv->vip_cntrl_0 = video >> 16; 1256 + priv->vip_cntrl_1 = video >> 8; 1257 + priv->vip_cntrl_2 = video; 1258 + } 1292 1259 1293 1260 return 0; 1294 1261 ··· 1365 1210 return -ENXIO; 1366 1211 } 1367 1212 1213 + #ifdef CONFIG_OF 1214 + static const struct of_device_id tda998x_dt_ids[] = { 1215 + { .compatible = "nxp,tda998x", }, 1216 + { } 1217 + }; 1218 + MODULE_DEVICE_TABLE(of, tda998x_dt_ids); 1219 + #endif 1220 + 1368 1221 static struct i2c_device_id tda998x_ids[] = { 1369 1222 { "tda998x", 0 }, 1370 1223 { } ··· 1385 1222 .remove = tda998x_remove, 1386 1223 .driver = { 1387 1224 .name = "tda998x", 1225 + .of_match_table = of_match_ptr(tda998x_dt_ids), 1388 1226 }, 1389 1227 .id_table = tda998x_ids, 1390 1228 },