From: kernel@gkr.i24.cc
To: Johan Hedberg <johan.hedberg@gmail.com>
Cc: BlueZ development <linux-bluetooth@vger.kernel.org>,
Gordon Kramer <kernel@gkr.i24.cc>
Subject: [PATCH v5 1/2] hid2hci add CSR 8510 A10 support
Date: Wed, 7 Jan 2015 23:03:59 +0100 [thread overview]
Message-ID: <1420668240-5100-2-git-send-email-kernel@gkr.i24.cc> (raw)
In-Reply-To: <1420668240-5100-1-git-send-email-kernel@gkr.i24.cc>
From: Gordon Kramer <kernel@gkr.i24.cc>
add a new method "csr2" to hid2hci that sends a control message
to the usb device which switches the Cambridge Silicon Radio 8510 A10
as used in Sitecom CNT-524
fixes: https://bugzilla.kernel.org/show_bug.cgi?id=69181
---
Notes:
5th version, coding style corrections from Johan Hedberg and Anderson Lizardo, compilation fix
tools/hid2hci.1 | 2 +-
tools/hid2hci.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 51 insertions(+), 2 deletions(-)
diff --git a/tools/hid2hci.1 b/tools/hid2hci.1
index 8c5d520..c6876a3 100644
--- a/tools/hid2hci.1
+++ b/tools/hid2hci.1
@@ -32,7 +32,7 @@ mode and back.
.B --mode= [hid, hci]
Sets the mode to switch the device into
.TP
-.B --method= [csr, logitech-hid, dell]
+.B --method= [csr, csr2, logitech-hid, dell]
Which vendor method to use for switching the device.
.TP
.B --devpath=
diff --git a/tools/hid2hci.c b/tools/hid2hci.c
index a183bfa..3eedf4e 100644
--- a/tools/hid2hci.c
+++ b/tools/hid2hci.c
@@ -119,6 +119,52 @@ static int usb_switch_csr(int fd, enum mode mode)
return err;
}
+static int usb_switch_csr2(int fd, enum mode mode)
+{
+ int err = 0;
+ struct usbfs_disconnect disconnect;
+ char report[] = {
+ 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+
+ switch (mode) {
+ case HCI:
+ /* send report as is */
+ disconnect.interface = 0;
+ disconnect.flags = USBFS_DISCONNECT_EXCEPT_DRIVER;
+ strcpy(disconnect.driver, "usbfs");
+
+ if (ioctl(fd, USBFS_IOCTL_DISCONNECT, &disconnect) < 0) {
+ fprintf(stderr, "Can't claim interface: %s (%d)\n",
+ strerror(errno), errno);
+ return -1;
+ }
+
+ /* Set_report request with
+ * report id: 0x01, report type: feature (0x03)
+ * on interface 0
+ */
+ err = control_message(fd,
+ USB_ENDPOINT_OUT | USB_TYPE_CLASS |
+ USB_RECIP_INTERFACE,
+ USB_REQ_SET_CONFIGURATION,
+ 0x01 | (0x03 << 8),
+ 0, report, sizeof(report), 5000);
+ /* unable to detect whether the previous state
+ * already was HCI (EALREADY)
+ */
+ break;
+ case HID:
+ /* currently unknown how to switch to HID */
+ fprintf(stderr,
+ "csr2: Switching to hid mode is not implemented\n");
+ err = -1;
+ break;
+ }
+
+ return err;
+}
+
static int hid_logitech_send_report(int fd, const char *buf, size_t size)
{
struct hiddev_report_info rinfo;
@@ -258,7 +304,7 @@ static void usage(const char *error)
printf("Usage: hid2hci [options]\n"
" --mode= mode to switch to [hid|hci] (default hci)\n"
" --devpath= sys device path\n"
- " --method= method to use to switch [csr|logitech-hid|dell]\n"
+ " --method= method to use to switch [csr|csr2|logitech-hid|dell]\n"
" --help\n\n");
}
@@ -311,6 +357,9 @@ int main(int argc, char *argv[])
if (!strcmp(optarg, "csr")) {
method = METHOD_CSR;
usb_switch = usb_switch_csr;
+ } else if (!strcmp(optarg, "csr2")) {
+ method = METHOD_CSR;
+ usb_switch = usb_switch_csr2;
} else if (!strcmp(optarg, "logitech-hid")) {
method = METHOD_LOGITECH_HID;
} else if (!strcmp(optarg, "dell")) {
--
1.9.1
next prev parent reply other threads:[~2015-01-07 22:03 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-30 21:59 PATCH hid2hci for CSR 8510 A10 Gordon
2014-03-28 19:21 ` Gordon
2014-03-28 19:49 ` Johan Hedberg
2014-03-28 20:23 ` Gordon
2014-03-29 11:37 ` Gordon
2014-03-29 11:37 ` [PATCH] hid2hci add CSR 8510 A10 support Gordon
2014-03-31 12:17 ` Anderson Lizardo
2014-04-01 21:38 ` [PATCH v3] " Gordon
2015-01-07 8:24 ` Gordon
2015-01-07 9:12 ` Johan Hedberg
2015-01-07 10:10 ` [PATCH v4] " kernel
2015-01-07 20:31 ` Johan Hedberg
2015-01-07 20:52 ` Gordon
2015-01-07 21:21 ` Gordon
2015-01-07 22:03 ` [PATCH v5 0/2] " kernel
2015-01-07 22:03 ` kernel [this message]
2015-01-07 22:04 ` [PATCH v5 2/2] use const uint_8* for pointer in control_message kernel
2015-01-08 10:02 ` [PATCH v5 0/2] hid2hci add CSR 8510 A10 support Johan Hedberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1420668240-5100-2-git-send-email-kernel@gkr.i24.cc \
--to=kernel@gkr.i24.cc \
--cc=johan.hedberg@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).