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

Commit da2e8526 authored by David S. Miller's avatar David S. Miller
Browse files


John Linville says:
====================
Amitkumar Karwar gives us a cfg80211 fix that changes some state
tracking in order to avoid a WARNING.

Arik Nemtsov provide a mac80211 fix for an RCU-related race.

Avinash Patil shares a pair of mwifiex fixes, one which invalidates
some stale configuration data before a channel change and another to
restrict hidden SSID support to zero-length SSIDs only.

Chun-Yeow Yeoh brings a mac80211 fix for a mesh problem triggered
when combining multiple mesh networks into one.

Felix Fietkau provides a mac80211 lockdep fix.

Joe Perches fixes a couple of thinkos related to bitwise operations.

Johannes Berg comes through with a flurry of fixes.  The iwlwifi ones
address a problem Linus recently reported, and some of the fallout
discovered while fixing it.  The mac80211 fix properly cleans-up
remain-on-channel work on an interface that is stopped.  The others
are clean-ups for regressions caused by stricter checking of possible
virtual interfaces supported by wireless drivers.

Meenakshi Venkataraman provides a mac80211 fix for an off-by-one error.

Seth Forshee provides a fix to make the wireless adapters used in
some Mac boxes work after being in S3 power saving state.

Stanislaw Gruszka offers a copule of fixes, a fix for a mac80211
scanning regression and an rt2x00 fix to avoid some lockdep spew.

Last but not least, Vinicius Costa Gomes provides a bluetooth fix
for a typo that "was preventing important features of Bluetooth
from working".
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 55432d2b 4e924fec
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -139,7 +139,9 @@ void bcma_pmu_workarounds(struct bcma_drv_cc *cc)
		bcma_chipco_chipctl_maskset(cc, 0, ~0, 0x7);
		bcma_chipco_chipctl_maskset(cc, 0, ~0, 0x7);
		break;
		break;
	case 0x4331:
	case 0x4331:
		/* BCM4331 workaround is SPROM-related, we put it in sprom.c */
	case 43431:
		/* Ext PA lines must be enabled for tx on BCM4331 */
		bcma_chipco_bcm4331_ext_pa_lines_ctl(cc, true);
		break;
		break;
	case 43224:
	case 43224:
		if (bus->chipinfo.rev == 0) {
		if (bus->chipinfo.rev == 0) {
+2 −2
Original line number Original line Diff line number Diff line
@@ -579,13 +579,13 @@ int bcma_sprom_get(struct bcma_bus *bus)
	if (!sprom)
	if (!sprom)
		return -ENOMEM;
		return -ENOMEM;


	if (bus->chipinfo.id == 0x4331)
	if (bus->chipinfo.id == 0x4331 || bus->chipinfo.id == 43431)
		bcma_chipco_bcm4331_ext_pa_lines_ctl(&bus->drv_cc, false);
		bcma_chipco_bcm4331_ext_pa_lines_ctl(&bus->drv_cc, false);


	pr_debug("SPROM offset 0x%x\n", offset);
	pr_debug("SPROM offset 0x%x\n", offset);
	bcma_sprom_read(bus, offset, sprom);
	bcma_sprom_read(bus, offset, sprom);


	if (bus->chipinfo.id == 0x4331)
	if (bus->chipinfo.id == 0x4331 || bus->chipinfo.id == 43431)
		bcma_chipco_bcm4331_ext_pa_lines_ctl(&bus->drv_cc, true);
		bcma_chipco_bcm4331_ext_pa_lines_ctl(&bus->drv_cc, true);


	err = bcma_sprom_valid(sprom);
	err = bcma_sprom_valid(sprom);
+2 −2
Original line number Original line Diff line number Diff line
@@ -89,9 +89,9 @@ int brcmf_sdio_intr_register(struct brcmf_sdio_dev *sdiodev)
	data |= 1 << SDIO_FUNC_1 | 1 << SDIO_FUNC_2 | 1;
	data |= 1 << SDIO_FUNC_1 | 1 << SDIO_FUNC_2 | 1;
	brcmf_sdio_regwb(sdiodev, SDIO_CCCR_IENx, data, &ret);
	brcmf_sdio_regwb(sdiodev, SDIO_CCCR_IENx, data, &ret);


	/* redirect, configure ane enable io for interrupt signal */
	/* redirect, configure and enable io for interrupt signal */
	data = SDIO_SEPINT_MASK | SDIO_SEPINT_OE;
	data = SDIO_SEPINT_MASK | SDIO_SEPINT_OE;
	if (sdiodev->irq_flags | IRQF_TRIGGER_HIGH)
	if (sdiodev->irq_flags & IRQF_TRIGGER_HIGH)
		data |= SDIO_SEPINT_ACT_HI;
		data |= SDIO_SEPINT_ACT_HI;
	brcmf_sdio_regwb(sdiodev, SDIO_CCCR_BRCM_SEPINT, data, &ret);
	brcmf_sdio_regwb(sdiodev, SDIO_CCCR_BRCM_SEPINT, data, &ret);


+7 −2
Original line number Original line Diff line number Diff line
@@ -861,13 +861,18 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)


	/* We have our copies now, allow OS release its copies */
	/* We have our copies now, allow OS release its copies */
	release_firmware(ucode_raw);
	release_firmware(ucode_raw);
	complete(&drv->request_firmware_complete);


	drv->op_mode = iwl_dvm_ops.start(drv->trans, drv->cfg, &drv->fw);
	drv->op_mode = iwl_dvm_ops.start(drv->trans, drv->cfg, &drv->fw);


	if (!drv->op_mode)
	if (!drv->op_mode)
		goto out_free_fw;
		goto out_unbind;


	/*
	 * Complete the firmware request last so that
	 * a driver unbind (stop) doesn't run while we
	 * are doing the start() above.
	 */
	complete(&drv->request_firmware_complete);
	return;
	return;


 try_again:
 try_again:
+9 −9
Original line number Original line Diff line number Diff line
@@ -568,28 +568,28 @@ static int iwl_find_otp_image(struct iwl_trans *trans,
 * iwl_get_max_txpower_avg - get the highest tx power from all chains.
 * iwl_get_max_txpower_avg - get the highest tx power from all chains.
 *     find the highest tx power from all chains for the channel
 *     find the highest tx power from all chains for the channel
 */
 */
static s8 iwl_get_max_txpower_avg(const struct iwl_cfg *cfg,
static s8 iwl_get_max_txpower_avg(struct iwl_priv *priv,
		struct iwl_eeprom_enhanced_txpwr *enhanced_txpower,
		struct iwl_eeprom_enhanced_txpwr *enhanced_txpower,
		int element, s8 *max_txpower_in_half_dbm)
		int element, s8 *max_txpower_in_half_dbm)
{
{
	s8 max_txpower_avg = 0; /* (dBm) */
	s8 max_txpower_avg = 0; /* (dBm) */


	/* Take the highest tx power from any valid chains */
	/* Take the highest tx power from any valid chains */
	if ((cfg->valid_tx_ant & ANT_A) &&
	if ((priv->hw_params.valid_tx_ant & ANT_A) &&
	    (enhanced_txpower[element].chain_a_max > max_txpower_avg))
	    (enhanced_txpower[element].chain_a_max > max_txpower_avg))
		max_txpower_avg = enhanced_txpower[element].chain_a_max;
		max_txpower_avg = enhanced_txpower[element].chain_a_max;
	if ((cfg->valid_tx_ant & ANT_B) &&
	if ((priv->hw_params.valid_tx_ant & ANT_B) &&
	    (enhanced_txpower[element].chain_b_max > max_txpower_avg))
	    (enhanced_txpower[element].chain_b_max > max_txpower_avg))
		max_txpower_avg = enhanced_txpower[element].chain_b_max;
		max_txpower_avg = enhanced_txpower[element].chain_b_max;
	if ((cfg->valid_tx_ant & ANT_C) &&
	if ((priv->hw_params.valid_tx_ant & ANT_C) &&
	    (enhanced_txpower[element].chain_c_max > max_txpower_avg))
	    (enhanced_txpower[element].chain_c_max > max_txpower_avg))
		max_txpower_avg = enhanced_txpower[element].chain_c_max;
		max_txpower_avg = enhanced_txpower[element].chain_c_max;
	if (((cfg->valid_tx_ant == ANT_AB) |
	if (((priv->hw_params.valid_tx_ant == ANT_AB) |
	    (cfg->valid_tx_ant == ANT_BC) |
	    (priv->hw_params.valid_tx_ant == ANT_BC) |
	    (cfg->valid_tx_ant == ANT_AC)) &&
	    (priv->hw_params.valid_tx_ant == ANT_AC)) &&
	    (enhanced_txpower[element].mimo2_max > max_txpower_avg))
	    (enhanced_txpower[element].mimo2_max > max_txpower_avg))
		max_txpower_avg =  enhanced_txpower[element].mimo2_max;
		max_txpower_avg =  enhanced_txpower[element].mimo2_max;
	if ((cfg->valid_tx_ant == ANT_ABC) &&
	if ((priv->hw_params.valid_tx_ant == ANT_ABC) &&
	    (enhanced_txpower[element].mimo3_max > max_txpower_avg))
	    (enhanced_txpower[element].mimo3_max > max_txpower_avg))
		max_txpower_avg = enhanced_txpower[element].mimo3_max;
		max_txpower_avg = enhanced_txpower[element].mimo3_max;


@@ -691,7 +691,7 @@ static void iwl_eeprom_enhanced_txpower(struct iwl_priv *priv)
				 ((txp->delta_20_in_40 & 0xf0) >> 4),
				 ((txp->delta_20_in_40 & 0xf0) >> 4),
				 (txp->delta_20_in_40 & 0x0f));
				 (txp->delta_20_in_40 & 0x0f));


		max_txp_avg = iwl_get_max_txpower_avg(priv->cfg, txp_array, idx,
		max_txp_avg = iwl_get_max_txpower_avg(priv, txp_array, idx,
						      &max_txp_avg_halfdbm);
						      &max_txp_avg_halfdbm);


		/*
		/*
Loading