Merge tag 'davinci-for-v4.13/soc-2' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-block.git] / drivers / usb / core / sysfs.c
CommitLineData
1da177e4
LT
1/*
2 * drivers/usb/core/sysfs.c
3 *
4 * (C) Copyright 2002 David Brownell
5 * (C) Copyright 2002,2004 Greg Kroah-Hartman
6 * (C) Copyright 2002,2004 IBM Corp.
7 *
8 * All of the sysfs file attributes for usb devices and interfaces.
9 *
b65fba3d
GKH
10 * Released under the GPLv2 only.
11 * SPDX-License-Identifier: GPL-2.0
1da177e4
LT
12 */
13
14
1da177e4 15#include <linux/kernel.h>
2add5229 16#include <linux/string.h>
1da177e4 17#include <linux/usb.h>
1662e3a7 18#include <linux/usb/quirks.h>
51fa9147 19#include <linux/of.h>
1da177e4
LT
20#include "usb.h"
21
22/* Active configuration fields */
8d8479db 23#define usb_actconfig_show(field, format_string) \
d03f254f
GKH
24static ssize_t field##_show(struct device *dev, \
25 struct device_attribute *attr, char *buf) \
1da177e4
LT
26{ \
27 struct usb_device *udev; \
28 struct usb_host_config *actconfig; \
7dd9cba5 29 ssize_t rc; \
1da177e4 30 \
9251644a 31 udev = to_usb_device(dev); \
7dd9cba5
ON
32 rc = usb_lock_device_interruptible(udev); \
33 if (rc < 0) \
34 return -EINTR; \
1da177e4
LT
35 actconfig = udev->actconfig; \
36 if (actconfig) \
232275a0 37 rc = sprintf(buf, format_string, \
8d8479db 38 actconfig->desc.field); \
232275a0
AS
39 usb_unlock_device(udev); \
40 return rc; \
1da177e4
LT
41} \
42
8d8479db
SAS
43#define usb_actconfig_attr(field, format_string) \
44 usb_actconfig_show(field, format_string) \
d03f254f 45 static DEVICE_ATTR_RO(field)
1da177e4 46
d03f254f
GKH
47usb_actconfig_attr(bNumInterfaces, "%2d\n");
48usb_actconfig_attr(bmAttributes, "%2x\n");
8d8479db 49
d03f254f 50static ssize_t bMaxPower_show(struct device *dev,
8d8479db
SAS
51 struct device_attribute *attr, char *buf)
52{
53 struct usb_device *udev;
54 struct usb_host_config *actconfig;
7dd9cba5 55 ssize_t rc;
8d8479db
SAS
56
57 udev = to_usb_device(dev);
7dd9cba5
ON
58 rc = usb_lock_device_interruptible(udev);
59 if (rc < 0)
60 return -EINTR;
8d8479db 61 actconfig = udev->actconfig;
232275a0
AS
62 if (actconfig)
63 rc = sprintf(buf, "%dmA\n", usb_get_max_power(udev, actconfig));
64 usb_unlock_device(udev);
65 return rc;
8d8479db 66}
d03f254f 67static DEVICE_ATTR_RO(bMaxPower);
1da177e4 68
d03f254f 69static ssize_t configuration_show(struct device *dev,
b724ae77 70 struct device_attribute *attr, char *buf)
1da177e4
LT
71{
72 struct usb_device *udev;
73 struct usb_host_config *actconfig;
7dd9cba5 74 ssize_t rc;
1da177e4 75
9251644a 76 udev = to_usb_device(dev);
7dd9cba5
ON
77 rc = usb_lock_device_interruptible(udev);
78 if (rc < 0)
79 return -EINTR;
1da177e4 80 actconfig = udev->actconfig;
232275a0
AS
81 if (actconfig && actconfig->string)
82 rc = sprintf(buf, "%s\n", actconfig->string);
83 usb_unlock_device(udev);
84 return rc;
1da177e4 85}
d03f254f 86static DEVICE_ATTR_RO(configuration);
1da177e4
LT
87
88/* configuration value is always present, and r/w */
8d8479db 89usb_actconfig_show(bConfigurationValue, "%u\n");
1da177e4 90
d03f254f
GKH
91static ssize_t bConfigurationValue_store(struct device *dev,
92 struct device_attribute *attr,
93 const char *buf, size_t count)
1da177e4 94{
9251644a 95 struct usb_device *udev = to_usb_device(dev);
7dd9cba5 96 int config, value, rc;
1da177e4 97
3f141e2a 98 if (sscanf(buf, "%d", &config) != 1 || config < -1 || config > 255)
1da177e4 99 return -EINVAL;
7dd9cba5
ON
100 rc = usb_lock_device_interruptible(udev);
101 if (rc < 0)
102 return -EINTR;
9251644a 103 value = usb_set_configuration(udev, config);
1da177e4
LT
104 usb_unlock_device(udev);
105 return (value < 0) ? value : count;
106}
356c05d5 107static DEVICE_ATTR_IGNORE_LOCKDEP(bConfigurationValue, S_IRUGO | S_IWUSR,
d03f254f 108 bConfigurationValue_show, bConfigurationValue_store);
1da177e4 109
51fa9147
VK
110#ifdef CONFIG_OF
111static ssize_t devspec_show(struct device *dev, struct device_attribute *attr,
112 char *buf)
113{
114 struct device_node *of_node = dev->of_node;
115
116 return sprintf(buf, "%s\n", of_node_full_name(of_node));
117}
118static DEVICE_ATTR_RO(devspec);
119#endif
120
1da177e4
LT
121/* String fields */
122#define usb_string_attr(name) \
d03f254f 123static ssize_t name##_show(struct device *dev, \
b724ae77 124 struct device_attribute *attr, char *buf) \
1da177e4
LT
125{ \
126 struct usb_device *udev; \
da307123 127 int retval; \
1da177e4 128 \
9251644a 129 udev = to_usb_device(dev); \
7dd9cba5
ON
130 retval = usb_lock_device_interruptible(udev); \
131 if (retval < 0) \
132 return -EINTR; \
da307123
AS
133 retval = sprintf(buf, "%s\n", udev->name); \
134 usb_unlock_device(udev); \
135 return retval; \
1da177e4 136} \
d03f254f 137static DEVICE_ATTR_RO(name)
1da177e4
LT
138
139usb_string_attr(product);
140usb_string_attr(manufacturer);
141usb_string_attr(serial);
142
d03f254f
GKH
143static ssize_t speed_show(struct device *dev, struct device_attribute *attr,
144 char *buf)
1da177e4
LT
145{
146 struct usb_device *udev;
147 char *speed;
148
9251644a 149 udev = to_usb_device(dev);
1da177e4
LT
150
151 switch (udev->speed) {
152 case USB_SPEED_LOW:
153 speed = "1.5";
154 break;
155 case USB_SPEED_UNKNOWN:
156 case USB_SPEED_FULL:
157 speed = "12";
158 break;
159 case USB_SPEED_HIGH:
160 speed = "480";
161 break;
551cdbbe 162 case USB_SPEED_WIRELESS:
b132b04e
GKH
163 speed = "480";
164 break;
165 case USB_SPEED_SUPER:
166 speed = "5000";
167 break;
b2316645
MN
168 case USB_SPEED_SUPER_PLUS:
169 speed = "10000";
170 break;
1da177e4
LT
171 default:
172 speed = "unknown";
173 }
9251644a 174 return sprintf(buf, "%s\n", speed);
1da177e4 175}
d03f254f 176static DEVICE_ATTR_RO(speed);
1da177e4 177
d03f254f
GKH
178static ssize_t busnum_show(struct device *dev, struct device_attribute *attr,
179 char *buf)
83f7d958
AS
180{
181 struct usb_device *udev;
182
183 udev = to_usb_device(dev);
184 return sprintf(buf, "%d\n", udev->bus->busnum);
185}
d03f254f 186static DEVICE_ATTR_RO(busnum);
83f7d958 187
d03f254f
GKH
188static ssize_t devnum_show(struct device *dev, struct device_attribute *attr,
189 char *buf)
1da177e4
LT
190{
191 struct usb_device *udev;
192
9251644a
ON
193 udev = to_usb_device(dev);
194 return sprintf(buf, "%d\n", udev->devnum);
1da177e4 195}
d03f254f 196static DEVICE_ATTR_RO(devnum);
1da177e4 197
d03f254f
GKH
198static ssize_t devpath_show(struct device *dev, struct device_attribute *attr,
199 char *buf)
9af23624
GKH
200{
201 struct usb_device *udev;
202
203 udev = to_usb_device(dev);
204 return sprintf(buf, "%s\n", udev->devpath);
205}
d03f254f 206static DEVICE_ATTR_RO(devpath);
9af23624 207
d03f254f
GKH
208static ssize_t version_show(struct device *dev, struct device_attribute *attr,
209 char *buf)
1da177e4
LT
210{
211 struct usb_device *udev;
212 u16 bcdUSB;
213
214 udev = to_usb_device(dev);
215 bcdUSB = le16_to_cpu(udev->descriptor.bcdUSB);
216 return sprintf(buf, "%2x.%02x\n", bcdUSB >> 8, bcdUSB & 0xff);
217}
d03f254f 218static DEVICE_ATTR_RO(version);
1da177e4 219
d03f254f
GKH
220static ssize_t maxchild_show(struct device *dev, struct device_attribute *attr,
221 char *buf)
1da177e4
LT
222{
223 struct usb_device *udev;
224
9251644a
ON
225 udev = to_usb_device(dev);
226 return sprintf(buf, "%d\n", udev->maxchild);
1da177e4 227}
d03f254f 228static DEVICE_ATTR_RO(maxchild);
1da177e4 229
d03f254f
GKH
230static ssize_t quirks_show(struct device *dev, struct device_attribute *attr,
231 char *buf)
7ceec1f1
ON
232{
233 struct usb_device *udev;
234
235 udev = to_usb_device(dev);
236 return sprintf(buf, "0x%x\n", udev->quirks);
237}
d03f254f 238static DEVICE_ATTR_RO(quirks);
7ceec1f1 239
d03f254f
GKH
240static ssize_t avoid_reset_quirk_show(struct device *dev,
241 struct device_attribute *attr, char *buf)
ef955341
ON
242{
243 struct usb_device *udev;
244
245 udev = to_usb_device(dev);
7fda953f 246 return sprintf(buf, "%d\n", !!(udev->quirks & USB_QUIRK_RESET));
ef955341
ON
247}
248
d03f254f
GKH
249static ssize_t avoid_reset_quirk_store(struct device *dev,
250 struct device_attribute *attr,
251 const char *buf, size_t count)
ef955341
ON
252{
253 struct usb_device *udev = to_usb_device(dev);
7dd9cba5 254 int val, rc;
ef955341 255
7fc2cc32 256 if (sscanf(buf, "%d", &val) != 1 || val < 0 || val > 1)
ef955341 257 return -EINVAL;
7dd9cba5
ON
258 rc = usb_lock_device_interruptible(udev);
259 if (rc < 0)
260 return -EINTR;
7fc2cc32 261 if (val)
7fda953f 262 udev->quirks |= USB_QUIRK_RESET;
ef955341 263 else
7fda953f 264 udev->quirks &= ~USB_QUIRK_RESET;
ef955341
ON
265 usb_unlock_device(udev);
266 return count;
267}
d03f254f 268static DEVICE_ATTR_RW(avoid_reset_quirk);
ef955341 269
d03f254f
GKH
270static ssize_t urbnum_show(struct device *dev, struct device_attribute *attr,
271 char *buf)
4d59d8a1
SS
272{
273 struct usb_device *udev;
274
275 udev = to_usb_device(dev);
276 return sprintf(buf, "%d\n", atomic_read(&udev->urbnum));
277}
d03f254f 278static DEVICE_ATTR_RO(urbnum);
4d59d8a1 279
d03f254f
GKH
280static ssize_t removable_show(struct device *dev, struct device_attribute *attr,
281 char *buf)
0846e7e9
MG
282{
283 struct usb_device *udev;
284 char *state;
285
286 udev = to_usb_device(dev);
287
288 switch (udev->removable) {
289 case USB_DEVICE_REMOVABLE:
290 state = "removable";
291 break;
292 case USB_DEVICE_FIXED:
293 state = "fixed";
294 break;
295 default:
296 state = "unknown";
297 }
298
299 return sprintf(buf, "%s\n", state);
300}
d03f254f 301static DEVICE_ATTR_RO(removable);
b41a60ec 302
d03f254f
GKH
303static ssize_t ltm_capable_show(struct device *dev,
304 struct device_attribute *attr, char *buf)
024f117c
SS
305{
306 if (usb_device_supports_ltm(to_usb_device(dev)))
307 return sprintf(buf, "%s\n", "yes");
308 return sprintf(buf, "%s\n", "no");
309}
d03f254f 310static DEVICE_ATTR_RO(ltm_capable);
024f117c 311
feccc30d 312#ifdef CONFIG_PM
b41a60ec 313
d03f254f
GKH
314static ssize_t persist_show(struct device *dev, struct device_attribute *attr,
315 char *buf)
b41a60ec
AS
316{
317 struct usb_device *udev = to_usb_device(dev);
318
319 return sprintf(buf, "%d\n", udev->persist_enabled);
320}
321
d03f254f
GKH
322static ssize_t persist_store(struct device *dev, struct device_attribute *attr,
323 const char *buf, size_t count)
b41a60ec
AS
324{
325 struct usb_device *udev = to_usb_device(dev);
7dd9cba5 326 int value, rc;
b41a60ec
AS
327
328 /* Hubs are always enabled for USB_PERSIST */
329 if (udev->descriptor.bDeviceClass == USB_CLASS_HUB)
330 return -EPERM;
331
332 if (sscanf(buf, "%d", &value) != 1)
333 return -EINVAL;
0c4db6df 334
7dd9cba5
ON
335 rc = usb_lock_device_interruptible(udev);
336 if (rc < 0)
337 return -EINTR;
b41a60ec 338 udev->persist_enabled = !!value;
0c4db6df 339 usb_unlock_device(udev);
b41a60ec
AS
340 return count;
341}
d03f254f 342static DEVICE_ATTR_RW(persist);
b41a60ec
AS
343
344static int add_persist_attributes(struct device *dev)
345{
346 int rc = 0;
347
348 if (is_usb_device(dev)) {
349 struct usb_device *udev = to_usb_device(dev);
350
feccc30d
AS
351 /* Hubs are automatically enabled for USB_PERSIST,
352 * no point in creating the attribute file.
353 */
354 if (udev->descriptor.bDeviceClass != USB_CLASS_HUB)
355 rc = sysfs_add_file_to_group(&dev->kobj,
356 &dev_attr_persist.attr,
045cac6b 357 power_group_name);
b41a60ec
AS
358 }
359 return rc;
360}
361
362static void remove_persist_attributes(struct device *dev)
363{
364 sysfs_remove_file_from_group(&dev->kobj,
365 &dev_attr_persist.attr,
045cac6b 366 power_group_name);
b41a60ec 367}
19c26239 368
d03f254f
GKH
369static ssize_t connected_duration_show(struct device *dev,
370 struct device_attribute *attr, char *buf)
15123006
SS
371{
372 struct usb_device *udev = to_usb_device(dev);
373
374 return sprintf(buf, "%u\n",
375 jiffies_to_msecs(jiffies - udev->connect_time));
376}
d03f254f 377static DEVICE_ATTR_RO(connected_duration);
15123006
SS
378
379/*
380 * If the device is resumed, the last time the device was suspended has
381 * been pre-subtracted from active_duration. We add the current time to
382 * get the duration that the device was actually active.
383 *
384 * If the device is suspended, the active_duration is up-to-date.
385 */
d03f254f
GKH
386static ssize_t active_duration_show(struct device *dev,
387 struct device_attribute *attr, char *buf)
15123006
SS
388{
389 struct usb_device *udev = to_usb_device(dev);
390 int duration;
391
392 if (udev->state != USB_STATE_SUSPENDED)
393 duration = jiffies_to_msecs(jiffies + udev->active_duration);
394 else
395 duration = jiffies_to_msecs(udev->active_duration);
396 return sprintf(buf, "%u\n", duration);
397}
d03f254f 398static DEVICE_ATTR_RO(active_duration);
15123006 399
d03f254f
GKH
400static ssize_t autosuspend_show(struct device *dev,
401 struct device_attribute *attr, char *buf)
19c26239 402{
fcc4a01e 403 return sprintf(buf, "%d\n", dev->power.autosuspend_delay / 1000);
19c26239
AS
404}
405
d03f254f
GKH
406static ssize_t autosuspend_store(struct device *dev,
407 struct device_attribute *attr, const char *buf,
408 size_t count)
19c26239 409{
fcc4a01e 410 int value;
19c26239 411
fcc4a01e
AS
412 if (sscanf(buf, "%d", &value) != 1 || value >= INT_MAX/1000 ||
413 value <= -INT_MAX/1000)
19c26239 414 return -EINVAL;
19c26239 415
fcc4a01e 416 pm_runtime_set_autosuspend_delay(dev, value * 1000);
19c26239
AS
417 return count;
418}
d03f254f 419static DEVICE_ATTR_RW(autosuspend);
19c26239 420
2add5229
AS
421static const char on_string[] = "on";
422static const char auto_string[] = "auto";
2add5229 423
469271f8
MB
424static void warn_level(void)
425{
a9030986
AS
426 static int level_warned;
427
428 if (!level_warned) {
429 level_warned = 1;
430 printk(KERN_WARNING "WARNING! power/level is deprecated; "
431 "use power/control instead\n");
432 }
433}
434
d03f254f
GKH
435static ssize_t level_show(struct device *dev, struct device_attribute *attr,
436 char *buf)
2add5229
AS
437{
438 struct usb_device *udev = to_usb_device(dev);
439 const char *p = auto_string;
440
a9030986 441 warn_level();
9e18c821 442 if (udev->state != USB_STATE_SUSPENDED && !udev->dev.power.runtime_auto)
8e4ceb38 443 p = on_string;
2add5229
AS
444 return sprintf(buf, "%s\n", p);
445}
446
d03f254f
GKH
447static ssize_t level_store(struct device *dev, struct device_attribute *attr,
448 const char *buf, size_t count)
2add5229
AS
449{
450 struct usb_device *udev = to_usb_device(dev);
451 int len = count;
452 char *cp;
9e18c821 453 int rc = count;
7dd9cba5 454 int rv;
2add5229 455
a9030986 456 warn_level();
2add5229
AS
457 cp = memchr(buf, '\n', count);
458 if (cp)
459 len = cp - buf;
460
7dd9cba5
ON
461 rv = usb_lock_device_interruptible(udev);
462 if (rv < 0)
463 return -EINTR;
2add5229 464
2add5229 465 if (len == sizeof on_string - 1 &&
088f7fec 466 strncmp(buf, on_string, len) == 0)
9e18c821 467 usb_disable_autosuspend(udev);
2add5229 468
088f7fec
AS
469 else if (len == sizeof auto_string - 1 &&
470 strncmp(buf, auto_string, len) == 0)
9e18c821 471 usb_enable_autosuspend(udev);
2add5229 472
088f7fec 473 else
2add5229
AS
474 rc = -EINVAL;
475
476 usb_unlock_device(udev);
9e18c821 477 return rc;
2add5229 478}
d03f254f 479static DEVICE_ATTR_RW(level);
2add5229 480
d03f254f
GKH
481static ssize_t usb2_hardware_lpm_show(struct device *dev,
482 struct device_attribute *attr, char *buf)
c1045e87
AX
483{
484 struct usb_device *udev = to_usb_device(dev);
485 const char *p;
486
de68bab4 487 if (udev->usb2_hw_lpm_allowed == 1)
c1045e87
AX
488 p = "enabled";
489 else
490 p = "disabled";
491
492 return sprintf(buf, "%s\n", p);
493}
494
d03f254f
GKH
495static ssize_t usb2_hardware_lpm_store(struct device *dev,
496 struct device_attribute *attr,
497 const char *buf, size_t count)
c1045e87
AX
498{
499 struct usb_device *udev = to_usb_device(dev);
500 bool value;
501 int ret;
502
7dd9cba5
ON
503 ret = usb_lock_device_interruptible(udev);
504 if (ret < 0)
505 return -EINTR;
c1045e87
AX
506
507 ret = strtobool(buf, &value);
508
de68bab4
SS
509 if (!ret) {
510 udev->usb2_hw_lpm_allowed = value;
c1045e87 511 ret = usb_set_usb2_hardware_lpm(udev, value);
de68bab4 512 }
c1045e87
AX
513
514 usb_unlock_device(udev);
515
516 if (!ret)
517 return count;
518
519 return ret;
520}
d03f254f 521static DEVICE_ATTR_RW(usb2_hardware_lpm);
c1045e87 522
d03f254f
GKH
523static ssize_t usb2_lpm_l1_timeout_show(struct device *dev,
524 struct device_attribute *attr,
525 char *buf)
17f34867
MN
526{
527 struct usb_device *udev = to_usb_device(dev);
528 return sprintf(buf, "%d\n", udev->l1_params.timeout);
529}
530
d03f254f
GKH
531static ssize_t usb2_lpm_l1_timeout_store(struct device *dev,
532 struct device_attribute *attr,
533 const char *buf, size_t count)
17f34867
MN
534{
535 struct usb_device *udev = to_usb_device(dev);
536 u16 timeout;
537
538 if (kstrtou16(buf, 0, &timeout))
539 return -EINVAL;
540
541 udev->l1_params.timeout = timeout;
542
543 return count;
544}
d03f254f 545static DEVICE_ATTR_RW(usb2_lpm_l1_timeout);
17f34867 546
d03f254f
GKH
547static ssize_t usb2_lpm_besl_show(struct device *dev,
548 struct device_attribute *attr, char *buf)
17f34867
MN
549{
550 struct usb_device *udev = to_usb_device(dev);
551 return sprintf(buf, "%d\n", udev->l1_params.besl);
552}
553
d03f254f
GKH
554static ssize_t usb2_lpm_besl_store(struct device *dev,
555 struct device_attribute *attr,
556 const char *buf, size_t count)
17f34867
MN
557{
558 struct usb_device *udev = to_usb_device(dev);
559 u8 besl;
560
561 if (kstrtou8(buf, 0, &besl) || besl > 15)
562 return -EINVAL;
563
564 udev->l1_params.besl = besl;
565
566 return count;
567}
d03f254f 568static DEVICE_ATTR_RW(usb2_lpm_besl);
17f34867 569
bf5ce5bf 570static ssize_t usb3_hardware_lpm_u1_show(struct device *dev,
655fe4ef
KS
571 struct device_attribute *attr, char *buf)
572{
573 struct usb_device *udev = to_usb_device(dev);
574 const char *p;
7dd9cba5 575 int rc;
655fe4ef 576
7dd9cba5
ON
577 rc = usb_lock_device_interruptible(udev);
578 if (rc < 0)
579 return -EINTR;
655fe4ef 580
bf5ce5bf 581 if (udev->usb3_lpm_u1_enabled)
655fe4ef
KS
582 p = "enabled";
583 else
584 p = "disabled";
585
586 usb_unlock_device(udev);
587
588 return sprintf(buf, "%s\n", p);
589}
bf5ce5bf
LB
590static DEVICE_ATTR_RO(usb3_hardware_lpm_u1);
591
592static ssize_t usb3_hardware_lpm_u2_show(struct device *dev,
593 struct device_attribute *attr, char *buf)
594{
595 struct usb_device *udev = to_usb_device(dev);
596 const char *p;
7dd9cba5 597 int rc;
bf5ce5bf 598
7dd9cba5
ON
599 rc = usb_lock_device_interruptible(udev);
600 if (rc < 0)
601 return -EINTR;
bf5ce5bf
LB
602
603 if (udev->usb3_lpm_u2_enabled)
604 p = "enabled";
605 else
606 p = "disabled";
607
608 usb_unlock_device(udev);
609
610 return sprintf(buf, "%s\n", p);
611}
612static DEVICE_ATTR_RO(usb3_hardware_lpm_u2);
655fe4ef 613
c1045e87
AX
614static struct attribute *usb2_hardware_lpm_attr[] = {
615 &dev_attr_usb2_hardware_lpm.attr,
17f34867
MN
616 &dev_attr_usb2_lpm_l1_timeout.attr,
617 &dev_attr_usb2_lpm_besl.attr,
c1045e87
AX
618 NULL,
619};
620static struct attribute_group usb2_hardware_lpm_attr_group = {
621 .name = power_group_name,
622 .attrs = usb2_hardware_lpm_attr,
623};
624
655fe4ef 625static struct attribute *usb3_hardware_lpm_attr[] = {
bf5ce5bf
LB
626 &dev_attr_usb3_hardware_lpm_u1.attr,
627 &dev_attr_usb3_hardware_lpm_u2.attr,
655fe4ef
KS
628 NULL,
629};
630static struct attribute_group usb3_hardware_lpm_attr_group = {
631 .name = power_group_name,
632 .attrs = usb3_hardware_lpm_attr,
633};
634
045cac6b
AS
635static struct attribute *power_attrs[] = {
636 &dev_attr_autosuspend.attr,
637 &dev_attr_level.attr,
638 &dev_attr_connected_duration.attr,
639 &dev_attr_active_duration.attr,
640 NULL,
641};
642static struct attribute_group power_attr_group = {
643 .name = power_group_name,
644 .attrs = power_attrs,
645};
646
19c26239
AS
647static int add_power_attributes(struct device *dev)
648{
649 int rc = 0;
650
c1045e87
AX
651 if (is_usb_device(dev)) {
652 struct usb_device *udev = to_usb_device(dev);
045cac6b 653 rc = sysfs_merge_group(&dev->kobj, &power_attr_group);
c1045e87
AX
654 if (udev->usb2_hw_lpm_capable == 1)
655 rc = sysfs_merge_group(&dev->kobj,
656 &usb2_hardware_lpm_attr_group);
bf5ce5bf
LB
657 if (udev->speed == USB_SPEED_SUPER &&
658 udev->lpm_capable == 1)
655fe4ef
KS
659 rc = sysfs_merge_group(&dev->kobj,
660 &usb3_hardware_lpm_attr_group);
c1045e87
AX
661 }
662
19c26239
AS
663 return rc;
664}
665
666static void remove_power_attributes(struct device *dev)
667{
c1045e87 668 sysfs_unmerge_group(&dev->kobj, &usb2_hardware_lpm_attr_group);
045cac6b 669 sysfs_unmerge_group(&dev->kobj, &power_attr_group);
19c26239
AS
670}
671
672#else
673
ceb6c9c8
RW
674#define add_persist_attributes(dev) 0
675#define remove_persist_attributes(dev) do {} while (0)
676
19c26239
AS
677#define add_power_attributes(dev) 0
678#define remove_power_attributes(dev) do {} while (0)
679
ceb6c9c8 680#endif /* CONFIG_PM */
19c26239 681
b41a60ec 682
1da177e4
LT
683/* Descriptor fields */
684#define usb_descriptor_attr_le16(field, format_string) \
685static ssize_t \
d03f254f 686field##_show(struct device *dev, struct device_attribute *attr, \
b724ae77 687 char *buf) \
1da177e4
LT
688{ \
689 struct usb_device *udev; \
690 \
9251644a
ON
691 udev = to_usb_device(dev); \
692 return sprintf(buf, format_string, \
1da177e4
LT
693 le16_to_cpu(udev->descriptor.field)); \
694} \
d03f254f 695static DEVICE_ATTR_RO(field)
1da177e4 696
d03f254f
GKH
697usb_descriptor_attr_le16(idVendor, "%04x\n");
698usb_descriptor_attr_le16(idProduct, "%04x\n");
699usb_descriptor_attr_le16(bcdDevice, "%04x\n");
1da177e4
LT
700
701#define usb_descriptor_attr(field, format_string) \
702static ssize_t \
d03f254f 703field##_show(struct device *dev, struct device_attribute *attr, \
b724ae77 704 char *buf) \
1da177e4
LT
705{ \
706 struct usb_device *udev; \
707 \
9251644a
ON
708 udev = to_usb_device(dev); \
709 return sprintf(buf, format_string, udev->descriptor.field); \
1da177e4 710} \
d03f254f 711static DEVICE_ATTR_RO(field)
1da177e4 712
d03f254f
GKH
713usb_descriptor_attr(bDeviceClass, "%02x\n");
714usb_descriptor_attr(bDeviceSubClass, "%02x\n");
715usb_descriptor_attr(bDeviceProtocol, "%02x\n");
716usb_descriptor_attr(bNumConfigurations, "%d\n");
717usb_descriptor_attr(bMaxPacketSize0, "%d\n");
e03f2e8a
IPG
718
719
720/* show if the device is authorized (1) or not (0) */
d03f254f
GKH
721static ssize_t authorized_show(struct device *dev,
722 struct device_attribute *attr, char *buf)
e03f2e8a
IPG
723{
724 struct usb_device *usb_dev = to_usb_device(dev);
725 return snprintf(buf, PAGE_SIZE, "%u\n", usb_dev->authorized);
726}
727
e03f2e8a
IPG
728/*
729 * Authorize a device to be used in the system
730 *
731 * Writing a 0 deauthorizes the device, writing a 1 authorizes it.
732 */
d03f254f
GKH
733static ssize_t authorized_store(struct device *dev,
734 struct device_attribute *attr, const char *buf,
735 size_t size)
e03f2e8a
IPG
736{
737 ssize_t result;
738 struct usb_device *usb_dev = to_usb_device(dev);
739 unsigned val;
740 result = sscanf(buf, "%u\n", &val);
741 if (result != 1)
742 result = -EINVAL;
743 else if (val == 0)
744 result = usb_deauthorize_device(usb_dev);
745 else
746 result = usb_authorize_device(usb_dev);
469271f8 747 return result < 0 ? result : size;
e03f2e8a 748}
d03f254f
GKH
749static DEVICE_ATTR_IGNORE_LOCKDEP(authorized, S_IRUGO | S_IWUSR,
750 authorized_show, authorized_store);
e03f2e8a 751
253e0572 752/* "Safely remove a device" */
d03f254f
GKH
753static ssize_t remove_store(struct device *dev, struct device_attribute *attr,
754 const char *buf, size_t count)
253e0572
AS
755{
756 struct usb_device *udev = to_usb_device(dev);
757 int rc = 0;
758
759 usb_lock_device(udev);
760 if (udev->state != USB_STATE_NOTATTACHED) {
761
762 /* To avoid races, first unconfigure and then remove */
763 usb_set_configuration(udev, -1);
764 rc = usb_remove_device(udev);
765 }
766 if (rc == 0)
767 rc = count;
768 usb_unlock_device(udev);
769 return rc;
770}
d03f254f 771static DEVICE_ATTR_IGNORE_LOCKDEP(remove, S_IWUSR, NULL, remove_store);
253e0572 772
e03f2e8a 773
1da177e4
LT
774static struct attribute *dev_attrs[] = {
775 /* current configuration's attributes */
b6eb2d84 776 &dev_attr_configuration.attr,
1da177e4
LT
777 &dev_attr_bNumInterfaces.attr,
778 &dev_attr_bConfigurationValue.attr,
779 &dev_attr_bmAttributes.attr,
780 &dev_attr_bMaxPower.attr,
781 /* device attributes */
9af23624 782 &dev_attr_urbnum.attr,
1da177e4
LT
783 &dev_attr_idVendor.attr,
784 &dev_attr_idProduct.attr,
785 &dev_attr_bcdDevice.attr,
786 &dev_attr_bDeviceClass.attr,
787 &dev_attr_bDeviceSubClass.attr,
788 &dev_attr_bDeviceProtocol.attr,
789 &dev_attr_bNumConfigurations.attr,
cf5910bb 790 &dev_attr_bMaxPacketSize0.attr,
1da177e4 791 &dev_attr_speed.attr,
83f7d958 792 &dev_attr_busnum.attr,
1da177e4 793 &dev_attr_devnum.attr,
9af23624 794 &dev_attr_devpath.attr,
1da177e4
LT
795 &dev_attr_version.attr,
796 &dev_attr_maxchild.attr,
7ceec1f1 797 &dev_attr_quirks.attr,
ef955341 798 &dev_attr_avoid_reset_quirk.attr,
e03f2e8a 799 &dev_attr_authorized.attr,
253e0572 800 &dev_attr_remove.attr,
0846e7e9 801 &dev_attr_removable.attr,
024f117c 802 &dev_attr_ltm_capable.attr,
51fa9147
VK
803#ifdef CONFIG_OF
804 &dev_attr_devspec.attr,
805#endif
1da177e4
LT
806 NULL,
807};
808static struct attribute_group dev_attr_grp = {
809 .attrs = dev_attrs,
810};
811
2e5f10e4
AS
812/* When modifying this list, be sure to modify dev_string_attrs_are_visible()
813 * accordingly.
814 */
815static struct attribute *dev_string_attrs[] = {
816 &dev_attr_manufacturer.attr,
817 &dev_attr_product.attr,
818 &dev_attr_serial.attr,
819 NULL
820};
821
587a1f16 822static umode_t dev_string_attrs_are_visible(struct kobject *kobj,
2e5f10e4
AS
823 struct attribute *a, int n)
824{
a864e3aa
HS
825 struct device *dev = container_of(kobj, struct device, kobj);
826 struct usb_device *udev = to_usb_device(dev);
2e5f10e4
AS
827
828 if (a == &dev_attr_manufacturer.attr) {
829 if (udev->manufacturer == NULL)
830 return 0;
831 } else if (a == &dev_attr_product.attr) {
832 if (udev->product == NULL)
833 return 0;
834 } else if (a == &dev_attr_serial.attr) {
835 if (udev->serial == NULL)
836 return 0;
837 }
838 return a->mode;
839}
840
841static struct attribute_group dev_string_attr_grp = {
842 .attrs = dev_string_attrs,
843 .is_visible = dev_string_attrs_are_visible,
844};
845
a4dbd674 846const struct attribute_group *usb_device_groups[] = {
2e5f10e4
AS
847 &dev_attr_grp,
848 &dev_string_attr_grp,
849 NULL
850};
851
69d42a78
AS
852/* Binary descriptors */
853
854static ssize_t
2c3c8bea
CW
855read_descriptors(struct file *filp, struct kobject *kobj,
856 struct bin_attribute *attr,
69d42a78
AS
857 char *buf, loff_t off, size_t count)
858{
a864e3aa
HS
859 struct device *dev = container_of(kobj, struct device, kobj);
860 struct usb_device *udev = to_usb_device(dev);
69d42a78
AS
861 size_t nleft = count;
862 size_t srclen, n;
b4a90d04 863 int cfgno;
217a9081 864 void *src;
69d42a78 865
217a9081
AS
866 /* The binary attribute begins with the device descriptor.
867 * Following that are the raw descriptor entries for all the
868 * configurations (config plus subsidiary descriptors).
69d42a78 869 */
217a9081
AS
870 for (cfgno = -1; cfgno < udev->descriptor.bNumConfigurations &&
871 nleft > 0; ++cfgno) {
872 if (cfgno < 0) {
873 src = &udev->descriptor;
874 srclen = sizeof(struct usb_device_descriptor);
875 } else {
876 src = udev->rawdescriptors[cfgno];
877 srclen = __le16_to_cpu(udev->config[cfgno].desc.
878 wTotalLength);
879 }
69d42a78 880 if (off < srclen) {
217a9081
AS
881 n = min(nleft, srclen - (size_t) off);
882 memcpy(buf, src + off, n);
69d42a78 883 nleft -= n;
217a9081
AS
884 buf += n;
885 off = 0;
886 } else {
887 off -= srclen;
69d42a78
AS
888 }
889 }
69d42a78
AS
890 return count - nleft;
891}
892
893static struct bin_attribute dev_bin_attr_descriptors = {
894 .attr = {.name = "descriptors", .mode = 0444},
895 .read = read_descriptors,
896 .size = 18 + 65535, /* dev descr + max-size raw descriptor */
897};
898
1b21d5e1 899int usb_create_sysfs_dev_files(struct usb_device *udev)
1da177e4
LT
900{
901 struct device *dev = &udev->dev;
1b21d5e1 902 int retval;
1da177e4 903
69d42a78
AS
904 retval = device_create_bin_file(dev, &dev_bin_attr_descriptors);
905 if (retval)
906 goto error;
907
b41a60ec
AS
908 retval = add_persist_attributes(dev);
909 if (retval)
910 goto error;
911
19c26239
AS
912 retval = add_power_attributes(dev);
913 if (retval)
914 goto error;
3b23dd6f 915 return retval;
1b21d5e1 916error:
aa084f3e 917 usb_remove_sysfs_dev_files(udev);
1b21d5e1 918 return retval;
1da177e4
LT
919}
920
9251644a 921void usb_remove_sysfs_dev_files(struct usb_device *udev)
1da177e4
LT
922{
923 struct device *dev = &udev->dev;
924
19c26239 925 remove_power_attributes(dev);
b41a60ec 926 remove_persist_attributes(dev);
69d42a78 927 device_remove_bin_file(dev, &dev_bin_attr_descriptors);
1da177e4
LT
928}
929
025d4430 930/* Interface Association Descriptor fields */
165fe97e
CN
931#define usb_intf_assoc_attr(field, format_string) \
932static ssize_t \
d03f254f 933iad_##field##_show(struct device *dev, struct device_attribute *attr, \
165fe97e
CN
934 char *buf) \
935{ \
2c044a48 936 struct usb_interface *intf = to_usb_interface(dev); \
165fe97e 937 \
2c044a48
GKH
938 return sprintf(buf, format_string, \
939 intf->intf_assoc->field); \
165fe97e 940} \
d03f254f 941static DEVICE_ATTR_RO(iad_##field)
165fe97e 942
d03f254f
GKH
943usb_intf_assoc_attr(bFirstInterface, "%02x\n");
944usb_intf_assoc_attr(bInterfaceCount, "%02d\n");
945usb_intf_assoc_attr(bFunctionClass, "%02x\n");
946usb_intf_assoc_attr(bFunctionSubClass, "%02x\n");
947usb_intf_assoc_attr(bFunctionProtocol, "%02x\n");
165fe97e 948
1da177e4
LT
949/* Interface fields */
950#define usb_intf_attr(field, format_string) \
951static ssize_t \
d03f254f 952field##_show(struct device *dev, struct device_attribute *attr, \
b724ae77 953 char *buf) \
1da177e4 954{ \
9251644a 955 struct usb_interface *intf = to_usb_interface(dev); \
1da177e4 956 \
9251644a 957 return sprintf(buf, format_string, \
b724ae77 958 intf->cur_altsetting->desc.field); \
1da177e4 959} \
d03f254f 960static DEVICE_ATTR_RO(field)
1da177e4 961
d03f254f
GKH
962usb_intf_attr(bInterfaceNumber, "%02x\n");
963usb_intf_attr(bAlternateSetting, "%2d\n");
964usb_intf_attr(bNumEndpoints, "%02x\n");
965usb_intf_attr(bInterfaceClass, "%02x\n");
966usb_intf_attr(bInterfaceSubClass, "%02x\n");
967usb_intf_attr(bInterfaceProtocol, "%02x\n");
1da177e4 968
d03f254f
GKH
969static ssize_t interface_show(struct device *dev, struct device_attribute *attr,
970 char *buf)
1da177e4
LT
971{
972 struct usb_interface *intf;
2e5f10e4 973 char *string;
1da177e4 974
9251644a 975 intf = to_usb_interface(dev);
232275a0 976 string = ACCESS_ONCE(intf->cur_altsetting->string);
2e5f10e4 977 if (!string)
1da177e4 978 return 0;
2e5f10e4 979 return sprintf(buf, "%s\n", string);
1da177e4 980}
d03f254f 981static DEVICE_ATTR_RO(interface);
1da177e4 982
d03f254f
GKH
983static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
984 char *buf)
360b52b0
GK
985{
986 struct usb_interface *intf;
987 struct usb_device *udev;
7521803d 988 struct usb_host_interface *alt;
360b52b0
GK
989
990 intf = to_usb_interface(dev);
991 udev = interface_to_usbdev(intf);
232275a0 992 alt = ACCESS_ONCE(intf->cur_altsetting);
7521803d
GKH
993
994 return sprintf(buf, "usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02X"
81df2d59 995 "ic%02Xisc%02Xip%02Xin%02X\n",
7521803d
GKH
996 le16_to_cpu(udev->descriptor.idVendor),
997 le16_to_cpu(udev->descriptor.idProduct),
998 le16_to_cpu(udev->descriptor.bcdDevice),
999 udev->descriptor.bDeviceClass,
1000 udev->descriptor.bDeviceSubClass,
1001 udev->descriptor.bDeviceProtocol,
1002 alt->desc.bInterfaceClass,
1003 alt->desc.bInterfaceSubClass,
81df2d59
BM
1004 alt->desc.bInterfaceProtocol,
1005 alt->desc.bInterfaceNumber);
360b52b0 1006}
d03f254f 1007static DEVICE_ATTR_RO(modalias);
360b52b0 1008
d03f254f
GKH
1009static ssize_t supports_autosuspend_show(struct device *dev,
1010 struct device_attribute *attr,
1011 char *buf)
49e7cc84 1012{
232275a0 1013 int s;
49e7cc84 1014
7dd9cba5
ON
1015 s = device_lock_interruptible(dev);
1016 if (s < 0)
1017 return -EINTR;
49e7cc84 1018 /* Devices will be autosuspended even when an interface isn't claimed */
232275a0
AS
1019 s = (!dev->driver || to_usb_driver(dev->driver)->supports_autosuspend);
1020 device_unlock(dev);
49e7cc84 1021
232275a0 1022 return sprintf(buf, "%u\n", s);
49e7cc84 1023}
d03f254f 1024static DEVICE_ATTR_RO(supports_autosuspend);
49e7cc84 1025
310d2b41
SK
1026/*
1027 * interface_authorized_show - show authorization status of an USB interface
1028 * 1 is authorized, 0 is deauthorized
1029 */
1030static ssize_t interface_authorized_show(struct device *dev,
1031 struct device_attribute *attr, char *buf)
1032{
1033 struct usb_interface *intf = to_usb_interface(dev);
1034
1035 return sprintf(buf, "%u\n", intf->authorized);
1036}
1037
1038/*
1039 * interface_authorized_store - authorize or deauthorize an USB interface
1040 */
1041static ssize_t interface_authorized_store(struct device *dev,
1042 struct device_attribute *attr, const char *buf, size_t count)
1043{
1044 struct usb_interface *intf = to_usb_interface(dev);
1045 bool val;
1046
1047 if (strtobool(buf, &val) != 0)
1048 return -EINVAL;
1049
1050 if (val)
1051 usb_authorize_interface(intf);
1052 else
1053 usb_deauthorize_interface(intf);
1054
1055 return count;
1056}
1057static struct device_attribute dev_attr_interface_authorized =
1058 __ATTR(authorized, S_IRUGO | S_IWUSR,
1059 interface_authorized_show, interface_authorized_store);
1060
1da177e4
LT
1061static struct attribute *intf_attrs[] = {
1062 &dev_attr_bInterfaceNumber.attr,
1063 &dev_attr_bAlternateSetting.attr,
1064 &dev_attr_bNumEndpoints.attr,
1065 &dev_attr_bInterfaceClass.attr,
1066 &dev_attr_bInterfaceSubClass.attr,
1067 &dev_attr_bInterfaceProtocol.attr,
360b52b0 1068 &dev_attr_modalias.attr,
49e7cc84 1069 &dev_attr_supports_autosuspend.attr,
310d2b41 1070 &dev_attr_interface_authorized.attr,
1da177e4
LT
1071 NULL,
1072};
1073static struct attribute_group intf_attr_grp = {
1074 .attrs = intf_attrs,
1075};
1076
2e5f10e4
AS
1077static struct attribute *intf_assoc_attrs[] = {
1078 &dev_attr_iad_bFirstInterface.attr,
1079 &dev_attr_iad_bInterfaceCount.attr,
1080 &dev_attr_iad_bFunctionClass.attr,
1081 &dev_attr_iad_bFunctionSubClass.attr,
1082 &dev_attr_iad_bFunctionProtocol.attr,
1083 NULL,
1084};
1085
587a1f16 1086static umode_t intf_assoc_attrs_are_visible(struct kobject *kobj,
2e5f10e4
AS
1087 struct attribute *a, int n)
1088{
a864e3aa
HS
1089 struct device *dev = container_of(kobj, struct device, kobj);
1090 struct usb_interface *intf = to_usb_interface(dev);
2e5f10e4
AS
1091
1092 if (intf->intf_assoc == NULL)
1093 return 0;
1094 return a->mode;
1095}
1096
1097static struct attribute_group intf_assoc_attr_grp = {
1098 .attrs = intf_assoc_attrs,
1099 .is_visible = intf_assoc_attrs_are_visible,
1100};
1101
a4dbd674 1102const struct attribute_group *usb_interface_groups[] = {
2e5f10e4
AS
1103 &intf_attr_grp,
1104 &intf_assoc_attr_grp,
1105 NULL
1106};
1107
643de624 1108void usb_create_sysfs_intf_files(struct usb_interface *intf)
1da177e4 1109{
4f62efe6
AS
1110 struct usb_device *udev = interface_to_usbdev(intf);
1111 struct usb_host_interface *alt = intf->cur_altsetting;
1112
352d0263 1113 if (intf->sysfs_files_created || intf->unregistering)
643de624 1114 return;
1da177e4 1115
643de624 1116 if (!alt->string && !(udev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
4f62efe6 1117 alt->string = usb_cache_string(udev, alt->desc.iInterface);
643de624
MN
1118 if (alt->string && device_create_file(&intf->dev, &dev_attr_interface))
1119 ; /* We don't actually care if the function fails. */
7e61559f 1120 intf->sysfs_files_created = 1;
1da177e4
LT
1121}
1122
9251644a 1123void usb_remove_sysfs_intf_files(struct usb_interface *intf)
1da177e4 1124{
7e61559f
AS
1125 if (!intf->sysfs_files_created)
1126 return;
92b0da15 1127
92b0da15 1128 device_remove_file(&intf->dev, &dev_attr_interface);
7e61559f 1129 intf->sysfs_files_created = 0;
1da177e4 1130}