Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers.git

The series "[PATCH 0/2] mt76x0: initialize per-channel max_power" depends on
commit d04ca383860b ("mt76x0u: fix suspend/resume"), so merge wireless-drivers
into wireless-drivers-next to get that.

+72 -55
+7
MAINTAINERS
··· 12890 12890 F: drivers/net/dsa/realtek-smi* 12891 12891 F: drivers/net/dsa/rtl83* 12892 12892 12893 + REDPINE WIRELESS DRIVER 12894 + M: Amitkumar Karwar <amitkarwar@gmail.com> 12895 + M: Siva Rebbagondla <siva8118@gmail.com> 12896 + L: linux-wireless@vger.kernel.org 12897 + S: Maintained 12898 + F: drivers/net/wireless/rsi/ 12899 + 12893 12900 REGISTER MAP ABSTRACTION 12894 12901 M: Mark Brown <broonie@kernel.org> 12895 12902 L: linux-kernel@vger.kernel.org
+1 -1
drivers/net/wireless/ath/ath10k/core.c
··· 548 548 { 549 549 .id = WCN3990_HW_1_0_DEV_VERSION, 550 550 .dev_id = 0, 551 - .bus = ATH10K_BUS_PCI, 551 + .bus = ATH10K_BUS_SNOC, 552 552 .name = "wcn3990 hw1.0", 553 553 .continuous_frag_desc = true, 554 554 .tx_chain_mask = 0x7,
+2 -1
drivers/net/wireless/intel/iwlwifi/Kconfig
··· 1 1 config IWLWIFI 2 2 tristate "Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi) " 3 - depends on PCI && HAS_IOMEM 3 + depends on PCI && HAS_IOMEM && CFG80211 4 4 select FW_LOADER 5 5 ---help--- 6 6 Select to build the driver supporting the: ··· 47 47 config IWLWIFI_LEDS 48 48 bool 49 49 depends on LEDS_CLASS=y || LEDS_CLASS=IWLWIFI 50 + depends on IWLMVM || IWLDVM 50 51 select LEDS_TRIGGERS 51 52 select MAC80211_LEDS 52 53 default y
+19 -21
drivers/net/wireless/mediatek/mt76/mt76x0/eeprom.c
··· 212 212 mt76x02_add_rate_power_offset(t, delta); 213 213 } 214 214 215 - void mt76x0_get_power_info(struct mt76x02_dev *dev, u8 *info) 215 + void mt76x0_get_power_info(struct mt76x02_dev *dev, s8 *tp) 216 216 { 217 217 struct mt76x0_chan_map { 218 218 u8 chan; 219 219 u8 offset; 220 220 } chan_map[] = { 221 - { 2, 0 }, { 4, 1 }, { 6, 2 }, { 8, 3 }, 222 - { 10, 4 }, { 12, 5 }, { 14, 6 }, { 38, 0 }, 223 - { 44, 1 }, { 48, 2 }, { 54, 3 }, { 60, 4 }, 224 - { 64, 5 }, { 102, 6 }, { 108, 7 }, { 112, 8 }, 225 - { 118, 9 }, { 124, 10 }, { 128, 11 }, { 134, 12 }, 226 - { 140, 13 }, { 151, 14 }, { 157, 15 }, { 161, 16 }, 227 - { 167, 17 }, { 171, 18 }, { 173, 19 }, 221 + { 2, 0 }, { 4, 2 }, { 6, 4 }, { 8, 6 }, 222 + { 10, 8 }, { 12, 10 }, { 14, 12 }, { 38, 0 }, 223 + { 44, 2 }, { 48, 4 }, { 54, 6 }, { 60, 8 }, 224 + { 64, 10 }, { 102, 12 }, { 108, 14 }, { 112, 16 }, 225 + { 118, 18 }, { 124, 20 }, { 128, 22 }, { 134, 24 }, 226 + { 140, 26 }, { 151, 28 }, { 157, 30 }, { 161, 32 }, 227 + { 167, 34 }, { 171, 36 }, { 175, 38 }, 228 228 }; 229 229 struct ieee80211_channel *chan = dev->mt76.chandef.chan; 230 230 u8 offset, addr; 231 + int i, idx = 0; 231 232 u16 data; 232 - int i; 233 233 234 234 if (mt76x0_tssi_enabled(dev)) { 235 235 s8 target_power; ··· 239 239 else 240 240 data = mt76x02_eeprom_get(dev, MT_EE_2G_TARGET_POWER); 241 241 target_power = (data & 0xff) - dev->mt76.rate_power.ofdm[7]; 242 - info[0] = target_power + mt76x0_get_delta(dev); 243 - info[1] = 0; 242 + *tp = target_power + mt76x0_get_delta(dev); 244 243 245 244 return; 246 245 } 247 246 248 247 for (i = 0; i < ARRAY_SIZE(chan_map); i++) { 249 - if (chan_map[i].chan <= chan->hw_value) { 248 + if (chan->hw_value <= chan_map[i].chan) { 249 + idx = (chan->hw_value == chan_map[i].chan); 250 250 offset = chan_map[i].offset; 251 251 break; 252 252 } ··· 258 258 addr = MT_EE_TX_POWER_DELTA_BW80 + offset; 259 259 } else { 260 260 switch (chan->hw_value) { 261 + case 42: 262 + offset = 2; 263 + break; 261 264 case 58: 262 265 offset = 8; 263 266 break; 264 267 case 106: 265 268 offset = 14; 266 269 break; 267 - case 112: 270 + case 122: 268 271 offset = 20; 269 272 break; 270 273 case 155: ··· 280 277 } 281 278 282 279 data = mt76x02_eeprom_get(dev, addr); 283 - 284 - info[0] = data; 285 - if (!info[0] || info[0] > 0x3f) 286 - info[0] = 5; 287 - 288 - info[1] = data >> 8; 289 - if (!info[1] || info[1] > 0x3f) 290 - info[1] = 5; 280 + *tp = data >> (8 * idx); 281 + if (*tp < 0 || *tp > 0x3f) 282 + *tp = 5; 291 283 } 292 284 293 285 static int mt76x0_check_eeprom(struct mt76x02_dev *dev)
+1 -1
drivers/net/wireless/mediatek/mt76/mt76x0/eeprom.h
··· 26 26 int mt76x0_eeprom_init(struct mt76x02_dev *dev); 27 27 void mt76x0_read_rx_gain(struct mt76x02_dev *dev); 28 28 void mt76x0_get_tx_power_per_rate(struct mt76x02_dev *dev); 29 - void mt76x0_get_power_info(struct mt76x02_dev *dev, u8 *info); 29 + void mt76x0_get_power_info(struct mt76x02_dev *dev, s8 *tp); 30 30 31 31 static inline s8 s6_to_s8(u32 val) 32 32 {
+5 -5
drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
··· 845 845 void mt76x0_phy_set_txpower(struct mt76x02_dev *dev) 846 846 { 847 847 struct mt76_rate_power *t = &dev->mt76.rate_power; 848 - u8 info[2]; 848 + s8 info; 849 849 850 850 mt76x0_get_tx_power_per_rate(dev); 851 - mt76x0_get_power_info(dev, info); 851 + mt76x0_get_power_info(dev, &info); 852 852 853 - mt76x02_add_rate_power_offset(t, info[0]); 853 + mt76x02_add_rate_power_offset(t, info); 854 854 mt76x02_limit_rate_power(t, dev->mt76.txpower_conf); 855 855 dev->mt76.txpower_cur = mt76x02_get_max_rate_power(t); 856 - mt76x02_add_rate_power_offset(t, -info[0]); 856 + mt76x02_add_rate_power_offset(t, -info); 857 857 858 - mt76x02_phy_set_txpower(dev, info[0], info[1]); 858 + mt76x02_phy_set_txpower(dev, info, info); 859 859 } 860 860 861 861 void mt76x0_phy_calibrate(struct mt76x02_dev *dev, bool power_on)
+30 -18
drivers/net/wireless/mediatek/mt76/mt76x0/usb.c
··· 158 158 .get_txpower = mt76_get_txpower, 159 159 }; 160 160 161 + static int mt76x0u_init_hardware(struct mt76x02_dev *dev) 162 + { 163 + int err; 164 + 165 + mt76x0_chip_onoff(dev, true, true); 166 + 167 + if (!mt76x02_wait_for_mac(&dev->mt76)) 168 + return -ETIMEDOUT; 169 + 170 + err = mt76x0u_mcu_init(dev); 171 + if (err < 0) 172 + return err; 173 + 174 + mt76x0_init_usb_dma(dev); 175 + err = mt76x0_init_hardware(dev); 176 + if (err < 0) 177 + return err; 178 + 179 + mt76_rmw(dev, MT_US_CYC_CFG, MT_US_CYC_CNT, 0x1e); 180 + mt76_wr(dev, MT_TXOP_CTRL_CFG, 181 + FIELD_PREP(MT_TXOP_TRUN_EN, 0x3f) | 182 + FIELD_PREP(MT_TXOP_EXT_CCA_DLY, 0x58)); 183 + 184 + return 0; 185 + } 186 + 161 187 static int mt76x0u_register_device(struct mt76x02_dev *dev) 162 188 { 163 189 struct ieee80211_hw *hw = dev->mt76.hw; ··· 197 171 if (err < 0) 198 172 goto out_err; 199 173 200 - mt76x0_chip_onoff(dev, true, true); 201 - if (!mt76x02_wait_for_mac(&dev->mt76)) { 202 - err = -ETIMEDOUT; 203 - goto out_err; 204 - } 205 - 206 - err = mt76x0u_mcu_init(dev); 174 + err = mt76x0u_init_hardware(dev); 207 175 if (err < 0) 208 176 goto out_err; 209 - 210 - mt76x0_init_usb_dma(dev); 211 - err = mt76x0_init_hardware(dev); 212 - if (err < 0) 213 - goto out_err; 214 - 215 - mt76_rmw(dev, MT_US_CYC_CFG, MT_US_CYC_CNT, 0x1e); 216 - mt76_wr(dev, MT_TXOP_CTRL_CFG, 217 - FIELD_PREP(MT_TXOP_TRUN_EN, 0x3f) | 218 - FIELD_PREP(MT_TXOP_EXT_CCA_DLY, 0x58)); 219 177 220 178 err = mt76x0_register_device(dev); 221 179 if (err < 0) ··· 311 301 312 302 mt76u_stop_queues(&dev->mt76); 313 303 mt76x0u_mac_stop(dev); 304 + clear_bit(MT76_STATE_MCU_RUNNING, &dev->mt76.state); 305 + mt76x0_chip_onoff(dev, false, false); 314 306 usb_kill_urb(usb->mcu.res.urb); 315 307 316 308 return 0; ··· 340 328 tasklet_enable(&usb->rx_tasklet); 341 329 tasklet_enable(&usb->tx_tasklet); 342 330 343 - ret = mt76x0_init_hardware(dev); 331 + ret = mt76x0u_init_hardware(dev); 344 332 if (ret) 345 333 goto err; 346 334
+7 -8
drivers/net/wireless/ti/wlcore/sdio.c
··· 164 164 } 165 165 166 166 sdio_claim_host(func); 167 + /* 168 + * To guarantee that the SDIO card is power cycled, as required to make 169 + * the FW programming to succeed, let's do a brute force HW reset. 170 + */ 171 + mmc_hw_reset(card->host); 172 + 167 173 sdio_enable_func(func); 168 174 sdio_release_host(func); 169 175 ··· 180 174 { 181 175 struct sdio_func *func = dev_to_sdio_func(glue->dev); 182 176 struct mmc_card *card = func->card; 183 - int error; 184 177 185 178 sdio_claim_host(func); 186 179 sdio_disable_func(func); 187 180 sdio_release_host(func); 188 181 189 182 /* Let runtime PM know the card is powered off */ 190 - error = pm_runtime_put(&card->dev); 191 - if (error < 0 && error != -EBUSY) { 192 - dev_err(&card->dev, "%s failed: %i\n", __func__, error); 193 - 194 - return error; 195 - } 196 - 183 + pm_runtime_put(&card->dev); 197 184 return 0; 198 185 } 199 186