1/****************************************************************************** 2 * 3 * Copyright(c) 2003 - 2010 Intel Corporation. All rights reserved. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of version 2 of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 * more details. 13 * 14 * You should have received a copy of the GNU General Public License along with 15 * this program; if not, write to the Free Software Foundation, Inc., 16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 17 * 18 * The full GNU General Public License is included in this distribution in the 19 * file called LICENSE. 20 * 21 * Contact Information: 22 * Intel Linux Wireless <ilw@linux.intel.com> 23 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 24 * 25 *****************************************************************************/ 26 27#include <linux/kernel.h> 28#include <linux/module.h> 29#include <linux/init.h> 30#include <linux/pci.h> 31#include <linux/dma-mapping.h> 32#include <linux/delay.h> 33#include <linux/skbuff.h> 34#include <linux/netdevice.h> 35#include <linux/wireless.h> 36#include <net/mac80211.h> 37#include <linux/etherdevice.h> 38#include <asm/unaligned.h> 39 40#include "iwl-commands.h" 41#include "iwl-dev.h" 42#include "iwl-core.h" 43#include "iwl-io.h" 44#include "iwl-agn-led.h" 45 46/* Send led command */ 47static int iwl_send_led_cmd(struct iwl_priv *priv, struct iwl_led_cmd *led_cmd) 48{ 49 struct iwl_host_cmd cmd = { 50 .id = REPLY_LEDS_CMD, 51 .len = sizeof(struct iwl_led_cmd), 52 .data = led_cmd, 53 .flags = CMD_ASYNC, 54 .callback = NULL, 55 }; 56 u32 reg; 57 58 reg = iwl_read32(priv, CSR_LED_REG); 59 if (reg != (reg & CSR_LED_BSM_CTRL_MSK)) 60 iwl_write32(priv, CSR_LED_REG, reg & CSR_LED_BSM_CTRL_MSK); 61 62 return iwl_send_cmd(priv, &cmd); 63} 64 65/* Set led register off */ 66static int iwl_led_on_reg(struct iwl_priv *priv) 67{ 68 IWL_DEBUG_LED(priv, "led on\n"); 69 iwl_write32(priv, CSR_LED_REG, CSR_LED_REG_TRUN_ON); 70 return 0; 71} 72 73/* Set led register off */ 74static int iwl_led_off_reg(struct iwl_priv *priv) 75{ 76 IWL_DEBUG_LED(priv, "LED Reg off\n"); 77 iwl_write32(priv, CSR_LED_REG, CSR_LED_REG_TRUN_OFF); 78 return 0; 79} 80 81const struct iwl_led_ops iwlagn_led_ops = { 82 .cmd = iwl_send_led_cmd, 83 .on = iwl_led_on_reg, 84 .off = iwl_led_off_reg, 85}; 86