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; }
/* * 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; }
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; }
/* * 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; }
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; }
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; }