static void hostwake_interrupt(unsigned long data) { BT_INFO(" wakeup host\n"); }
static int __init btusb_init(void) { BT_INFO("Generic Bluetooth USB driver ver %s", VERSION); return usb_register(&btusb_driver); }
static int ath_bluesleep_gpio_config(int on) { int ret = 0; BT_INFO("%s config: %d", __func__, on); if (!on) { if (disable_irq_wake(bsi->host_wake_irq)) BT_ERR("Couldn't disable hostwake IRQ wakeup mode\n"); goto free_host_wake_irq; } ret = gpio_request(bsi->host_wake, "bt_host_wake"); if (ret < 0) { BT_ERR("failed to request gpio pin %d, error %d\n", bsi->host_wake, ret); goto gpio_config_failed; } /* configure host_wake as input */ ret = gpio_direction_input(bsi->host_wake); if (ret < 0) { BT_ERR("failed to config GPIO %d as input pin, err %d\n", bsi->host_wake, ret); goto gpio_host_wake; } ret = gpio_request(bsi->ext_wake, "bt_ext_wake"); if (ret < 0) { BT_ERR("failed to request gpio pin %d, error %d\n", bsi->ext_wake, ret); goto gpio_host_wake; } ret = gpio_direction_output(bsi->ext_wake, 1); if (ret < 0) { BT_ERR("failed to config GPIO %d as output pin, err %d\n", bsi->ext_wake, ret); goto gpio_ext_wake; } gpio_set_value(bsi->ext_wake, 1); /* Initialize spinlock. */ spin_lock_init(&rw_lock); /* Initialize timer */ init_timer(&tx_timer); tx_timer.function = bluesleep_tx_timer_expire; tx_timer.data = 0; /* initialize host wake tasklet */ tasklet_init(&hostwake_task, hostwake_interrupt, 0); if (bsi->irq_polarity == POLARITY_LOW) { ret = request_irq(bsi->host_wake_irq, bluesleep_hostwake_isr, IRQF_DISABLED | IRQF_TRIGGER_FALLING, "bluetooth hostwake", NULL); } else { ret = request_irq(bsi->host_wake_irq, bluesleep_hostwake_isr, IRQF_DISABLED | IRQF_TRIGGER_RISING, "bluetooth hostwake", NULL); } if (ret < 0) { BT_ERR("Couldn't acquire BT_HOST_WAKE IRQ"); goto delete_timer; } ret = enable_irq_wake(bsi->host_wake_irq); if (ret < 0) { BT_ERR("Couldn't enable BT_HOST_WAKE as wakeup interrupt"); goto free_host_wake_irq; } return 0; free_host_wake_irq: free_irq(bsi->host_wake_irq, NULL); delete_timer: del_timer(&tx_timer); gpio_ext_wake: gpio_free(bsi->ext_wake); gpio_host_wake: gpio_free(bsi->host_wake); gpio_config_failed: return ret; }