Message ID | 1418954426-21909-5-git-send-email-steve_longerbeam@mentor.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Dec 18, 2014 at 06:00:23PM -0800, Steve Longerbeam wrote: > Ask the IPU display interface, via ipu_di_adjust_videomode(), to > adjust a video mode to meet any DI restrictions. The function takes > a subsystem independent videomode, so the drm_display_mode must be > converted to videomode first, and then the adjusted mode converted > back to a drm_display_mode. What is the reason to use videomode (apart from it being subsystem independent)? Do we forsee implementation of other output subsystems for the IPU?
Hi Russell, On Sat, Dec 20, 2014 at 03:52:54PM +0000, Russell King - ARM Linux wrote: > On Thu, Dec 18, 2014 at 06:00:23PM -0800, Steve Longerbeam wrote: > > Ask the IPU display interface, via ipu_di_adjust_videomode(), to > > adjust a video mode to meet any DI restrictions. The function takes > > a subsystem independent videomode, so the drm_display_mode must be > > converted to videomode first, and then the adjusted mode converted > > back to a drm_display_mode. > > What is the reason to use videomode (apart from it being subsystem > independent)? Do we forsee implementation of other output subsystems > for the IPU? There might be the issue of possible CSI -> IC -> DC -> DI passthrough, where the DI timing must be synchronized to the CSI input signal. I haven't really thought about how that should be integrated with the DRM driver mostly because of the 1024 pixel output width maximum in the IC, which limits the usefulness somewhat. I like the use of struct videomode here for the symmetry with patch 6. But currently, we could make ipu_di_adjust_videomode take a drm_display_mode just as well. regards Philipp
diff --git a/drivers/gpu/drm/imx/ipuv3-crtc.c b/drivers/gpu/drm/imx/ipuv3-crtc.c index 11e84a2..fb16026 100644 --- a/drivers/gpu/drm/imx/ipuv3-crtc.c +++ b/drivers/gpu/drm/imx/ipuv3-crtc.c @@ -242,6 +242,18 @@ static bool ipu_crtc_mode_fixup(struct drm_crtc *crtc, const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode) { + struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc); + struct videomode vm; + int ret; + + videomode_from_drm_display_mode(adjusted_mode, &vm); + + ret = ipu_di_adjust_videomode(ipu_crtc->di, &vm); + if (ret) + return false; + + drm_display_mode_from_videomode(&vm, adjusted_mode); + return true; }
Ask the IPU display interface, via ipu_di_adjust_videomode(), to adjust a video mode to meet any DI restrictions. The function takes a subsystem independent videomode, so the drm_display_mode must be converted to videomode first, and then the adjusted mode converted back to a drm_display_mode. Signed-off-by: Steve Longerbeam <steve_longerbeam@mentor.com> --- drivers/gpu/drm/imx/ipuv3-crtc.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)