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

Commit 7dec65c8 authored by Johan Hedberg's avatar Johan Hedberg Committed by Gustavo Padovan
Browse files

Bluetooth: Initial skeleton for Three-wire UART (H5) support



This patch adds the initial skeleton for Three-wire UART (H5) support
and hooks it up to the HCI UART framework.

Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
Signed-off-by: default avatarGustavo Padovan <gustavo.padovan@collabora.co.uk>
parent 83ce9a06
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -81,6 +81,18 @@ config BT_HCIUART_LL

	  Say Y here to compile support for HCILL protocol.

config BT_HCIUART_3WIRE
	bool "Three-wire UART (H5) protocol support"
	depends on BT_HCIUART
	help
	  The HCI Three-wire UART Transport Layer makes it possible to
	  user the Bluetooth HCI over a serial port interface. The HCI
	  Three-wire UART Transport Layer assumes that the UART
	  communication may have bit errors, overrun errors or burst
	  errors and thereby making CTS/RTS lines unnecessary.

	  Say Y here to compile support for Three-wire UART protocol.

config BT_HCIBCM203X
	tristate "HCI BCM203x USB driver"
	depends on USB
+1 −0
Original line number Diff line number Diff line
@@ -28,4 +28,5 @@ hci_uart-$(CONFIG_BT_HCIUART_H4) += hci_h4.o
hci_uart-$(CONFIG_BT_HCIUART_BCSP)	+= hci_bcsp.o
hci_uart-$(CONFIG_BT_HCIUART_LL)	+= hci_ll.o
hci_uart-$(CONFIG_BT_HCIUART_ATH3K)	+= hci_ath.o
hci_uart-$(CONFIG_BT_HCIUART_3WIRE)	+= hci_h5.o
hci_uart-objs				:= $(hci_uart-y)
+88 −0
Original line number Diff line number Diff line
/*
 *
 *  Bluetooth HCI Three-wire UART driver
 *
 *  Copyright (C) 2012  Intel Corporation
 *
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */

#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/skbuff.h>

#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>

#include "hci_uart.h"

static int h5_open(struct hci_uart *hu)
{
	return -ENOSYS;
}

static int h5_close(struct hci_uart *hu)
{
	return -ENOSYS;
}

static int h5_recv(struct hci_uart *hu, void *data, int count)
{
	return -ENOSYS;
}

static int h5_enqueue(struct hci_uart *hu, struct sk_buff *skb)
{
	return -ENOSYS;
}

static struct sk_buff *h5_dequeue(struct hci_uart *hu)
{
	return NULL;
}

static int h5_flush(struct hci_uart *hu)
{
	return -ENOSYS;
}

static struct hci_uart_proto h5p = {
	.id		= HCI_UART_3WIRE,
	.open		= h5_open,
	.close		= h5_close,
	.recv		= h5_recv,
	.enqueue	= h5_enqueue,
	.dequeue	= h5_dequeue,
	.flush		= h5_flush,
};

int __init h5_init(void)
{
	int err = hci_uart_register_proto(&h5p);

	if (!err)
		BT_INFO("HCI Three-wire UART (H5) protocol initialized");
	else
		BT_ERR("HCI Three-wire UART (H5) protocol init failed");

	return err;
}

int __exit h5_deinit(void)
{
	return hci_uart_unregister_proto(&h5p);
}
+6 −0
Original line number Diff line number Diff line
@@ -558,6 +558,9 @@ static int __init hci_uart_init(void)
#ifdef CONFIG_BT_HCIUART_ATH3K
	ath_init();
#endif
#ifdef CONFIG_BT_HCIUART_3WIRE
	h5_init();
#endif

	return 0;
}
@@ -578,6 +581,9 @@ static void __exit hci_uart_exit(void)
#ifdef CONFIG_BT_HCIUART_ATH3K
	ath_deinit();
#endif
#ifdef CONFIG_BT_HCIUART_3WIRE
	h5_deinit();
#endif

	/* Release tty registration of line discipline */
	if ((err = tty_unregister_ldisc(N_HCI)))
+5 −0
Original line number Diff line number Diff line
@@ -104,3 +104,8 @@ int ll_deinit(void);
int ath_init(void);
int ath_deinit(void);
#endif

#ifdef CONFIG_BT_HCIUART_3WIRE
int h5_init(void);
int h5_deinit(void);
#endif