From 871480933a1c28f8a9fed4c4d34d06c439a7a422 Mon Sep 17 00:00:00 2001 From: Srikant Patnaik Date: Sun, 11 Jan 2015 12:28:04 +0530 Subject: Moved, renamed, and deleted files The original directory structure was scattered and unorganized. Changes are basically to make it look like kernel structure. --- arch/avr32/boards/mimc200/fram.c | 81 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 arch/avr32/boards/mimc200/fram.c (limited to 'arch/avr32/boards/mimc200/fram.c') diff --git a/arch/avr32/boards/mimc200/fram.c b/arch/avr32/boards/mimc200/fram.c new file mode 100644 index 00000000..9764a1a1 --- /dev/null +++ b/arch/avr32/boards/mimc200/fram.c @@ -0,0 +1,81 @@ +/* + * FRAM driver for MIMC200 board + * + * Copyright 2008 Mark Jackson + * + * This module adds *very* simply support for the system's FRAM device. + * At the moment, this is hard-coded to the MIMC200 platform, and only + * supports mmap(). + */ + +#define FRAM_VERSION "1.0" + +#include +#include +#include +#include + +#define FRAM_BASE 0xac000000 +#define FRAM_SIZE 0x20000 + +/* + * The are the file operation function for user access to /dev/fram + */ + +static int fram_mmap(struct file *filp, struct vm_area_struct *vma) +{ + int ret; + + ret = remap_pfn_range(vma, + vma->vm_start, + virt_to_phys((void *)((unsigned long)FRAM_BASE)) >> PAGE_SHIFT, + vma->vm_end-vma->vm_start, + PAGE_SHARED); + + if (ret != 0) + return -EAGAIN; + + return 0; +} + +static const struct file_operations fram_fops = { + .owner = THIS_MODULE, + .mmap = fram_mmap, + .llseek = noop_llseek, +}; + +#define FRAM_MINOR 0 + +static struct miscdevice fram_dev = { + FRAM_MINOR, + "fram", + &fram_fops +}; + +static int __init +fram_init(void) +{ + int ret; + + ret = misc_register(&fram_dev); + if (ret) { + printk(KERN_ERR "fram: can't misc_register on minor=%d\n", + FRAM_MINOR); + return ret; + } + printk(KERN_INFO "FRAM memory driver v" FRAM_VERSION "\n"); + return 0; +} + +static void __exit +fram_cleanup_module(void) +{ + misc_deregister(&fram_dev); +} + +module_init(fram_init); +module_exit(fram_cleanup_module); + +MODULE_LICENSE("GPL"); + +MODULE_ALIAS_MISCDEV(FRAM_MINOR); -- cgit