mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 13:49:24 -04:00
Merge "wil6210: added sysfs file for FTM calibration"
This commit is contained in:
commit
9b8098d6c3
4 changed files with 119 additions and 12 deletions
|
|
@ -6,6 +6,7 @@ wil6210-y += netdev.o
|
|||
wil6210-y += cfg80211.o
|
||||
wil6210-y += pcie_bus.o
|
||||
wil6210-$(CONFIG_WIL6210_DEBUGFS) += debugfs.o
|
||||
wil6210-y += sysfs.o
|
||||
wil6210-y += wmi.o
|
||||
wil6210-y += interrupt.o
|
||||
wil6210-y += txrx.o
|
||||
|
|
|
|||
|
|
@ -1,18 +1,7 @@
|
|||
// SPDX-License-Identifier: ISC
|
||||
/*
|
||||
* Copyright (c) 2012-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
|
|
@ -450,6 +439,7 @@ static int wil_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
wil_err(wil, "register_pm_notifier failed: %d\n", rc);
|
||||
|
||||
wil6210_debugfs_init(wil);
|
||||
wil6210_sysfs_init(wil);
|
||||
|
||||
wil_pm_runtime_allow(wil);
|
||||
|
||||
|
|
@ -482,6 +472,7 @@ static void wil_pcie_remove(struct pci_dev *pdev)
|
|||
|
||||
wil_pm_runtime_forbid(wil);
|
||||
|
||||
wil6210_sysfs_remove(wil);
|
||||
wil6210_debugfs_remove(wil);
|
||||
rtnl_lock();
|
||||
wil_p2p_wdev_free(wil);
|
||||
|
|
|
|||
113
drivers/net/wireless/ath/wil6210/sysfs.c
Normal file
113
drivers/net/wireless/ath/wil6210/sysfs.c
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
// SPDX-License-Identifier: ISC
|
||||
/* Copyright (c) 2016,2018-2019 The Linux Foundation. All rights reserved. */
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/sysfs.h>
|
||||
|
||||
#include "wil6210.h"
|
||||
#include "wmi.h"
|
||||
|
||||
static ssize_t
|
||||
ftm_txrx_offset_show(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct wil6210_priv *wil = dev_get_drvdata(dev);
|
||||
struct wil6210_vif *vif = ndev_to_vif(wil->main_ndev);
|
||||
struct {
|
||||
struct wmi_cmd_hdr wmi;
|
||||
struct wmi_tof_get_tx_rx_offset_event evt;
|
||||
} __packed reply;
|
||||
int rc;
|
||||
ssize_t len;
|
||||
|
||||
if (!test_bit(WMI_FW_CAPABILITY_FTM, wil->fw_capabilities))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
memset(&reply, 0, sizeof(reply));
|
||||
rc = wmi_call(wil, WMI_TOF_GET_TX_RX_OFFSET_CMDID, vif->mid, NULL, 0,
|
||||
WMI_TOF_GET_TX_RX_OFFSET_EVENTID,
|
||||
&reply, sizeof(reply), 100);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
if (reply.evt.status) {
|
||||
wil_err(wil, "get_tof_tx_rx_offset failed, error %d\n",
|
||||
reply.evt.status);
|
||||
return -EIO;
|
||||
}
|
||||
len = snprintf(buf, PAGE_SIZE, "%u %u\n",
|
||||
le32_to_cpu(reply.evt.tx_offset),
|
||||
le32_to_cpu(reply.evt.rx_offset));
|
||||
return len;
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
ftm_txrx_offset_store(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct wil6210_priv *wil = dev_get_drvdata(dev);
|
||||
struct wil6210_vif *vif = ndev_to_vif(wil->main_ndev);
|
||||
struct wmi_tof_set_tx_rx_offset_cmd cmd;
|
||||
struct {
|
||||
struct wmi_cmd_hdr wmi;
|
||||
struct wmi_tof_set_tx_rx_offset_event evt;
|
||||
} __packed reply;
|
||||
unsigned int tx_offset, rx_offset;
|
||||
int rc;
|
||||
|
||||
if (sscanf(buf, "%u %u", &tx_offset, &rx_offset) != 2)
|
||||
return -EINVAL;
|
||||
|
||||
if (!test_bit(WMI_FW_CAPABILITY_FTM, wil->fw_capabilities))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
memset(&cmd, 0, sizeof(cmd));
|
||||
cmd.tx_offset = cpu_to_le32(tx_offset);
|
||||
cmd.rx_offset = cpu_to_le32(rx_offset);
|
||||
memset(&reply, 0, sizeof(reply));
|
||||
rc = wmi_call(wil, WMI_TOF_SET_TX_RX_OFFSET_CMDID, vif->mid,
|
||||
&cmd, sizeof(cmd), WMI_TOF_SET_TX_RX_OFFSET_EVENTID,
|
||||
&reply, sizeof(reply), 100);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
if (reply.evt.status) {
|
||||
wil_err(wil, "set_tof_tx_rx_offset failed, error %d\n",
|
||||
reply.evt.status);
|
||||
return -EIO;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
static DEVICE_ATTR_RW(ftm_txrx_offset);
|
||||
|
||||
static struct attribute *wil6210_sysfs_entries[] = {
|
||||
&dev_attr_ftm_txrx_offset.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
static struct attribute_group wil6210_attribute_group = {
|
||||
.name = "wil6210",
|
||||
.attrs = wil6210_sysfs_entries,
|
||||
};
|
||||
|
||||
int wil6210_sysfs_init(struct wil6210_priv *wil)
|
||||
{
|
||||
struct device *dev = wil_to_dev(wil);
|
||||
int err;
|
||||
|
||||
err = sysfs_create_group(&dev->kobj, &wil6210_attribute_group);
|
||||
if (err) {
|
||||
wil_err(wil, "failed to create sysfs group: %d\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void wil6210_sysfs_remove(struct wil6210_priv *wil)
|
||||
{
|
||||
struct device *dev = wil_to_dev(wil);
|
||||
|
||||
sysfs_remove_group(&dev->kobj, &wil6210_attribute_group);
|
||||
}
|
||||
|
|
@ -1332,6 +1332,8 @@ static inline int wil6210_debugfs_init(struct wil6210_priv *wil) { return 0; }
|
|||
static inline void wil6210_debugfs_remove(struct wil6210_priv *wil) {}
|
||||
#endif
|
||||
|
||||
int wil6210_sysfs_init(struct wil6210_priv *wil);
|
||||
void wil6210_sysfs_remove(struct wil6210_priv *wil);
|
||||
int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid,
|
||||
struct station_info *sinfo);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue