int bluecard_event(event_t event, int priority, event_callback_args_t *args) { dev_link_t *link = args->client_data; bluecard_info_t *info = link->priv; switch (event) { case CS_EVENT_CARD_REMOVAL: link->state &= ~DEV_PRESENT; if (link->state & DEV_CONFIG) { bluecard_close(info); mod_timer(&link->release, jiffies + HZ / 20); } break; case CS_EVENT_CARD_INSERTION: link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; bluecard_config(link); break; case CS_EVENT_PM_SUSPEND: link->state |= DEV_SUSPEND; /* Fall through... */ case CS_EVENT_RESET_PHYSICAL: if (link->state & DEV_CONFIG) CardServices(ReleaseConfiguration, link->handle); break; case CS_EVENT_PM_RESUME: link->state &= ~DEV_SUSPEND; /* Fall through... */ case CS_EVENT_CARD_RESET: if (DEV_OK(link)) CardServices(RequestConfiguration, link->handle, &link->conf); break; } return 0; }
static void bluecard_release(struct pcmcia_device *link) { struct bluecard_info *info = link->priv; bluecard_close(info); del_timer_sync(&(info->timer)); pcmcia_disable_device(link); }
static void bluecard_release(dev_link_t *link) { bluecard_info_t *info = link->priv; if (link->state & DEV_PRESENT) bluecard_close(info); del_timer(&(info->timer)); link->dev = NULL; pcmcia_release_configuration(link->handle); pcmcia_release_io(link->handle, &link->io); pcmcia_release_irq(link->handle, &link->irq); link->state &= ~DEV_CONFIG; }
void bluecard_release(u_long arg) { dev_link_t *link = (dev_link_t *)arg; bluecard_info_t *info = link->priv; if (link->state & DEV_PRESENT) bluecard_close(info); MOD_DEC_USE_COUNT; link->dev = NULL; CardServices(ReleaseConfiguration, link->handle); CardServices(ReleaseIO, link->handle, &link->io); CardServices(ReleaseIRQ, link->handle, &link->irq); link->state &= ~DEV_CONFIG; }