aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorRobby Cai <R63905@freescale.com>2013-09-22 05:31:06 -0400
committerNitin Garg <nitin.garg@freescale.com>2014-04-16 09:05:41 -0400
commit5178812ac48091da266340bdd625b9d1ed31e262 (patch)
treeaec7ef1134dea35b301d7db9ea5a7b190196f0ae /drivers/media
parent58f295848e6077e84f54c8c3c397b9c3ae19f401 (diff)
ENGR00280140 pxp/v4l2: restore the display content after video playback finishes
After finish video playback, the last frame remains on the display. It's because the UI display start address (smem_start) has been changed when do video playback but not changed back again after the playback finishes. From the function call point of view, pxp_set_fbinfo() // pxp->fb.base tracks right addr for UI framebuffer pxp_show_buf(toshow) // smem_start changed to v4l2 display addr pxp_set_fbinfo() // pxp->fb.base changed to v4l2 display addr pxp_show_buf(not toshow) // smem_start still equal to v4l2 display addr // for pan_display This patch fixes it by calling pxp_set_fbinfo once in open function. Signed-off-by: Robby Cai <R63905@freescale.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/platform/mxc/output/mxc_pxp_v4l2.c24
1 files changed, 6 insertions, 18 deletions
diff --git a/drivers/media/platform/mxc/output/mxc_pxp_v4l2.c b/drivers/media/platform/mxc/output/mxc_pxp_v4l2.c
index 355b9251c070..d18043124b12 100644
--- a/drivers/media/platform/mxc/output/mxc_pxp_v4l2.c
+++ b/drivers/media/platform/mxc/output/mxc_pxp_v4l2.c
@@ -291,12 +291,6 @@ static int pxp_show_buf(struct pxps *pxp, bool toshow)
291 struct fb_info *fbi = pxp->fbi; 291 struct fb_info *fbi = pxp->fbi;
292 int ret; 292 int ret;
293 293
294 ret = pxp_set_fbinfo(pxp);
295 if (ret) {
296 dev_err(&pxp->pdev->dev, "failed to call pxp_set_fbinfo\n");
297 return ret;
298 }
299
300 console_lock(); 294 console_lock();
301 fbi->fix.smem_start = toshow ? 295 fbi->fix.smem_start = toshow ?
302 pxp->outb_phys : (unsigned long)pxp->fb.base; 296 pxp->outb_phys : (unsigned long)pxp->fb.base;
@@ -793,12 +787,6 @@ static int pxp_buf_prepare(struct videobuf_queue *q,
793 sizeof(struct pxp_layer_param)); 787 sizeof(struct pxp_layer_param));
794 } else if (pxp_conf->ol_param[0].combine_enable) { 788 } else if (pxp_conf->ol_param[0].combine_enable) {
795 /* Overlay */ 789 /* Overlay */
796 ret = pxp_set_fbinfo(pxp);
797 if (ret) {
798 dev_err(&pxp->pdev->dev,
799 "call pxp_set_fbinfo failed");
800 goto fail;
801 }
802 pxp_conf->ol_param[0].paddr = 790 pxp_conf->ol_param[0].paddr =
803 (dma_addr_t)pxp->fb.base; 791 (dma_addr_t)pxp->fb.base;
804 pxp_conf->ol_param[0].width = pxp->fb.fmt.width; 792 pxp_conf->ol_param[0].width = pxp->fb.fmt.width;
@@ -1081,6 +1069,12 @@ out:
1081 if (ret) 1069 if (ret)
1082 return ret; 1070 return ret;
1083 1071
1072 ret = pxp_set_fbinfo(pxp);
1073 if (ret) {
1074 dev_err(&pxp->pdev->dev, "failed to call pxp_set_fbinfo\n");
1075 return ret;
1076 }
1077
1084 videobuf_queue_dma_contig_init(&pxp->s0_vbq, 1078 videobuf_queue_dma_contig_init(&pxp->s0_vbq,
1085 &pxp_vbq_ops, 1079 &pxp_vbq_ops,
1086 &pxp->pdev->dev, 1080 &pxp->pdev->dev,
@@ -1219,12 +1213,6 @@ static int pxp_probe(struct platform_device *pdev)
1219 goto freevdev; 1213 goto freevdev;
1220 } 1214 }
1221 1215
1222 err = pxp_set_fbinfo(pxp);
1223 if (err) {
1224 dev_err(&pdev->dev, "failed to call pxp_set_fbinfo\n");
1225 goto freevdev;
1226 }
1227
1228 dev_info(&pdev->dev, "initialized\n"); 1216 dev_info(&pdev->dev, "initialized\n");
1229 1217
1230exit: 1218exit: