static void sdi1_configure(void) { pdata = cw1200_get_platform_data(); reset = pdata->reset; gpio_request(reset->start, reset->name); gpio_direction_output(reset->start, 0); }
/* Init Module function -> Called by insmod */ static int __init cw1200_sdio_init(void) { const struct cw1200_platform_data *pdata; int ret; pdata = cw1200_get_platform_data(); ret = sdio_register_driver(&sdio_driver); if (ret) goto err_reg; if (pdata->power_ctrl) { ret = pdata->power_ctrl(pdata, true); if (ret) goto err_power; } ret = cw1200_sdio_on(pdata); if (ret) goto err_on; return 0; err_on: if (pdata->power_ctrl) pdata->power_ctrl(pdata, false); err_power: sdio_unregister_driver(&sdio_driver); err_reg: return ret; }
/* Probe Function to be called by SDIO stack when device is discovered */ static int cw1200_sdio_probe(struct sdio_func *func, const struct sdio_device_id *id) { struct sbus_priv *self; int status; cw1200_dbg(CW1200_DBG_INIT, "Probe called\n"); self = kzalloc(sizeof(*self), GFP_KERNEL); if (!self) { cw1200_dbg(CW1200_DBG_ERROR, "Can't allocate SDIO sbus_priv."); return -ENOMEM; } spin_lock_init(&self->lock); self->pdata = cw1200_get_platform_data(); self->func = func; sdio_set_drvdata(func, self); sdio_claim_host(func); sdio_enable_func(func); sdio_release_host(func); status = cw1200_probe(&cw1200_sdio_sbus_ops, self, &func->dev, &self->core); if (status) { sdio_claim_host(func); sdio_disable_func(func); sdio_release_host(func); sdio_set_drvdata(func, NULL); kfree(self); } return status; }
/* Called at Driver Unloading */ static void __exit cw1200_sdio_exit(void) { const struct cw1200_platform_data *pdata; pdata = cw1200_get_platform_data(); sdio_unregister_driver(&sdio_driver); cw1200_sdio_off(pdata); if (pdata->power_ctrl) pdata->power_ctrl(pdata, false); }