drivers/net/wireless/ti/wlcore/sysfs.c

Source file repositories/reference/linux-study-clean/drivers/net/wireless/ti/wlcore/sysfs.c

File Facts

System
Linux kernel
Corpus path
drivers/net/wireless/ti/wlcore/sysfs.c
Extension
.c
Size
3622 bytes
Lines
171
Domain
Driver Families
Bucket
drivers/net
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

// SPDX-License-Identifier: GPL-2.0-only
/*
 * This file is part of wlcore
 *
 * Copyright (C) 2013 Texas Instruments Inc.
 */

#include <linux/pm_runtime.h>

#include "acx.h"
#include "wlcore.h"
#include "debug.h"
#include "sysfs.h"

static ssize_t bt_coex_state_show(struct device *dev,
				  struct device_attribute *attr,
				  char *buf)
{
	struct wl1271 *wl = dev_get_drvdata(dev);
	ssize_t len;

	mutex_lock(&wl->mutex);
	len = sysfs_emit(buf, "%d\n\n0 - off\n1 - on\n", wl->sg_enabled);
	mutex_unlock(&wl->mutex);

	return len;

}

static ssize_t bt_coex_state_store(struct device *dev,
				   struct device_attribute *attr,
				   const char *buf, size_t count)
{
	struct wl1271 *wl = dev_get_drvdata(dev);
	unsigned long res;
	int ret;

	ret = kstrtoul(buf, 10, &res);
	if (ret < 0) {
		wl1271_warning("incorrect value written to bt_coex_mode");
		return count;
	}

	mutex_lock(&wl->mutex);

	res = !!res;

	if (res == wl->sg_enabled)
		goto out;

	wl->sg_enabled = res;

	if (unlikely(wl->state != WLCORE_STATE_ON))
		goto out;

	ret = pm_runtime_resume_and_get(wl->dev);
	if (ret < 0)
		goto out;

	wl1271_acx_sg_enable(wl, wl->sg_enabled);
	pm_runtime_put_autosuspend(wl->dev);

 out:
	mutex_unlock(&wl->mutex);
	return count;
}

static DEVICE_ATTR_RW(bt_coex_state);

static ssize_t hw_pg_ver_show(struct device *dev,
			      struct device_attribute *attr,
			      char *buf)
{
	struct wl1271 *wl = dev_get_drvdata(dev);
	ssize_t len;

	mutex_lock(&wl->mutex);
	if (wl->hw_pg_ver >= 0)
		len = sysfs_emit(buf, "%d\n", wl->hw_pg_ver);
	else
		len = sysfs_emit(buf, "n/a\n");
	mutex_unlock(&wl->mutex);

	return len;
}

static DEVICE_ATTR_RO(hw_pg_ver);

static ssize_t wl1271_sysfs_read_fwlog(struct file *filp, struct kobject *kobj,
				       const struct bin_attribute *bin_attr,

Annotation

Implementation Notes