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

Merge branch 'mediatek-drm-next-4.18' of https://github.com/ckhu-mediatek/linux.git-tags into drm-next

Signed-off-by: Dave Airlie <airlied@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/1525670872.3147.6.camel@mtksdaap41

+34 -43
+1
drivers/gpu/drm/mediatek/Kconfig
··· 11 11 select DRM_PANEL 12 12 select MEMORY 13 13 select MTK_SMI 14 + select VIDEOMODE_HELPERS 14 15 help 15 16 Choose this option if you have a Mediatek SoCs. 16 17 The module will be called mediatek-drm
+30 -30
drivers/gpu/drm/mediatek/mtk_dpi.c
··· 22 22 #include <linux/interrupt.h> 23 23 #include <linux/types.h> 24 24 #include <linux/clk.h> 25 + #include <video/videomode.h> 25 26 26 27 #include "mtk_dpi_regs.h" 27 28 #include "mtk_drm_ddp_comp.h" ··· 430 429 struct mtk_dpi_sync_param vsync_leven = { 0 }; 431 430 struct mtk_dpi_sync_param vsync_rodd = { 0 }; 432 431 struct mtk_dpi_sync_param vsync_reven = { 0 }; 433 - unsigned long pix_rate; 432 + struct videomode vm = { 0 }; 434 433 unsigned long pll_rate; 435 434 unsigned int factor; 436 435 437 436 /* let pll_rate can fix the valid range of tvdpll (1G~2GHz) */ 438 - pix_rate = 1000UL * mode->clock; 437 + 439 438 if (mode->clock <= 27000) 440 - factor = 16 * 3; 439 + factor = 3 << 4; 441 440 else if (mode->clock <= 84000) 442 - factor = 8 * 3; 441 + factor = 3 << 3; 443 442 else if (mode->clock <= 167000) 444 - factor = 4 * 3; 443 + factor = 3 << 2; 445 444 else 446 - factor = 2 * 3; 447 - pll_rate = pix_rate * factor; 445 + factor = 3 << 1; 446 + drm_display_mode_to_videomode(mode, &vm); 447 + pll_rate = vm.pixelclock * factor; 448 448 449 449 dev_dbg(dpi->dev, "Want PLL %lu Hz, pixel clock %lu Hz\n", 450 - pll_rate, pix_rate); 450 + pll_rate, vm.pixelclock); 451 451 452 452 clk_set_rate(dpi->tvd_clk, pll_rate); 453 453 pll_rate = clk_get_rate(dpi->tvd_clk); 454 454 455 - pix_rate = pll_rate / factor; 456 - clk_set_rate(dpi->pixel_clk, pix_rate); 457 - pix_rate = clk_get_rate(dpi->pixel_clk); 455 + vm.pixelclock = pll_rate / factor; 456 + clk_set_rate(dpi->pixel_clk, vm.pixelclock); 457 + vm.pixelclock = clk_get_rate(dpi->pixel_clk); 458 458 459 459 dev_dbg(dpi->dev, "Got PLL %lu Hz, pixel clock %lu Hz\n", 460 - pll_rate, pix_rate); 460 + pll_rate, vm.pixelclock); 461 461 462 462 limit.c_bottom = 0x0010; 463 463 limit.c_top = 0x0FE0; ··· 467 465 468 466 dpi_pol.ck_pol = MTK_DPI_POLARITY_FALLING; 469 467 dpi_pol.de_pol = MTK_DPI_POLARITY_RISING; 470 - dpi_pol.hsync_pol = mode->flags & DRM_MODE_FLAG_PHSYNC ? 468 + dpi_pol.hsync_pol = vm.flags & DISPLAY_FLAGS_HSYNC_HIGH ? 471 469 MTK_DPI_POLARITY_FALLING : MTK_DPI_POLARITY_RISING; 472 - dpi_pol.vsync_pol = mode->flags & DRM_MODE_FLAG_PVSYNC ? 470 + dpi_pol.vsync_pol = vm.flags & DISPLAY_FLAGS_VSYNC_HIGH ? 473 471 MTK_DPI_POLARITY_FALLING : MTK_DPI_POLARITY_RISING; 474 - 475 - hsync.sync_width = mode->hsync_end - mode->hsync_start; 476 - hsync.back_porch = mode->htotal - mode->hsync_end; 477 - hsync.front_porch = mode->hsync_start - mode->hdisplay; 472 + hsync.sync_width = vm.hsync_len; 473 + hsync.back_porch = vm.hback_porch; 474 + hsync.front_porch = vm.hfront_porch; 478 475 hsync.shift_half_line = false; 479 - 480 - vsync_lodd.sync_width = mode->vsync_end - mode->vsync_start; 481 - vsync_lodd.back_porch = mode->vtotal - mode->vsync_end; 482 - vsync_lodd.front_porch = mode->vsync_start - mode->vdisplay; 476 + vsync_lodd.sync_width = vm.vsync_len; 477 + vsync_lodd.back_porch = vm.vback_porch; 478 + vsync_lodd.front_porch = vm.vfront_porch; 483 479 vsync_lodd.shift_half_line = false; 484 480 485 - if (mode->flags & DRM_MODE_FLAG_INTERLACE && 481 + if (vm.flags & DISPLAY_FLAGS_INTERLACED && 486 482 mode->flags & DRM_MODE_FLAG_3D_MASK) { 487 483 vsync_leven = vsync_lodd; 488 484 vsync_rodd = vsync_lodd; 489 485 vsync_reven = vsync_lodd; 490 486 vsync_leven.shift_half_line = true; 491 487 vsync_reven.shift_half_line = true; 492 - } else if (mode->flags & DRM_MODE_FLAG_INTERLACE && 488 + } else if (vm.flags & DISPLAY_FLAGS_INTERLACED && 493 489 !(mode->flags & DRM_MODE_FLAG_3D_MASK)) { 494 490 vsync_leven = vsync_lodd; 495 491 vsync_leven.shift_half_line = true; 496 - } else if (!(mode->flags & DRM_MODE_FLAG_INTERLACE) && 492 + } else if (!(vm.flags & DISPLAY_FLAGS_INTERLACED) && 497 493 mode->flags & DRM_MODE_FLAG_3D_MASK) { 498 494 vsync_rodd = vsync_lodd; 499 495 } ··· 505 505 mtk_dpi_config_vsync_reven(dpi, &vsync_reven); 506 506 507 507 mtk_dpi_config_3d(dpi, !!(mode->flags & DRM_MODE_FLAG_3D_MASK)); 508 - mtk_dpi_config_interface(dpi, !!(mode->flags & 509 - DRM_MODE_FLAG_INTERLACE)); 510 - if (mode->flags & DRM_MODE_FLAG_INTERLACE) 511 - mtk_dpi_config_fb_size(dpi, mode->hdisplay, mode->vdisplay / 2); 508 + mtk_dpi_config_interface(dpi, !!(vm.flags & 509 + DISPLAY_FLAGS_INTERLACED)); 510 + if (vm.flags & DISPLAY_FLAGS_INTERLACED) 511 + mtk_dpi_config_fb_size(dpi, vm.hactive, vm.vactive >> 1); 512 512 else 513 - mtk_dpi_config_fb_size(dpi, mode->hdisplay, mode->vdisplay); 513 + mtk_dpi_config_fb_size(dpi, vm.hactive, vm.vactive); 514 514 515 515 mtk_dpi_config_channel_limit(dpi, &limit); 516 516 mtk_dpi_config_bit_num(dpi, dpi->bit_num);
+1 -1
drivers/gpu/drm/mediatek/mtk_drm_gem.c
··· 220 220 mtk_gem = mtk_drm_gem_init(dev, attach->dmabuf->size); 221 221 222 222 if (IS_ERR(mtk_gem)) 223 - return ERR_PTR(PTR_ERR(mtk_gem)); 223 + return ERR_CAST(mtk_gem); 224 224 225 225 expected = sg_dma_address(sg->sgl); 226 226 for_each_sg(sg->sgl, s, sg->nents, i) {
+2 -12
drivers/gpu/drm/mediatek/mtk_dsi.c
··· 551 551 } 552 552 553 553 /** 554 - * vm.pixelclock is in kHz, pixel_clock unit is Hz, so multiply by 1000 555 554 * htotal_time = htotal * byte_per_pixel / num_lanes 556 555 * overhead_time = lpx + hs_prepare + hs_zero + hs_trail + hs_exit 557 556 * mipi_ratio = (htotal_time + overhead_time) / htotal_time 558 557 * data_rate = pixel_clock * bit_per_pixel * mipi_ratio / num_lanes; 559 558 */ 560 - pixel_clock = dsi->vm.pixelclock * 1000; 559 + pixel_clock = dsi->vm.pixelclock; 561 560 htotal = dsi->vm.hactive + dsi->vm.hback_porch + dsi->vm.hfront_porch + 562 561 dsi->vm.hsync_len; 563 562 htotal_bits = htotal * bit_per_pixel; ··· 724 725 { 725 726 struct mtk_dsi *dsi = encoder_to_dsi(encoder); 726 727 727 - dsi->vm.pixelclock = adjusted->clock; 728 - dsi->vm.hactive = adjusted->hdisplay; 729 - dsi->vm.hback_porch = adjusted->htotal - adjusted->hsync_end; 730 - dsi->vm.hfront_porch = adjusted->hsync_start - adjusted->hdisplay; 731 - dsi->vm.hsync_len = adjusted->hsync_end - adjusted->hsync_start; 732 - 733 - dsi->vm.vactive = adjusted->vdisplay; 734 - dsi->vm.vback_porch = adjusted->vtotal - adjusted->vsync_end; 735 - dsi->vm.vfront_porch = adjusted->vsync_start - adjusted->vdisplay; 736 - dsi->vm.vsync_len = adjusted->vsync_end - adjusted->vsync_start; 728 + drm_display_mode_to_videomode(adjusted, &dsi->vm); 737 729 } 738 730 739 731 static void mtk_dsi_encoder_disable(struct drm_encoder *encoder)