diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/debug.c')
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/debug.c | 55 | 
1 files changed, 53 insertions, 2 deletions
| diff --git a/drivers/net/wireless/ath/ath9k/debug.c b/drivers/net/wireless/ath/ath9k/debug.c index ab3bc85a1f8a..ed38216c3ca3 100644 --- a/drivers/net/wireless/ath/ath9k/debug.c +++ b/drivers/net/wireless/ath/ath9k/debug.c @@ -222,6 +222,57 @@ static const struct file_operations fops_disable_ani = {  	.llseek = default_llseek,  }; +static ssize_t read_file_ant_diversity(struct file *file, char __user *user_buf, +				       size_t count, loff_t *ppos) +{ +	struct ath_softc *sc = file->private_data; +	struct ath_common *common = ath9k_hw_common(sc->sc_ah); +	char buf[32]; +	unsigned int len; + +	len = sprintf(buf, "%d\n", common->antenna_diversity); +	return simple_read_from_buffer(user_buf, count, ppos, buf, len); +} + +static ssize_t write_file_ant_diversity(struct file *file, +					const char __user *user_buf, +					size_t count, loff_t *ppos) +{ +	struct ath_softc *sc = file->private_data; +	struct ath_common *common = ath9k_hw_common(sc->sc_ah); +	unsigned long antenna_diversity; +	char buf[32]; +	ssize_t len; + +	len = min(count, sizeof(buf) - 1); +	if (copy_from_user(buf, user_buf, len)) +		return -EFAULT; + +	if (!AR_SREV_9565(sc->sc_ah)) +		goto exit; + +	buf[len] = '\0'; +	if (strict_strtoul(buf, 0, &antenna_diversity)) +		return -EINVAL; + +	common->antenna_diversity = !!antenna_diversity; +	ath9k_ps_wakeup(sc); +	ath_ant_comb_update(sc); +	ath_dbg(common, CONFIG, "Antenna diversity: %d\n", +		common->antenna_diversity); +	ath9k_ps_restore(sc); +exit: +	return count; +} + +static const struct file_operations fops_ant_diversity = { +	.read = read_file_ant_diversity, +	.write = write_file_ant_diversity, +	.open = simple_open, +	.owner = THIS_MODULE, +	.llseek = default_llseek, +}; +  static ssize_t read_file_dma(struct file *file, char __user *user_buf,  			     size_t count, loff_t *ppos)  { @@ -1599,12 +1650,12 @@ int ath9k_init_debug(struct ath_hw *ah)  	debugfs_create_file("samples", S_IRUSR, sc->debug.debugfs_phy, sc,  			    &fops_samps);  #endif -  	debugfs_create_u32("gpio_mask", S_IRUSR | S_IWUSR,  			   sc->debug.debugfs_phy, &sc->sc_ah->gpio_mask); -  	debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR,  			   sc->debug.debugfs_phy, &sc->sc_ah->gpio_val); +	debugfs_create_file("diversity", S_IRUSR | S_IWUSR, +			    sc->debug.debugfs_phy, sc, &fops_ant_diversity);  	return 0;  } |