diff options
Diffstat (limited to 'drivers/usb/wusbcore')
-rw-r--r-- | drivers/usb/wusbcore/wusbhc.c | 32 | ||||
-rw-r--r-- | drivers/usb/wusbcore/wusbhc.h | 1 |
2 files changed, 33 insertions, 0 deletions
diff --git a/drivers/usb/wusbcore/wusbhc.c b/drivers/usb/wusbcore/wusbhc.c index ee6256f23636..eab86e4bc770 100644 --- a/drivers/usb/wusbcore/wusbhc.c +++ b/drivers/usb/wusbcore/wusbhc.c | |||
@@ -147,10 +147,40 @@ static ssize_t wusb_chid_store(struct device *dev, | |||
147 | } | 147 | } |
148 | static DEVICE_ATTR(wusb_chid, 0644, wusb_chid_show, wusb_chid_store); | 148 | static DEVICE_ATTR(wusb_chid, 0644, wusb_chid_show, wusb_chid_store); |
149 | 149 | ||
150 | |||
151 | static ssize_t wusb_phy_rate_show(struct device *dev, | ||
152 | struct device_attribute *attr, | ||
153 | char *buf) | ||
154 | { | ||
155 | struct wusbhc *wusbhc = usbhc_dev_to_wusbhc(dev); | ||
156 | |||
157 | return sprintf(buf, "%d\n", wusbhc->phy_rate); | ||
158 | } | ||
159 | |||
160 | static ssize_t wusb_phy_rate_store(struct device *dev, | ||
161 | struct device_attribute *attr, | ||
162 | const char *buf, size_t size) | ||
163 | { | ||
164 | struct wusbhc *wusbhc = usbhc_dev_to_wusbhc(dev); | ||
165 | uint8_t phy_rate; | ||
166 | ssize_t result; | ||
167 | |||
168 | result = sscanf(buf, "%hhu", &phy_rate); | ||
169 | if (result != 1) | ||
170 | return -EINVAL; | ||
171 | if (phy_rate >= UWB_PHY_RATE_INVALID) | ||
172 | return -EINVAL; | ||
173 | |||
174 | wusbhc->phy_rate = phy_rate; | ||
175 | return size; | ||
176 | } | ||
177 | static DEVICE_ATTR(wusb_phy_rate, 0644, wusb_phy_rate_show, wusb_phy_rate_store); | ||
178 | |||
150 | /* Group all the WUSBHC attributes */ | 179 | /* Group all the WUSBHC attributes */ |
151 | static struct attribute *wusbhc_attrs[] = { | 180 | static struct attribute *wusbhc_attrs[] = { |
152 | &dev_attr_wusb_trust_timeout.attr, | 181 | &dev_attr_wusb_trust_timeout.attr, |
153 | &dev_attr_wusb_chid.attr, | 182 | &dev_attr_wusb_chid.attr, |
183 | &dev_attr_wusb_phy_rate.attr, | ||
154 | NULL, | 184 | NULL, |
155 | }; | 185 | }; |
156 | 186 | ||
@@ -177,6 +207,8 @@ int wusbhc_create(struct wusbhc *wusbhc) | |||
177 | int result = 0; | 207 | int result = 0; |
178 | 208 | ||
179 | wusbhc->trust_timeout = WUSB_TRUST_TIMEOUT_MS; | 209 | wusbhc->trust_timeout = WUSB_TRUST_TIMEOUT_MS; |
210 | wusbhc->phy_rate = UWB_PHY_RATE_INVALID - 1; | ||
211 | |||
180 | mutex_init(&wusbhc->mutex); | 212 | mutex_init(&wusbhc->mutex); |
181 | result = wusbhc_mmcie_create(wusbhc); | 213 | result = wusbhc_mmcie_create(wusbhc); |
182 | if (result < 0) | 214 | if (result < 0) |
diff --git a/drivers/usb/wusbcore/wusbhc.h b/drivers/usb/wusbcore/wusbhc.h index 797c2453a35b..fd2fd4e277e1 100644 --- a/drivers/usb/wusbcore/wusbhc.h +++ b/drivers/usb/wusbcore/wusbhc.h | |||
@@ -253,6 +253,7 @@ struct wusbhc { | |||
253 | 253 | ||
254 | unsigned trust_timeout; /* in jiffies */ | 254 | unsigned trust_timeout; /* in jiffies */ |
255 | struct wusb_ckhdid chid; | 255 | struct wusb_ckhdid chid; |
256 | uint8_t phy_rate; | ||
256 | struct wuie_host_info *wuie_host_info; | 257 | struct wuie_host_info *wuie_host_info; |
257 | 258 | ||
258 | struct mutex mutex; /* locks everything else */ | 259 | struct mutex mutex; /* locks everything else */ |