Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit edba3532 authored by Pavani Muthyala's avatar Pavani Muthyala Committed by Kalle Valo
Browse files

rsi: add support for rf-kill functionality



This patch implements rfkill_poll handler. Also, necessary changes
are done in interface up and down handler to support rfkill
functionality.

Signed-off-by: default avatarPavani Muthyala <pavani.muthyala@redpinesignals.com>
Signed-off-by: default avatarAmitkumar Karwar <amit.karwar@redpinesignals.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 6345016d
Loading
Loading
Loading
Loading
+19 −2
Original line number Original line Diff line number Diff line
@@ -279,11 +279,12 @@ static int rsi_mac80211_start(struct ieee80211_hw *hw)
	struct rsi_hw *adapter = hw->priv;
	struct rsi_hw *adapter = hw->priv;
	struct rsi_common *common = adapter->priv;
	struct rsi_common *common = adapter->priv;


	rsi_dbg(ERR_ZONE, "===> Interface UP <===\n");
	mutex_lock(&common->mutex);
	mutex_lock(&common->mutex);
	common->iface_down = false;
	common->iface_down = false;
	mutex_unlock(&common->mutex);
	wiphy_rfkill_start_polling(hw->wiphy);

	rsi_send_rx_filter_frame(common, 0);
	rsi_send_rx_filter_frame(common, 0);
	mutex_unlock(&common->mutex);


	return 0;
	return 0;
}
}
@@ -299,8 +300,10 @@ static void rsi_mac80211_stop(struct ieee80211_hw *hw)
	struct rsi_hw *adapter = hw->priv;
	struct rsi_hw *adapter = hw->priv;
	struct rsi_common *common = adapter->priv;
	struct rsi_common *common = adapter->priv;


	rsi_dbg(ERR_ZONE, "===> Interface DOWN <===\n");
	mutex_lock(&common->mutex);
	mutex_lock(&common->mutex);
	common->iface_down = true;
	common->iface_down = true;
	wiphy_rfkill_stop_polling(hw->wiphy);


	/* Block all rx frames */
	/* Block all rx frames */
	rsi_send_rx_filter_frame(common, 0xffff);
	rsi_send_rx_filter_frame(common, 0xffff);
@@ -1214,6 +1217,19 @@ static void rsi_reg_notify(struct wiphy *wiphy,
	mutex_unlock(&common->mutex);
	mutex_unlock(&common->mutex);
}
}


static void rsi_mac80211_rfkill_poll(struct ieee80211_hw *hw)
{
	struct rsi_hw *adapter = hw->priv;
	struct rsi_common *common = adapter->priv;

	mutex_lock(&common->mutex);
	if (common->fsm_state != FSM_MAC_INIT_DONE)
		wiphy_rfkill_set_hw_state(hw->wiphy, true);
	else
		wiphy_rfkill_set_hw_state(hw->wiphy, false);
	mutex_unlock(&common->mutex);
}

static struct ieee80211_ops mac80211_ops = {
static struct ieee80211_ops mac80211_ops = {
	.tx = rsi_mac80211_tx,
	.tx = rsi_mac80211_tx,
	.start = rsi_mac80211_start,
	.start = rsi_mac80211_start,
@@ -1232,6 +1248,7 @@ static struct ieee80211_ops mac80211_ops = {
	.sta_remove = rsi_mac80211_sta_remove,
	.sta_remove = rsi_mac80211_sta_remove,
	.set_antenna = rsi_mac80211_set_antenna,
	.set_antenna = rsi_mac80211_set_antenna,
	.get_antenna = rsi_mac80211_get_antenna,
	.get_antenna = rsi_mac80211_get_antenna,
	.rfkill_poll = rsi_mac80211_rfkill_poll,
};
};


/**
/**