diff options
-rw-r--r-- | net/bluetooth/hci_sysfs.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/net/bluetooth/hci_sysfs.c b/net/bluetooth/hci_sysfs.c index 84360c117d4e..a18871e01582 100644 --- a/net/bluetooth/hci_sysfs.c +++ b/net/bluetooth/hci_sysfs.c | |||
@@ -113,11 +113,13 @@ static ssize_t show_inquiry_cache(struct device *dev, struct device_attribute *a | |||
113 | struct inquiry_data *data = &e->data; | 113 | struct inquiry_data *data = &e->data; |
114 | bdaddr_t bdaddr; | 114 | bdaddr_t bdaddr; |
115 | baswap(&bdaddr, &data->bdaddr); | 115 | baswap(&bdaddr, &data->bdaddr); |
116 | n += sprintf(buf + n, "%s %d %d %d 0x%.2x%.2x%.2x 0x%.4x %d %u\n", | 116 | n += sprintf(buf + n, "%s %d %d %d 0x%.2x%.2x%.2x 0x%.4x %d %d %u\n", |
117 | batostr(&bdaddr), | 117 | batostr(&bdaddr), |
118 | data->pscan_rep_mode, data->pscan_period_mode, data->pscan_mode, | 118 | data->pscan_rep_mode, data->pscan_period_mode, |
119 | data->dev_class[2], data->dev_class[1], data->dev_class[0], | 119 | data->pscan_mode, data->dev_class[2], |
120 | __le16_to_cpu(data->clock_offset), data->rssi, e->timestamp); | 120 | data->dev_class[1], data->dev_class[0], |
121 | __le16_to_cpu(data->clock_offset), | ||
122 | data->rssi, data->ssp_mode, e->timestamp); | ||
121 | } | 123 | } |
122 | 124 | ||
123 | hci_dev_unlock_bh(hdev); | 125 | hci_dev_unlock_bh(hdev); |
@@ -249,15 +251,28 @@ static ssize_t show_conn_address(struct device *dev, struct device_attribute *at | |||
249 | return sprintf(buf, "%s\n", batostr(&bdaddr)); | 251 | return sprintf(buf, "%s\n", batostr(&bdaddr)); |
250 | } | 252 | } |
251 | 253 | ||
254 | static ssize_t show_conn_features(struct device *dev, struct device_attribute *attr, char *buf) | ||
255 | { | ||
256 | struct hci_conn *conn = dev_get_drvdata(dev); | ||
257 | |||
258 | return sprintf(buf, "0x%02x%02x%02x%02x%02x%02x%02x%02x\n", | ||
259 | conn->features[0], conn->features[1], | ||
260 | conn->features[2], conn->features[3], | ||
261 | conn->features[4], conn->features[5], | ||
262 | conn->features[6], conn->features[7]); | ||
263 | } | ||
264 | |||
252 | #define CONN_ATTR(_name,_mode,_show,_store) \ | 265 | #define CONN_ATTR(_name,_mode,_show,_store) \ |
253 | struct device_attribute conn_attr_##_name = __ATTR(_name,_mode,_show,_store) | 266 | struct device_attribute conn_attr_##_name = __ATTR(_name,_mode,_show,_store) |
254 | 267 | ||
255 | static CONN_ATTR(type, S_IRUGO, show_conn_type, NULL); | 268 | static CONN_ATTR(type, S_IRUGO, show_conn_type, NULL); |
256 | static CONN_ATTR(address, S_IRUGO, show_conn_address, NULL); | 269 | static CONN_ATTR(address, S_IRUGO, show_conn_address, NULL); |
270 | static CONN_ATTR(features, S_IRUGO, show_conn_features, NULL); | ||
257 | 271 | ||
258 | static struct device_attribute *conn_attrs[] = { | 272 | static struct device_attribute *conn_attrs[] = { |
259 | &conn_attr_type, | 273 | &conn_attr_type, |
260 | &conn_attr_address, | 274 | &conn_attr_address, |
275 | &conn_attr_features, | ||
261 | NULL | 276 | NULL |
262 | }; | 277 | }; |
263 | 278 | ||