Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 44bfce5c authored by David S. Miller's avatar David S. Miller
Browse files
parents bcf4d812 15c697ce
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -808,6 +808,7 @@ static int btmrvl_sdio_host_to_card(struct btmrvl_private *priv,

exit:
	sdio_release_host(card->func);
	kfree(tmpbuf);

	return ret;
}
+3 −0
Original line number Diff line number Diff line
@@ -377,6 +377,9 @@ struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, __u8

	if (acl->state == BT_CONNECTED &&
			(sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
		acl->power_save = 1;
		hci_conn_enter_active_mode(acl);

		if (lmp_esco_capable(hdev))
			hci_setup_sync(sco, acl->handle);
		else
+1 −0
Original line number Diff line number Diff line
@@ -1699,6 +1699,7 @@ static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_bu
		break;

	case 0x1c:	/* SCO interval rejected */
	case 0x1a:	/* Unsupported Remote Feature */
	case 0x1f:	/* Unspecified error */
		if (conn->out && conn->attempt < 2) {
			conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
+24 −25
Original line number Diff line number Diff line
@@ -703,29 +703,9 @@ static void hidp_close(struct hid_device *hid)
static int hidp_parse(struct hid_device *hid)
{
	struct hidp_session *session = hid->driver_data;
	struct hidp_connadd_req *req = session->req;
	unsigned char *buf;
	int ret;

	buf = kmalloc(req->rd_size, GFP_KERNEL);
	if (!buf)
		return -ENOMEM;

	if (copy_from_user(buf, req->rd_data, req->rd_size)) {
		kfree(buf);
		return -EFAULT;
	}

	ret = hid_parse_report(session->hid, buf, req->rd_size);

	kfree(buf);

	if (ret)
		return ret;

	session->req = NULL;

	return 0;
	return hid_parse_report(session->hid, session->rd_data,
			session->rd_size);
}

static int hidp_start(struct hid_device *hid)
@@ -770,12 +750,24 @@ static int hidp_setup_hid(struct hidp_session *session,
	bdaddr_t src, dst;
	int err;

	session->rd_data = kzalloc(req->rd_size, GFP_KERNEL);
	if (!session->rd_data)
		return -ENOMEM;

	if (copy_from_user(session->rd_data, req->rd_data, req->rd_size)) {
		err = -EFAULT;
		goto fault;
	}
	session->rd_size = req->rd_size;

	hid = hid_allocate_device();
	if (IS_ERR(hid))
		return PTR_ERR(hid);
	if (IS_ERR(hid)) {
		err = PTR_ERR(hid);
		goto fault;
	}

	session->hid = hid;
	session->req = req;

	hid->driver_data = session;

	baswap(&src, &bt_sk(session->ctrl_sock->sk)->src);
@@ -806,6 +798,10 @@ static int hidp_setup_hid(struct hidp_session *session,
	hid_destroy_device(hid);
	session->hid = NULL;

fault:
	kfree(session->rd_data);
	session->rd_data = NULL;

	return err;
}

@@ -900,6 +896,9 @@ int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock,
		session->hid = NULL;
	}

	kfree(session->rd_data);
	session->rd_data = NULL;

purge:
	skb_queue_purge(&session->ctrl_transmit);
	skb_queue_purge(&session->intr_transmit);
+3 −1
Original line number Diff line number Diff line
@@ -154,7 +154,9 @@ struct hidp_session {
	struct sk_buff_head ctrl_transmit;
	struct sk_buff_head intr_transmit;

	struct hidp_connadd_req *req;
	/* Report descriptor */
	__u8 *rd_data;
	uint rd_size;
};

static inline void hidp_schedule(struct hidp_session *session)
Loading