コード例 #1
0
int cw1200_register_common(struct ieee80211_hw *dev)
{
	struct cw1200_common *priv = dev->priv;
	int err;

	err = cw1200_pm_init(&priv->pm_state, priv);
	if (err) {
		cw1200_dbg(CW1200_DBG_ERROR, "Cannot init PM. (%d).\n",
				err);
		return err;
	}

	err = ieee80211_register_hw(dev);
	if (err) {
		cw1200_dbg(CW1200_DBG_ERROR, "Cannot register device (%d).\n",
				err);
		cw1200_pm_deinit(&priv->pm_state);
		return err;
	}

#ifdef CONFIG_CW1200_LEDS
	err = cw1200_init_leds(priv);
	if (err) {
		cw1200_pm_deinit(&priv->pm_state);
		ieee80211_unregister_hw(dev);
		return err;
	}
#endif /* CONFIG_CW1200_LEDS */

	cw1200_debug_init(priv);

	cw1200_dbg(CW1200_DBG_MSG, "is registered as '%s'\n",
			wiphy_name(dev->wiphy));
	return 0;
}
コード例 #2
0
ファイル: cw1200_sdio.c プロジェクト: 791254467/u8500_kernel
/* 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;
}