Exemplo n.º 1
0
int __init pbXX_simple_config_init(void)
{
#if AR7100_JUMPSTART_SWITCH_WORKS
#ifdef CONFIG_CUS100
	u32 mask = 0;
#endif
    int req;

#ifdef CONFIG_CUS100
	mask = ar7100_reg_rd(AR7100_MISC_INT_MASK);
	ar7100_reg_wr(AR7100_MISC_INT_MASK, mask | (1 << 2)); /* Enable GPIO interrupt mask */
    ar7100_gpio_config_int (JUMPSTART_GPIO, INT_TYPE_LEVEL,INT_POL_ACTIVE_HIGH);
	ar7100_gpio_intr_enable(JUMPSTART_GPIO);
	ar7100_gpio_config_input(JUMPSTART_GPIO);
#else
    /* configure GPIO 3 as level triggered interrupt */ 
    ar7100_gpio_config_int (JUMPSTART_GPIO, INT_TYPE_LEVEL,INT_POL_ACTIVE_HIGH);
	printk("%s (%s) JUMPSTART_GPIO: %d\n", __FILE__, __func__, JUMPSTART_GPIO);
#endif

    req = request_irq (AR7100_GPIO_IRQn(JUMPSTART_GPIO), jumpstart_irq, 0,
                       "SW JUMPSTART", NULL);
    if (req != 0) {
        printk (KERN_ERR "unable to request IRQ for SWJUMPSTART GPIO (error %d)\n", req);
    }

    create_simple_config_led_proc_entry ();
#endif // AR7100_JUMPSTART_SWITCH_WORKS
    return 0;
}
Exemplo n.º 2
0
/*
 * Irq for front panel SW jumpstart switch
 * Connected to XSCALE through GPIO4
 */
irqreturn_t jumpstart_irq(int cpl, void *dev_id, struct pt_regs *regs)
{
    printk("jumpstart_irq Enter\n");

    local_irq_disable();
    if (ignore_pushbutton) {
        ar7100_gpio_config_int (JUMPSTART_GPIO,INT_TYPE_LEVEL,
                INT_POL_ACTIVE_HIGH);
        ignore_pushbutton = 0;
        return IRQ_HANDLED;
    }

    ar7100_gpio_config_int (JUMPSTART_GPIO,INT_TYPE_LEVEL,INT_POL_ACTIVE_LOW);
    ignore_pushbutton = 1;


    if (SCcallback[0].registered_cb) {
        SCcallback[0].registered_cb (cpl, SCcallback[0].cb_arg, regs);
    }
    if (SCcallback[1].registered_cb) {
        SCcallback[1].registered_cb (cpl, SCcallback[1].cb_arg, regs);
    }

    local_irq_enable();
    return IRQ_HANDLED;
}
Exemplo n.º 3
0
int __init ar7100_factory_reset_init(void)
{
#ifdef CONFIG_CUS100
	u32 mask = 0;
#endif
    int req, ret;
    ret = misc_register(&ar7100fr_miscdev);

    if (ret < 0) {
            printk("*** ar7100 misc_register failed %d *** \n", ret);
            return -1;
    }
#ifdef CONFIG_CUS100
	mask = ar7100_reg_rd(ar7100_MISC_INT_MASK);
	ar7100_reg_wr(ar7100_MISC_INT_MASK, mask | (1 << 2)); /* Enable GPIO interrupt mask */
    ar7100_gpio_config_int (FACTORY_RESET_GPIO, INT_TYPE_LEVEL,INT_POL_ACTIVE_HIGH);
	ar7100_gpio_intr_enable(FACTORY_RESET_GPIO);
	ar7100_gpio_config_input(FACTORY_RESET_GPIO);
#else
	ar7100_gpio_config_int (FACTORY_RESET_GPIO, INT_TYPE_LEVEL,INT_POL_ACTIVE_HIGH);
#endif
	req = request_irq (AR7100_GPIO_IRQn(FACTORY_RESET_GPIO), factory_reset_irq, 0,
                       "FACTORY RESET", NULL);
    if (req != 0) {
        printk (KERN_ERR "unable to request IRQ for FACTORY_RESET GPIO (error %d)\n", req);
        misc_deregister(&ar7100fr_miscdev);
        ar7100_gpio_intr_shutdown(AR7100_GPIO_IRQn(FACTORY_RESET_GPIO));
        return -1;
    }

	init_waitqueue_head(&ar7100_fr_wq);
    return 0;
}
Exemplo n.º 4
0
Arquivo: gpio.c Projeto: janfj/dd-wrt
/*
 * Irq for front panel SW jumpstart switch
 * Connected to XSCALE through GPIO4
 */
irqreturn_t jumpstart_irq(int cpl, void *dev_id, struct pt_regs *regs)
{
	if (ignore_pushbutton) {
		ar7100_gpio_config_int(JUMPSTART_GPIO, INT_TYPE_LEVEL, INT_POL_ACTIVE_HIGH);
		ignore_pushbutton = 0;
		return IRQ_HANDLED;
	}

	ar7100_gpio_config_int(JUMPSTART_GPIO, INT_TYPE_LEVEL, INT_POL_ACTIVE_LOW);
	ignore_pushbutton = 1;

	printk("calling simple_config callback..\n");

	if (registered_cb) {
		return registered_cb(cpl, cb_arg, regs);
	}
	return IRQ_HANDLED;
}
Exemplo n.º 5
0
irqreturn_t factory_reset_irq(int cpl, void *dev_id, struct pt_regs *regs)
{
	unsigned int delay;

	if (ignore_resetbutton) {
        ar7100_gpio_config_int (FACTORY_RESET_GPIO,INT_TYPE_LEVEL,
                                INT_POL_ACTIVE_LOW);
        ignore_resetbutton = 0;
        return IRQ_HANDLED;
    }

    ar7100_gpio_config_int (FACTORY_RESET_GPIO,INT_TYPE_LEVEL,INT_POL_ACTIVE_HIGH);
    ignore_resetbutton = 1;

    if (atomic_read(&ar7100_fr_status))	{
        local_irq_disable();

#define UDELAY_COUNT 4000

        for (delay = UDELAY_COUNT; delay; delay--) {
            if (ar7100_gpio_in_val(FACTORY_RESET_GPIO)) {
                break;
            }
            udelay(1000);
        }

	/* 
	 * since we are going to reboot the board, we
	 * don't need the interrupt handler anymore,
	 * so disable it. 
	 */
	disable_irq(AR7100_GPIO_IRQn(FACTORY_RESET_GPIO));
        if (!delay) {

			wake_up(&ar7100_fr_wq);
			printk("\nar7100: factory configuration restored..\n");
		}
	else {
		ar7100_restart(NULL);
	}
	    local_irq_enable();
	}
    return IRQ_HANDLED;
}
Exemplo n.º 6
0
Arquivo: gpio.c Projeto: janfj/dd-wrt
int __init pbXX_simple_config_init(void)
{
#ifdef JUMPSTART
	int req;

	/* configure GPIO 3 as level triggered interrupt */
	ar7100_gpio_config_int(JUMPSTART_GPIO, INT_TYPE_LEVEL, INT_POL_ACTIVE_HIGH);

	req = request_irq(AR7100_GPIO_IRQn(JUMPSTART_GPIO), jumpstart_irq, 0, "SW JUMPSTART", NULL);
	if (req != 0) {
		printk(KERN_ERR "unable to request IRQ for SWJUMPSTART GPIO (error %d)\n", req);
	}
#endif

	create_simple_config_led_proc_entry();
	return 0;
}