Date: | 2011-09-18 15:05:00 (12 years 2 months ago) |
---|---|
Author: | Maarten ter Huurne |
Commit: | 2452f67a22b19aaea8c907f46ebf52fd346f1ae0 |
Message: | MIPS: JZ4740: SLCD: Enable caching on mmap-ed frame buffer. Override the mmap operation. The implementation of mmap is based on that from the ps3fb driver. Thanks to Lars-Peter Clausen for his help. |
Files: |
drivers/video/jz4740_slcd_fb.c (3 diffs) |
Change Details
drivers/video/jz4740_slcd_fb.c | ||
---|---|---|
240 | 240 | { |
241 | 241 | struct fb_info *fb = jzfb->fb; |
242 | 242 | struct fb_videomode *mode = fb->mode; |
243 | __u32 bytes_per_line = fb->fix.line_length; | |
243 | __u32 offset = fb->fix.line_length * fb->var.yoffset; | |
244 | __u32 size = fb->fix.line_length * mode->yres; | |
244 | 245 | |
245 | jz4740_dma_set_src_addr(jzfb->dma, jzfb->vidmem_phys + | |
246 | bytes_per_line * fb->var.yoffset); | |
246 | /* Ensure that the data to be uploaded is in memory. */ | |
247 | dma_cache_sync(fb->device, jzfb->vidmem + offset, size, | |
248 | DMA_TO_DEVICE); | |
249 | ||
250 | jz4740_dma_set_src_addr(jzfb->dma, jzfb->vidmem_phys + offset); | |
247 | 251 | jz4740_dma_set_dst_addr(jzfb->dma, |
248 | 252 | CPHYSADDR(jzfb->base + JZ_REG_SLCD_FIFO)); |
249 | jz4740_dma_set_transfer_count(jzfb->dma, bytes_per_line * mode->yres); | |
253 | jz4740_dma_set_transfer_count(jzfb->dma, size); | |
250 | 254 | |
251 | 255 | while (readb(jzfb->base + JZ_REG_SLCD_STATE) & SLCD_STATE_BUSY); |
252 | 256 | writeb(readb(jzfb->base + JZ_REG_SLCD_CTRL) | SLCD_CTRL_DMA_EN, |
... | ... | |
508 | 512 | return 0; |
509 | 513 | } |
510 | 514 | |
515 | static int jzfb_mmap(struct fb_info *info, struct vm_area_struct *vma) | |
516 | { | |
517 | const unsigned long offset = vma->vm_pgoff << PAGE_SHIFT; | |
518 | const unsigned long size = vma->vm_end - vma->vm_start; | |
519 | ||
520 | if (offset + size > info->fix.smem_len) | |
521 | return -EINVAL; | |
522 | ||
523 | if (remap_pfn_range(vma, vma->vm_start, | |
524 | (info->fix.smem_start + offset) >> PAGE_SHIFT, | |
525 | size, vma->vm_page_prot)) | |
526 | return -EAGAIN; | |
527 | ||
528 | return 0; | |
529 | } | |
530 | ||
511 | 531 | static int jzfb_alloc_devmem(struct jzfb *jzfb) |
512 | 532 | { |
513 | 533 | int max_framesize = 0; |
... | ... | |
670 | 690 | .fb_copyarea = sys_copyarea, |
671 | 691 | .fb_imageblit = sys_imageblit, |
672 | 692 | .fb_ioctl = jzfb_ioctl, |
693 | .fb_mmap = jzfb_mmap, | |
673 | 694 | }; |
674 | 695 | |
675 | 696 | static int __devinit jzfb_probe(struct platform_device *pdev) |
Branches:
ben-wpan
ben-wpan-stefan
5396a9238205f20f811ea57898980d3ca82df0b6
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9