Index: uspace/lib/usbhost/include/usb/host/bus.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/bus.h	(revision 58ac3ec7e750d4732f544c1c153056f657443a75)
+++ uspace/lib/usbhost/include/usb/host/bus.h	(revision 6b2930bfefb987dc1d4ba5cbee4cf72814ef52ce)
@@ -82,4 +82,7 @@
 	int (*remove_device)(bus_t *, hcd_t *, device_t *);
 
+	int (*online_device)(bus_t *, hcd_t *, device_t *);			/**< Optional */
+	int (*offline_device)(bus_t *, hcd_t *, device_t *);			/**< Optional */
+
 	/* The following operations are protected by a bus guard. */
 	endpoint_t *(*create_endpoint)(bus_t *);
@@ -123,4 +126,7 @@
 int bus_remove_device(bus_t *, hcd_t *, device_t *);
 
+int bus_online_device(bus_t *, hcd_t *, device_t *);
+int bus_offline_device(bus_t *, hcd_t *, device_t *);
+
 int bus_add_endpoint(bus_t *, device_t *, const usb_endpoint_desc_t *, endpoint_t **);
 endpoint_t *bus_find_endpoint(bus_t *, device_t *, usb_target_t, usb_direction_t);
Index: uspace/lib/usbhost/include/usb/host/ddf_helpers.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/ddf_helpers.h	(revision 58ac3ec7e750d4732f544c1c153056f657443a75)
+++ uspace/lib/usbhost/include/usb/host/ddf_helpers.h	(revision 6b2930bfefb987dc1d4ba5cbee4cf72814ef52ce)
@@ -85,4 +85,6 @@
 void hcd_ddf_device_destroy(device_t *);
 int hcd_ddf_device_explore(hcd_t *, device_t *);
+int hcd_ddf_device_online(ddf_fun_t *);
+int hcd_ddf_device_offline(ddf_fun_t *);
 
 hcd_t *dev_to_hcd(ddf_dev_t *dev);
Index: uspace/lib/usbhost/src/bus.c
===================================================================
--- uspace/lib/usbhost/src/bus.c	(revision 58ac3ec7e750d4732f544c1c153056f657443a75)
+++ uspace/lib/usbhost/src/bus.c	(revision 6b2930bfefb987dc1d4ba5cbee4cf72814ef52ce)
@@ -101,4 +101,28 @@
 }
 
+int bus_online_device(bus_t *bus, hcd_t *hcd, device_t *dev)
+{
+	assert(bus);
+	assert(hcd);
+	assert(dev);
+
+	if (!bus->ops.online_device)
+		return ENOTSUP;
+
+	return bus->ops.online_device(bus, hcd, dev);
+}
+
+int bus_offline_device(bus_t *bus, hcd_t *hcd, device_t *dev)
+{
+	assert(bus);
+	assert(hcd);
+	assert(dev);
+
+	if (!bus->ops.offline_device)
+		return ENOTSUP;
+
+	return bus->ops.offline_device(bus, hcd, dev);
+}
+
 int bus_add_endpoint(bus_t *bus, device_t *device, const usb_endpoint_desc_t *desc, endpoint_t **out_ep)
 {
Index: uspace/lib/usbhost/src/ddf_helpers.c
===================================================================
--- uspace/lib/usbhost/src/ddf_helpers.c	(revision 58ac3ec7e750d4732f544c1c153056f657443a75)
+++ uspace/lib/usbhost/src/ddf_helpers.c	(revision 6b2930bfefb987dc1d4ba5cbee4cf72814ef52ce)
@@ -448,4 +448,32 @@
 }
 
+int hcd_ddf_device_online(ddf_fun_t *fun)
+{
+	assert(fun);
+
+	hcd_t *hcd = dev_to_hcd(ddf_fun_get_dev(fun));
+	device_t *dev = ddf_fun_data_get(fun);
+	assert(dev);
+	assert(hcd->bus);
+
+	usb_log_info("Device(%d): Requested to be brought online.", dev->address);
+
+	return bus_online_device(hcd->bus, hcd, dev);
+}
+
+int hcd_ddf_device_offline(ddf_fun_t *fun)
+{
+	assert(fun);
+
+	hcd_t *hcd = dev_to_hcd(ddf_fun_get_dev(fun));
+	device_t *dev = ddf_fun_data_get(fun);
+	assert(dev);
+	assert(hcd->bus);
+
+	usb_log_info("Device(%d): Requested to be taken offline.", dev->address);
+
+	return bus_offline_device(hcd->bus, hcd, dev);
+}
+
 static int hcd_ddf_new_device(hcd_t *hcd, ddf_dev_t *hc, device_t *hub, unsigned port)
 {
