writel(SET_DOTCLK_H_VALID_DATA_CNT(m->hdisplay),
mxsfb->base + LCDC_VDCTRL4);
-
- if (mxsfb->gem != NULL) {
- writel(mxsfb->gem->paddr,
- mxsfb->base + mxsfb->devdata->next_buf);
- mxsfb->gem = NULL;
- }
-
}
void mxsfb_crtc_enable(struct mxsfb_drm_private *mxsfb)
{
dma_addr_t paddr;
- if (mxsfb->enabled)
- return;
-
if (mxsfb->devdata->flags & MXSFB_FLAG_BUSFREQ)
request_bus_freq(BUS_FREQ_HIGH);
}
mxsfb_enable_controller(mxsfb);
-
- mxsfb->enabled = true;
}
void mxsfb_crtc_disable(struct mxsfb_drm_private *mxsfb)
{
- if (!mxsfb->enabled)
- return;
-
mxsfb_disable_controller(mxsfb);
mxsfb_disable_axi_clk(mxsfb);
if (mxsfb->devdata->flags & MXSFB_FLAG_BUSFREQ)
release_bus_freq(BUS_FREQ_HIGH);
-
- mxsfb->enabled = false;
}
void mxsfb_plane_atomic_update(struct mxsfb_drm_private *mxsfb,
{
struct drm_simple_display_pipe *pipe = &mxsfb->pipe;
struct drm_crtc *crtc = &pipe->crtc;
- struct drm_device *drm = crtc->dev;
struct drm_framebuffer *fb = pipe->plane.state->fb;
struct drm_framebuffer *old_fb = old_state->fb;
struct drm_pending_vblank_event *event;
- struct drm_gem_cma_object *gem;
dma_addr_t paddr;
spin_lock_irq(&crtc->dev->event_lock);
}
spin_unlock_irq(&crtc->dev->event_lock);
- if (!fb)
- return;
-
- gem = drm_fb_cma_get_gem_obj(fb, 0);
+ paddr = mxsfb_get_fb_paddr(mxsfb);
+ if (paddr) {
+ mxsfb_enable_axi_clk(mxsfb);
+ writel(paddr, mxsfb->base + mxsfb->devdata->next_buf);
+ mxsfb_disable_axi_clk(mxsfb);
+ }
- if (!mxsfb->enabled) {
- mxsfb->gem = gem;
+ if (!fb || !old_fb)
return;
- }
/*
* TODO: Currently, we only support pixel format change, but we need
if (old_fb->format->format != fb->format->format) {
struct drm_format_name_buf old_fmt_buf;
struct drm_format_name_buf new_fmt_buf;
- DRM_DEV_DEBUG_DRIVER(drm->dev,
+ DRM_DEV_DEBUG_DRIVER(mxsfb->dev,
"Switching pixel format: %s -> %s\n",
drm_get_format_name(old_fb->format->format, &old_fmt_buf),
drm_get_format_name(fb->format->format, &new_fmt_buf));
mxsfb_set_pixel_fmt(mxsfb, true);
}
-
- paddr = mxsfb_get_fb_paddr(mxsfb);
- if (paddr) {
- mxsfb_enable_axi_clk(mxsfb);
- writel(paddr, mxsfb->base + mxsfb->devdata->next_buf);
- mxsfb_disable_axi_clk(mxsfb);
- }
}