int unifb_mmap(struct fb_info *info,
                    struct vm_area_struct *vma)
 {
-       unsigned long size = vma->vm_end - vma->vm_start;
-       unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
-       unsigned long pos = info->fix.smem_start + offset;
-
-       if (offset + size > info->fix.smem_len)
-               return -EINVAL;
-
        vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
 
-       if (io_remap_pfn_range(vma, vma->vm_start, pos >> PAGE_SHIFT, size,
-                               vma->vm_page_prot))
-               return -EAGAIN;
-
-       /* VM_IO | VM_DONTEXPAND | VM_DONTDUMP are set by remap_pfn_range() */
-       return 0;
+       return vm_iomap_memory(vma, info->fix.smem_start, info->fix.smem_len);
 }
 
 static struct fb_ops unifb_ops = {