/*
 * 	NetWinder Button Driver-
 *	Copyright (C) Alex Holden <alex@linuxhacker.org> 1998, 1999.
 *
 */

#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/time.h>
#include <linux/timer.h>
#include <linux/fs.h>
#include <linux/miscdevice.h>
#include <linux/string.h>
#include <linux/errno.h>
#include <linux/init.h>

#include <asm/uaccess.h>
#include <asm/irq.h>
#include <asm/mach-types.h>

#define __NWBUTTON_C		/* Tell the header file who we are */
#include "nwbutton.h"

static int button_press_count;		/* The count of button presses */
static struct timer_list button_timer;	/* Times for the end of a sequence */ 
static DECLARE_WAIT_QUEUE_HEAD(button_wait_queue); /* Used for blocking read */
static char button_output_buffer[32];	/* Stores data to write out of device */
static int bcount;			/* The number of bytes in the buffer */
static int bdelay = BUTTON_DELAY;	/* The delay, in jiffies */
static struct button_callback button_callback_list[32]; /* The callback list */
static int callback_count;		/* The number of callbacks registered */
static int reboot_count = NUM_PRESSES_REBOOT; /* Number of presses to reboot */

/*
 * This function is called by other drivers to register a callback function
 * to be called when a particular number of button presses occurs.
 * The callback list is a static array of 32 entries (I somehow doubt many
 * people are ever going to want to register more than 32 different actions
 * to be performed by the kernel on different numbers of button presses ;).
 * However, if an attempt to register a 33rd entry (perhaps a stuck loop
 * somewhere registering the same entry over and over?) it will fail to
 * do so and return -ENOMEM. If an attempt is made to register a null pointer,
 * it will fail to do so and return -EINVAL.
 * Because callbacks can be unregistered at random the list can become
 * fragmented, so we need to search through the list until we find the first
 * free entry.
 *
 * FIXME: Has anyone spotted any locking functions int his code recently ??
 */

int button_add_callback (void (*callback) (void), int count)
{
	int lp = 0;
	if (callback_count == 32) {
		return -ENOMEM;
	}
	if (!callback) {
		return -EINVAL;
	}
	callback_count++;
	for (; (button_callback_list [lp].callback); lp++);
	button_callback_list [lp].callback = callback;
	button_callback_list [lp].count = count;
	return 0;
}

/*
 * This function is called by other drivers to deregister a callback function.
 * If you attempt to unregister a callback which does not exist, it will fail
 * with -EINVAL. If there is more than one entry with the same address,
 * because it searches the list from end to beginning, it will unregister the
 * last one to be registered first (FILO- First In Last Out).
 * Note that this is not neccessarily true if the entries are not submitted
 * at the same time, because another driver could have unregistered a callback
 * between the submissions creating a gap earlier in the list, which would
 * be filled first at submission time.
 */

int button_del_callback (void (*callback) (void))
{
	int lp = 31;
	if (!callback) {
		return -EINVAL;
	}
	while (lp >= 0) {
		if ((button_callback_list [lp].callback) == callback) {
			button_callback_list [lp].callback = NULL;
			button_callback_list [lp].count = 0;
			callback_count--;
			return 0;
		};
		lp--;
	};
	return -EINVAL;
}

/*
 * This function is called by button_sequence_finished to search through the
 * list of callback functions, and call any of them whose count argument
 * matches the current count of button presses. It starts at the beginning
 * of the list and works up to the end. It will refuse to follow a null
 * pointer (which should never happen anyway).
 */

static void button_consume_callbacks (int bpcount)
{
	int lp = 0;
	for (; lp <= 31; lp++) {
		if ((button_callback_list [lp].count) == bpcount) {
			if (button_callback_list [lp].callback) {
				button_callback_list[lp].callback();
			}
		}
	}
}

/* 
 * This function is called when the button_timer times out.
 * ie. When you don't press the button for bdelay jiffies, this is taken to
 * mean you have ended the sequence of key presses, and this function is
 * called to wind things up (write the press_count out to /dev/button, call
 * any matching registered function callbacks, initiate reboot, etc.).
 */

static void button_sequence_finished (unsigned long parameters)
{
#ifdef CONFIG_NWBUTTON_REBOOT		/* Reboot using button is enabled */
	if (button_press_count == reboot_count) {
		kill_proc (1, SIGINT, 1);	/* Ask init to reboot us */
	}
#endif /* CONFIG_NWBUTTON_REBOOT */
	button_consume_callbacks (button_press_count);
	bcount = sprintf (button_output_buffer, "%d\n", button_press_count);
	button_press_count = 0;		/* Reset the button press counter */
	wake_up_interruptible (&button_wait_queue);
}

/* 
 *  This handler is called when the orange button is pressed (GPIO 10 of the
 *  SuperIO chip, which maps to logical IRQ 26). If the press_count is 0,
 *  this is the first press, so it starts a timer and increments the counter.
 *  If it is higher than 0, it deletes the old timer, starts a new one, and
 *  increments the counter.
 */ 

static irqreturn_t button_handler (int irq, void *dev_id, struct pt_regs *regs)
{
	if (button_press_count) {
		del_timer (&button_timer);
	}
	button_press_count++;
	init_timer (&button_timer);
	button_timer.function = button_sequence_finished;
	button_timer.expires = (jiffies + bdelay);
	add_timer (&button_timer);

	return IRQ_HANDLED;
}

/*
 * This function is called when a user space program attempts to read
 * /dev/nwbutton. It puts the device to sleep on the wait queue until
 * button_sequence_finished writes some data to the buffer and flushes
 * the queue, at which point it writes the data out to the device and
 * returns the number of characters it has written. This function is
 * reentrant, so that many processes can be attempting to read from the
 * device at any one time.
 */

static int button_read (struct file *filp, char __user *buffer,
			size_t count, loff_t *ppos)
{
	interruptible_sleep_on (&button_wait_queue);
	return (copy_to_user (buffer, &button_output_buffer, bcount))
		 ? -EFAULT : bcount;
}

/* 
 * This structure is the file operations structure, which specifies what
 * callbacks functions the kernel should call when a user mode process
 * attempts to perform these operations on the device.
 */

static struct file_operations button_fops = {
	.owner		= THIS_MODULE,
	.read		= button_read,
};

/* 
 * This structure is the misc device structure, which specifies the minor
 * device number (158 in this case), the name of the device (for /proc/misc),
 * and the address of the above file operations structure.
 */

static struct miscdevice button_misc_device = {
	BUTTON_MINOR,
	"nwbutton",
	&button_fops,
};

/*
 * This function is called to initialise the driver, either from misc.c at
 * bootup if the driver is compiled into the kernel, or from init_module
 * below at module insert time. It attempts to register the device node
 * and the IRQ and fails with a warning message if either fails, though
 * neither ever should because the device number and IRQ are unique to
 * this driver.
 */

static int __init nwbutton_init(void)
{
	if (!machine_is_netwinder())
		return -ENODEV;

	printk (KERN_INFO "NetWinder Button Driver Version %s (C) Alex Holden "
			"<alex@linuxhacker.org> 1998.\n", VERSION);

	if (misc_register (&button_misc_device)) {
		printk (KERN_WARNING "nwbutton: Couldn't register device 10, "
				"%d.\n", BUTTON_MINOR);
		return -EBUSY;
	}

	if (request_irq (IRQ_NETWINDER_BUTTON, button_handler, SA_INTERRUPT,
			"nwbutton", NULL)) {
		printk (KERN_WARNING "nwbutton: IRQ %d is not free.\n",
				IRQ_NETWINDER_BUTTON);
		misc_deregister (&button_misc_device);
		return -EIO;
	}
	return 0;
}

static void __exit nwbutton_exit (void) 
{
	free_irq (IRQ_NETWINDER_BUTTON, NULL);
	misc_deregister (&button_misc_device);
}


MODULE_AUTHOR("Alex Holden");
MODULE_LICENSE("GPL");

module_init(nwbutton_init);
module_exit(nwbutton_exit);
