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

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

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
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -104,11 +104,6 @@ enum ath_cipher {
	ATH_CIPHER_MIC = 127
};

enum ath_drv_info {
	AR7010_DEVICE		= BIT(0),
	AR9287_DEVICE		= BIT(1),
};

/**
 * struct ath_ops - Register read/write operations
 *
@@ -153,7 +148,6 @@ struct ath_common {
	u8 rx_chainmask;

	u32 rx_bufsize;
	u32 driver_info;

	u32 keymax;
	DECLARE_BITMAP(keymap, ATH_KEYMAX);
+3 −3
Original line number Diff line number Diff line
@@ -37,10 +37,10 @@ static bool ath9k_hw_ar9287_fill_eeprom(struct ath_hw *ah)
	int addr, eep_start_loc;
	eep_data = (u16 *)eep;

	if (!common->driver_info)
		eep_start_loc = AR9287_EEP_START_LOC;
	else
	if (common->bus_ops->ath_bus_type == ATH_USB)
		eep_start_loc = AR9287_HTC_EEP_START_LOC;
	else
		eep_start_loc = AR9287_EEP_START_LOC;

	if (!ath9k_hw_use_flash(ah)) {
		ath_dbg(common, ATH_DBG_EEPROM,
+15 −17
Original line number Diff line number Diff line
@@ -28,16 +28,7 @@ MODULE_FIRMWARE(FIRMWARE_AR9271);
static struct usb_device_id ath9k_hif_usb_ids[] = {
	{ USB_DEVICE(0x0cf3, 0x9271) }, /* 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, 0x9018),
		.driver_info = AR7010_DEVICE },
					/* Netgear WNDA3200 */
	{ USB_DEVICE(0x07D1, 0x3A10) }, /* Dlink Wireless 150 */
	{ USB_DEVICE(0x13D3, 0x3327) }, /* Azurewave */
	{ USB_DEVICE(0x13D3, 0x3328) }, /* Azurewave */
@@ -46,13 +37,20 @@ static struct usb_device_id ath9k_hif_usb_ids[] = {
	{ USB_DEVICE(0x13D3, 0x3349) }, /* Azurewave */
	{ USB_DEVICE(0x13D3, 0x3350) }, /* Azurewave */
	{ USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */
	{ USB_DEVICE(0x083A, 0xA704),
		.driver_info = AR7010_DEVICE },
					/* SMC Networks */
	{ USB_DEVICE(0x040D, 0x3801) }, /* VIA */

	{ USB_DEVICE(0x0cf3, 0x7015),
	  .driver_info = AR9287_USB },  /* Atheros */
	{ USB_DEVICE(0x1668, 0x1200),
		.driver_info = AR7010_DEVICE | AR9287_DEVICE },
					/* Verizon */
	  .driver_info = AR9287_USB },  /* 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,
	}
	kfree(buf);

	if (drv_info & AR7010_DEVICE)
	if (IS_AR7010_DEVICE(drv_info))
		firm_offset = AR7010_FIRMWARE_TEXT;
	else
		firm_offset = AR9271_FIRMWARE_TEXT;
@@ -934,7 +932,7 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface,

	/* 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)
			hif_dev->fw_name = FIRMWARE_AR7010_1_1;
		else
@@ -1034,7 +1032,7 @@ static int ath9k_hif_usb_resume(struct usb_interface *interface)

	if (hif_dev->firmware) {
		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)
			goto fail_resume;
	} else {
+2 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
#ifndef 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_TEXT  0x903000
#define AR7010_FIRMWARE_TEXT  0x906000
+3 −3
Original line number Diff line number Diff line
@@ -246,7 +246,7 @@ static int ath9k_init_htc_services(struct ath9k_htc_priv *priv, u16 devid,
	 * the HIF layer, shouldn't matter much.
	 */

	if (drv_info & AR7010_DEVICE)
	if (IS_AR7010_DEVICE(drv_info))
		priv->htc->credits = 45;
	else
		priv->htc->credits = 33;
@@ -630,6 +630,7 @@ static int ath9k_init_priv(struct ath9k_htc_priv *priv,

	ah->hw_version.devid = devid;
	ah->hw_version.subsysid = 0; /* FIXME */
	ah->hw_version.usbdev = drv_info;
	ah->ah_flags |= AH_USE_EEPROM;
	priv->ah = ah;

@@ -640,7 +641,6 @@ static int ath9k_init_priv(struct ath9k_htc_priv *priv,
	common->hw = priv->hw;
	common->priv = priv;
	common->debug_mask = ath9k_debug;
	common->driver_info = drv_info;

	spin_lock_init(&priv->wmi->wmi_lock);
	spin_lock_init(&priv->beacon_lock);
@@ -891,7 +891,7 @@ int ath9k_htc_resume(struct htc_target *htc_handle)
		return ret;

	ret = ath9k_init_htc_services(priv, priv->ah->hw_version.devid,
				      priv->ah->common.driver_info);
				      priv->ah->hw_version.usbdev);
	return ret;
}
#endif
Loading