0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0018
0019 #include <linux/nl80211.h>
0020 #include <linux/pci.h>
0021 #include <linux/module.h>
0022 #include "ath9k.h"
0023
0024 extern int ath9k_use_msi;
0025
0026 static const struct pci_device_id ath_pci_id_table[] = {
0027 { PCI_VDEVICE(ATHEROS, 0x0023) },
0028 { PCI_VDEVICE(ATHEROS, 0x0024) },
0029 { PCI_VDEVICE(ATHEROS, 0x0027) },
0030
0031 #ifdef CONFIG_ATH9K_PCOEM
0032
0033 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0034 0x0029,
0035 PCI_VENDOR_ID_ATHEROS,
0036 0x2096),
0037 .driver_data = ATH9K_PCI_LED_ACT_HI },
0038 #endif
0039
0040 { PCI_VDEVICE(ATHEROS, 0x0029) },
0041
0042 #ifdef CONFIG_ATH9K_PCOEM
0043 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0044 0x002A,
0045 PCI_VENDOR_ID_AZWAVE,
0046 0x1C71),
0047 .driver_data = ATH9K_PCI_D3_L1_WAR },
0048 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0049 0x002A,
0050 PCI_VENDOR_ID_FOXCONN,
0051 0xE01F),
0052 .driver_data = ATH9K_PCI_D3_L1_WAR },
0053 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0054 0x002A,
0055 0x11AD,
0056 0x6632),
0057 .driver_data = ATH9K_PCI_D3_L1_WAR },
0058 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0059 0x002A,
0060 0x11AD,
0061 0x6642),
0062 .driver_data = ATH9K_PCI_D3_L1_WAR },
0063 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0064 0x002A,
0065 PCI_VENDOR_ID_QMI,
0066 0x0306),
0067 .driver_data = ATH9K_PCI_D3_L1_WAR },
0068 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0069 0x002A,
0070 0x185F,
0071 0x309D),
0072 .driver_data = ATH9K_PCI_D3_L1_WAR },
0073 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0074 0x002A,
0075 0x10CF,
0076 0x147C),
0077 .driver_data = ATH9K_PCI_D3_L1_WAR },
0078 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0079 0x002A,
0080 0x10CF,
0081 0x147D),
0082 .driver_data = ATH9K_PCI_D3_L1_WAR },
0083 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0084 0x002A,
0085 0x10CF,
0086 0x1536),
0087 .driver_data = ATH9K_PCI_D3_L1_WAR },
0088 #endif
0089
0090 { PCI_VDEVICE(ATHEROS, 0x002A) },
0091
0092 #ifdef CONFIG_ATH9K_PCOEM
0093
0094 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0095 0x002B,
0096 PCI_VENDOR_ID_AZWAVE,
0097 0x2C37),
0098 .driver_data = ATH9K_PCI_BT_ANT_DIV },
0099 #endif
0100
0101 { PCI_VDEVICE(ATHEROS, 0x002B) },
0102 { PCI_VDEVICE(ATHEROS, 0x002C) },
0103 { PCI_VDEVICE(ATHEROS, 0x002D) },
0104 { PCI_VDEVICE(ATHEROS, 0x002E) },
0105
0106
0107 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0108 0x0030,
0109 0x1A56,
0110 0x2000),
0111 .driver_data = ATH9K_PCI_KILLER },
0112 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0113 0x0030,
0114 0x1A56,
0115 0x2001),
0116 .driver_data = ATH9K_PCI_KILLER },
0117
0118 { PCI_VDEVICE(ATHEROS, 0x0030) },
0119
0120 #ifdef CONFIG_ATH9K_PCOEM
0121
0122 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0123 0x0032,
0124 PCI_VENDOR_ID_AZWAVE,
0125 0x2086),
0126 .driver_data = ATH9K_PCI_CUS198 | ATH9K_PCI_BT_ANT_DIV },
0127 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0128 0x0032,
0129 PCI_VENDOR_ID_AZWAVE,
0130 0x1237),
0131 .driver_data = ATH9K_PCI_CUS198 | ATH9K_PCI_BT_ANT_DIV },
0132 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0133 0x0032,
0134 PCI_VENDOR_ID_AZWAVE,
0135 0x2126),
0136 .driver_data = ATH9K_PCI_CUS198 | ATH9K_PCI_BT_ANT_DIV },
0137 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0138 0x0032,
0139 PCI_VENDOR_ID_AZWAVE,
0140 0x126A),
0141 .driver_data = ATH9K_PCI_CUS198 | ATH9K_PCI_BT_ANT_DIV },
0142
0143
0144 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0145 0x0032,
0146 PCI_VENDOR_ID_AZWAVE,
0147 0x2152),
0148 .driver_data = ATH9K_PCI_CUS230 | ATH9K_PCI_BT_ANT_DIV },
0149 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0150 0x0032,
0151 PCI_VENDOR_ID_FOXCONN,
0152 0xE075),
0153 .driver_data = ATH9K_PCI_CUS230 | ATH9K_PCI_BT_ANT_DIV },
0154
0155
0156 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0157 0x0032,
0158 PCI_VENDOR_ID_ATHEROS,
0159 0x3119),
0160 .driver_data = ATH9K_PCI_BT_ANT_DIV },
0161 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0162 0x0032,
0163 PCI_VENDOR_ID_ATHEROS,
0164 0x3122),
0165 .driver_data = ATH9K_PCI_BT_ANT_DIV },
0166 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0167 0x0032,
0168 0x185F,
0169 0x3119),
0170 .driver_data = ATH9K_PCI_BT_ANT_DIV },
0171 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0172 0x0032,
0173 0x185F,
0174 0x3027),
0175 .driver_data = ATH9K_PCI_BT_ANT_DIV },
0176 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0177 0x0032,
0178 PCI_VENDOR_ID_SAMSUNG,
0179 0x4105),
0180 .driver_data = ATH9K_PCI_BT_ANT_DIV },
0181 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0182 0x0032,
0183 PCI_VENDOR_ID_SAMSUNG,
0184 0x4106),
0185 .driver_data = ATH9K_PCI_BT_ANT_DIV },
0186 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0187 0x0032,
0188 PCI_VENDOR_ID_SAMSUNG,
0189 0x410D),
0190 .driver_data = ATH9K_PCI_BT_ANT_DIV },
0191 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0192 0x0032,
0193 PCI_VENDOR_ID_SAMSUNG,
0194 0x410E),
0195 .driver_data = ATH9K_PCI_BT_ANT_DIV },
0196 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0197 0x0032,
0198 PCI_VENDOR_ID_SAMSUNG,
0199 0x410F),
0200 .driver_data = ATH9K_PCI_BT_ANT_DIV },
0201 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0202 0x0032,
0203 PCI_VENDOR_ID_SAMSUNG,
0204 0xC706),
0205 .driver_data = ATH9K_PCI_BT_ANT_DIV },
0206 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0207 0x0032,
0208 PCI_VENDOR_ID_SAMSUNG,
0209 0xC680),
0210 .driver_data = ATH9K_PCI_BT_ANT_DIV },
0211 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0212 0x0032,
0213 PCI_VENDOR_ID_SAMSUNG,
0214 0xC708),
0215 .driver_data = ATH9K_PCI_BT_ANT_DIV },
0216 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0217 0x0032,
0218 PCI_VENDOR_ID_LENOVO,
0219 0x3218),
0220 .driver_data = ATH9K_PCI_BT_ANT_DIV },
0221 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0222 0x0032,
0223 PCI_VENDOR_ID_LENOVO,
0224 0x3219),
0225 .driver_data = ATH9K_PCI_BT_ANT_DIV },
0226
0227
0228 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0229 0x0032,
0230 PCI_VENDOR_ID_AZWAVE,
0231 0x2C97),
0232 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0233 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0234 0x0032,
0235 PCI_VENDOR_ID_AZWAVE,
0236 0x2100),
0237 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0238 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0239 0x0032,
0240 0x1C56,
0241 0x4001),
0242 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0243 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0244 0x0032,
0245 0x11AD,
0246 0x6627),
0247 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0248 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0249 0x0032,
0250 0x11AD,
0251 0x6628),
0252 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0253 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0254 0x0032,
0255 PCI_VENDOR_ID_FOXCONN,
0256 0xE04E),
0257 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0258 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0259 0x0032,
0260 PCI_VENDOR_ID_FOXCONN,
0261 0xE04F),
0262 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0263 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0264 0x0032,
0265 0x144F,
0266 0x7197),
0267 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0268 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0269 0x0032,
0270 0x1B9A,
0271 0x2000),
0272 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0273 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0274 0x0032,
0275 0x1B9A,
0276 0x2001),
0277 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0278 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0279 0x0032,
0280 PCI_VENDOR_ID_AZWAVE,
0281 0x1186),
0282 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0283 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0284 0x0032,
0285 PCI_VENDOR_ID_AZWAVE,
0286 0x1F86),
0287 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0288 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0289 0x0032,
0290 PCI_VENDOR_ID_AZWAVE,
0291 0x1195),
0292 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0293 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0294 0x0032,
0295 PCI_VENDOR_ID_AZWAVE,
0296 0x1F95),
0297 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0298 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0299 0x0032,
0300 0x1B9A,
0301 0x1C00),
0302 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0303 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0304 0x0032,
0305 0x1B9A,
0306 0x1C01),
0307 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0308 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0309 0x0032,
0310 PCI_VENDOR_ID_ASUSTEK,
0311 0x850D),
0312 .driver_data = ATH9K_PCI_NO_PLL_PWRSAVE },
0313 #endif
0314
0315 { PCI_VDEVICE(ATHEROS, 0x0032) },
0316 { PCI_VDEVICE(ATHEROS, 0x0033) },
0317
0318 #ifdef CONFIG_ATH9K_PCOEM
0319
0320 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0321 0x0034,
0322 PCI_VENDOR_ID_AZWAVE,
0323 0x2116),
0324 .driver_data = ATH9K_PCI_CUS217 },
0325 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0326 0x0034,
0327 0x11AD,
0328 0x6661),
0329 .driver_data = ATH9K_PCI_CUS217 },
0330
0331
0332 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0333 0x0034,
0334 PCI_VENDOR_ID_ATHEROS,
0335 0x3117),
0336 .driver_data = ATH9K_PCI_WOW },
0337 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0338 0x0034,
0339 PCI_VENDOR_ID_LENOVO,
0340 0x3214),
0341 .driver_data = ATH9K_PCI_WOW },
0342 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0343 0x0034,
0344 PCI_VENDOR_ID_ATTANSIC,
0345 0x0091),
0346 .driver_data = ATH9K_PCI_WOW },
0347 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0348 0x0034,
0349 PCI_VENDOR_ID_AZWAVE,
0350 0x2110),
0351 .driver_data = ATH9K_PCI_WOW },
0352 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0353 0x0034,
0354 PCI_VENDOR_ID_ASUSTEK,
0355 0x850E),
0356 .driver_data = ATH9K_PCI_WOW },
0357 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0358 0x0034,
0359 0x11AD,
0360 0x6631),
0361 .driver_data = ATH9K_PCI_WOW },
0362 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0363 0x0034,
0364 0x11AD,
0365 0x6641),
0366 .driver_data = ATH9K_PCI_WOW },
0367 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0368 0x0034,
0369 PCI_VENDOR_ID_HP,
0370 0x1864),
0371 .driver_data = ATH9K_PCI_WOW },
0372 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0373 0x0034,
0374 0x14CD,
0375 0x0063),
0376 .driver_data = ATH9K_PCI_WOW },
0377 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0378 0x0034,
0379 0x14CD,
0380 0x0064),
0381 .driver_data = ATH9K_PCI_WOW },
0382 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0383 0x0034,
0384 0x10CF,
0385 0x1783),
0386 .driver_data = ATH9K_PCI_WOW },
0387 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0388 0x0034,
0389 PCI_VENDOR_ID_DELL,
0390 0x020B),
0391 .driver_data = ATH9K_PCI_WOW },
0392 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0393 0x0034,
0394 PCI_VENDOR_ID_DELL,
0395 0x0300),
0396 .driver_data = ATH9K_PCI_WOW },
0397
0398
0399 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0400 0x0030,
0401 0x1A56,
0402 0x2003),
0403 .driver_data = ATH9K_PCI_KILLER },
0404
0405 { PCI_VDEVICE(ATHEROS, 0x0034) },
0406 { PCI_VDEVICE(ATHEROS, 0x0037) },
0407
0408
0409 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0410 0x0036,
0411 PCI_VENDOR_ID_ATHEROS,
0412 0x3028),
0413 .driver_data = ATH9K_PCI_CUS252 |
0414 ATH9K_PCI_AR9565_2ANT |
0415 ATH9K_PCI_BT_ANT_DIV },
0416 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0417 0x0036,
0418 PCI_VENDOR_ID_AZWAVE,
0419 0x2176),
0420 .driver_data = ATH9K_PCI_CUS252 |
0421 ATH9K_PCI_AR9565_2ANT |
0422 ATH9K_PCI_BT_ANT_DIV },
0423
0424
0425 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0426 0x0036,
0427 PCI_VENDOR_ID_FOXCONN,
0428 0xE068),
0429 .driver_data = ATH9K_PCI_AR9565_1ANT },
0430 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0431 0x0036,
0432 0x185F,
0433 0xA119),
0434 .driver_data = ATH9K_PCI_AR9565_1ANT },
0435 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0436 0x0036,
0437 0x11AD,
0438 0x0632),
0439 .driver_data = ATH9K_PCI_AR9565_1ANT },
0440 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0441 0x0036,
0442 0x11AD,
0443 0x06B2),
0444 .driver_data = ATH9K_PCI_AR9565_1ANT },
0445 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0446 0x0036,
0447 0x11AD,
0448 0x0842),
0449 .driver_data = ATH9K_PCI_AR9565_1ANT },
0450 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0451 0x0036,
0452 0x11AD,
0453 0x1842),
0454 .driver_data = ATH9K_PCI_AR9565_1ANT },
0455 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0456 0x0036,
0457 0x11AD,
0458 0x6671),
0459 .driver_data = ATH9K_PCI_AR9565_1ANT },
0460 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0461 0x0036,
0462 0x1B9A,
0463 0x2811),
0464 .driver_data = ATH9K_PCI_AR9565_1ANT },
0465 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0466 0x0036,
0467 0x1B9A,
0468 0x2812),
0469 .driver_data = ATH9K_PCI_AR9565_1ANT },
0470 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0471 0x0036,
0472 0x1B9A,
0473 0x28A1),
0474 .driver_data = ATH9K_PCI_AR9565_1ANT },
0475 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0476 0x0036,
0477 0x1B9A,
0478 0x28A3),
0479 .driver_data = ATH9K_PCI_AR9565_1ANT },
0480 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0481 0x0036,
0482 PCI_VENDOR_ID_AZWAVE,
0483 0x218A),
0484 .driver_data = ATH9K_PCI_AR9565_1ANT },
0485 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0486 0x0036,
0487 PCI_VENDOR_ID_AZWAVE,
0488 0x2F8A),
0489 .driver_data = ATH9K_PCI_AR9565_1ANT },
0490
0491
0492 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0493 0x0036,
0494 PCI_VENDOR_ID_ATHEROS,
0495 0x3025),
0496 .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
0497 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0498 0x0036,
0499 PCI_VENDOR_ID_ATHEROS,
0500 0x3026),
0501 .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
0502 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0503 0x0036,
0504 PCI_VENDOR_ID_ATHEROS,
0505 0x302B),
0506 .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
0507 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0508 0x0036,
0509 PCI_VENDOR_ID_FOXCONN,
0510 0xE069),
0511 .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
0512 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0513 0x0036,
0514 0x185F,
0515 0x3028),
0516 .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
0517 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0518 0x0036,
0519 0x11AD,
0520 0x0622),
0521 .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
0522 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0523 0x0036,
0524 0x11AD,
0525 0x0672),
0526 .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
0527 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0528 0x0036,
0529 0x11AD,
0530 0x0662),
0531 .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
0532 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0533 0x0036,
0534 0x11AD,
0535 0x06A2),
0536 .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
0537 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0538 0x0036,
0539 0x11AD,
0540 0x0682),
0541 .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
0542 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0543 0x0036,
0544 PCI_VENDOR_ID_AZWAVE,
0545 0x213A),
0546 .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
0547 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0548 0x0036,
0549 PCI_VENDOR_ID_AZWAVE,
0550 0x213C),
0551 .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
0552 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0553 0x0036,
0554 PCI_VENDOR_ID_HP,
0555 0x18E3),
0556 .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
0557 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0558 0x0036,
0559 PCI_VENDOR_ID_HP,
0560 0x217F),
0561 .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
0562 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0563 0x0036,
0564 PCI_VENDOR_ID_HP,
0565 0x2005),
0566 .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
0567 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0568 0x0036,
0569 PCI_VENDOR_ID_DELL,
0570 0x020C),
0571 .driver_data = ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_BT_ANT_DIV },
0572
0573
0574 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0575 0x0036,
0576 PCI_VENDOR_ID_SAMSUNG,
0577 0x411A),
0578 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0579 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0580 0x0036,
0581 PCI_VENDOR_ID_SAMSUNG,
0582 0x411B),
0583 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0584 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0585 0x0036,
0586 PCI_VENDOR_ID_SAMSUNG,
0587 0x411C),
0588 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0589 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0590 0x0036,
0591 PCI_VENDOR_ID_SAMSUNG,
0592 0x411D),
0593 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0594 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0595 0x0036,
0596 PCI_VENDOR_ID_SAMSUNG,
0597 0x411E),
0598 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0599 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0600 0x0036,
0601 PCI_VENDOR_ID_SAMSUNG,
0602 0x4129),
0603 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0604 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0605 0x0036,
0606 PCI_VENDOR_ID_SAMSUNG,
0607 0x412A),
0608 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0609 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0610 0x0036,
0611 PCI_VENDOR_ID_ATHEROS,
0612 0x3027),
0613 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0614 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0615 0x0036,
0616 PCI_VENDOR_ID_ATHEROS,
0617 0x302C),
0618 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0619 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0620 0x0036,
0621 0x11AD,
0622 0x0642),
0623 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0624 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0625 0x0036,
0626 0x11AD,
0627 0x0652),
0628 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0629 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0630 0x0036,
0631 0x11AD,
0632 0x0612),
0633 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0634 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0635 0x0036,
0636 0x11AD,
0637 0x0832),
0638 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0639 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0640 0x0036,
0641 0x11AD,
0642 0x1832),
0643 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0644 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0645 0x0036,
0646 0x11AD,
0647 0x0692),
0648 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0649 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0650 0x0036,
0651 0x11AD,
0652 0x0803),
0653 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0654 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0655 0x0036,
0656 0x11AD,
0657 0x0813),
0658 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0659 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0660 0x0036,
0661 PCI_VENDOR_ID_AZWAVE,
0662 0x2130),
0663 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0664 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0665 0x0036,
0666 PCI_VENDOR_ID_AZWAVE,
0667 0x213B),
0668 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0669 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0670 0x0036,
0671 PCI_VENDOR_ID_AZWAVE,
0672 0x2182),
0673 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0674 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0675 0x0036,
0676 PCI_VENDOR_ID_AZWAVE,
0677 0x218B),
0678 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0679 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0680 0x0036,
0681 PCI_VENDOR_ID_AZWAVE,
0682 0x218C),
0683 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0684 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0685 0x0036,
0686 PCI_VENDOR_ID_AZWAVE,
0687 0x2F82),
0688 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0689 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0690 0x0036,
0691 0x144F,
0692 0x7202),
0693 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0694 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0695 0x0036,
0696 0x1B9A,
0697 0x2810),
0698 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0699 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0700 0x0036,
0701 0x1B9A,
0702 0x2813),
0703 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0704 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0705 0x0036,
0706 0x1B9A,
0707 0x28A2),
0708 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0709 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0710 0x0036,
0711 0x1B9A,
0712 0x28A4),
0713 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0714 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0715 0x0036,
0716 0x185F,
0717 0x3027),
0718 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0719 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0720 0x0036,
0721 0x185F,
0722 0xA120),
0723 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0724 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0725 0x0036,
0726 PCI_VENDOR_ID_FOXCONN,
0727 0xE07F),
0728 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0729 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0730 0x0036,
0731 PCI_VENDOR_ID_FOXCONN,
0732 0xE08F),
0733 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0734 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0735 0x0036,
0736 PCI_VENDOR_ID_FOXCONN,
0737 0xE081),
0738 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0739 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0740 0x0036,
0741 PCI_VENDOR_ID_FOXCONN,
0742 0xE091),
0743 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0744 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0745 0x0036,
0746 PCI_VENDOR_ID_FOXCONN,
0747 0xE099),
0748 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0749 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0750 0x0036,
0751 PCI_VENDOR_ID_LENOVO,
0752 0x3026),
0753 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0754 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0755 0x0036,
0756 PCI_VENDOR_ID_LENOVO,
0757 0x4026),
0758 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0759 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0760 0x0036,
0761 PCI_VENDOR_ID_ASUSTEK,
0762 0x85F2),
0763 .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV },
0764 { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
0765 0x0036,
0766 PCI_VENDOR_ID_DELL,
0767 0x020E),
0768 .driver_data = ATH9K_PCI_AR9565_2ANT |
0769 ATH9K_PCI_BT_ANT_DIV |
0770 ATH9K_PCI_LED_ACT_HI},
0771
0772
0773 { PCI_VDEVICE(ATHEROS, 0x0036),
0774 .driver_data = ATH9K_PCI_BT_ANT_DIV },
0775 #endif
0776
0777 { 0 }
0778 };
0779
0780
0781
0782 static void ath_pci_read_cachesize(struct ath_common *common, int *csz)
0783 {
0784 struct ath_softc *sc = (struct ath_softc *) common->priv;
0785 u8 u8tmp;
0786
0787 pci_read_config_byte(to_pci_dev(sc->dev), PCI_CACHE_LINE_SIZE, &u8tmp);
0788 *csz = (int)u8tmp;
0789
0790
0791
0792
0793
0794
0795
0796 if (*csz == 0)
0797 *csz = DEFAULT_CACHELINE >> 2;
0798 }
0799
0800 static bool ath_pci_eeprom_read(struct ath_common *common, u32 off, u16 *data)
0801 {
0802 struct ath_hw *ah = (struct ath_hw *) common->ah;
0803
0804 common->ops->read(ah, AR5416_EEPROM_OFFSET + (off << AR5416_EEPROM_S));
0805
0806 if (!ath9k_hw_wait(ah,
0807 AR_EEPROM_STATUS_DATA,
0808 AR_EEPROM_STATUS_DATA_BUSY |
0809 AR_EEPROM_STATUS_DATA_PROT_ACCESS, 0,
0810 AH_WAIT_TIMEOUT)) {
0811 return false;
0812 }
0813
0814 *data = MS(common->ops->read(ah, AR_EEPROM_STATUS_DATA),
0815 AR_EEPROM_STATUS_DATA_VAL);
0816
0817 return true;
0818 }
0819
0820
0821 static void ath_pci_aspm_init(struct ath_common *common)
0822 {
0823 struct ath_softc *sc = (struct ath_softc *) common->priv;
0824 struct ath_hw *ah = sc->sc_ah;
0825 struct pci_dev *pdev = to_pci_dev(sc->dev);
0826 struct pci_dev *parent;
0827 u16 aspm;
0828 int ret;
0829
0830 if (!ah->is_pciexpress)
0831 return;
0832
0833 parent = pdev->bus->self;
0834 if (!parent)
0835 return;
0836
0837 if ((ath9k_hw_get_btcoex_scheme(ah) != ATH_BTCOEX_CFG_NONE) &&
0838 (AR_SREV_9285(ah))) {
0839
0840 pcie_capability_clear_word(pdev, PCI_EXP_LNKCTL,
0841 PCI_EXP_LNKCTL_ASPM_L0S | PCI_EXP_LNKCTL_ASPM_L1);
0842
0843
0844
0845
0846
0847 pcie_capability_clear_word(parent, PCI_EXP_LNKCTL,
0848 PCI_EXP_LNKCTL_ASPM_L0S | PCI_EXP_LNKCTL_ASPM_L1);
0849
0850 ath_info(common, "Disabling ASPM since BTCOEX is enabled\n");
0851 return;
0852 }
0853
0854
0855
0856
0857
0858
0859
0860
0861
0862
0863
0864
0865
0866
0867 if (AR_SREV_9462(ah))
0868 pci_read_config_dword(pdev, 0x70c, &ah->config.aspm_l1_fix);
0869
0870 ret = pcie_capability_read_word(parent, PCI_EXP_LNKCTL, &aspm);
0871 if (!ret && (aspm & (PCI_EXP_LNKCTL_ASPM_L0S | PCI_EXP_LNKCTL_ASPM_L1))) {
0872 ah->aspm_enabled = true;
0873
0874 ath9k_hw_configpcipowersave(ah, false);
0875 ath_info(common, "ASPM enabled: 0x%x\n", aspm);
0876 }
0877 }
0878
0879 static const struct ath_bus_ops ath_pci_bus_ops = {
0880 .ath_bus_type = ATH_PCI,
0881 .read_cachesize = ath_pci_read_cachesize,
0882 .eeprom_read = ath_pci_eeprom_read,
0883 .aspm_init = ath_pci_aspm_init,
0884 };
0885
0886 static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
0887 {
0888 struct ath_softc *sc;
0889 struct ieee80211_hw *hw;
0890 u8 csz;
0891 u32 val;
0892 int ret = 0;
0893 char hw_name[64];
0894 int msi_enabled = 0;
0895
0896 if (pcim_enable_device(pdev))
0897 return -EIO;
0898
0899 ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
0900 if (ret) {
0901 pr_err("32-bit DMA not available\n");
0902 return ret;
0903 }
0904
0905
0906
0907
0908
0909 pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE, &csz);
0910 if (csz == 0) {
0911
0912
0913
0914
0915
0916
0917
0918 csz = L1_CACHE_BYTES / sizeof(u32);
0919 pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, csz);
0920 }
0921
0922
0923
0924
0925
0926 pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0xa8);
0927
0928 pci_set_master(pdev);
0929
0930
0931
0932
0933
0934 pci_read_config_dword(pdev, 0x40, &val);
0935 if ((val & 0x0000ff00) != 0)
0936 pci_write_config_dword(pdev, 0x40, val & 0xffff00ff);
0937
0938 ret = pcim_iomap_regions(pdev, BIT(0), "ath9k");
0939 if (ret) {
0940 dev_err(&pdev->dev, "PCI memory region reserve error\n");
0941 return -ENODEV;
0942 }
0943
0944 ath9k_fill_chanctx_ops();
0945 hw = ieee80211_alloc_hw(sizeof(struct ath_softc), &ath9k_ops);
0946 if (!hw) {
0947 dev_err(&pdev->dev, "No memory for ieee80211_hw\n");
0948 return -ENOMEM;
0949 }
0950
0951 SET_IEEE80211_DEV(hw, &pdev->dev);
0952 pci_set_drvdata(pdev, hw);
0953
0954 sc = hw->priv;
0955 sc->hw = hw;
0956 sc->dev = &pdev->dev;
0957 sc->mem = pcim_iomap_table(pdev)[0];
0958 sc->driver_data = id->driver_data;
0959
0960 if (ath9k_use_msi) {
0961 if (pci_enable_msi(pdev) == 0) {
0962 msi_enabled = 1;
0963 dev_err(&pdev->dev, "Using MSI\n");
0964 } else {
0965 dev_err(&pdev->dev, "Using INTx\n");
0966 }
0967 }
0968
0969 if (!msi_enabled)
0970 ret = request_irq(pdev->irq, ath_isr, IRQF_SHARED, "ath9k", sc);
0971 else
0972 ret = request_irq(pdev->irq, ath_isr, 0, "ath9k", sc);
0973
0974 if (ret) {
0975 dev_err(&pdev->dev, "request_irq failed\n");
0976 goto err_irq;
0977 }
0978
0979 sc->irq = pdev->irq;
0980
0981 ret = ath9k_init_device(id->device, sc, &ath_pci_bus_ops);
0982 if (ret) {
0983 dev_err(&pdev->dev, "Failed to initialize device\n");
0984 goto err_init;
0985 }
0986
0987 sc->sc_ah->msi_enabled = msi_enabled;
0988 sc->sc_ah->msi_reg = 0;
0989
0990 ath9k_hw_name(sc->sc_ah, hw_name, sizeof(hw_name));
0991 wiphy_info(hw->wiphy, "%s mem=0x%lx, irq=%d\n",
0992 hw_name, (unsigned long)sc->mem, pdev->irq);
0993
0994 return 0;
0995
0996 err_init:
0997 free_irq(sc->irq, sc);
0998 err_irq:
0999 ieee80211_free_hw(hw);
1000 return ret;
1001 }
1002
1003 static void ath_pci_remove(struct pci_dev *pdev)
1004 {
1005 struct ieee80211_hw *hw = pci_get_drvdata(pdev);
1006 struct ath_softc *sc = hw->priv;
1007
1008 if (!is_ath9k_unloaded)
1009 sc->sc_ah->ah_flags |= AH_UNPLUGGED;
1010 ath9k_deinit_device(sc);
1011 free_irq(sc->irq, sc);
1012 ieee80211_free_hw(sc->hw);
1013 }
1014
1015 #ifdef CONFIG_PM_SLEEP
1016
1017 static int ath_pci_suspend(struct device *device)
1018 {
1019 struct ieee80211_hw *hw = dev_get_drvdata(device);
1020 struct ath_softc *sc = hw->priv;
1021 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1022
1023 if (test_bit(ATH_OP_WOW_ENABLED, &common->op_flags)) {
1024 dev_info(device, "WOW is enabled, bypassing PCI suspend\n");
1025 return 0;
1026 }
1027
1028
1029
1030
1031
1032 ath9k_stop_btcoex(sc);
1033 ath9k_hw_disable(sc->sc_ah);
1034 del_timer_sync(&sc->sleep_timer);
1035 ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_FULL_SLEEP);
1036
1037 return 0;
1038 }
1039
1040 static int ath_pci_resume(struct device *device)
1041 {
1042 struct pci_dev *pdev = to_pci_dev(device);
1043 struct ieee80211_hw *hw = pci_get_drvdata(pdev);
1044 struct ath_softc *sc = hw->priv;
1045 struct ath_hw *ah = sc->sc_ah;
1046 struct ath_common *common = ath9k_hw_common(ah);
1047 u32 val;
1048
1049
1050
1051
1052
1053
1054 pci_read_config_dword(pdev, 0x40, &val);
1055 if ((val & 0x0000ff00) != 0)
1056 pci_write_config_dword(pdev, 0x40, val & 0xffff00ff);
1057
1058 ath_pci_aspm_init(common);
1059 ah->reset_power_on = false;
1060
1061 return 0;
1062 }
1063
1064 static SIMPLE_DEV_PM_OPS(ath9k_pm_ops, ath_pci_suspend, ath_pci_resume);
1065
1066 #define ATH9K_PM_OPS (&ath9k_pm_ops)
1067
1068 #else
1069
1070 #define ATH9K_PM_OPS NULL
1071
1072 #endif
1073
1074
1075 MODULE_DEVICE_TABLE(pci, ath_pci_id_table);
1076
1077 static struct pci_driver ath_pci_driver = {
1078 .name = "ath9k",
1079 .id_table = ath_pci_id_table,
1080 .probe = ath_pci_probe,
1081 .remove = ath_pci_remove,
1082 .driver.pm = ATH9K_PM_OPS,
1083 };
1084
1085 int ath_pci_init(void)
1086 {
1087 return pci_register_driver(&ath_pci_driver);
1088 }
1089
1090 void ath_pci_exit(void)
1091 {
1092 pci_unregister_driver(&ath_pci_driver);
1093 }