diff options
Diffstat (limited to 'drivers/video/msm')
-rw-r--r-- | drivers/video/msm/mdp_hw.h | 11 | ||||
-rw-r--r-- | drivers/video/msm/mdp_ppp.c | 1 | ||||
-rw-r--r-- | drivers/video/msm/msm_fb.c | 27 |
3 files changed, 25 insertions, 14 deletions
diff --git a/drivers/video/msm/mdp_hw.h b/drivers/video/msm/mdp_hw.h index 4e3deb4e592b..d80477415caa 100644 --- a/drivers/video/msm/mdp_hw.h +++ b/drivers/video/msm/mdp_hw.h | |||
@@ -449,6 +449,7 @@ int mdp_ppp_blit(const struct mdp_info *mdp, struct mdp_blit_req *req, | |||
449 | #define PPP_CFG_MDP_XRGB_8888(dir) PPP_CFG_MDP_ARGB_8888(dir) | 449 | #define PPP_CFG_MDP_XRGB_8888(dir) PPP_CFG_MDP_ARGB_8888(dir) |
450 | #define PPP_CFG_MDP_RGBA_8888(dir) PPP_CFG_MDP_ARGB_8888(dir) | 450 | #define PPP_CFG_MDP_RGBA_8888(dir) PPP_CFG_MDP_ARGB_8888(dir) |
451 | #define PPP_CFG_MDP_BGRA_8888(dir) PPP_CFG_MDP_ARGB_8888(dir) | 451 | #define PPP_CFG_MDP_BGRA_8888(dir) PPP_CFG_MDP_ARGB_8888(dir) |
452 | #define PPP_CFG_MDP_RGBX_8888(dir) PPP_CFG_MDP_ARGB_8888(dir) | ||
452 | 453 | ||
453 | #define PPP_CFG_MDP_Y_CBCR_H2V2(dir) (PPP_##dir##_C2R_8BIT | \ | 454 | #define PPP_CFG_MDP_Y_CBCR_H2V2(dir) (PPP_##dir##_C2R_8BIT | \ |
454 | PPP_##dir##_C0G_8BIT | \ | 455 | PPP_##dir##_C0G_8BIT | \ |
@@ -488,12 +489,14 @@ int mdp_ppp_blit(const struct mdp_info *mdp, struct mdp_blit_req *req, | |||
488 | MDP_GET_PACK_PATTERN(0, CLR_R, CLR_G, CLR_B, 8) | 489 | MDP_GET_PACK_PATTERN(0, CLR_R, CLR_G, CLR_B, 8) |
489 | #define PPP_PACK_PATTERN_MDP_RGB_888 PPP_PACK_PATTERN_MDP_RGB_565 | 490 | #define PPP_PACK_PATTERN_MDP_RGB_888 PPP_PACK_PATTERN_MDP_RGB_565 |
490 | #define PPP_PACK_PATTERN_MDP_XRGB_8888 \ | 491 | #define PPP_PACK_PATTERN_MDP_XRGB_8888 \ |
491 | MDP_GET_PACK_PATTERN(CLR_ALPHA, CLR_R, CLR_G, CLR_B, 8) | 492 | MDP_GET_PACK_PATTERN(CLR_B, CLR_G, CLR_R, CLR_ALPHA, 8) |
492 | #define PPP_PACK_PATTERN_MDP_ARGB_8888 PPP_PACK_PATTERN_MDP_XRGB_8888 | 493 | #define PPP_PACK_PATTERN_MDP_ARGB_8888 PPP_PACK_PATTERN_MDP_XRGB_8888 |
493 | #define PPP_PACK_PATTERN_MDP_RGBA_8888 \ | 494 | #define PPP_PACK_PATTERN_MDP_RGBA_8888 \ |
494 | MDP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8) | 495 | MDP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8) |
495 | #define PPP_PACK_PATTERN_MDP_BGRA_8888 \ | 496 | #define PPP_PACK_PATTERN_MDP_BGRA_8888 \ |
496 | MDP_GET_PACK_PATTERN(CLR_ALPHA, CLR_R, CLR_G, CLR_B, 8) | 497 | MDP_GET_PACK_PATTERN(CLR_ALPHA, CLR_R, CLR_G, CLR_B, 8) |
498 | #define PPP_PACK_PATTERN_MDP_RGBX_8888 \ | ||
499 | MDP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8) | ||
497 | #define PPP_PACK_PATTERN_MDP_Y_CBCR_H2V1 \ | 500 | #define PPP_PACK_PATTERN_MDP_Y_CBCR_H2V1 \ |
498 | MDP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8) | 501 | MDP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8) |
499 | #define PPP_PACK_PATTERN_MDP_Y_CBCR_H2V2 PPP_PACK_PATTERN_MDP_Y_CBCR_H2V1 | 502 | #define PPP_PACK_PATTERN_MDP_Y_CBCR_H2V2 PPP_PACK_PATTERN_MDP_Y_CBCR_H2V1 |
@@ -509,6 +512,7 @@ int mdp_ppp_blit(const struct mdp_info *mdp, struct mdp_blit_req *req, | |||
509 | #define PPP_CHROMA_SAMP_MDP_ARGB_8888(dir) PPP_OP_##dir##_CHROMA_RGB | 512 | #define PPP_CHROMA_SAMP_MDP_ARGB_8888(dir) PPP_OP_##dir##_CHROMA_RGB |
510 | #define PPP_CHROMA_SAMP_MDP_RGBA_8888(dir) PPP_OP_##dir##_CHROMA_RGB | 513 | #define PPP_CHROMA_SAMP_MDP_RGBA_8888(dir) PPP_OP_##dir##_CHROMA_RGB |
511 | #define PPP_CHROMA_SAMP_MDP_BGRA_8888(dir) PPP_OP_##dir##_CHROMA_RGB | 514 | #define PPP_CHROMA_SAMP_MDP_BGRA_8888(dir) PPP_OP_##dir##_CHROMA_RGB |
515 | #define PPP_CHROMA_SAMP_MDP_RGBX_8888(dir) PPP_OP_##dir##_CHROMA_RGB | ||
512 | #define PPP_CHROMA_SAMP_MDP_Y_CBCR_H2V1(dir) PPP_OP_##dir##_CHROMA_H2V1 | 516 | #define PPP_CHROMA_SAMP_MDP_Y_CBCR_H2V1(dir) PPP_OP_##dir##_CHROMA_H2V1 |
513 | #define PPP_CHROMA_SAMP_MDP_Y_CBCR_H2V2(dir) PPP_OP_##dir##_CHROMA_420 | 517 | #define PPP_CHROMA_SAMP_MDP_Y_CBCR_H2V2(dir) PPP_OP_##dir##_CHROMA_420 |
514 | #define PPP_CHROMA_SAMP_MDP_Y_CRCB_H2V1(dir) PPP_OP_##dir##_CHROMA_H2V1 | 518 | #define PPP_CHROMA_SAMP_MDP_Y_CRCB_H2V1(dir) PPP_OP_##dir##_CHROMA_H2V1 |
@@ -523,6 +527,7 @@ int mdp_ppp_blit(const struct mdp_info *mdp, struct mdp_blit_req *req, | |||
523 | [MDP_ARGB_8888] = PPP_##name##_MDP_ARGB_8888,\ | 527 | [MDP_ARGB_8888] = PPP_##name##_MDP_ARGB_8888,\ |
524 | [MDP_RGBA_8888] = PPP_##name##_MDP_RGBA_8888,\ | 528 | [MDP_RGBA_8888] = PPP_##name##_MDP_RGBA_8888,\ |
525 | [MDP_BGRA_8888] = PPP_##name##_MDP_BGRA_8888,\ | 529 | [MDP_BGRA_8888] = PPP_##name##_MDP_BGRA_8888,\ |
530 | [MDP_RGBX_8888] = PPP_##name##_MDP_RGBX_8888,\ | ||
526 | [MDP_Y_CBCR_H2V1] = PPP_##name##_MDP_Y_CBCR_H2V1,\ | 531 | [MDP_Y_CBCR_H2V1] = PPP_##name##_MDP_Y_CBCR_H2V1,\ |
527 | [MDP_Y_CBCR_H2V2] = PPP_##name##_MDP_Y_CBCR_H2V2,\ | 532 | [MDP_Y_CBCR_H2V2] = PPP_##name##_MDP_Y_CBCR_H2V2,\ |
528 | [MDP_Y_CRCB_H2V1] = PPP_##name##_MDP_Y_CRCB_H2V1,\ | 533 | [MDP_Y_CRCB_H2V1] = PPP_##name##_MDP_Y_CRCB_H2V1,\ |
@@ -536,6 +541,7 @@ int mdp_ppp_blit(const struct mdp_info *mdp, struct mdp_blit_req *req, | |||
536 | [MDP_ARGB_8888] = PPP_##name##_MDP_ARGB_8888(dir),\ | 541 | [MDP_ARGB_8888] = PPP_##name##_MDP_ARGB_8888(dir),\ |
537 | [MDP_RGBA_8888] = PPP_##name##_MDP_RGBA_8888(dir),\ | 542 | [MDP_RGBA_8888] = PPP_##name##_MDP_RGBA_8888(dir),\ |
538 | [MDP_BGRA_8888] = PPP_##name##_MDP_BGRA_8888(dir),\ | 543 | [MDP_BGRA_8888] = PPP_##name##_MDP_BGRA_8888(dir),\ |
544 | [MDP_RGBX_8888] = PPP_##name##_MDP_RGBX_8888(dir),\ | ||
539 | [MDP_Y_CBCR_H2V1] = PPP_##name##_MDP_Y_CBCR_H2V1(dir),\ | 545 | [MDP_Y_CBCR_H2V1] = PPP_##name##_MDP_Y_CBCR_H2V1(dir),\ |
540 | [MDP_Y_CBCR_H2V2] = PPP_##name##_MDP_Y_CBCR_H2V2(dir),\ | 546 | [MDP_Y_CBCR_H2V2] = PPP_##name##_MDP_Y_CBCR_H2V2(dir),\ |
541 | [MDP_Y_CRCB_H2V1] = PPP_##name##_MDP_Y_CRCB_H2V1(dir),\ | 547 | [MDP_Y_CRCB_H2V1] = PPP_##name##_MDP_Y_CRCB_H2V1(dir),\ |
@@ -547,7 +553,8 @@ int mdp_ppp_blit(const struct mdp_info *mdp, struct mdp_blit_req *req, | |||
547 | (img == MDP_YCRYCB_H2V1)) | 553 | (img == MDP_YCRYCB_H2V1)) |
548 | #define IS_RGB(img) ((img == MDP_RGB_565) | (img == MDP_RGB_888) | \ | 554 | #define IS_RGB(img) ((img == MDP_RGB_565) | (img == MDP_RGB_888) | \ |
549 | (img == MDP_ARGB_8888) | (img == MDP_RGBA_8888) | \ | 555 | (img == MDP_ARGB_8888) | (img == MDP_RGBA_8888) | \ |
550 | (img == MDP_XRGB_8888) | (img == MDP_BGRA_8888)) | 556 | (img == MDP_XRGB_8888) | (img == MDP_BGRA_8888) | \ |
557 | (img == MDP_RGBX_8888)) | ||
551 | #define HAS_ALPHA(img) ((img == MDP_ARGB_8888) | (img == MDP_RGBA_8888) | \ | 558 | #define HAS_ALPHA(img) ((img == MDP_ARGB_8888) | (img == MDP_RGBA_8888) | \ |
552 | (img == MDP_BGRA_8888)) | 559 | (img == MDP_BGRA_8888)) |
553 | 560 | ||
diff --git a/drivers/video/msm/mdp_ppp.c b/drivers/video/msm/mdp_ppp.c index 4ff001f4cbbd..2b6564e8bfea 100644 --- a/drivers/video/msm/mdp_ppp.c +++ b/drivers/video/msm/mdp_ppp.c | |||
@@ -69,6 +69,7 @@ static uint32_t bytes_per_pixel[] = { | |||
69 | [MDP_ARGB_8888] = 4, | 69 | [MDP_ARGB_8888] = 4, |
70 | [MDP_RGBA_8888] = 4, | 70 | [MDP_RGBA_8888] = 4, |
71 | [MDP_BGRA_8888] = 4, | 71 | [MDP_BGRA_8888] = 4, |
72 | [MDP_RGBX_8888] = 4, | ||
72 | [MDP_Y_CBCR_H2V1] = 1, | 73 | [MDP_Y_CBCR_H2V1] = 1, |
73 | [MDP_Y_CBCR_H2V2] = 1, | 74 | [MDP_Y_CBCR_H2V2] = 1, |
74 | [MDP_Y_CRCB_H2V1] = 1, | 75 | [MDP_Y_CRCB_H2V1] = 1, |
diff --git a/drivers/video/msm/msm_fb.c b/drivers/video/msm/msm_fb.c index debe5933fd2e..ec351309e607 100644 --- a/drivers/video/msm/msm_fb.c +++ b/drivers/video/msm/msm_fb.c | |||
@@ -81,7 +81,6 @@ struct msmfb_info { | |||
81 | spinlock_t update_lock; | 81 | spinlock_t update_lock; |
82 | struct mutex panel_init_lock; | 82 | struct mutex panel_init_lock; |
83 | wait_queue_head_t frame_wq; | 83 | wait_queue_head_t frame_wq; |
84 | struct workqueue_struct *resume_workqueue; | ||
85 | struct work_struct resume_work; | 84 | struct work_struct resume_work; |
86 | struct msmfb_callback dma_callback; | 85 | struct msmfb_callback dma_callback; |
87 | struct msmfb_callback vsync_callback; | 86 | struct msmfb_callback vsync_callback; |
@@ -111,7 +110,7 @@ static void msmfb_handle_dma_interrupt(struct msmfb_callback *callback) | |||
111 | if (msmfb->sleeping == UPDATING && | 110 | if (msmfb->sleeping == UPDATING && |
112 | msmfb->frame_done == msmfb->update_frame) { | 111 | msmfb->frame_done == msmfb->update_frame) { |
113 | DLOG(SUSPEND_RESUME, "full update completed\n"); | 112 | DLOG(SUSPEND_RESUME, "full update completed\n"); |
114 | queue_work(msmfb->resume_workqueue, &msmfb->resume_work); | 113 | schedule_work(&msmfb->resume_work); |
115 | } | 114 | } |
116 | spin_unlock_irqrestore(&msmfb->update_lock, irq_flags); | 115 | spin_unlock_irqrestore(&msmfb->update_lock, irq_flags); |
117 | wake_up(&msmfb->frame_wq); | 116 | wake_up(&msmfb->frame_wq); |
@@ -220,8 +219,8 @@ restart: | |||
220 | 219 | ||
221 | sleeping = msmfb->sleeping; | 220 | sleeping = msmfb->sleeping; |
222 | /* on a full update, if the last frame has not completed, wait for it */ | 221 | /* on a full update, if the last frame has not completed, wait for it */ |
223 | if (pan_display && (msmfb->frame_requested != msmfb->frame_done || | 222 | if ((pan_display && msmfb->frame_requested != msmfb->frame_done) || |
224 | sleeping == UPDATING)) { | 223 | sleeping == UPDATING) { |
225 | int ret; | 224 | int ret; |
226 | spin_unlock_irqrestore(&msmfb->update_lock, irq_flags); | 225 | spin_unlock_irqrestore(&msmfb->update_lock, irq_flags); |
227 | ret = wait_event_interruptible_timeout(msmfb->frame_wq, | 226 | ret = wait_event_interruptible_timeout(msmfb->frame_wq, |
@@ -470,6 +469,18 @@ static void setup_fb_info(struct msmfb_info *msmfb) | |||
470 | fb_info->var.yoffset = 0; | 469 | fb_info->var.yoffset = 0; |
471 | 470 | ||
472 | if (msmfb->panel->caps & MSMFB_CAP_PARTIAL_UPDATES) { | 471 | if (msmfb->panel->caps & MSMFB_CAP_PARTIAL_UPDATES) { |
472 | /* | ||
473 | * Set the param in the fixed screen, so userspace can't | ||
474 | * change it. This will be used to check for the | ||
475 | * capability. | ||
476 | */ | ||
477 | fb_info->fix.reserved[0] = 0x5444; | ||
478 | fb_info->fix.reserved[1] = 0x5055; | ||
479 | |||
480 | /* | ||
481 | * This preloads the value so that if userspace doesn't | ||
482 | * change it, it will be a full update | ||
483 | */ | ||
473 | fb_info->var.reserved[0] = 0x54445055; | 484 | fb_info->var.reserved[0] = 0x54445055; |
474 | fb_info->var.reserved[1] = 0; | 485 | fb_info->var.reserved[1] = 0; |
475 | fb_info->var.reserved[2] = (uint16_t)msmfb->xres | | 486 | fb_info->var.reserved[2] = (uint16_t)msmfb->xres | |
@@ -559,12 +570,6 @@ static int msmfb_probe(struct platform_device *pdev) | |||
559 | spin_lock_init(&msmfb->update_lock); | 570 | spin_lock_init(&msmfb->update_lock); |
560 | mutex_init(&msmfb->panel_init_lock); | 571 | mutex_init(&msmfb->panel_init_lock); |
561 | init_waitqueue_head(&msmfb->frame_wq); | 572 | init_waitqueue_head(&msmfb->frame_wq); |
562 | msmfb->resume_workqueue = create_workqueue("panel_on"); | ||
563 | if (msmfb->resume_workqueue == NULL) { | ||
564 | printk(KERN_ERR "failed to create panel_on workqueue\n"); | ||
565 | ret = -ENOMEM; | ||
566 | goto error_create_workqueue; | ||
567 | } | ||
568 | INIT_WORK(&msmfb->resume_work, power_on_panel); | 573 | INIT_WORK(&msmfb->resume_work, power_on_panel); |
569 | msmfb->black = kzalloc(msmfb->fb->var.bits_per_pixel*msmfb->xres, | 574 | msmfb->black = kzalloc(msmfb->fb->var.bits_per_pixel*msmfb->xres, |
570 | GFP_KERNEL); | 575 | GFP_KERNEL); |
@@ -589,8 +594,6 @@ static int msmfb_probe(struct platform_device *pdev) | |||
589 | return 0; | 594 | return 0; |
590 | 595 | ||
591 | error_register_framebuffer: | 596 | error_register_framebuffer: |
592 | destroy_workqueue(msmfb->resume_workqueue); | ||
593 | error_create_workqueue: | ||
594 | iounmap(fb->screen_base); | 597 | iounmap(fb->screen_base); |
595 | error_setup_fbmem: | 598 | error_setup_fbmem: |
596 | framebuffer_release(msmfb->fb); | 599 | framebuffer_release(msmfb->fb); |