rtl8187: Fix wrong rfkill switch mask for some models
There are different bits used to convey the setting of the rfkill switch to the driver. The current driver only supports one of these possibilities. These changes were derived from the latest version of the vendor driver. This patch fixes the regression noted in kernel Bugzilla #14743. Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Reported-and-tested-by: Antti Kaijanmäki <antti@kaijanmaki.net> Tested-by: Hin-Tak Leung <hintak.leung@gmail.com> Cc: Stable <stable@kernel.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

parent
815833e7ec
commit
70d57139f9
@@ -1322,6 +1322,7 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
|
||||
struct ieee80211_channel *channel;
|
||||
const char *chip_name;
|
||||
u16 txpwr, reg;
|
||||
u16 product_id = le16_to_cpu(udev->descriptor.idProduct);
|
||||
int err, i;
|
||||
|
||||
dev = ieee80211_alloc_hw(sizeof(*priv), &rtl8187_ops);
|
||||
@@ -1481,6 +1482,13 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
|
||||
(*channel++).hw_value = txpwr & 0xFF;
|
||||
(*channel++).hw_value = txpwr >> 8;
|
||||
}
|
||||
/* Handle the differing rfkill GPIO bit in different models */
|
||||
priv->rfkill_mask = RFKILL_MASK_8187_89_97;
|
||||
if (product_id == 0x8197 || product_id == 0x8198) {
|
||||
eeprom_93cx6_read(&eeprom, RTL8187_EEPROM_SELECT_GPIO, ®);
|
||||
if (reg & 0xFF00)
|
||||
priv->rfkill_mask = RFKILL_MASK_8198;
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX: Once this driver supports anything that requires
|
||||
@@ -1509,9 +1517,9 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
|
||||
mutex_init(&priv->conf_mutex);
|
||||
skb_queue_head_init(&priv->b_tx_status.queue);
|
||||
|
||||
printk(KERN_INFO "%s: hwaddr %pM, %s V%d + %s\n",
|
||||
printk(KERN_INFO "%s: hwaddr %pM, %s V%d + %s, rfkill mask %d\n",
|
||||
wiphy_name(dev->wiphy), dev->wiphy->perm_addr,
|
||||
chip_name, priv->asic_rev, priv->rf->name);
|
||||
chip_name, priv->asic_rev, priv->rf->name, priv->rfkill_mask);
|
||||
|
||||
#ifdef CONFIG_RTL8187_LEDS
|
||||
eeprom_93cx6_read(&eeprom, 0x3F, ®);
|
||||
|
Reference in New Issue
Block a user