aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/wl12xx/wl1271_debugfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/wl12xx/wl1271_debugfs.c')
-rw-r--r--drivers/net/wireless/wl12xx/wl1271_debugfs.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/drivers/net/wireless/wl12xx/wl1271_debugfs.c b/drivers/net/wireless/wl12xx/wl1271_debugfs.c
index c1805e5f8964..4eaf40c57567 100644
--- a/drivers/net/wireless/wl12xx/wl1271_debugfs.c
+++ b/drivers/net/wireless/wl12xx/wl1271_debugfs.c
@@ -237,6 +237,57 @@ static const struct file_operations tx_queue_len_ops = {
237 .open = wl1271_open_file_generic, 237 .open = wl1271_open_file_generic,
238}; 238};
239 239
240static ssize_t gpio_power_read(struct file *file, char __user *user_buf,
241 size_t count, loff_t *ppos)
242{
243 struct wl1271 *wl = file->private_data;
244 int res;
245 char buf[10];
246
247 res = scnprintf(buf, sizeof(buf), "%d\n", wl->gpio_power);
248
249 return simple_read_from_buffer(user_buf, count, ppos, buf, res);
250}
251
252static ssize_t gpio_power_write(struct file *file,
253 const char __user *user_buf,
254 size_t count, loff_t *ppos)
255{
256 struct wl1271 *wl = file->private_data;
257 char buf[10];
258 size_t len;
259 unsigned long value;
260 int ret;
261
262 mutex_lock(&wl->mutex);
263
264 len = min(count, sizeof(buf) - 1);
265 if (copy_from_user(buf, user_buf, len)) {
266 ret = -EFAULT;
267 goto out;
268 }
269 buf[len] = '\0';
270
271 ret = strict_strtoul(buf, 0, &value);
272 if (ret < 0) {
273 wl1271_warning("illegal value in gpio_power");
274 goto out;
275 }
276
277 wl->set_power(!!value);
278 wl->gpio_power = !!value;
279
280out:
281 mutex_unlock(&wl->mutex);
282 return count;
283}
284
285static const struct file_operations gpio_power_ops = {
286 .read = gpio_power_read,
287 .write = gpio_power_write,
288 .open = wl1271_open_file_generic
289};
290
240static void wl1271_debugfs_delete_files(struct wl1271 *wl) 291static void wl1271_debugfs_delete_files(struct wl1271 *wl)
241{ 292{
242 DEBUGFS_FWSTATS_DEL(tx, internal_desc_overflow); 293 DEBUGFS_FWSTATS_DEL(tx, internal_desc_overflow);
@@ -333,6 +384,8 @@ static void wl1271_debugfs_delete_files(struct wl1271 *wl)
333 DEBUGFS_DEL(tx_queue_len); 384 DEBUGFS_DEL(tx_queue_len);
334 DEBUGFS_DEL(retry_count); 385 DEBUGFS_DEL(retry_count);
335 DEBUGFS_DEL(excessive_retries); 386 DEBUGFS_DEL(excessive_retries);
387
388 DEBUGFS_DEL(gpio_power);
336} 389}
337 390
338static int wl1271_debugfs_add_files(struct wl1271 *wl) 391static int wl1271_debugfs_add_files(struct wl1271 *wl)
@@ -434,6 +487,8 @@ static int wl1271_debugfs_add_files(struct wl1271 *wl)
434 DEBUGFS_ADD(retry_count, wl->debugfs.rootdir); 487 DEBUGFS_ADD(retry_count, wl->debugfs.rootdir);
435 DEBUGFS_ADD(excessive_retries, wl->debugfs.rootdir); 488 DEBUGFS_ADD(excessive_retries, wl->debugfs.rootdir);
436 489
490 DEBUGFS_ADD(gpio_power, wl->debugfs.rootdir);
491
437out: 492out:
438 if (ret < 0) 493 if (ret < 0)
439 wl1271_debugfs_delete_files(wl); 494 wl1271_debugfs_delete_files(wl);