Commit 0b5ead91 authored by Sujith Manoharan's avatar Sujith Manoharan Committed by John W. Linville

ath9k_htc: Cleanup device identification

ath.ko is a common module shared between ath5k, ar9170usb, ath9k and ath9k_htc.
Adding driver specific data to the shared structure would impact all the
drivers. Handling USB device recognition for devices specific to ath9k_htc
can be handled within the driver itself.

Also, AR7010 refers to the processor used in both AR9280/AR9287 based
devices. Rename the device enumerations accordingly.

While at it, check properly for the bus type when choosing the EEPROM
base address for UB95.
Signed-off-by: default avatarSujith Manoharan <Sujith.Manoharan@atheros.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent c658e5db
...@@ -104,11 +104,6 @@ enum ath_cipher { ...@@ -104,11 +104,6 @@ enum ath_cipher {
ATH_CIPHER_MIC = 127 ATH_CIPHER_MIC = 127
}; };
enum ath_drv_info {
AR7010_DEVICE = BIT(0),
AR9287_DEVICE = BIT(1),
};
/** /**
* struct ath_ops - Register read/write operations * struct ath_ops - Register read/write operations
* *
...@@ -153,7 +148,6 @@ struct ath_common { ...@@ -153,7 +148,6 @@ struct ath_common {
u8 rx_chainmask; u8 rx_chainmask;
u32 rx_bufsize; u32 rx_bufsize;
u32 driver_info;
u32 keymax; u32 keymax;
DECLARE_BITMAP(keymap, ATH_KEYMAX); DECLARE_BITMAP(keymap, ATH_KEYMAX);
......
...@@ -37,10 +37,10 @@ static bool ath9k_hw_ar9287_fill_eeprom(struct ath_hw *ah) ...@@ -37,10 +37,10 @@ static bool ath9k_hw_ar9287_fill_eeprom(struct ath_hw *ah)
int addr, eep_start_loc; int addr, eep_start_loc;
eep_data = (u16 *)eep; eep_data = (u16 *)eep;
if (!common->driver_info) if (common->bus_ops->ath_bus_type == ATH_USB)
eep_start_loc = AR9287_EEP_START_LOC;
else
eep_start_loc = AR9287_HTC_EEP_START_LOC; eep_start_loc = AR9287_HTC_EEP_START_LOC;
else
eep_start_loc = AR9287_EEP_START_LOC;
if (!ath9k_hw_use_flash(ah)) { if (!ath9k_hw_use_flash(ah)) {
ath_dbg(common, ATH_DBG_EEPROM, ath_dbg(common, ATH_DBG_EEPROM,
......
...@@ -28,16 +28,7 @@ MODULE_FIRMWARE(FIRMWARE_AR9271); ...@@ -28,16 +28,7 @@ MODULE_FIRMWARE(FIRMWARE_AR9271);
static struct usb_device_id ath9k_hif_usb_ids[] = { static struct usb_device_id ath9k_hif_usb_ids[] = {
{ USB_DEVICE(0x0cf3, 0x9271) }, /* Atheros */ { USB_DEVICE(0x0cf3, 0x9271) }, /* Atheros */
{ USB_DEVICE(0x0cf3, 0x1006) }, /* Atheros */ { USB_DEVICE(0x0cf3, 0x1006) }, /* Atheros */
{ USB_DEVICE(0x0cf3, 0x7010),
.driver_info = AR7010_DEVICE },
/* Atheros */
{ USB_DEVICE(0x0cf3, 0x7015),
.driver_info = AR7010_DEVICE | AR9287_DEVICE },
/* Atheros */
{ USB_DEVICE(0x0846, 0x9030) }, /* Netgear N150 */ { USB_DEVICE(0x0846, 0x9030) }, /* Netgear N150 */
{ USB_DEVICE(0x0846, 0x9018),
.driver_info = AR7010_DEVICE },
/* Netgear WNDA3200 */
{ USB_DEVICE(0x07D1, 0x3A10) }, /* Dlink Wireless 150 */ { USB_DEVICE(0x07D1, 0x3A10) }, /* Dlink Wireless 150 */
{ USB_DEVICE(0x13D3, 0x3327) }, /* Azurewave */ { USB_DEVICE(0x13D3, 0x3327) }, /* Azurewave */
{ USB_DEVICE(0x13D3, 0x3328) }, /* Azurewave */ { USB_DEVICE(0x13D3, 0x3328) }, /* Azurewave */
...@@ -46,13 +37,20 @@ static struct usb_device_id ath9k_hif_usb_ids[] = { ...@@ -46,13 +37,20 @@ static struct usb_device_id ath9k_hif_usb_ids[] = {
{ USB_DEVICE(0x13D3, 0x3349) }, /* Azurewave */ { USB_DEVICE(0x13D3, 0x3349) }, /* Azurewave */
{ USB_DEVICE(0x13D3, 0x3350) }, /* Azurewave */ { USB_DEVICE(0x13D3, 0x3350) }, /* Azurewave */
{ USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */ { USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */
{ USB_DEVICE(0x083A, 0xA704),
.driver_info = AR7010_DEVICE },
/* SMC Networks */
{ USB_DEVICE(0x040D, 0x3801) }, /* VIA */ { USB_DEVICE(0x040D, 0x3801) }, /* VIA */
{ USB_DEVICE(0x0cf3, 0x7015),
.driver_info = AR9287_USB }, /* Atheros */
{ USB_DEVICE(0x1668, 0x1200), { USB_DEVICE(0x1668, 0x1200),
.driver_info = AR7010_DEVICE | AR9287_DEVICE }, .driver_info = AR9287_USB }, /* Verizon */
/* Verizon */
{ USB_DEVICE(0x0cf3, 0x7010),
.driver_info = AR9280_USB }, /* Atheros */
{ USB_DEVICE(0x0846, 0x9018),
.driver_info = AR9280_USB }, /* Netgear WNDA3200 */
{ USB_DEVICE(0x083A, 0xA704),
.driver_info = AR9280_USB }, /* SMC Networks */
{ }, { },
}; };
...@@ -818,7 +816,7 @@ static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev, ...@@ -818,7 +816,7 @@ static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev,
} }
kfree(buf); kfree(buf);
if (drv_info & AR7010_DEVICE) if (IS_AR7010_DEVICE(drv_info))
firm_offset = AR7010_FIRMWARE_TEXT; firm_offset = AR7010_FIRMWARE_TEXT;
else else
firm_offset = AR9271_FIRMWARE_TEXT; firm_offset = AR9271_FIRMWARE_TEXT;
...@@ -934,7 +932,7 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface, ...@@ -934,7 +932,7 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface,
/* Find out which firmware to load */ /* Find out which firmware to load */
if (id->driver_info & AR7010_DEVICE) if (IS_AR7010_DEVICE(id->driver_info))
if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x0202) if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x0202)
hif_dev->fw_name = FIRMWARE_AR7010_1_1; hif_dev->fw_name = FIRMWARE_AR7010_1_1;
else else
...@@ -1034,7 +1032,7 @@ static int ath9k_hif_usb_resume(struct usb_interface *interface) ...@@ -1034,7 +1032,7 @@ static int ath9k_hif_usb_resume(struct usb_interface *interface)
if (hif_dev->firmware) { if (hif_dev->firmware) {
ret = ath9k_hif_usb_download_fw(hif_dev, ret = ath9k_hif_usb_download_fw(hif_dev,
htc_handle->drv_priv->ah->common.driver_info); htc_handle->drv_priv->ah->hw_version.usbdev);
if (ret) if (ret)
goto fail_resume; goto fail_resume;
} else { } else {
......
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
#ifndef HTC_USB_H #ifndef HTC_USB_H
#define HTC_USB_H #define HTC_USB_H
#define IS_AR7010_DEVICE(_v) (((_v) == AR9280_USB) || ((_v) == AR9287_USB))
#define AR9271_FIRMWARE 0x501000 #define AR9271_FIRMWARE 0x501000
#define AR9271_FIRMWARE_TEXT 0x903000 #define AR9271_FIRMWARE_TEXT 0x903000
#define AR7010_FIRMWARE_TEXT 0x906000 #define AR7010_FIRMWARE_TEXT 0x906000
......
...@@ -246,7 +246,7 @@ static int ath9k_init_htc_services(struct ath9k_htc_priv *priv, u16 devid, ...@@ -246,7 +246,7 @@ static int ath9k_init_htc_services(struct ath9k_htc_priv *priv, u16 devid,
* the HIF layer, shouldn't matter much. * the HIF layer, shouldn't matter much.
*/ */
if (drv_info & AR7010_DEVICE) if (IS_AR7010_DEVICE(drv_info))
priv->htc->credits = 45; priv->htc->credits = 45;
else else
priv->htc->credits = 33; priv->htc->credits = 33;
...@@ -630,6 +630,7 @@ static int ath9k_init_priv(struct ath9k_htc_priv *priv, ...@@ -630,6 +630,7 @@ static int ath9k_init_priv(struct ath9k_htc_priv *priv,
ah->hw_version.devid = devid; ah->hw_version.devid = devid;
ah->hw_version.subsysid = 0; /* FIXME */ ah->hw_version.subsysid = 0; /* FIXME */
ah->hw_version.usbdev = drv_info;
ah->ah_flags |= AH_USE_EEPROM; ah->ah_flags |= AH_USE_EEPROM;
priv->ah = ah; priv->ah = ah;
...@@ -640,7 +641,6 @@ static int ath9k_init_priv(struct ath9k_htc_priv *priv, ...@@ -640,7 +641,6 @@ static int ath9k_init_priv(struct ath9k_htc_priv *priv,
common->hw = priv->hw; common->hw = priv->hw;
common->priv = priv; common->priv = priv;
common->debug_mask = ath9k_debug; common->debug_mask = ath9k_debug;
common->driver_info = drv_info;
spin_lock_init(&priv->wmi->wmi_lock); spin_lock_init(&priv->wmi->wmi_lock);
spin_lock_init(&priv->beacon_lock); spin_lock_init(&priv->beacon_lock);
...@@ -891,7 +891,7 @@ int ath9k_htc_resume(struct htc_target *htc_handle) ...@@ -891,7 +891,7 @@ int ath9k_htc_resume(struct htc_target *htc_handle)
return ret; return ret;
ret = ath9k_init_htc_services(priv, priv->ah->hw_version.devid, ret = ath9k_init_htc_services(priv, priv->ah->hw_version.devid,
priv->ah->common.driver_info); priv->ah->hw_version.usbdev);
return ret; return ret;
} }
#endif #endif
......
...@@ -446,6 +446,7 @@ struct ath9k_hw_version { ...@@ -446,6 +446,7 @@ struct ath9k_hw_version {
u16 analog5GhzRev; u16 analog5GhzRev;
u16 analog2GhzRev; u16 analog2GhzRev;
u16 subsysid; u16 subsysid;
enum ath_usb_dev usbdev;
}; };
/* Generic TSF timer definitions */ /* Generic TSF timer definitions */
......
...@@ -871,8 +871,14 @@ ...@@ -871,8 +871,14 @@
(AR_SREV_9285_12_OR_LATER(_ah) && \ (AR_SREV_9285_12_OR_LATER(_ah) && \
((REG_READ(_ah, AR_AN_SYNTH9) & 0x7) == 0x1)) ((REG_READ(_ah, AR_AN_SYNTH9) & 0x7) == 0x1))
enum ath_usb_dev {
AR9280_USB = 1, /* AR7010 + AR9280, UB94 */
AR9287_USB = 2, /* AR7010 + AR9287, UB95 */
};
#define AR_DEVID_7010(_ah) \ #define AR_DEVID_7010(_ah) \
((_ah)->common.driver_info & AR7010_DEVICE) (((_ah)->hw_version.usbdev == AR9280_USB) || \
((_ah)->hw_version.usbdev == AR9287_USB))
#define AR_RADIO_SREV_MAJOR 0xf0 #define AR_RADIO_SREV_MAJOR 0xf0
#define AR_RAD5133_SREV_MAJOR 0xc0 #define AR_RAD5133_SREV_MAJOR 0xc0
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment