90 lines
1.9 KiB
C
90 lines
1.9 KiB
C
/*
|
|
* linux/arch/arm/mach-s3c6400/leds.c
|
|
*
|
|
* S3C6400 LEDs dispatcher
|
|
*/
|
|
#include <linux/errno.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/module.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/input.h>
|
|
#include <linux/init.h>
|
|
#include <linux/serio.h>
|
|
#include <linux/delay.h>
|
|
#include <linux/platform_device.h>
|
|
#include <linux/miscdevice.h>
|
|
#include <linux/clk.h>
|
|
#include <linux/mutex.h>
|
|
|
|
#include <asm/io.h>
|
|
#include <asm/irq.h>
|
|
#include <asm/hardware.h>
|
|
#include <asm/leds.h>
|
|
#include <asm/mach-types.h>
|
|
|
|
#include <asm/arch/regs-gpio.h>
|
|
#include <asm/arch/irqs.h>
|
|
#include <asm/mach/irq.h>
|
|
#include "leds.h"
|
|
|
|
static irqreturn_t eint9_switch(int irq, void *_dev)
|
|
{
|
|
|
|
printk("EINT9 interrupt occures!!!\n");
|
|
return IRQ_HANDLED;
|
|
}
|
|
|
|
|
|
static int __init
|
|
s3c6410_leds_init(void)
|
|
{
|
|
if (machine_is_smdk6410())
|
|
leds_event = smdk6400_leds_event;
|
|
else
|
|
return -1;
|
|
|
|
if (machine_is_smdk6410())
|
|
{
|
|
/*GPN12~15 used for LED*/
|
|
/*Set GPN12~15 to output mode */
|
|
s3c_gpio_cfgpin(S3C_GPN12, S3C_GPN12_OUTP);
|
|
if(s3c_gpio_getcfg(S3C_GPN12) == 0)
|
|
{
|
|
printk(KERN_WARNING "LED: can't set GPN12 output mode\n");
|
|
}
|
|
|
|
s3c_gpio_cfgpin(S3C_GPN13, S3C_GPN13_OUTP);
|
|
if(s3c_gpio_getcfg(S3C_GPN13) == 0)
|
|
{
|
|
printk(KERN_WARNING "LED: can't set GPN13 output mode\n");
|
|
}
|
|
|
|
s3c_gpio_cfgpin(S3C_GPN14, S3C_GPN14_OUTP);
|
|
if(s3c_gpio_getcfg(S3C_GPN14) == 0)
|
|
{
|
|
printk(KERN_WARNING "LED: can't set GPN14 output mode\n");
|
|
}
|
|
|
|
s3c_gpio_cfgpin(S3C_GPN15, S3C_GPN15_OUTP);
|
|
if(s3c_gpio_getcfg(S3C_GPN15) == 0)
|
|
{
|
|
printk(KERN_WARNING "LED: can't set GPN15 output mode\n");
|
|
}
|
|
|
|
}
|
|
|
|
/* Get irqs */
|
|
set_irq_type(IRQ_EINT9, IRQT_FALLING);
|
|
s3c_gpio_pullup(S3C_GPN9, 0x0);
|
|
if (request_irq(IRQ_EINT9, eint9_switch, SA_TRIGGER_FALLING, "EINT9", NULL)) {
|
|
printk(KERN_ERR "leds.c: Could not allocate EINT9 !\n");
|
|
return -EIO;
|
|
}
|
|
|
|
|
|
leds_event(led_start);
|
|
return 0;
|
|
}
|
|
|
|
__initcall(s3c6410_leds_init);
|