int bcmsdh_oob_intr_register(bcmsdh_info_t *bcmsdh, bcmsdh_cb_fn_t oob_irq_handler, void* oob_irq_handler_context) { int err = 0; bcmsdh_os_info_t *bcmsdh_osinfo = bcmsdh->os_cxt; SDLX_MSG(("%s: Enter\n", __FUNCTION__)); if (bcmsdh_osinfo->oob_irq_registered) { SDLX_MSG(("%s: irq is already registered\n", __FUNCTION__)); return -EBUSY; } SDLX_MSG(("%s OOB irq=%d flags=%X \n", __FUNCTION__, (int)bcmsdh_osinfo->oob_irq_num, (int)bcmsdh_osinfo->oob_irq_flags)); bcmsdh_osinfo->oob_irq_handler = oob_irq_handler; bcmsdh_osinfo->oob_irq_handler_context = oob_irq_handler_context; #if defined(CONFIG_ARCH_ODIN) err = odin_gpio_sms_request_irq(bcmsdh_osinfo->oob_irq_num, wlan_oob_irq, bcmsdh_osinfo->oob_irq_flags, "bcmsdh_sdmmc", bcmsdh); #else err = request_irq(bcmsdh_osinfo->oob_irq_num, wlan_oob_irq, bcmsdh_osinfo->oob_irq_flags, "bcmsdh_sdmmc", bcmsdh); #endif /* defined(CONFIG_ARCH_ODIN) */ if (err) { SDLX_MSG(("%s: request_irq failed with %d\n", __FUNCTION__, err)); return err; } bcmdhd_irq_number = (int)bcmsdh_osinfo->oob_irq_num; err = enable_irq_wake(bcmsdh_osinfo->oob_irq_num); if (!err) bcmsdh_osinfo->oob_irq_wake_enabled = TRUE; bcmsdh_osinfo->oob_irq_enabled = TRUE; bcmsdh_osinfo->oob_irq_registered = TRUE; return err; }
int bcmsdh_oob_intr_register(bcmsdh_info_t *bcmsdh, bcmsdh_cb_fn_t oob_irq_handler, void* oob_irq_handler_context) { int err = 0; bcmsdh_os_info_t *bcmsdh_osinfo = bcmsdh->os_cxt; SDLX_MSG(("%s: Enter\n", __FUNCTION__)); if (bcmsdh_osinfo->oob_irq_registered) { SDLX_MSG(("%s: irq is already registered\n", __FUNCTION__)); return -EBUSY; } #ifdef HW_OOB printf("%s: HW_OOB enabled\n", __FUNCTION__); #else printf("%s: SW_OOB enabled\n", __FUNCTION__); #endif SDLX_MSG(("%s OOB irq=%d flags=%X\n", __FUNCTION__, (int)bcmsdh_osinfo->oob_irq_num, (int)bcmsdh_osinfo->oob_irq_flags)); bcmsdh_osinfo->oob_irq_handler = oob_irq_handler; bcmsdh_osinfo->oob_irq_handler_context = oob_irq_handler_context; bcmsdh_osinfo->oob_irq_enabled = TRUE; bcmsdh_osinfo->oob_irq_registered = TRUE; #if defined(CONFIG_ARCH_ODIN) err = odin_gpio_sms_request_irq(bcmsdh_osinfo->oob_irq_num, wlan_oob_irq, bcmsdh_osinfo->oob_irq_flags, "bcmsdh_sdmmc", bcmsdh); #else err = request_irq(bcmsdh_osinfo->oob_irq_num, wlan_oob_irq, bcmsdh_osinfo->oob_irq_flags, "bcmsdh_sdmmc", bcmsdh); #endif /* defined(CONFIG_ARCH_ODIN) */ if (err) { bcmsdh_osinfo->oob_irq_enabled = FALSE; bcmsdh_osinfo->oob_irq_registered = FALSE; SDLX_MSG(("%s: request_irq failed with %d\n", __FUNCTION__, err)); return err; } #if defined(DISABLE_WOWLAN) SDLX_MSG(("%s: disable_irq_wake\n", __FUNCTION__)); err = disable_irq_wake(bcmsdh_osinfo->oob_irq_num); if (err) SDLX_MSG(("%s: disable_irq_wake failed with %d\n", __FUNCTION__, err)); else bcmsdh_osinfo->oob_irq_wake_enabled = FALSE; #else SDLX_MSG(("%s: enable_irq_wake\n", __FUNCTION__)); err = enable_irq_wake(bcmsdh_osinfo->oob_irq_num); if (err) SDLX_MSG(("%s: enable_irq_wake failed with %d\n", __FUNCTION__, err)); else bcmsdh_osinfo->oob_irq_wake_enabled = TRUE; #endif return 0; }