Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c842db4c authored by Visweswara Tanuku's avatar Visweswara Tanuku Committed by Nirav Shah
Browse files

cnss2: Add sysfs support for configuring qtimer sync interval



It can be used to tune the host and fw time synchronization interval
for better accuracy.

Change-Id: I0a3d8895520cec526341f278c91f153dd0bd1966
CRs-Fixed: 2787916
Signed-off-by: default avatarVisweswara Tanuku <vtanuku@codeaurora.org>
parent 5475cd6f
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@
#define CNSS_QMI_TIMEOUT_DEFAULT	10000
#define CNSS_BDF_TYPE_DEFAULT		CNSS_BDF_ELF
#define CNSS_TIME_SYNC_PERIOD_DEFAULT	900000
#define CNSS_MIN_TIME_SYNC_PERIOD	2000

static struct cnss_plat_data *plat_env;

@@ -2329,6 +2330,33 @@ static void cnss_unregister_bus_scale(struct cnss_plat_data *plat_priv)
		msm_bus_scale_unregister_client(bus_bw_info->bus_client);
}

static ssize_t qtime_sync_period_show(struct device *dev,
				      struct device_attribute *attr,
				      char *buf)
{
	struct cnss_plat_data *plat_priv = dev_get_drvdata(dev);

	return scnprintf(buf, PAGE_SIZE, "%u\n",
			plat_priv->ctrl_params.time_sync_period);
}

static ssize_t qtime_sync_period_store(struct device *dev,
				       struct device_attribute *attr,
				       const char *buf, size_t count)
{
	unsigned int qtime_sync_period = 0;

	if (sscanf(buf, "%du", &qtime_sync_period) != 1) {
		cnss_pr_err("Invalid qtime sync sysfs command\n");
		return -EINVAL;
	}

	if (qtime_sync_period >= CNSS_MIN_TIME_SYNC_PERIOD)
		cnss_pci_update_qtime_sync_period(dev, qtime_sync_period);

	return count;
}

static ssize_t recovery_store(struct device *dev,
			      struct device_attribute *attr,
			      const char *buf, size_t count)
@@ -2419,11 +2447,13 @@ static ssize_t fs_ready_store(struct device *dev,
static DEVICE_ATTR_WO(fs_ready);
static DEVICE_ATTR_WO(shutdown);
static DEVICE_ATTR_WO(recovery);
static DEVICE_ATTR_RW(qtime_sync_period);

static struct attribute *cnss_attrs[] = {
	&dev_attr_fs_ready.attr,
	&dev_attr_shutdown.attr,
	&dev_attr_recovery.attr,
	&dev_attr_qtime_sync_period.attr,
	NULL,
};

+2 −1
Original line number Diff line number Diff line
@@ -479,5 +479,6 @@ int cnss_minidump_remove_region(struct cnss_plat_data *plat_priv,
				void *va, phys_addr_t pa, size_t size);
unsigned int cnss_get_timeout(struct cnss_plat_data *plat_priv,
			      enum cnss_timeout_type);

int cnss_pci_update_qtime_sync_period(struct device *dev,
				      unsigned int qtime_sync_period);
#endif /* _CNSS_MAIN_H */
+18 −0
Original line number Diff line number Diff line
@@ -1502,6 +1502,24 @@ static void cnss_pci_stop_time_sync_update(struct cnss_pci_data *pci_priv)
	cancel_delayed_work_sync(&pci_priv->time_sync_work);
}

int cnss_pci_update_qtime_sync_period(struct device *dev,
				      unsigned int qtime_sync_period)
{
	struct cnss_plat_data *plat_priv = dev_get_drvdata(dev);
	struct cnss_pci_data *pci_priv = plat_priv->bus_priv;

	if (!plat_priv || !pci_priv)
		return -ENODEV;

	cnss_pci_stop_time_sync_update(pci_priv);
	plat_priv->ctrl_params.time_sync_period = qtime_sync_period;
	cnss_pci_start_time_sync_update(pci_priv);
	cnss_pr_dbg("WLAN qtime sync period %u\n",
		    plat_priv->ctrl_params.time_sync_period);

	return 0;
}

int cnss_pci_call_driver_probe(struct cnss_pci_data *pci_priv)
{
	int ret = 0;