Index: uspace/lib/usbhost/src/ddf_helpers.c
===================================================================
--- uspace/lib/usbhost/src/ddf_helpers.c	(revision 5a6cc679876514e29ac7899053554db66db754d9)
+++ uspace/lib/usbhost/src/ddf_helpers.c	(revision 0247bd24eab20736d9bd6ad605a5fffbf6d4fc4c)
@@ -254,7 +254,10 @@
 }
 
-/** Inbound communication interface function.
+/**
+ * Transfer issuing interface function.
+ *
  * @param fun DDF function.
  * @param target Communication target.
+ * @param dir Communication direction.
  * @param setup_data Data to use in setup stage (control transfers).
  * @param data Pointer to data buffer.
@@ -264,6 +267,6 @@
  * @return Error code.
  */
-static errno_t dev_read(ddf_fun_t *fun, usb_target_t target,
-    uint64_t setup_data, char *data, size_t size,
+static errno_t transfer(ddf_fun_t *fun, usb_target_t target,
+    usb_direction_t dir, uint64_t setup_data, char *data, size_t size,
     usbhc_iface_transfer_callback_t callback, void *arg)
 {
@@ -283,41 +286,9 @@
 		return EBADMEM;
 
-	return bus_device_send_batch(dev, target, USB_DIRECTION_IN,
-	    data, size, setup_data,
-	    callback, arg, "READ");
-}
-
-/** Outbound communication interface function.
- * @param fun DDF function.
- * @param target Communication target.
- * @param setup_data Data to use in setup stage (control transfers).
- * @param data Pointer to data buffer.
- * @param size Size of the data buffer.
- * @param callback Function to call on communication end.
- * @param arg Argument passed to the callback function.
- * @return Error code.
- */
-static errno_t dev_write(ddf_fun_t *fun, usb_target_t target,
-    uint64_t setup_data, const char *data, size_t size,
-    usbhc_iface_transfer_callback_t callback, void *arg)
-{
-	assert(fun);
-	device_t *dev = ddf_fun_data_get(fun);
-	assert(dev);
-
-	target.address = dev->address;
-
-	if (!usb_target_is_valid(&target))
-		return EINVAL;
-
-	if (size > 0 && data == NULL)
-		return EBADMEM;
-
-	if (!callback && arg)
-		return EBADMEM;
-
-	return bus_device_send_batch(dev, target, USB_DIRECTION_OUT,
+	const char *name = (dir == USB_DIRECTION_IN) ? "READ" : "WRITE";
+
+	return bus_device_send_batch(dev, target, dir,
 	    (char *) data, size, setup_data,
-	    callback, arg, "WRITE");
+	    callback, arg, name);
 }
 
@@ -337,6 +308,5 @@
 	.unregister_endpoint = unregister_endpoint,
 
-	.read = dev_read,
-	.write = dev_write,
+	.transfer = transfer,
 };
 
