Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
This commit is contained in:
@@ -97,6 +97,7 @@ ath5k_eeprom_init_header(struct ath5k_hw *ah)
|
||||
struct ath5k_eeprom_info *ee = &ah->ah_capabilities.cap_eeprom;
|
||||
int ret;
|
||||
u16 val;
|
||||
u32 cksum, offset;
|
||||
|
||||
/*
|
||||
* Read values from EEPROM and store them in the capability structure
|
||||
@@ -111,7 +112,6 @@ ath5k_eeprom_init_header(struct ath5k_hw *ah)
|
||||
if (ah->ah_ee_version < AR5K_EEPROM_VERSION_3_0)
|
||||
return 0;
|
||||
|
||||
#ifdef notyet
|
||||
/*
|
||||
* Validate the checksum of the EEPROM date. There are some
|
||||
* devices with invalid EEPROMs.
|
||||
@@ -124,7 +124,6 @@ ath5k_eeprom_init_header(struct ath5k_hw *ah)
|
||||
ATH5K_ERR(ah->ah_sc, "Invalid EEPROM checksum 0x%04x\n", cksum);
|
||||
return -EIO;
|
||||
}
|
||||
#endif
|
||||
|
||||
AR5K_EEPROM_READ_HDR(AR5K_EEPROM_ANT_GAIN(ah->ah_ee_version),
|
||||
ee_ant_gain);
|
||||
|
@@ -1784,7 +1784,10 @@ static void b43_do_interrupt_thread(struct b43_wldev *dev)
|
||||
dma_reason[0], dma_reason[1],
|
||||
dma_reason[2], dma_reason[3],
|
||||
dma_reason[4], dma_reason[5]);
|
||||
b43_controller_restart(dev, "DMA error");
|
||||
b43err(dev->wl, "This device does not support DMA "
|
||||
"on your system. Please use PIO instead.\n");
|
||||
b43err(dev->wl, "CONFIG_B43_FORCE_PIO must be set in "
|
||||
"your kernel configuration.\n");
|
||||
return;
|
||||
}
|
||||
if (merged_dma_reason & B43_DMAIRQ_NONFATALMASK) {
|
||||
|
@@ -108,6 +108,7 @@ struct rtl8187_priv {
|
||||
struct delayed_work work;
|
||||
struct ieee80211_hw *dev;
|
||||
#ifdef CONFIG_RTL8187_LEDS
|
||||
struct rtl8187_led led_radio;
|
||||
struct rtl8187_led led_tx;
|
||||
struct rtl8187_led led_rx;
|
||||
struct delayed_work led_on;
|
||||
|
@@ -105,19 +105,36 @@ static void rtl8187_led_brightness_set(struct led_classdev *led_dev,
|
||||
struct rtl8187_led *led = container_of(led_dev, struct rtl8187_led,
|
||||
led_dev);
|
||||
struct ieee80211_hw *hw = led->dev;
|
||||
struct rtl8187_priv *priv = hw->priv;
|
||||
struct rtl8187_priv *priv;
|
||||
static bool radio_on;
|
||||
|
||||
if (brightness == LED_OFF) {
|
||||
ieee80211_queue_delayed_work(hw, &priv->led_off, 0);
|
||||
/* The LED is off for 1/20 sec so that it just blinks. */
|
||||
ieee80211_queue_delayed_work(hw, &priv->led_on, HZ / 20);
|
||||
} else
|
||||
ieee80211_queue_delayed_work(hw, &priv->led_on, 0);
|
||||
if (!hw)
|
||||
return;
|
||||
priv = hw->priv;
|
||||
if (led->is_radio) {
|
||||
if (brightness == LED_FULL) {
|
||||
ieee80211_queue_delayed_work(hw, &priv->led_on, 0);
|
||||
radio_on = true;
|
||||
} else if (radio_on) {
|
||||
radio_on = false;
|
||||
cancel_delayed_work_sync(&priv->led_on);
|
||||
ieee80211_queue_delayed_work(hw, &priv->led_off, 0);
|
||||
}
|
||||
} else if (radio_on) {
|
||||
if (brightness == LED_OFF) {
|
||||
ieee80211_queue_delayed_work(hw, &priv->led_off, 0);
|
||||
/* The LED is off for 1/20 sec - it just blinks. */
|
||||
ieee80211_queue_delayed_work(hw, &priv->led_on,
|
||||
HZ / 20);
|
||||
} else
|
||||
ieee80211_queue_delayed_work(hw, &priv->led_on, 0);
|
||||
}
|
||||
}
|
||||
|
||||
static int rtl8187_register_led(struct ieee80211_hw *dev,
|
||||
struct rtl8187_led *led, const char *name,
|
||||
const char *default_trigger, u8 ledpin)
|
||||
const char *default_trigger, u8 ledpin,
|
||||
bool is_radio)
|
||||
{
|
||||
int err;
|
||||
struct rtl8187_priv *priv = dev->priv;
|
||||
@@ -128,6 +145,7 @@ static int rtl8187_register_led(struct ieee80211_hw *dev,
|
||||
return -EINVAL;
|
||||
led->dev = dev;
|
||||
led->ledpin = ledpin;
|
||||
led->is_radio = is_radio;
|
||||
strncpy(led->name, name, sizeof(led->name));
|
||||
|
||||
led->led_dev.name = led->name;
|
||||
@@ -145,7 +163,11 @@ static int rtl8187_register_led(struct ieee80211_hw *dev,
|
||||
|
||||
static void rtl8187_unregister_led(struct rtl8187_led *led)
|
||||
{
|
||||
struct ieee80211_hw *hw = led->dev;
|
||||
struct rtl8187_priv *priv = hw->priv;
|
||||
|
||||
led_classdev_unregister(&led->led_dev);
|
||||
flush_delayed_work(&priv->led_off);
|
||||
led->dev = NULL;
|
||||
}
|
||||
|
||||
@@ -182,34 +204,38 @@ void rtl8187_leds_init(struct ieee80211_hw *dev, u16 custid)
|
||||
INIT_DELAYED_WORK(&priv->led_on, led_turn_on);
|
||||
INIT_DELAYED_WORK(&priv->led_off, led_turn_off);
|
||||
|
||||
snprintf(name, sizeof(name),
|
||||
"rtl8187-%s::radio", wiphy_name(dev->wiphy));
|
||||
err = rtl8187_register_led(dev, &priv->led_radio, name,
|
||||
ieee80211_get_radio_led_name(dev), ledpin, true);
|
||||
if (err)
|
||||
return;
|
||||
|
||||
snprintf(name, sizeof(name),
|
||||
"rtl8187-%s::tx", wiphy_name(dev->wiphy));
|
||||
err = rtl8187_register_led(dev, &priv->led_tx, name,
|
||||
ieee80211_get_tx_led_name(dev), ledpin);
|
||||
ieee80211_get_tx_led_name(dev), ledpin, false);
|
||||
if (err)
|
||||
goto error;
|
||||
goto err_tx;
|
||||
|
||||
snprintf(name, sizeof(name),
|
||||
"rtl8187-%s::rx", wiphy_name(dev->wiphy));
|
||||
err = rtl8187_register_led(dev, &priv->led_rx, name,
|
||||
ieee80211_get_rx_led_name(dev), ledpin);
|
||||
if (!err) {
|
||||
ieee80211_queue_delayed_work(dev, &priv->led_on, 0);
|
||||
ieee80211_get_rx_led_name(dev), ledpin, false);
|
||||
if (!err)
|
||||
return;
|
||||
}
|
||||
/* registration of RX LED failed - unregister TX */
|
||||
|
||||
/* registration of RX LED failed - unregister */
|
||||
rtl8187_unregister_led(&priv->led_tx);
|
||||
error:
|
||||
/* If registration of either failed, cancel delayed work */
|
||||
cancel_delayed_work_sync(&priv->led_off);
|
||||
cancel_delayed_work_sync(&priv->led_on);
|
||||
err_tx:
|
||||
rtl8187_unregister_led(&priv->led_radio);
|
||||
}
|
||||
|
||||
void rtl8187_leds_exit(struct ieee80211_hw *dev)
|
||||
{
|
||||
struct rtl8187_priv *priv = dev->priv;
|
||||
|
||||
/* turn the LED off before exiting */
|
||||
ieee80211_queue_delayed_work(dev, &priv->led_off, 0);
|
||||
rtl8187_unregister_led(&priv->led_radio);
|
||||
rtl8187_unregister_led(&priv->led_rx);
|
||||
rtl8187_unregister_led(&priv->led_tx);
|
||||
cancel_delayed_work_sync(&priv->led_off);
|
||||
|
@@ -47,6 +47,8 @@ struct rtl8187_led {
|
||||
u8 ledpin;
|
||||
/* The unique name string for this LED device. */
|
||||
char name[RTL8187_LED_MAX_NAME_LEN + 1];
|
||||
/* If the LED is radio or tx/rx */
|
||||
bool is_radio;
|
||||
};
|
||||
|
||||
void rtl8187_leds_init(struct ieee80211_hw *dev, u16 code);
|
||||
|
Reference in New Issue
Block a user