aboutsummaryrefslogtreecommitdiffstats
path: root/sound/usb/usx2y/usX2Yhwdep.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/usb/usx2y/usX2Yhwdep.c')
-rw-r--r--sound/usb/usx2y/usX2Yhwdep.c24
1 files changed, 10 insertions, 14 deletions
diff --git a/sound/usb/usx2y/usX2Yhwdep.c b/sound/usb/usx2y/usX2Yhwdep.c
index b76b3dd9df25..6495534e5bf6 100644
--- a/sound/usb/usx2y/usX2Yhwdep.c
+++ b/sound/usb/usx2y/usX2Yhwdep.c
@@ -20,7 +20,6 @@
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 */ 21 */
22 22
23#include <sound/driver.h>
24#include <linux/interrupt.h> 23#include <linux/interrupt.h>
25#include <linux/usb.h> 24#include <linux/usb.h>
26#include <sound/core.h> 25#include <sound/core.h>
@@ -34,34 +33,31 @@
34int usX2Y_hwdep_pcm_new(struct snd_card *card); 33int usX2Y_hwdep_pcm_new(struct snd_card *card);
35 34
36 35
37static struct page * snd_us428ctls_vm_nopage(struct vm_area_struct *area, unsigned long address, int *type) 36static int snd_us428ctls_vm_fault(struct vm_area_struct *area,
37 struct vm_fault *vmf)
38{ 38{
39 unsigned long offset; 39 unsigned long offset;
40 struct page * page; 40 struct page * page;
41 void *vaddr; 41 void *vaddr;
42 42
43 snd_printdd("ENTER, start %lXh, ofs %lXh, pgoff %ld, addr %lXh\n", 43 snd_printdd("ENTER, start %lXh, pgoff %ld\n",
44 area->vm_start, 44 area->vm_start,
45 address - area->vm_start, 45 vmf->pgoff);
46 (address - area->vm_start) >> PAGE_SHIFT,
47 address);
48 46
49 offset = area->vm_pgoff << PAGE_SHIFT; 47 offset = vmf->pgoff << PAGE_SHIFT;
50 offset += address - area->vm_start;
51 snd_assert((offset % PAGE_SIZE) == 0, return NOPAGE_SIGBUS);
52 vaddr = (char*)((struct usX2Ydev *)area->vm_private_data)->us428ctls_sharedmem + offset; 48 vaddr = (char*)((struct usX2Ydev *)area->vm_private_data)->us428ctls_sharedmem + offset;
53 page = virt_to_page(vaddr); 49 page = virt_to_page(vaddr);
54 get_page(page); 50 get_page(page);
55 snd_printdd( "vaddr=%p made us428ctls_vm_nopage() return %p; offset=%lX\n", vaddr, page, offset); 51 vmf->page = page;
56 52
57 if (type) 53 snd_printdd("vaddr=%p made us428ctls_vm_fault() page %p\n",
58 *type = VM_FAULT_MINOR; 54 vaddr, page);
59 55
60 return page; 56 return 0;
61} 57}
62 58
63static struct vm_operations_struct us428ctls_vm_ops = { 59static struct vm_operations_struct us428ctls_vm_ops = {
64 .nopage = snd_us428ctls_vm_nopage, 60 .fault = snd_us428ctls_vm_fault,
65}; 61};
66 62
67static int snd_us428ctls_mmap(struct snd_hwdep * hw, struct file *filp, struct vm_area_struct *area) 63static int snd_us428ctls_mmap(struct snd_hwdep * hw, struct file *filp, struct vm_area_struct *area)