• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/video/msm/

Lines Matching refs:msmfb

53 		printk(KERN_INFO "msmfb: "fmt, ##args); \
106 struct msmfb_info *msmfb = container_of(callback, struct msmfb_info,
109 spin_lock_irqsave(&msmfb->update_lock, irq_flags);
110 msmfb->frame_done = msmfb->frame_requested;
111 if (msmfb->sleeping == UPDATING &&
112 msmfb->frame_done == msmfb->update_frame) {
114 queue_work(msmfb->resume_workqueue, &msmfb->resume_work);
116 spin_unlock_irqrestore(&msmfb->update_lock, irq_flags);
117 wake_up(&msmfb->frame_wq);
120 static int msmfb_start_dma(struct msmfb_info *msmfb)
127 struct msm_panel_data *panel = msmfb->panel;
129 spin_lock_irqsave(&msmfb->update_lock, irq_flags);
131 msmfb->vsync_request_time));
138 if (msmfb->frame_done == msmfb->frame_requested) {
139 spin_unlock_irqrestore(&msmfb->update_lock, irq_flags);
142 if (msmfb->sleeping == SLEEPING) {
144 spin_unlock_irqrestore(&msmfb->update_lock, irq_flags);
147 x = msmfb->update_info.left;
148 y = msmfb->update_info.top;
149 w = msmfb->update_info.eright - x;
150 h = msmfb->update_info.ebottom - y;
151 yoffset = msmfb->yoffset;
152 msmfb->update_info.left = msmfb->xres + 1;
153 msmfb->update_info.top = msmfb->yres + 1;
154 msmfb->update_info.eright = 0;
155 msmfb->update_info.ebottom = 0;
156 if (unlikely(w > msmfb->xres || h > msmfb->yres ||
160 msmfb->frame_done = msmfb->frame_requested;
163 spin_unlock_irqrestore(&msmfb->update_lock, irq_flags);
165 addr = ((msmfb->xres * (yoffset + y) + x) * 2);
166 mdp->dma(mdp, addr + msmfb->fb->fix.smem_start,
167 msmfb->xres * 2, w, h, x, y, &msmfb->dma_callback,
171 spin_unlock_irqrestore(&msmfb->update_lock, irq_flags);
175 wake_up(&msmfb->frame_wq);
182 struct msmfb_info *msmfb = container_of(callback, struct msmfb_info,
184 msmfb_start_dma(msmfb);
189 struct msmfb_info *msmfb = container_of(timer, struct msmfb_info,
191 msmfb_start_dma(msmfb);
199 struct msmfb_info *msmfb = info->par;
200 struct msm_panel_data *panel = msmfb->panel;
208 spin_lock_irqsave(&msmfb->update_lock, irq_flags);
212 if (msmfb->sleeping == SLEEPING) {
214 spin_unlock_irqrestore(&msmfb->update_lock, irq_flags);
216 wait_event_interruptible_timeout(msmfb->frame_wq,
217 msmfb->sleeping != SLEEPING, HZ/10);
221 sleeping = msmfb->sleeping;
223 if (pan_display && (msmfb->frame_requested != msmfb->frame_done ||
226 spin_unlock_irqrestore(&msmfb->update_lock, irq_flags);
227 ret = wait_event_interruptible_timeout(msmfb->frame_wq,
228 msmfb->frame_done == msmfb->frame_requested &&
229 msmfb->sleeping != UPDATING, 5 * HZ);
230 if (ret <= 0 && (msmfb->frame_requested != msmfb->frame_done ||
231 msmfb->sleeping == UPDATING)) {
235 &msmfb->vsync_callback);
242 msmfb->frame_requested,
243 msmfb->frame_done);
251 msmfb->frame_requested++;
255 msmfb->yoffset = yoffset;
259 msmfb->update_frame = msmfb->frame_requested;
261 msmfb->sleeping = UPDATING;
267 if (left < msmfb->update_info.left)
268 msmfb->update_info.left = left;
269 if (top < msmfb->update_info.top)
270 msmfb->update_info.top = top;
271 if (eright > msmfb->update_info.eright)
272 msmfb->update_info.eright = eright;
273 if (ebottom > msmfb->update_info.ebottom)
274 msmfb->update_info.ebottom = ebottom;
276 msmfb->update_info.left, msmfb->update_info.top,
277 msmfb->update_info.eright, msmfb->update_info.ebottom,
278 msmfb->yoffset);
279 spin_unlock_irqrestore(&msmfb->update_lock, irq_flags);
283 msmfb->vsync_request_time = ktime_get();
285 panel->request_vsync(panel, &msmfb->vsync_callback);
287 if (!hrtimer_active(&msmfb->fake_vsync)) {
288 hrtimer_start(&msmfb->fake_vsync,
303 struct msmfb_info *msmfb =
305 struct msm_panel_data *panel = msmfb->panel;
308 mutex_lock(&msmfb->panel_init_lock);
310 if (msmfb->sleeping == UPDATING) {
312 printk(KERN_INFO "msmfb: panel unblank failed,"
316 spin_lock_irqsave(&msmfb->update_lock, irq_flags);
317 msmfb->sleeping = AWAKE;
318 wake_up(&msmfb->frame_wq);
319 spin_unlock_irqrestore(&msmfb->update_lock, irq_flags);
322 mutex_unlock(&msmfb->panel_init_lock);
341 struct msmfb_info *msmfb = info->par;
342 struct msm_panel_data *panel = msmfb->panel;
421 printk(KERN_INFO "msmfb unknown ioctl: %d\n", cmd);
445 static void setup_fb_info(struct msmfb_info *msmfb)
447 struct fb_info *fb_info = msmfb->fb;
451 strncpy(fb_info->fix.id, "msmfb", 16);
459 fb_info->fix.line_length = msmfb->xres * 2;
461 fb_info->var.xres = msmfb->xres;
462 fb_info->var.yres = msmfb->yres;
463 fb_info->var.width = msmfb->panel->fb_data->width;
464 fb_info->var.height = msmfb->panel->fb_data->height;
465 fb_info->var.xres_virtual = msmfb->xres;
466 fb_info->var.yres_virtual = msmfb->yres * 2;
472 if (msmfb->panel->caps & MSMFB_CAP_PARTIAL_UPDATES) {
475 fb_info->var.reserved[2] = (uint16_t)msmfb->xres |
476 ((uint32_t)msmfb->yres << 16);
497 static int setup_fbmem(struct msmfb_info *msmfb, struct platform_device *pdev)
499 struct fb_info *fb = msmfb->fb;
501 unsigned long size = msmfb->xres * msmfb->yres *
521 printk(KERN_ERR "msmfb: cannot allocate fbram!\n");
531 struct msmfb_info *msmfb;
547 msmfb = fb->par;
548 msmfb->fb = fb;
549 msmfb->panel = panel;
550 msmfb->xres = panel->fb_data->xres;
551 msmfb->yres = panel->fb_data->yres;
553 ret = setup_fbmem(msmfb, pdev);
557 setup_fb_info(msmfb);
559 spin_lock_init(&msmfb->update_lock);
560 mutex_init(&msmfb->panel_init_lock);
561 init_waitqueue_head(&msmfb->frame_wq);
562 msmfb->resume_workqueue = create_workqueue("panel_on");
563 if (msmfb->resume_workqueue == NULL) {
568 INIT_WORK(&msmfb->resume_work, power_on_panel);
569 msmfb->black = kzalloc(msmfb->fb->var.bits_per_pixel*msmfb->xres,
573 msmfb->xres, msmfb->yres);
575 msmfb->dma_callback.func = msmfb_handle_dma_interrupt;
576 msmfb->vsync_callback.func = msmfb_handle_vsync_interrupt;
577 hrtimer_init(&msmfb->fake_vsync, CLOCK_MONOTONIC,
581 msmfb->fake_vsync.function = msmfb_fake_vsync;
587 msmfb->sleeping = WAKING;
592 destroy_workqueue(msmfb->resume_workqueue);
596 framebuffer_release(msmfb->fb);