| From ac7992081abba87627c9e91735b3309584b48585 Mon Sep 17 00:00:00 2001 |
| From: Gregory Hermant <gregory.hermant@calao-systems.com> |
| Date: Wed, 14 Nov 2012 14:27:02 +0100 |
| Subject: [PATCH] add support for the ST-Ericsson CG2900 GPS FM Bluetooth |
| combo controller |
| |
| |
| Signed-off-by: Gregory Hermant <gregory.hermant@calao-systems.com> |
| --- |
| tools/hciattach.c | 22 +++++++++++++++------- |
| tools/hciattach.h | 1 + |
| 2 files changed, 16 insertions(+), 7 deletions(-) |
| |
| diff --git a/tools/hciattach.c b/tools/hciattach.c |
| index e4d5aa1..7f08243 100644 |
| --- a/tools/hciattach.c |
| +++ b/tools/hciattach.c |
| @@ -1066,6 +1066,11 @@ struct uart_t uart[] = { |
| { "texasalt", 0x0000, 0x0000, HCI_UART_LL, 115200, 115200, |
| FLOW_CTL, DISABLE_PM, NULL, texasalt, NULL }, |
| |
| + /* ST-Ericsson CG2900 GPS FM Bluetooth combo controller */ |
| + { "cg2900", 0x0000, 0x0000, HCI_UART_STE, 115200, 115200, |
| + FLOW_CTL, DISABLE_PM, NULL, NULL }, |
| + |
| + |
| /* ST Microelectronics minikits based on STLC2410/STLC2415 */ |
| { "st", 0x0000, 0x0000, HCI_UART_H4, 57600, 115200, |
| FLOW_CTL, DISABLE_PM, NULL, st }, |
| @@ -1157,10 +1162,10 @@ static struct uart_t * get_by_type(char *type) |
| } |
| |
| /* Initialize UART driver */ |
| -static int init_uart(char *dev, struct uart_t *u, int send_break, int raw) |
| +static int init_uart(char *dev, struct uart_t *u, int send_break, int raw, int line_disc) |
| { |
| struct termios ti; |
| - int fd, i; |
| + int fd; |
| unsigned long flags = 0; |
| |
| if (raw) |
| @@ -1217,8 +1222,7 @@ static int init_uart(char *dev, struct uart_t *u, int send_break, int raw) |
| } |
| |
| /* Set TTY to N_HCI line discipline */ |
| - i = N_HCI; |
| - if (ioctl(fd, TIOCSETD, &i) < 0) { |
| + if (ioctl(fd, TIOCSETD, &line_disc) < 0) { |
| perror("Can't set line discipline"); |
| return -1; |
| } |
| @@ -1243,7 +1247,7 @@ static void usage(void) |
| { |
| printf("hciattach - HCI UART driver initialization utility\n"); |
| printf("Usage:\n"); |
| - printf("\thciattach [-n] [-p] [-b] [-r] [-t timeout] [-s initial_speed] <tty> <type | id> [speed] [flow|noflow] [bdaddr]\n"); |
| + printf("\thciattach [-n] [-p] [-a line_disc_nr] [-b] [-r] [-t timeout] [-s initial_speed] <tty> <type | id> [speed] [flow|noflow] [bdaddr]\n"); |
| printf("\thciattach -l\n"); |
| } |
| |
| @@ -1252,6 +1256,7 @@ int main(int argc, char *argv[]) |
| struct uart_t *u = NULL; |
| int detach, printpid, raw, opt, i, n, ld, err; |
| int to = 10; |
| + int line_disc = N_HCI; |
| int init_speed = 0; |
| int send_break = 0; |
| pid_t pid; |
| @@ -1264,8 +1269,11 @@ int main(int argc, char *argv[]) |
| printpid = 0; |
| raw = 0; |
| |
| - while ((opt=getopt(argc, argv, "bnpt:s:lr")) != EOF) { |
| + while ((opt=getopt(argc, argv, "bnpt:s:lra:")) != EOF) { |
| switch(opt) { |
| + case 'a': |
| + line_disc = atoi(optarg); |
| + break; |
| case 'b': |
| send_break = 1; |
| break; |
| @@ -1381,7 +1389,7 @@ int main(int argc, char *argv[]) |
| alarm(to); |
| bcsp_max_retries = to; |
| |
| - n = init_uart(dev, u, send_break, raw); |
| + n = init_uart(dev, u, send_break, raw, line_disc); |
| if (n < 0) { |
| perror("Can't initialize device"); |
| exit(1); |
| diff --git a/tools/hciattach.h b/tools/hciattach.h |
| index fed0d11..09b534d 100644 |
| --- a/tools/hciattach.h |
| +++ b/tools/hciattach.h |
| @@ -39,6 +39,7 @@ |
| #define HCI_UART_H4DS 3 |
| #define HCI_UART_LL 4 |
| #define HCI_UART_ATH3K 5 |
| +#define HCI_UART_STE 6 |
| |
| #define HCI_UART_RAW_DEVICE 0 |
| |
| -- |
| 1.7.9.5 |
| |