#include <linux/module.h>
#include <linux/fs.h>
#include <asm/uaccess.h>
#include <asm/blackfin.h>
int major;
char *name = "led";
int count = 0;

ssize_t 
led_write(struct file* filp, const char *buf, size_t size, loff_t *offp)
{
	volatile unsigned short *m;
	if (size < 2) return -EMSGSIZE;
	if (!buf) return -EFAULT;
	if(buf[0] == '0') m = pFIO_FLAG_C;
	else m = pFIO_FLAG_S;
	*m |= (1 << 2); // set or clear PF2
	return size;
}

struct file_operations fops = {write:led_write};

int init_module(void)
{
	// Set PF2 as output
	*pFIO_DIR = (1 << 2);
	major = register_chrdev(0, name, &fops);//hope it succeeds!
	printk("registered, major = %dn", major); 
	return 0;
}

void cleanup_module(void)
{
	unregister_chrdev(major, name);
}
