Lines Matching refs:wusbhc

99 static int wusbhc_rh_port_reset(struct wusbhc *wusbhc, u8 port_idx)  in wusbhc_rh_port_reset()  argument
102 struct wusb_port *port = wusb_port_by_idx(wusbhc, port_idx); in wusbhc_rh_port_reset()
114 result = wusb_dev_update_address(wusbhc, wusb_dev); in wusbhc_rh_port_reset()
143 struct wusbhc *wusbhc = usb_hcd_to_wusbhc(usb_hcd); in wusbhc_rh_status_data() local
148 size = DIV_ROUND_UP(wusbhc->ports_max + 1, 8); in wusbhc_rh_status_data()
153 for (cnt = 0; cnt < wusbhc->ports_max; cnt++) { in wusbhc_rh_status_data()
155 if (wusb_port_by_idx(wusbhc, cnt)->change) { in wusbhc_rh_status_data()
174 static int wusbhc_rh_get_hub_descr(struct wusbhc *wusbhc, u16 wValue, in wusbhc_rh_get_hub_descr() argument
179 u16 temp = 1 + (wusbhc->ports_max / 8); in wusbhc_rh_get_hub_descr()
186 descr->bNbrPorts = wusbhc->ports_max; in wusbhc_rh_get_hub_descr()
208 static int wusbhc_rh_clear_hub_feat(struct wusbhc *wusbhc, u16 feature) in wusbhc_rh_clear_hub_feat() argument
233 static int wusbhc_rh_get_hub_status(struct wusbhc *wusbhc, u32 *buf, in wusbhc_rh_get_hub_status() argument
246 static int wusbhc_rh_set_port_feat(struct wusbhc *wusbhc, u16 feature, in wusbhc_rh_set_port_feat() argument
249 struct device *dev = wusbhc->dev; in wusbhc_rh_set_port_feat()
251 if (port_idx > wusbhc->ports_max) in wusbhc_rh_set_port_feat()
265 mutex_lock(&wusbhc->mutex); in wusbhc_rh_set_port_feat()
266 wusb_port_by_idx(wusbhc, port_idx)->status |= USB_PORT_STAT_POWER; in wusbhc_rh_set_port_feat()
267 mutex_unlock(&wusbhc->mutex); in wusbhc_rh_set_port_feat()
270 return wusbhc_rh_port_reset(wusbhc, port_idx); in wusbhc_rh_set_port_feat()
290 static int wusbhc_rh_clear_port_feat(struct wusbhc *wusbhc, u16 feature, in wusbhc_rh_clear_port_feat() argument
294 struct device *dev = wusbhc->dev; in wusbhc_rh_clear_port_feat()
296 if (port_idx > wusbhc->ports_max) in wusbhc_rh_clear_port_feat()
299 mutex_lock(&wusbhc->mutex); in wusbhc_rh_clear_port_feat()
306 wusb_port_by_idx(wusbhc, port_idx)->change &= ~USB_PORT_STAT_C_RESET; in wusbhc_rh_clear_port_feat()
309 wusb_port_by_idx(wusbhc, port_idx)->change &= ~USB_PORT_STAT_C_CONNECTION; in wusbhc_rh_clear_port_feat()
312 __wusbhc_dev_disable(wusbhc, port_idx); in wusbhc_rh_clear_port_feat()
315 wusb_port_by_idx(wusbhc, port_idx)->change &= ~USB_PORT_STAT_C_ENABLE; in wusbhc_rh_clear_port_feat()
329 mutex_unlock(&wusbhc->mutex); in wusbhc_rh_clear_port_feat()
339 static int wusbhc_rh_get_port_status(struct wusbhc *wusbhc, u16 port_idx, in wusbhc_rh_get_port_status() argument
344 if (port_idx > wusbhc->ports_max) in wusbhc_rh_get_port_status()
347 mutex_lock(&wusbhc->mutex); in wusbhc_rh_get_port_status()
348 buf[0] = cpu_to_le16(wusb_port_by_idx(wusbhc, port_idx)->status); in wusbhc_rh_get_port_status()
349 buf[1] = cpu_to_le16(wusb_port_by_idx(wusbhc, port_idx)->change); in wusbhc_rh_get_port_status()
350 mutex_unlock(&wusbhc->mutex); in wusbhc_rh_get_port_status()
364 struct wusbhc *wusbhc = usb_hcd_to_wusbhc(usb_hcd); in wusbhc_rh_control() local
369 wusbhc, wValue, wIndex, in wusbhc_rh_control()
373 result = wusbhc_rh_clear_hub_feat(wusbhc, wValue); in wusbhc_rh_control()
376 result = wusbhc_rh_get_hub_status(wusbhc, (u32 *)buf, wLength); in wusbhc_rh_control()
380 result = wusbhc_rh_set_port_feat(wusbhc, wValue, wIndex >> 8, in wusbhc_rh_control()
384 result = wusbhc_rh_clear_port_feat(wusbhc, wValue, wIndex >> 8, in wusbhc_rh_control()
388 result = wusbhc_rh_get_port_status(wusbhc, wIndex - 1, in wusbhc_rh_control()
394 dev_err(wusbhc->dev, "%s (%p [%p], %x, %x, %x, %p, %x) " in wusbhc_rh_control()
395 "UNIMPLEMENTED\n", __func__, usb_hcd, wusbhc, reqntype, in wusbhc_rh_control()
406 struct wusbhc *wusbhc = usb_hcd_to_wusbhc(usb_hcd); in wusbhc_rh_start_port_reset() local
407 dev_err(wusbhc->dev, "%s (%p [%p], port_idx %u) UNIMPLEMENTED\n", in wusbhc_rh_start_port_reset()
408 __func__, usb_hcd, wusbhc, port_idx); in wusbhc_rh_start_port_reset()
422 int wusbhc_rh_create(struct wusbhc *wusbhc) in wusbhc_rh_create() argument
426 port_size = wusbhc->ports_max * sizeof(wusbhc->port[0]); in wusbhc_rh_create()
427 wusbhc->port = kzalloc(port_size, GFP_KERNEL); in wusbhc_rh_create()
428 if (wusbhc->port == NULL) in wusbhc_rh_create()
430 for (itr = 0; itr < wusbhc->ports_max; itr++) in wusbhc_rh_create()
431 wusb_port_init(&wusbhc->port[itr]); in wusbhc_rh_create()
437 void wusbhc_rh_destroy(struct wusbhc *wusbhc) in wusbhc_rh_destroy() argument
439 kfree(wusbhc->port); in wusbhc_rh_destroy()