From: Reinette Chatre <reinette.chatre@intel.com>
To: linville@tuxdriver.com
Cc: linux-wireless@vger.kernel.org,
Wey-Yi Guy <wey-yi.w.guy@intel.com>,
Reinette Chatre <reinette.chatre@intel.com>
Subject: [PATCH 04/14] iwlwifi: error checking for setting tx_power in sysfs
Date: Fri, 21 Aug 2009 13:34:17 -0700 [thread overview]
Message-ID: <1250886867-4112-5-git-send-email-reinette.chatre@intel.com> (raw)
In-Reply-To: <1250886867-4112-1-git-send-email-reinette.chatre@intel.com>
From: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Perform error checking and report failure when setting tx power from
sysfs.
If fail to set the tx power, do not update the local copy, so user will
not see the incorrect tx power in sysfs
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
---
drivers/net/wireless/iwlwifi/iwl-agn.c | 13 +++++++++----
drivers/net/wireless/iwlwifi/iwl-core.c | 28 +++++++++++++++++++++-------
2 files changed, 30 insertions(+), 11 deletions(-)
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 2232b17..533b393 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -2477,10 +2477,15 @@ static ssize_t store_tx_power(struct device *d,
ret = strict_strtoul(buf, 10, &val);
if (ret)
IWL_INFO(priv, "%s is not in decimal form.\n", buf);
- else
- iwl_set_tx_power(priv, val, false);
-
- return count;
+ else {
+ ret = iwl_set_tx_power(priv, val, false);
+ if (ret)
+ IWL_ERR(priv, "failed setting tx power (0x%d).\n",
+ ret);
+ else
+ ret = count;
+ }
+ return ret;
}
static DEVICE_ATTR(tx_power, S_IWUSR | S_IRUGO, show_tx_power, store_tx_power);
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index 82dadd0..c62c081 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -1701,6 +1701,8 @@ EXPORT_SYMBOL(iwl_init_drv);
int iwl_set_tx_power(struct iwl_priv *priv, s8 tx_power, bool force)
{
int ret = 0;
+ s8 prev_tx_power = priv->tx_power_user_lmt;
+
if (tx_power < IWL_TX_POWER_TARGET_POWER_MIN) {
IWL_WARN(priv, "Requested user TXPOWER %d below lower limit %d.\n",
tx_power,
@@ -1718,15 +1720,27 @@ int iwl_set_tx_power(struct iwl_priv *priv, s8 tx_power, bool force)
if (priv->tx_power_user_lmt != tx_power)
force = true;
- priv->tx_power_user_lmt = tx_power;
-
/* if nic is not up don't send command */
- if (!iwl_is_ready_rf(priv))
- return ret;
-
- if (force && priv->cfg->ops->lib->send_tx_power)
- ret = priv->cfg->ops->lib->send_tx_power(priv);
+ if (iwl_is_ready_rf(priv)) {
+ priv->tx_power_user_lmt = tx_power;
+ if (force && priv->cfg->ops->lib->send_tx_power)
+ ret = priv->cfg->ops->lib->send_tx_power(priv);
+ else if (!priv->cfg->ops->lib->send_tx_power)
+ ret = -EOPNOTSUPP;
+ /*
+ * if fail to set tx_power, restore the orig. tx power
+ */
+ if (ret)
+ priv->tx_power_user_lmt = prev_tx_power;
+ }
+ /*
+ * Even this is an async host command, the command
+ * will always report success from uCode
+ * So once driver can placing the command into the queue
+ * successfully, driver can use priv->tx_power_user_lmt
+ * to reflect the current tx power
+ */
return ret;
}
EXPORT_SYMBOL(iwl_set_tx_power);
--
1.5.6.3
next prev parent reply other threads:[~2009-08-21 20:34 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-21 20:34 [PATCH 0/14] iwlwifi and ipw2x00 driver updates Reinette Chatre
2009-08-21 20:34 ` [PATCH 01/14] iwlwifi: set default tx power user limit to minimal Reinette Chatre
2009-08-21 20:34 ` [PATCH 02/14] iwlwifi: do not allow set tx power over channel power limit Reinette Chatre
2009-08-21 20:34 ` [PATCH 03/14] iwlwifi: name changes from "tx_power_channel_lmt" to "tx_power_device_lmt" Reinette Chatre
2009-08-21 20:34 ` Reinette Chatre [this message]
2009-08-21 20:34 ` [PATCH 05/14] iwlwifi: change IWL6000_UCODE_API_MAX to v4 Reinette Chatre
2009-08-21 20:34 ` [PATCH 06/14] iwlwifi: show current tx power Reinette Chatre
2009-08-21 20:34 ` [PATCH 07/14] iwlwifi: clear rate control flags on non-HT packet Reinette Chatre
2009-08-21 20:34 ` [PATCH 08/14] iwlwifi: set HT flags in ieee80211_rx_status for received packets Reinette Chatre
2009-08-21 20:34 ` [PATCH 09/14] iwlwifi: remove duplicated define Reinette Chatre
2009-08-21 20:34 ` [PATCH 10/14] iwlwifi: read enhanced tx power info from EEPROM image Reinette Chatre
2009-08-21 20:34 ` [PATCH 11/14] iwlwifi: fix remove key error Reinette Chatre
2009-08-21 20:34 ` [PATCH 12/14] iwlwifi: fix unloading driver while scanning Reinette Chatre
2009-08-21 20:34 ` [PATCH 13/14] ipw2x00: update contact information Reinette Chatre
2009-08-21 20:34 ` [PATCH 14/14] MAINTAINERS: Update ipw2x00 and iwlwifi entries Reinette Chatre
2009-08-21 20:56 ` Joe Perches
2009-08-21 21:00 ` reinette chatre
2009-08-21 21:03 ` [PATCH 14/14 v2] " reinette chatre
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1250886867-4112-5-git-send-email-reinette.chatre@intel.com \
--to=reinette.chatre@intel.com \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=wey-yi.w.guy@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox