- Move hidp_output_report() above
- Removed duplicated code in hidp_output_raw_report()

Signed-off-by: Benjamin Tissoires <benjamin.tissoi...@redhat.com>
---
 net/bluetooth/hidp/core.c | 68 ++++++++---------------------------------------
 1 file changed, 11 insertions(+), 57 deletions(-)

diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
index 469e61b..02670b3 100644
--- a/net/bluetooth/hidp/core.c
+++ b/net/bluetooth/hidp/core.c
@@ -373,62 +373,25 @@ err:
        return ret;
 }
 
-static int hidp_output_raw_report(struct hid_device *hid, unsigned char *data, 
size_t count,
-               unsigned char report_type)
+static int hidp_output_report(struct hid_device *hid, __u8 *data, size_t count)
 {
        struct hidp_session *session = hid->driver_data;
-       int ret;
 
+       return hidp_send_intr_message(session,
+                                     HIDP_TRANS_DATA | HIDP_DATA_RTYPE_OUPUT,
+                                     data, count);
+}
+
+static int hidp_output_raw_report(struct hid_device *hid, unsigned char *data,
+               size_t count, unsigned char report_type)
+{
        if (report_type == HID_OUTPUT_REPORT) {
-               report_type = HIDP_TRANS_DATA | HIDP_DATA_RTYPE_OUPUT;
-               return hidp_send_intr_message(session, report_type,
-                                             data, count);
+               return hidp_output_report(hid, data, count);
        } else if (report_type != HID_FEATURE_REPORT) {
                return -EINVAL;
        }
 
-       if (mutex_lock_interruptible(&session->report_mutex))
-               return -ERESTARTSYS;
-
-       /* Set up our wait, and send the report request to the device. */
-       set_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags);
-       report_type = HIDP_TRANS_SET_REPORT | HIDP_DATA_RTYPE_FEATURE;
-       ret = hidp_send_ctrl_message(session, report_type, data, count);
-       if (ret)
-               goto err;
-
-       /* Wait for the ACK from the device. */
-       while (test_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags) &&
-              !atomic_read(&session->terminate)) {
-               int res;
-
-               res = wait_event_interruptible_timeout(session->report_queue,
-                       !test_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags)
-                               || atomic_read(&session->terminate),
-                       10*HZ);
-               if (res == 0) {
-                       /* timeout */
-                       ret = -EIO;
-                       goto err;
-               }
-               if (res < 0) {
-                       /* signal */
-                       ret = -ERESTARTSYS;
-                       goto err;
-               }
-       }
-
-       if (!session->output_report_success) {
-               ret = -EIO;
-               goto err;
-       }
-
-       ret = count;
-
-err:
-       clear_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags);
-       mutex_unlock(&session->report_mutex);
-       return ret;
+       return hidp_set_raw_report(hid, data[0], data, count, report_type);
 }
 
 static int hidp_raw_request(struct hid_device *hid, unsigned char reportnum,
@@ -445,15 +408,6 @@ static int hidp_raw_request(struct hid_device *hid, 
unsigned char reportnum,
        }
 }
 
-static int hidp_output_report(struct hid_device *hid, __u8 *data, size_t count)
-{
-       struct hidp_session *session = hid->driver_data;
-
-       return hidp_send_intr_message(session,
-                                     HIDP_TRANS_DATA | HIDP_DATA_RTYPE_OUPUT,
-                                     data, count);
-}
-
 static void hidp_idle_timeout(unsigned long arg)
 {
        struct hidp_session *session = (struct hidp_session *) arg;
-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to