Ejemplo n.º 1
0
irqreturn_t bt_host_wake_irq_handler(int irq, void *dev_id)
{
	disable_irq(IRQ_EINT(22));
	schedule_work(&bt_host_wake_work);

	return IRQ_HANDLED;
}
Ejemplo n.º 2
0
static void bt_host_wake_work_func(struct work_struct *ignored)
{
	int gpio_val;

	gpio_val = gpio_get_value(GPIO_BT_HOST_WAKE);
	printk(KERN_DEBUG "[BT] GPIO_BT_HOST_WAKE = %d\n", gpio_val);
/*
	if(gpio_val == GPIO_LEVEL_LOW)
	{
		//wake_unlock^M
		printk("[BT]:wake_unlock \n");
		wake_unlock(&rfkill_wake_lock);
	}
	else
	{
		//wake_lock
		printk("[BT]:wake_lock \n");
		wake_lock(&rfkill_wake_lock);
	}
*/

	if(gpio_val == GPIO_LEVEL_HIGH)
	{
		printk(KERN_DEBUG "[BT] wake_lock timeout = 5 sec\n");
		wake_lock_timeout(&rfkill_wake_lock, 5*HZ);
	}

	enable_irq(IRQ_EINT(22));
}
void universal_sdhci2_cfg_ext_cd(void)
{
	printk(KERN_DEBUG "Universal :SD Detect configuration\n");
	s3c_gpio_cfgpin(GPIO_T_FLASH_DETECT, S3C_GPIO_SFN(GPIO_T_FLASH_DETECT_AF));
	s3c_gpio_setpull(S5PV210_GPH3(4), S3C_GPIO_PULL_NONE);
	set_irq_type(IRQ_EINT(28), IRQ_TYPE_EDGE_BOTH);
}
Ejemplo n.º 4
0
static void s5pv310_irq_demux_eint16_31(unsigned int irq, struct irq_desc *desc)
{
	struct irq_chip *chip = get_irq_chip(irq);
	u32 a16_23, a24_31;

	if (chip->ack)
		chip->ack(irq);

	a16_23 = s5pv310_irq_demux_eint(irq, IRQ_EINT(16));
	a24_31 = s5pv310_irq_demux_eint(irq, IRQ_EINT(24));
		
	if (!a16_23 && !a24_31)
		do_bad_IRQ(irq, desc);

	chip->unmask(irq);
}
void universal_sdhci2_cfg_ext_cd(void)
{
	printk(" Universal :SD Detect configuration \n");

#if defined(CONFIG_MACH_S5PC110_P1)
	s3c_gpio_cfgpin(GPIO_T_FLASH_DETECT, S3C_GPIO_SFN(GPIO_T_FLASH_DETECT_AF));
	s3c_gpio_setpull(S5PV210_GPH3(4), S3C_GPIO_PULL_NONE);
	set_irq_type(IRQ_EINT(28), IRQ_TYPE_EDGE_BOTH);	
#else
	if(((HWREV >= 7) || (HWREV == 0x3)) && (HWREV !=8))
		s3c_gpio_setpull(S5PV210_GPH3(4), S3C_GPIO_PULL_NONE);
	else
		s3c_gpio_setpull(S5PV210_GPH3(4), S3C_GPIO_PULL_DOWN);
#endif
	set_irq_type(IRQ_EINT(28), IRQ_TYPE_EDGE_BOTH);
}
Ejemplo n.º 6
0
int __init s5p_init_irq_eint(void)
{
	int irq;

	for (irq = IRQ_EINT(0); irq <= IRQ_EINT(15); irq++)
		set_irq_chip(irq, &s5p_irq_vic_eint);

	for (irq = IRQ_EINT(16); irq <= IRQ_EINT(31); irq++) {
		set_irq_chip(irq, &s5p_irq_eint);
		set_irq_handler(irq, handle_level_irq);
		set_irq_flags(irq, IRQF_VALID);
	}

	set_irq_chained_handler(IRQ_EINT16_31, s5p_irq_demux_eint16_31);
	return 0;
}
Ejemplo n.º 7
0
Archivo: common.c Proyecto: 7L/pi_plus
/*
 * s5p64x0_irq_demux_eint
 *
 * This function demuxes the IRQ from the group0 external interrupts,
 * from IRQ_EINT(0) to IRQ_EINT(15). It is designed to be inlined into
 * the specific handlers s5p64x0_irq_demux_eintX_Y.
 */
static inline void s5p64x0_irq_demux_eint(unsigned int start, unsigned int end)
{
	u32 status = __raw_readl(S5P64X0_EINT0PEND);
	u32 mask = __raw_readl(S5P64X0_EINT0MASK);
	unsigned int irq;

	status &= ~mask;
	status >>= start;
	status &= (1 << (end - start + 1)) - 1;

	for (irq = IRQ_EINT(start); irq <= IRQ_EINT(end); irq++) {
		if (status & 1)
			generic_handle_irq(irq);
		status >>= 1;
	}
}
Ejemplo n.º 8
0
static irqreturn_t tiny6410_keys_irq(int irq, void *dev_id)
{
    unsigned int tmp;
    irq_dev = (struct key_desc *)dev_id;

    if ((irq_dev->irq == IRQ_EINT(19)) || (irq_dev->irq == IRQ_EINT(20))) {
        tmp = readl(S3C64XX_GPLDAT);
        irq_dev->pin_val = tmp & (1<<irq_dev->pin);
    }else {
        tmp = readl(S3C64XX_GPNDAT);
        irq_dev->pin_val = tmp & (1<<irq_dev->pin);
    }
    
    /* Start the timer after 10ms */
    mod_timer(&keys_timers, jiffies+HZ/100);
    return IRQ_RETVAL(IRQ_HANDLED);
}
Ejemplo n.º 9
0
int __init s3c64xx_init_irq_eint(void)
{
	int irq;

	for (irq = IRQ_EINT(0); irq <= IRQ_EINT(27); irq++) {
		set_irq_chip(irq, &s3c_irq_eint);
		set_irq_handler(irq, handle_level_irq);
		set_irq_flags(irq, IRQF_VALID);
	}

	set_irq_chained_handler(IRQ_EINT0_3, s3c_irq_demux_eint0_3);
	set_irq_chained_handler(IRQ_EINT4_11, s3c_irq_demux_eint4_11);
	set_irq_chained_handler(IRQ_EINT12_19, s3c_irq_demux_eint12_19);
	set_irq_chained_handler(IRQ_EINT20_27, s3c_irq_demux_eint20_27);

	return 0;
}
Ejemplo n.º 10
0
int __init s5pv310_init_irq_eint(void)
{
	int irq;

	for( irq = 0 ; irq <= 31 ; irq++) {
		set_irq_chip(IRQ_EINT(irq), &s5pv310_irq_eint);
		set_irq_handler(IRQ_EINT(irq), handle_level_irq);
		set_irq_flags(IRQ_EINT(irq), IRQF_VALID);
	}

	set_irq_chained_handler(IRQ_EINT16_31, s5pv310_irq_demux_eint16_31);

	for ( irq = 0 ; irq <= 15 ; irq++)
		set_irq_chained_handler(s5pv310_get_irq_nr(irq), s5pv310_irq_eint0_15);

	return 0;
}
Ejemplo n.º 11
0
static int __init s3c64xx_init_irq_eint(void)
{
	int irq;

	for (irq = IRQ_EINT(0); irq <= IRQ_EINT(27); irq++) {
		irq_set_chip_and_handler(irq, &s3c_irq_eint, handle_level_irq);
		irq_set_chip_data(irq, (void *)eint_irq_to_bit(irq));
		set_irq_flags(irq, IRQF_VALID);
	}

	irq_set_chained_handler(IRQ_EINT0_3, s3c_irq_demux_eint0_3);
	irq_set_chained_handler(IRQ_EINT4_11, s3c_irq_demux_eint4_11);
	irq_set_chained_handler(IRQ_EINT12_19, s3c_irq_demux_eint12_19);
	irq_set_chained_handler(IRQ_EINT20_27, s3c_irq_demux_eint20_27);

	return 0;
}
Ejemplo n.º 12
0
static int s5pc210_extint_to_irq(struct gpio_chip *gpio, unsigned int offset)
{
	struct s3c_gpio_chip *chip = to_s3c_gpio(gpio);
	int irq;

	irq = (chip->group * 8) + offset;
	return IRQ_EINT(irq);
}
Ejemplo n.º 13
0
static int s5pc1xx_gpiolib_to_eint(struct gpio_chip *chip, unsigned int offset)
{
	int base;

	base = chip->base - S5PC100_GPH0(0);
	if (base == 0)
		return IRQ_EINT(offset);
	base = chip->base - S5PC100_GPH1(0);
	if (base == 0)
		return IRQ_EINT(8 + offset);
	base = chip->base - S5PC100_GPH2(0);
	if (base == 0)
		return IRQ_EINT(16 + offset);
	base = chip->base - S5PC100_GPH3(0);
	if (base == 0)
		return IRQ_EINT(24 + offset);
	return -EINVAL;
}
Ejemplo n.º 14
0
static void init_gpio(void)
{
	int i;
	for(i =0;i < KEYNUM;i++)
	{
		s3c_gpio_cfgpin(S3C64XX_GPN(i),2);
		irq_set_irq_type(IRQ_EINT(i),dev_info[i].flags);
	}
}
Ejemplo n.º 15
0
static int __init s5p_init_irq_eint(void)
{
	int irq;

	if (of_have_populated_dt())
		return -ENODEV;

	for (irq = IRQ_EINT(0); irq <= IRQ_EINT(15); irq++)
		irq_set_chip(irq, &s5p_irq_vic_eint);

	for (irq = IRQ_EINT(16); irq <= IRQ_EINT(31); irq++) {
		irq_set_chip_and_handler(irq, &s5p_irq_eint, handle_level_irq);
		set_irq_flags(irq, IRQF_VALID);
	}

	irq_set_chained_handler(IRQ_EINT16_31, s5p_irq_demux_eint16_31);
	return 0;
}
Ejemplo n.º 16
0
Archivo: pm.c Proyecto: Arakmar/G3MOD
static void s5p64xx_pm_configure_extint(void)
{
#if 0 
	s3c_gpio_cfgpin(S5P64XX_GPN(10), S5P64XX_GPN10_EINT10);
	s3c_gpio_setpull(S5P64XX_GPN(10), S3C_GPIO_PULL_UP);
#else
	__raw_writel((__raw_readl(S5P64XX_GPNCON) & ~(0x3 << 20)) |
		     (0x2 << 20), S5P64XX_GPNCON);
	__raw_writel((__raw_readl(S5P64XX_GPNPUD) & ~(0x3 << 20)) |
		     (0x2 << 20), S5P64XX_GPNPUD);
#endif
	udelay(50);

	__raw_writel((__raw_readl(S5P64XX_EINT0CON0) & ~(0x7 << 20)) |
		     (0x2 << 20), S5P64XX_EINT0CON0);

	__raw_writel(1UL << (IRQ_EINT(10) - IRQ_EINT(0)), S5P64XX_EINT0PEND);
	__raw_writel(__raw_readl(S5P64XX_EINT0MASK)&~(1UL << (IRQ_EINT(10) - IRQ_EINT(0))), S5P64XX_EINT0MASK);
}
void universal_sdhci2_cfg_ext_cd(void)
{
	printk(KERN_DEBUG "Universal :SD Detect configuration\n");
#if defined(CONFIG_SAMSUNG_CAPTIVATE) || defined(CONFIG_SAMSUNG_VIBRANT)
    s3c_gpio_setpull(S5PV210_GPH3(4), S3C_GPIO_PULL_UP);
#else
    s3c_gpio_setpull(S5PV210_GPH3(4), S3C_GPIO_PULL_NONE);
#endif
	set_irq_type(IRQ_EINT(28), IRQ_TYPE_EDGE_BOTH);
}
Ejemplo n.º 18
0
int char_open(struct inode * inode, struct file * fp) 
{
	int rc, irq;

	printk("device open \n");

	//printk("dev is 0x%x\n", inode->i_rdev);
	//printk("major is %d\n", MAJOR(inode->i_rdev));
	//printk("minor is %d\n", MINOR(inode->i_rdev));

	printk("S5PV210 IRQ:%d--%d--%d\n",S5PV210_GPH2(0),IRQ_EINT(16),gpio_to_irq(S5PV210_GPH2(0)));

	rc = gpio_request (S5PV210_GPH2(0), "K1"); // kiem tra xem chan co free khong
	if (rc) { // =1
		printk (KERN_ALERT "Unable to request pin %d\n",S5PV210_GPH2(0));
		return -1;
	}
	

	rc = gpio_request (S5PV210_GPH2(1), "K2"); 
	if (rc) { // =0
		printk (KERN_ALERT "Unable to request pin %d\n",S5PV210_GPH2(1));
		return -1;
	}

	//led_no = MINOR(inode->i_rdev);
	//printk("Reg:%x<----\n",*portj);
	irq = gpio_to_irq(S5PV210_GPH2(0)); //IRQ_EINT(16) lay so ngat
	printk (KERN_ALERT "IRQ K1= %d\n", irq); // in ra so ngat

	rc = request_irq(irq, k1_handler, IRQF_TRIGGER_FALLING, "mybtnk1", NULL);	 // dang ky interrupt
	if(rc) 
	{
		printk("register irq %d error",irq);
		return -1;
	}

	irq = gpio_to_irq(S5PV210_GPH2(1)); //IRQ_EINT(17)
	// irq = IRG_EINT(17)
	printk (KERN_ALERT "IRQ K2= %d\n", irq);
	rc = request_irq(irq, k2_handler, IRQF_TRIGGER_FALLING, "mybtnk2", NULL);
	if(rc) 
	{
		printk("register irq %d error",irq);
		return -1;
	}
	  // my_timer.function, my_timer.data
	
  	//setup_timer( &my_timer, my_timer_callback, 0 ); // chong doi
	//printk("start timer at %ld\n",jiffies);
	//mod_timer( &my_timer, jiffies + msecs_to_jiffies(1000) );
	init_waitqueue_head(&wq);
	//printk("Reg:%x<----\n",*portj);
	return 0;
}
Ejemplo n.º 19
0
static int __init smdk6410_rfkill_probe(struct platform_device *pdev)
#endif	/* #ifdef CONFIG_MACH_JET */
#endif	/* #ifdef CONFIG_MACH_SPICA */
#endif	/* #ifdef CONFIG_MACH_INSTINCTQ */
{
    int rc = 0;
    int irq,ret;

    //Initialize wake locks
    wake_lock_init(&rfkill_wake_lock, WAKE_LOCK_SUSPEND, "board-rfkill");
    wake_lock_init(&bt_wake_lock, WAKE_LOCK_SUSPEND, "bt-rfkill");

    //BT Host Wake IRQ
    irq = IRQ_BT_HOST_WAKE;

    ret = request_irq(irq, bt_host_wake_irq_handler, 0, "bt_host_wake_irq_handler", NULL);
    if(ret < 0)
#ifdef CONFIG_MACH_INSTINCTQ
        printk("[BT] Request_irq failed \n");
#else
        printk(KERN_DEBUG "[BT] Request_irq failed \n");
#endif	/* #else #ifdef CONFIG_MACH_INSTINCTQ */

    set_irq_type(irq, IRQ_TYPE_EDGE_BOTH);
    enable_irq(IRQ_EINT(22));

    //RFKILL init - default to bluetooth off
    rfkill_switch_all(RFKILL_TYPE_BLUETOOTH, RFKILL_STATE_SOFT_BLOCKED);

    bt_rfk = rfkill_allocate(&pdev->dev, RFKILL_TYPE_BLUETOOTH);
    if (!bt_rfk)
        return -ENOMEM;

    bt_rfk->name = bt_name;
    bt_rfk->state = RFKILL_STATE_SOFT_BLOCKED;
    /* userspace cannot take exclusive control */
    bt_rfk->user_claim_unsupported = 1;
    bt_rfk->user_claim = 0;
    bt_rfk->data = NULL;  // user data
    bt_rfk->toggle_radio = bluetooth_set_power;

#ifdef CONFIG_MACH_INSTINCTQ
    printk("[BT] rfkill_register(bt_rfk) \n");
#else
    printk(KERN_DEBUG "[BT] rfkill_register(bt_rfk) \n");
#endif	/* #ifdef CONFIG_MACH_INSTINCTQ */
    rc = rfkill_register(bt_rfk);
    if (rc)
        rfkill_free(bt_rfk);

    bluetooth_set_power(NULL, RFKILL_STATE_SOFT_BLOCKED);

    return rc;
}
Ejemplo n.º 20
0
void universal_sdhci2_cfg_ext_cd(void)
{
	printk(" Universal :SD Detect configuration \n");

#if defined(CONFIG_MACH_S5PC110_P1)
	s3c_gpio_setpull(S5PV210_GPH3(4), S3C_GPIO_PULL_NONE);
#else
	s3c_gpio_setpull(S5PV210_GPH3(4), S3C_GPIO_PULL_NONE);
#endif
	set_irq_type(IRQ_EINT(28), IRQ_TYPE_EDGE_BOTH);
}
Ejemplo n.º 21
0
static int __init s3c64xx_init_irq_eint(void)
{
	int irq;

	/* On DT-enabled systems EINTs are handled by pinctrl-s3c64xx driver. */
	if (of_have_populated_dt())
		return -ENODEV;

	for (irq = IRQ_EINT(0); irq <= IRQ_EINT(27); irq++) {
		irq_set_chip_and_handler(irq, &s3c_irq_eint, handle_level_irq);
		irq_set_chip_data(irq, (void *)eint_irq_to_bit(irq));
		set_irq_flags(irq, IRQF_VALID);
	}

	irq_set_chained_handler(IRQ_EINT0_3, s3c_irq_demux_eint0_3);
	irq_set_chained_handler(IRQ_EINT4_11, s3c_irq_demux_eint4_11);
	irq_set_chained_handler(IRQ_EINT12_19, s3c_irq_demux_eint12_19);
	irq_set_chained_handler(IRQ_EINT20_27, s3c_irq_demux_eint20_27);

	return 0;
}
Ejemplo n.º 22
0
static int s3c_irq_eint_wake(unsigned int irqno, unsigned int flag)
{
	irqno -= IRQ_EINT(0);

	if (flag) {
		s3c_irqwake_eintmask &= ~(1 << irqno);
	} else {
		s3c_irqwake_eintmask |= (1 << irqno);
	}

	return 0;
}
Ejemplo n.º 23
0
static int forth_drv_open(struct inode *inode, struct file *file)
{
	if (!atomic_dec_and_test(&canopen))
	{
		atomic_inc(&canopen);
		return  -EBUSY; /*已经打开*/		
	}

	if (down_trylock(&button_lock))  //获得打开锁
		 return  -EBUSY;  //设备忙


	/* 注册中断 */
	request_irq(IRQ_EINT(19),  buttons_irq, IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING, "K4", &pins_desc[0]);
	request_irq(IRQ_EINT(24),  buttons_irq, IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING, "K5", &pins_desc[1]);
	request_irq(IRQ_EINT(25), buttons_irq, IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING, "K6", &pins_desc[2]);
	request_irq(IRQ_EINT(26), buttons_irq, IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING, "K7", &pins_desc[3]);	
	request_irq(IRQ_EINT(27), buttons_irq, IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING, "K8", &pins_desc[4]);	

	return 0;
}
Ejemplo n.º 24
0
/* 中断处理函数 */
static irqreturn_t irq_handler(int irqno, void *dev_id)
{
	switch(irqno)
	{
	case IRQ_EINT(1):
		key = 1;
		break;
	case IRQ_EINT(2):
		key = 2;
		break;
	case IRQ_EINT(3):
		key = 3;
		break;
	case IRQ_EINT(4):
		key = 4;
		break;
	case IRQ_EINT(6):
		key = 5;
		break;
	case IRQ_EINT(7):
		key = 6;
		break;
	}
	
	wake_up_interruptible(&mydevice->readq);
	kill_fasync(&mydevice->fasync_queue,SIGIO,POLL_IN);
	printk(KERN_INFO "irq_handler!\n");
	return IRQ_HANDLED;
}
Ejemplo n.º 25
0
void key1_function(unsigned long data)
{

	switch(my_timer.data)
	{
	case IRQ_EINT(1):
		key = 1;
		break;
	case IRQ_EINT(2):
		key = 2;
		break;

	case IRQ_EINT(3):
		key = 3;
		break;

	case IRQ_EINT(4):
		key = 4;
		break;

	case IRQ_EINT(6):
		key = 6;
		break;

	case IRQ_EINT(7):	
		key = 7;
		break;
	}
	flag = 1;
	wake_up(&readq_queue);
	kill_fasync(&async,SIGIO,POLLIN);

}
Ejemplo n.º 26
0
static int __init exynos_init_irq_eint(void)
{
    int irq;

    if (soc_is_exynos5250())
        exynos_eint_base = ioremap(EXYNOS5_PA_GPIO1, SZ_4K);
    else
        exynos_eint_base = ioremap(EXYNOS4_PA_GPIO2, SZ_4K);

    if (exynos_eint_base == NULL) {
        pr_err("unable to ioremap for EINT base address\n");
        return -ENOMEM;
    }

    for (irq = 0 ; irq <= 31 ; irq++) {
        irq_set_chip_and_handler(IRQ_EINT(irq), &exynos_irq_eint,
                                 handle_level_irq);
        set_irq_flags(IRQ_EINT(irq), IRQF_VALID);
    }

    irq_set_chained_handler(EXYNOS_IRQ_EINT16_31, exynos_irq_demux_eint16_31);

    for (irq = 0 ; irq <= 15 ; irq++) {
        eint0_15_data[irq] = IRQ_EINT(irq);

        if (soc_is_exynos5250()) {
            irq_set_handler_data(exynos5_eint0_15_src_int[irq],
                                 &eint0_15_data[irq]);
            irq_set_chained_handler(exynos5_eint0_15_src_int[irq],
                                    exynos_irq_eint0_15);
        } else {
            irq_set_handler_data(exynos4_eint0_15_src_int[irq],
                                 &eint0_15_data[irq]);
            irq_set_chained_handler(exynos4_eint0_15_src_int[irq],
                                    exynos_irq_eint0_15);
        }
    }

    return 0;
}
Ejemplo n.º 27
0
static void keys_timer_handler(unsigned long data)
{
    unsigned int pinval;
    unsigned int tmp;

    if (!irq_dev)
        return;

    if ((irq_dev->irq == IRQ_EINT(19)) || (irq_dev->irq == IRQ_EINT(20))) {
        tmp = readl(S3C64XX_GPLDAT);
        pinval = tmp & (1<<irq_dev->pin);
        if (pinval != irq_dev->pin_val)
            return;
        
        if (pinval) {
            /* Key is not pressed down */
            input_event(tiny6410_input_key, EV_KEY, irq_dev->key_val, 0); // 0 means not pressed down, 1 means pressed down
            input_sync(tiny6410_input_key);
        }else {
            /* Key is pressed down */
            input_event(tiny6410_input_key, EV_KEY, irq_dev->key_val, 1);
            input_sync(tiny6410_input_key);
        }
    }else {
        tmp = readl(S3C64XX_GPNDAT);
        pinval = tmp & (1<<irq_dev->pin);
        if (pinval != irq_dev->pin_val)
            return;
        
        if (pinval) {
            /* Key is not pressed down */
            input_event(tiny6410_input_key, EV_KEY, irq_dev->key_val, 0); // 0 means not pressed down, 1 means pressed down
            input_sync(tiny6410_input_key);
        }else {
            /* Key is pressed down */
            input_event(tiny6410_input_key, EV_KEY, irq_dev->key_val, 1);
            input_sync(tiny6410_input_key);
        }
    }
}
Ejemplo n.º 28
0
static int  __init test_init(void)
{
	int ret;
	
	INIT_WORK(&work, work_func);

	ret = request_irq(IRQ_EINT(0), register_handler, 
				IRQF_TRIGGER_FALLING, "key1", NULL);	
	if(ret)
		return -EBUSY;

	return 0;
}
Ejemplo n.º 29
0
static int s5pv310_gpio2int(struct gpio_chip *chip, unsigned pin)
{
	int ret = 0;
	int base = chip->base;

	switch (base) {
		case S5PV310_GPX0(0):
			ret = IRQ_EINT(0) + pin;
			break;
		case S5PV310_GPX1(0):
			ret = IRQ_EINT(8) + pin;
			break;
		case S5PV310_GPX2(0):
			ret = IRQ_EINT(16) + pin;
			break;
		case S5PV310_GPX3(0):
			ret = IRQ_EINT(24) + pin;
			break;
	}

	return ret;
}
Ejemplo n.º 30
0
static __init int irq_test_init(void)
{
	int ret;

	ret = request_irq(IRQ_EINT(0), do_eint0, IRQF_TRIGGER_FALLING, "eint0", NULL);
	if(ret < 0)
		return ret;

	INIT_WORK(&work, do_work);
	INIT_DELAYED_WORK(&dwork, do_dwork);

	return 0;
}