input_sync(dev);
 }
 
+static int __hidp_send_ctrl_message(struct hidp_session *session,
+                       unsigned char hdr, unsigned char *data, int size)
+{
+       struct sk_buff *skb;
+
+       BT_DBG("session %p data %p size %d", session, data, size);
+
+       if (!(skb = alloc_skb(size + 1, GFP_ATOMIC))) {
+               BT_ERR("Can't allocate memory for new frame");
+               return -ENOMEM;
+       }
+
+       *skb_put(skb, 1) = hdr;
+       if (data && size > 0)
+               memcpy(skb_put(skb, size), data, size);
+
+       skb_queue_tail(&session->ctrl_transmit, skb);
+
+       return 0;
+}
+
+static inline int hidp_send_ctrl_message(struct hidp_session *session,
+                       unsigned char hdr, unsigned char *data, int size)
+{
+       int err;
+
+       err = __hidp_send_ctrl_message(session, hdr, data, size);
+
+       hidp_schedule(session);
+
+       return err;
+}
+
 static int hidp_queue_report(struct hidp_session *session,
                                unsigned char *data, int size)
 {
 
 static int hidp_output_raw_report(struct hid_device *hid, unsigned char *data, size_t count)
 {
-       if (hidp_queue_report(hid->driver_data, data, count))
+       if (hidp_send_ctrl_message(hid->driver_data,
+                       HIDP_TRANS_SET_REPORT | HIDP_DATA_RTYPE_FEATURE,
+                       data, count))
                return -ENOMEM;
        return count;
 }
                del_timer(&session->timer);
 }
 
-static int __hidp_send_ctrl_message(struct hidp_session *session,
-                       unsigned char hdr, unsigned char *data, int size)
-{
-       struct sk_buff *skb;
-
-       BT_DBG("session %p data %p size %d", session, data, size);
-
-       if (!(skb = alloc_skb(size + 1, GFP_ATOMIC))) {
-               BT_ERR("Can't allocate memory for new frame");
-               return -ENOMEM;
-       }
-
-       *skb_put(skb, 1) = hdr;
-       if (data && size > 0)
-               memcpy(skb_put(skb, size), data, size);
-
-       skb_queue_tail(&session->ctrl_transmit, skb);
-
-       return 0;
-}
-
-static inline int hidp_send_ctrl_message(struct hidp_session *session,
-                       unsigned char hdr, unsigned char *data, int size)
-{
-       int err;
-
-       err = __hidp_send_ctrl_message(session, hdr, data, size);
-
-       hidp_schedule(session);
-
-       return err;
-}
-
 static void hidp_process_handshake(struct hidp_session *session,
                                        unsigned char param)
 {