/*
 * Radio control handlers.
 */
int rt2x00lib_enable_radio(struct rt2x00_dev *rt2x00dev)
{
    int status;

    /*
     * Don't enable the radio twice.
     * And check if the hardware button has been disabled.
     */
    if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
        return 0;

    /*
     * Initialize all data queues.
     */
    rt2x00queue_init_queues(rt2x00dev);

    /*
     * Enable radio.
     */
    status =
        rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_ON);
    if (status)
        return status;

    rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_IRQ_ON);

    rt2x00leds_led_radio(rt2x00dev, true);
    rt2x00led_led_activity(rt2x00dev, true);

    set_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags);

    /*
     * Enable RX.
     */
    rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON);

    /*
     * Start the TX queues.
     */
    ieee80211_wake_queues(rt2x00dev->hw);

    return 0;
}
void rt2x00lib_disable_radio(struct rt2x00_dev *rt2x00dev)
{
	if (!__test_and_clear_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
		return;

	/*
	 * Stop the TX queues.
	 */
	ieee80211_stop_queues(rt2x00dev->hw);

	/*
	 * Disable RX.
	 */
	rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF);

	/*
	 * Disable radio.
	 */
	rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_OFF);
	rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_IRQ_OFF);
	rt2x00led_led_activity(rt2x00dev, false);
	rt2x00leds_led_radio(rt2x00dev, false);
}