static void set_dsi_timings(struct drm_encoder *encoder, const struct drm_display_mode *mode) { struct drm_device *dev = encoder->dev; struct drm_i915_private *dev_priv = dev->dev_private; struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc); struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder); int pipe = intel_crtc->pipe; unsigned int bpp = intel_crtc->config.pipe_bpp; unsigned int lane_count = intel_dsi->lane_count; u16 hactive, hfp, hsync, hbp, vfp, vsync, vbp; hactive = mode->hdisplay; hfp = mode->hsync_start - mode->hdisplay; hsync = mode->hsync_end - mode->hsync_start; hbp = mode->htotal - mode->hsync_end; vfp = mode->vsync_start - mode->vdisplay; vsync = mode->vsync_end - mode->vsync_start; vbp = mode->vtotal - mode->vsync_end; /* horizontal values are in terms of high speed byte clock */ hactive = txbyteclkhs(hactive, bpp, lane_count); hfp = txbyteclkhs(hfp, bpp, lane_count); hsync = txbyteclkhs(hsync, bpp, lane_count); hbp = txbyteclkhs(hbp, bpp, lane_count); /* FIXME: Find better way to do this */ /* For 7x10 panel we need to have BLLP added to active */ /* Trying to find optimal BLLP Multiplier */ /* 2.875 - Original multiplier, Works with flicker */ /* 2.000 - works but still some flicker */ /* 1.500 - Works, No Flicker */ /* 1.250 - Works, No Flicker */ /* 1.100 - Doesn't work */ /* FIXME: Acer Mango spec requires to run the DSI clock at 500 to * 560Mbps. Recomendation is to run at 513 Mbps. The addition dsi * clock is to be filled with NULL packets. Refer to acer panel * spec for more details. */ if (dev_priv->mipi_panel_id == MIPI_DSI_AUO_B080XAT_PANEL_ID) hactive = (hactive * 10) / 8; I915_WRITE(MIPI_HACTIVE_AREA_COUNT(pipe), hactive); I915_WRITE(MIPI_HFP_COUNT(pipe), hfp); /* meaningful for video mode non-burst sync pulse mode only, can be zero * for non-burst sync events and burst modes */ I915_WRITE(MIPI_HSYNC_PADDING_COUNT(pipe), hsync); I915_WRITE(MIPI_HBP_COUNT(pipe), hbp); /* vertical values are in terms of lines */ I915_WRITE(MIPI_VFP_COUNT(pipe), vfp); I915_WRITE(MIPI_VSYNC_PADDING_COUNT(pipe), vsync); I915_WRITE(MIPI_VBP_COUNT(pipe), vbp); }
static void set_dsi_timings(struct drm_encoder *encoder, const struct drm_display_mode *mode) { struct drm_device *dev = encoder->dev; struct drm_i915_private *dev_priv = dev->dev_private; struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc); struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder); int pipe = intel_crtc->pipe; unsigned int bpp = intel_crtc->config.pipe_bpp; unsigned int lane_count = intel_dsi->lane_count; u16 hactive, hfp, hsync, hbp, vfp, vsync, vbp; hactive = mode->hdisplay; hfp = mode->hsync_start - mode->hdisplay; hsync = mode->hsync_end - mode->hsync_start; hbp = mode->htotal - mode->hsync_end; vfp = mode->vsync_start - mode->vdisplay; vsync = mode->vsync_end - mode->vsync_start; vbp = mode->vtotal - mode->vsync_end; /* horizontal values are in terms of high speed byte clock */ hactive = txbyteclkhs(hactive, bpp, lane_count, intel_dsi->burst_mode_ratio); hfp = txbyteclkhs(hfp, bpp, lane_count, intel_dsi->burst_mode_ratio); hsync = txbyteclkhs(hsync, bpp, lane_count, intel_dsi->burst_mode_ratio); hbp = txbyteclkhs(hbp, bpp, lane_count, intel_dsi->burst_mode_ratio); I915_WRITE(MIPI_HACTIVE_AREA_COUNT(pipe), hactive); I915_WRITE(MIPI_HFP_COUNT(pipe), hfp); /* meaningful for video mode non-burst sync pulse mode only, can be zero * for non-burst sync events and burst modes */ I915_WRITE(MIPI_HSYNC_PADDING_COUNT(pipe), hsync); I915_WRITE(MIPI_HBP_COUNT(pipe), hbp); /* vertical values are in terms of lines */ I915_WRITE(MIPI_VFP_COUNT(pipe), vfp); I915_WRITE(MIPI_VSYNC_PADDING_COUNT(pipe), vsync); I915_WRITE(MIPI_VBP_COUNT(pipe), vbp); }
static void set_dsi_timings(struct drm_encoder *encoder, const struct drm_display_mode *mode) { struct drm_device *dev = encoder->dev; struct drm_i915_private *dev_priv = dev->dev_private; struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc); struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder); int pipe = intel_crtc->pipe; unsigned int bpp = intel_crtc->config.pipe_bpp; unsigned int lane_count = intel_dsi->lane_count; int count = 1; u16 mode_hactive; u16 hactive, hfp, hsync, hbp, vfp, vsync, vbp; hactive = mode->hdisplay; hfp = mode->hsync_start - mode->hdisplay; hsync = mode->hsync_end - mode->hsync_start; hbp = mode->htotal - mode->hsync_end; if (intel_dsi->dual_link) { hactive /= 2; if (IS_VALLEYVIEW_C0(dev) && (intel_dsi->dual_link & MIPI_DUAL_LINK_FRONT_BACK)) hactive += intel_dsi->pixel_overlap; hfp /= 2; hsync /= 2; hbp /= 2; count = 2; } mode_hactive = hactive; vfp = mode->vsync_start - mode->vdisplay; vsync = mode->vsync_end - mode->vsync_start; vbp = mode->vtotal - mode->vsync_end; /* horizontal values are in terms of high speed byte clock */ hactive = txbyteclkhs(hactive, bpp, lane_count, intel_dsi->burst_mode_ratio); hfp = txbyteclkhs(hfp, bpp, lane_count, intel_dsi->burst_mode_ratio); hsync = txbyteclkhs(hsync, bpp, lane_count, intel_dsi->burst_mode_ratio); hbp = txbyteclkhs(hbp, bpp, lane_count, intel_dsi->burst_mode_ratio); /* FIXME: Find better way to do this */ /* For 7x10 panel we need to have BLLP added to active */ /* Trying to find optimal BLLP Multiplier */ /* 2.875 - Original multiplier, Works with flicker */ /* 2.000 - works but still some flicker */ /* 1.500 - Works, No Flicker */ /* 1.250 - Works, No Flicker */ /* 1.100 - Doesn't work */ /* FIXME: Acer Mango spec requires to run the DSI clock at 500 to * 560Mbps. Recomendation is to run at 513 Mbps. The addition dsi * clock is to be filled with NULL packets. Refer to acer panel * spec for more details. */ if (dev_priv->mipi_panel_id == MIPI_DSI_AUO_B080XAT_PANEL_ID) hactive = (hactive * 10) / 8; do { I915_WRITE(MIPI_HACTIVE_AREA_COUNT(pipe), hactive); I915_WRITE(MIPI_HFP_COUNT(pipe), hfp); /* meaningful for video mode non-burst sync pulse mode only, * can be zero for non-burst sync events and burst modes */ I915_WRITE(MIPI_HSYNC_PADDING_COUNT(pipe), hsync); I915_WRITE(MIPI_HBP_COUNT(pipe), hbp); /* vertical values are in terms of lines */ I915_WRITE(MIPI_VFP_COUNT(pipe), vfp); I915_WRITE(MIPI_VSYNC_PADDING_COUNT(pipe), vsync); I915_WRITE(MIPI_VBP_COUNT(pipe), vbp); I915_WRITE(MIPI_DPI_RESOLUTION(pipe), (mode->vdisplay << VERTICAL_ADDRESS_SHIFT) | (mode_hactive << HORIZONTAL_ADDRESS_SHIFT)); pipe = PIPE_B; } while (--count > 0); }