[PATCH 1/1] SRU: UBUNTU: iwlagn -- fix rfkill when on when driver loaded

Tim Gardner tim.gardner at canonical.com
Fri Nov 14 06:06:03 UTC 2008


Andy Whitcroft wrote:
> From: Mohamed Abbas <mohamed.abbas at intel.com>
> 
> OriginalAuthor: Mohamed Abbas <mohamed.abbas at intel.com>
> Bug: #193970
> 
> When the iwlagn driver is loaded and the rfkill switch is already on
> then we do not start notifications.  This prevents the switch enabling
> wireless.
> 
> This patch is currently on its way upstream.  This has been tested on an
> iwl5300.  Proposing this fix for SRU for Intrepid.
> 
> Signed-off-by: Andy Whitcroft <apw at canonical.com>
> ---
>  drivers/net/wireless/iwlwifi/iwl-agn.c  |    5 ++++-
>  drivers/net/wireless/iwlwifi/iwl-core.c |   10 ++++++++++
>  2 files changed, 14 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
> index c00b25d..36aeb15 100644
> --- a/drivers/net/wireless/iwlwifi/iwl-agn.c
> +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
> @@ -1656,8 +1656,11 @@ static void iwl4965_irq_tasklet(struct iwl_priv *priv)
>  		 * the driver as well won't allow loading if RFKILL is set
>  		 * therefore no need to restart the driver from this handler
>  		 */
> -		if (!hw_rf_kill && !test_bit(STATUS_ALIVE, &priv->status))
> +		if (!hw_rf_kill && !test_bit(STATUS_ALIVE, &priv->status)) {
>  			clear_bit(STATUS_RF_KILL_HW, &priv->status);
> +			if (priv->is_open && !iwl_is_rfkill(priv))
> +				queue_work(priv->workqueue, &priv->up);
> +		}
>  
>  		handled |= CSR_INT_BIT_RF_KILL;
>  	}
> diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
> index 1383fd1..22987f4 100644
> --- a/drivers/net/wireless/iwlwifi/iwl-core.c
> +++ b/drivers/net/wireless/iwlwifi/iwl-core.c
> @@ -1435,6 +1435,16 @@ int iwl_radio_kill_sw_enable_radio(struct iwl_priv *priv)
>  		return 0;
>  	}
>  
> +	/* when driver is up while rfkill is on, it wont receive
> +	 * any CARD_STATE_NOTIFICATION notifications so we have to
> +	 * restart it in here
> +	 */
> +	if (priv->is_open && !test_bit(STATUS_ALIVE, &priv->status)) {
> +		clear_bit(STATUS_RF_KILL_SW, &priv->status);
> +		if (!iwl_is_rfkill(priv))
> +			queue_work(priv->workqueue, &priv->up);
> +	}
> +
>  	/* If the driver is already loaded, it will receive
>  	 * CARD_STATE_NOTIFICATION notifications and the handler will
>  	 * call restart to reload the driver.

ACK - applied.

-- 
Tim Gardner tim.gardner at canonical.com




More information about the kernel-team mailing list