All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcel Holtmann <marcel-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
To: Martin Blumenstingl
	<martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>,
	Johan Hedberg
	<johan.hedberg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	devicetree <devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	"open list:BLUETOOTH DRIVERS"
	<linux-bluetooth-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	linux-serial-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
	"Gustavo F. Padovan"
	<gustavo-THi1TnShQwVAfugRpC6u6w@public.gmane.org>,
	Greg Kroah-Hartman
	<gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>,
	Jiri Slaby <jslaby-IBi9RG/b67k@public.gmane.org>,
	Johan Hovold <johan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	linux-amlogic-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	Larry Finger
	<Larry.Finger-tQ5ms3gMjBLk1uMJSBkQmQ@public.gmane.org>,
	Carlo Caione <carlo-6IF/jdPJHihWk0Htik3J/w@public.gmane.org>,
	Daniel Drake <drake-6IF/jdPJHihWk0Htik3J/w@public.gmane.org>
Subject: Re: [RFC v2 8/9] Bluetooth: drop HCI_UART_INIT_PENDING support
Date: Tue, 2 Jan 2018 12:04:40 +0100	[thread overview]
Message-ID: <5F8922BB-5A97-43B1-88D5-591EB76FF787@holtmann.org> (raw)
In-Reply-To: <20180101204217.26165-9-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>

Hi Martin,

> The three-wire (H5) protocol is the only protocol which uses
> HCI_UART_INIT_PENDING.
> Unfortunately the benefits of using this flag are currently unknown. It
> was added in commit 9f2aee848fe6 ("Bluetooth: Add delayed init sequence
> support for UART controllers"). In my experiments (with the
> "rtk_hciattach" tool - a customized version of hciattach for Realtek
> chipsets) I started the tool before and after this patch while the
> Bluetooth chipset was disabled (by pulling it's enable GPIO LOW). In
> both cases hci0 was not created - thus HCI_UART_INIT_PENDING is not
> required in that case.
> 
> Removing this code also has another benefit: hci_serdev.c does not
> support the delayed initialization / registration. Thus the protocol
> implementation (hci_h5) never receives any data with this check still
> in place. For the H5 protocol this means that the initialization never
> completes (because the sync response never arrives). Even if the
> initialization would succeed later on the drivers would call
> hci_uart_init_ready() which schedules the registration which is
> currently not implemented by hci_serdev.c.
> 
> Removing the HCI_UART_INIT_PENDING check makes the code easier to read
> and also fixes the initalization of devices (implemented with the serdev
> library) which use the H5 protocol.
> 
> Signed-off-by: Martin Blumenstingl <martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>

I really like Johan to ack this one, but generally I am fine with removing unneeded code.

We might also want to look at hciattach to btattach code and make sure it gets removed there as well. I am not even sure anybody used hciattach with H:5 ever.

> ---
> drivers/bluetooth/hci_h5.c     |  3 ---
> drivers/bluetooth/hci_ldisc.c  | 38 --------------------------------------
> drivers/bluetooth/hci_serdev.c |  3 ---
> drivers/bluetooth/hci_uart.h   |  4 +---
> 4 files changed, 1 insertion(+), 47 deletions(-)
> 
> diff --git a/drivers/bluetooth/hci_h5.c b/drivers/bluetooth/hci_h5.c
> index 6a8d0d06aba7..6cfc2f276250 100644
> --- a/drivers/bluetooth/hci_h5.c
> +++ b/drivers/bluetooth/hci_h5.c
> @@ -210,8 +210,6 @@ static int h5_open(struct hci_uart *hu)
> 
> 	h5->tx_win = H5_TX_WIN_MAX;
> 
> -	set_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags);
> -
> 	/* Send initial sync request */
> 	h5_link_control(hu, sync, sizeof(sync));
> 	mod_timer(&h5->timer, jiffies + H5_SYNC_TIMEOUT);
> @@ -316,7 +314,6 @@ static void h5_handle_internal_rx(struct hci_uart *hu)
> 			h5->tx_win = (data[2] & 0x07);
> 		BT_DBG("Three-wire init complete. tx_win %u", h5->tx_win);
> 		h5->state = H5_ACTIVE;
> -		hci_uart_init_ready(hu);
> 		return;
> 	} else if (memcmp(data, sleep_req, 2) == 0) {
> 		BT_DBG("Peer went to sleep");
> diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c
> index c823914b3a80..5dd3e1bebfe4 100644
> --- a/drivers/bluetooth/hci_ldisc.c
> +++ b/drivers/bluetooth/hci_ldisc.c
> @@ -195,39 +195,6 @@ static void hci_uart_write_work(struct work_struct *work)
> 	clear_bit(HCI_UART_SENDING, &hu->tx_state);
> }
> 
> -static void hci_uart_init_work(struct work_struct *work)
> -{
> -	struct hci_uart *hu = container_of(work, struct hci_uart, init_ready);
> -	int err;
> -	struct hci_dev *hdev;
> -
> -	if (!test_and_clear_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
> -		return;
> -
> -	err = hci_register_dev(hu->hdev);
> -	if (err < 0) {
> -		BT_ERR("Can't register HCI device");
> -		hdev = hu->hdev;
> -		hu->hdev = NULL;
> -		hci_free_dev(hdev);
> -		clear_bit(HCI_UART_PROTO_READY, &hu->flags);
> -		hu->proto->close(hu);
> -		return;
> -	}
> -
> -	set_bit(HCI_UART_REGISTERED, &hu->flags);
> -}
> -
> -int hci_uart_init_ready(struct hci_uart *hu)
> -{
> -	if (!test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
> -		return -EALREADY;
> -
> -	schedule_work(&hu->init_ready);
> -
> -	return 0;
> -}
> -
> /* ------- Interface to HCI layer ------ */
> /* Initialize device */
> static int hci_uart_open(struct hci_dev *hdev)
> @@ -490,7 +457,6 @@ static int hci_uart_tty_open(struct tty_struct *tty)
> 	hu->alignment = 1;
> 	hu->padding = 0;
> 
> -	INIT_WORK(&hu->init_ready, hci_uart_init_work);
> 	INIT_WORK(&hu->write_work, hci_uart_write_work);
> 
> 	percpu_init_rwsem(&hu->proto_lock);
> @@ -653,9 +619,6 @@ static int hci_uart_register_dev(struct hci_uart *hu)
> 	else
> 		hdev->dev_type = HCI_PRIMARY;
> 
> -	if (test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
> -		return 0;
> -
> 	if (hci_register_dev(hdev) < 0) {
> 		BT_ERR("Can't register HCI device");
> 		hu->hdev = NULL;
> @@ -699,7 +662,6 @@ static int hci_uart_set_flags(struct hci_uart *hu, unsigned long flags)
> 	unsigned long valid_flags = BIT(HCI_UART_RAW_DEVICE) |
> 				    BIT(HCI_UART_RESET_ON_INIT) |
> 				    BIT(HCI_UART_CREATE_AMP) |
> -				    BIT(HCI_UART_INIT_PENDING) |
> 				    BIT(HCI_UART_EXT_CONFIG) |
> 				    BIT(HCI_UART_VND_DETECT);
> 
> diff --git a/drivers/bluetooth/hci_serdev.c b/drivers/bluetooth/hci_serdev.c
> index e0e6461b9200..fe67eb6d4278 100644
> --- a/drivers/bluetooth/hci_serdev.c
> +++ b/drivers/bluetooth/hci_serdev.c
> @@ -333,9 +333,6 @@ int hci_uart_register_device(struct hci_uart *hu,
> 	else
> 		hdev->dev_type = HCI_PRIMARY;
> 
> -	if (test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
> -		return 0;
> -
> 	if (hci_register_dev(hdev) < 0) {
> 		BT_ERR("Can't register HCI device");
> 		err = -ENODEV;
> diff --git a/drivers/bluetooth/hci_uart.h b/drivers/bluetooth/hci_uart.h
> index 66e8c68e4607..47e755ff4092 100644
> --- a/drivers/bluetooth/hci_uart.h
> +++ b/drivers/bluetooth/hci_uart.h
> @@ -53,7 +53,7 @@
> #define HCI_UART_RAW_DEVICE	0
> #define HCI_UART_RESET_ON_INIT	1
> #define HCI_UART_CREATE_AMP	2
> -#define HCI_UART_INIT_PENDING	3
> +/* 3 is unused - was HCI_UART_INIT_PENDING */

#define HCI_UART_INIT_PENDING	3	/* unused */

I prefer it this way since it is easier on the eyes.

> #define HCI_UART_EXT_CONFIG	4
> #define HCI_UART_VND_DETECT	5
> 
> @@ -83,7 +83,6 @@ struct hci_uart {
> 	unsigned long		flags;
> 	unsigned long		hdev_flags;
> 
> -	struct work_struct	init_ready;
> 	struct work_struct	write_work;
> 
> 	const struct hci_uart_proto *proto;
> @@ -115,7 +114,6 @@ int hci_uart_register_device(struct hci_uart *hu, const struct hci_uart_proto *p
> void hci_uart_unregister_device(struct hci_uart *hu);
> 
> int hci_uart_tx_wakeup(struct hci_uart *hu);
> -int hci_uart_init_ready(struct hci_uart *hu);
> void hci_uart_set_baudrate(struct hci_uart *hu, unsigned int speed);
> void hci_uart_set_flow_control(struct hci_uart *hu, bool enable);
> void hci_uart_set_speeds(struct hci_uart *hu, unsigned int init_speed,

Regards

Marcel

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

WARNING: multiple messages have this Message-ID (diff)
From: Marcel Holtmann <marcel@holtmann.org>
To: Martin Blumenstingl <martin.blumenstingl@googlemail.com>,
	Johan Hedberg <johan.hedberg@gmail.com>
Cc: Rob Herring <robh+dt@kernel.org>,
	devicetree <devicetree@vger.kernel.org>,
	"open list:BLUETOOTH DRIVERS" <linux-bluetooth@vger.kernel.org>,
	linux-serial@vger.kernel.org, Mark Rutland <mark.rutland@arm.com>,
	"Gustavo F. Padovan" <gustavo@padovan.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jiri Slaby <jslaby@suse.com>, Johan Hovold <johan@kernel.org>,
	linux-amlogic@lists.infradead.org,
	Larry Finger <Larry.Finger@lwfinger.net>,
	Carlo Caione <carlo@endlessm.com>,
	Daniel Drake <drake@endlessm.com>
Subject: Re: [RFC v2 8/9] Bluetooth: drop HCI_UART_INIT_PENDING support
Date: Tue, 2 Jan 2018 12:04:40 +0100	[thread overview]
Message-ID: <5F8922BB-5A97-43B1-88D5-591EB76FF787@holtmann.org> (raw)
In-Reply-To: <20180101204217.26165-9-martin.blumenstingl@googlemail.com>

Hi Martin,

> The three-wire (H5) protocol is the only protocol which uses
> HCI_UART_INIT_PENDING.
> Unfortunately the benefits of using this flag are currently unknown. It
> was added in commit 9f2aee848fe6 ("Bluetooth: Add delayed init sequence
> support for UART controllers"). In my experiments (with the
> "rtk_hciattach" tool - a customized version of hciattach for Realtek
> chipsets) I started the tool before and after this patch while the
> Bluetooth chipset was disabled (by pulling it's enable GPIO LOW). In
> both cases hci0 was not created - thus HCI_UART_INIT_PENDING is not
> required in that case.
> 
> Removing this code also has another benefit: hci_serdev.c does not
> support the delayed initialization / registration. Thus the protocol
> implementation (hci_h5) never receives any data with this check still
> in place. For the H5 protocol this means that the initialization never
> completes (because the sync response never arrives). Even if the
> initialization would succeed later on the drivers would call
> hci_uart_init_ready() which schedules the registration which is
> currently not implemented by hci_serdev.c.
> 
> Removing the HCI_UART_INIT_PENDING check makes the code easier to read
> and also fixes the initalization of devices (implemented with the serdev
> library) which use the H5 protocol.
> 
> Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>

I really like Johan to ack this one, but generally I am fine with removing unneeded code.

We might also want to look at hciattach to btattach code and make sure it gets removed there as well. I am not even sure anybody used hciattach with H:5 ever.

> ---
> drivers/bluetooth/hci_h5.c     |  3 ---
> drivers/bluetooth/hci_ldisc.c  | 38 --------------------------------------
> drivers/bluetooth/hci_serdev.c |  3 ---
> drivers/bluetooth/hci_uart.h   |  4 +---
> 4 files changed, 1 insertion(+), 47 deletions(-)
> 
> diff --git a/drivers/bluetooth/hci_h5.c b/drivers/bluetooth/hci_h5.c
> index 6a8d0d06aba7..6cfc2f276250 100644
> --- a/drivers/bluetooth/hci_h5.c
> +++ b/drivers/bluetooth/hci_h5.c
> @@ -210,8 +210,6 @@ static int h5_open(struct hci_uart *hu)
> 
> 	h5->tx_win = H5_TX_WIN_MAX;
> 
> -	set_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags);
> -
> 	/* Send initial sync request */
> 	h5_link_control(hu, sync, sizeof(sync));
> 	mod_timer(&h5->timer, jiffies + H5_SYNC_TIMEOUT);
> @@ -316,7 +314,6 @@ static void h5_handle_internal_rx(struct hci_uart *hu)
> 			h5->tx_win = (data[2] & 0x07);
> 		BT_DBG("Three-wire init complete. tx_win %u", h5->tx_win);
> 		h5->state = H5_ACTIVE;
> -		hci_uart_init_ready(hu);
> 		return;
> 	} else if (memcmp(data, sleep_req, 2) == 0) {
> 		BT_DBG("Peer went to sleep");
> diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c
> index c823914b3a80..5dd3e1bebfe4 100644
> --- a/drivers/bluetooth/hci_ldisc.c
> +++ b/drivers/bluetooth/hci_ldisc.c
> @@ -195,39 +195,6 @@ static void hci_uart_write_work(struct work_struct *work)
> 	clear_bit(HCI_UART_SENDING, &hu->tx_state);
> }
> 
> -static void hci_uart_init_work(struct work_struct *work)
> -{
> -	struct hci_uart *hu = container_of(work, struct hci_uart, init_ready);
> -	int err;
> -	struct hci_dev *hdev;
> -
> -	if (!test_and_clear_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
> -		return;
> -
> -	err = hci_register_dev(hu->hdev);
> -	if (err < 0) {
> -		BT_ERR("Can't register HCI device");
> -		hdev = hu->hdev;
> -		hu->hdev = NULL;
> -		hci_free_dev(hdev);
> -		clear_bit(HCI_UART_PROTO_READY, &hu->flags);
> -		hu->proto->close(hu);
> -		return;
> -	}
> -
> -	set_bit(HCI_UART_REGISTERED, &hu->flags);
> -}
> -
> -int hci_uart_init_ready(struct hci_uart *hu)
> -{
> -	if (!test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
> -		return -EALREADY;
> -
> -	schedule_work(&hu->init_ready);
> -
> -	return 0;
> -}
> -
> /* ------- Interface to HCI layer ------ */
> /* Initialize device */
> static int hci_uart_open(struct hci_dev *hdev)
> @@ -490,7 +457,6 @@ static int hci_uart_tty_open(struct tty_struct *tty)
> 	hu->alignment = 1;
> 	hu->padding = 0;
> 
> -	INIT_WORK(&hu->init_ready, hci_uart_init_work);
> 	INIT_WORK(&hu->write_work, hci_uart_write_work);
> 
> 	percpu_init_rwsem(&hu->proto_lock);
> @@ -653,9 +619,6 @@ static int hci_uart_register_dev(struct hci_uart *hu)
> 	else
> 		hdev->dev_type = HCI_PRIMARY;
> 
> -	if (test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
> -		return 0;
> -
> 	if (hci_register_dev(hdev) < 0) {
> 		BT_ERR("Can't register HCI device");
> 		hu->hdev = NULL;
> @@ -699,7 +662,6 @@ static int hci_uart_set_flags(struct hci_uart *hu, unsigned long flags)
> 	unsigned long valid_flags = BIT(HCI_UART_RAW_DEVICE) |
> 				    BIT(HCI_UART_RESET_ON_INIT) |
> 				    BIT(HCI_UART_CREATE_AMP) |
> -				    BIT(HCI_UART_INIT_PENDING) |
> 				    BIT(HCI_UART_EXT_CONFIG) |
> 				    BIT(HCI_UART_VND_DETECT);
> 
> diff --git a/drivers/bluetooth/hci_serdev.c b/drivers/bluetooth/hci_serdev.c
> index e0e6461b9200..fe67eb6d4278 100644
> --- a/drivers/bluetooth/hci_serdev.c
> +++ b/drivers/bluetooth/hci_serdev.c
> @@ -333,9 +333,6 @@ int hci_uart_register_device(struct hci_uart *hu,
> 	else
> 		hdev->dev_type = HCI_PRIMARY;
> 
> -	if (test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
> -		return 0;
> -
> 	if (hci_register_dev(hdev) < 0) {
> 		BT_ERR("Can't register HCI device");
> 		err = -ENODEV;
> diff --git a/drivers/bluetooth/hci_uart.h b/drivers/bluetooth/hci_uart.h
> index 66e8c68e4607..47e755ff4092 100644
> --- a/drivers/bluetooth/hci_uart.h
> +++ b/drivers/bluetooth/hci_uart.h
> @@ -53,7 +53,7 @@
> #define HCI_UART_RAW_DEVICE	0
> #define HCI_UART_RESET_ON_INIT	1
> #define HCI_UART_CREATE_AMP	2
> -#define HCI_UART_INIT_PENDING	3
> +/* 3 is unused - was HCI_UART_INIT_PENDING */

#define HCI_UART_INIT_PENDING	3	/* unused */

I prefer it this way since it is easier on the eyes.

> #define HCI_UART_EXT_CONFIG	4
> #define HCI_UART_VND_DETECT	5
> 
> @@ -83,7 +83,6 @@ struct hci_uart {
> 	unsigned long		flags;
> 	unsigned long		hdev_flags;
> 
> -	struct work_struct	init_ready;
> 	struct work_struct	write_work;
> 
> 	const struct hci_uart_proto *proto;
> @@ -115,7 +114,6 @@ int hci_uart_register_device(struct hci_uart *hu, const struct hci_uart_proto *p
> void hci_uart_unregister_device(struct hci_uart *hu);
> 
> int hci_uart_tx_wakeup(struct hci_uart *hu);
> -int hci_uart_init_ready(struct hci_uart *hu);
> void hci_uart_set_baudrate(struct hci_uart *hu, unsigned int speed);
> void hci_uart_set_flow_control(struct hci_uart *hu, bool enable);
> void hci_uart_set_speeds(struct hci_uart *hu, unsigned int init_speed,

Regards

Marcel


WARNING: multiple messages have this Message-ID (diff)
From: marcel@holtmann.org (Marcel Holtmann)
To: linus-amlogic@lists.infradead.org
Subject: [RFC v2 8/9] Bluetooth: drop HCI_UART_INIT_PENDING support
Date: Tue, 2 Jan 2018 12:04:40 +0100	[thread overview]
Message-ID: <5F8922BB-5A97-43B1-88D5-591EB76FF787@holtmann.org> (raw)
In-Reply-To: <20180101204217.26165-9-martin.blumenstingl@googlemail.com>

Hi Martin,

> The three-wire (H5) protocol is the only protocol which uses
> HCI_UART_INIT_PENDING.
> Unfortunately the benefits of using this flag are currently unknown. It
> was added in commit 9f2aee848fe6 ("Bluetooth: Add delayed init sequence
> support for UART controllers"). In my experiments (with the
> "rtk_hciattach" tool - a customized version of hciattach for Realtek
> chipsets) I started the tool before and after this patch while the
> Bluetooth chipset was disabled (by pulling it's enable GPIO LOW). In
> both cases hci0 was not created - thus HCI_UART_INIT_PENDING is not
> required in that case.
> 
> Removing this code also has another benefit: hci_serdev.c does not
> support the delayed initialization / registration. Thus the protocol
> implementation (hci_h5) never receives any data with this check still
> in place. For the H5 protocol this means that the initialization never
> completes (because the sync response never arrives). Even if the
> initialization would succeed later on the drivers would call
> hci_uart_init_ready() which schedules the registration which is
> currently not implemented by hci_serdev.c.
> 
> Removing the HCI_UART_INIT_PENDING check makes the code easier to read
> and also fixes the initalization of devices (implemented with the serdev
> library) which use the H5 protocol.
> 
> Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>

I really like Johan to ack this one, but generally I am fine with removing unneeded code.

We might also want to look at hciattach to btattach code and make sure it gets removed there as well. I am not even sure anybody used hciattach with H:5 ever.

> ---
> drivers/bluetooth/hci_h5.c     |  3 ---
> drivers/bluetooth/hci_ldisc.c  | 38 --------------------------------------
> drivers/bluetooth/hci_serdev.c |  3 ---
> drivers/bluetooth/hci_uart.h   |  4 +---
> 4 files changed, 1 insertion(+), 47 deletions(-)
> 
> diff --git a/drivers/bluetooth/hci_h5.c b/drivers/bluetooth/hci_h5.c
> index 6a8d0d06aba7..6cfc2f276250 100644
> --- a/drivers/bluetooth/hci_h5.c
> +++ b/drivers/bluetooth/hci_h5.c
> @@ -210,8 +210,6 @@ static int h5_open(struct hci_uart *hu)
> 
> 	h5->tx_win = H5_TX_WIN_MAX;
> 
> -	set_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags);
> -
> 	/* Send initial sync request */
> 	h5_link_control(hu, sync, sizeof(sync));
> 	mod_timer(&h5->timer, jiffies + H5_SYNC_TIMEOUT);
> @@ -316,7 +314,6 @@ static void h5_handle_internal_rx(struct hci_uart *hu)
> 			h5->tx_win = (data[2] & 0x07);
> 		BT_DBG("Three-wire init complete. tx_win %u", h5->tx_win);
> 		h5->state = H5_ACTIVE;
> -		hci_uart_init_ready(hu);
> 		return;
> 	} else if (memcmp(data, sleep_req, 2) == 0) {
> 		BT_DBG("Peer went to sleep");
> diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c
> index c823914b3a80..5dd3e1bebfe4 100644
> --- a/drivers/bluetooth/hci_ldisc.c
> +++ b/drivers/bluetooth/hci_ldisc.c
> @@ -195,39 +195,6 @@ static void hci_uart_write_work(struct work_struct *work)
> 	clear_bit(HCI_UART_SENDING, &hu->tx_state);
> }
> 
> -static void hci_uart_init_work(struct work_struct *work)
> -{
> -	struct hci_uart *hu = container_of(work, struct hci_uart, init_ready);
> -	int err;
> -	struct hci_dev *hdev;
> -
> -	if (!test_and_clear_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
> -		return;
> -
> -	err = hci_register_dev(hu->hdev);
> -	if (err < 0) {
> -		BT_ERR("Can't register HCI device");
> -		hdev = hu->hdev;
> -		hu->hdev = NULL;
> -		hci_free_dev(hdev);
> -		clear_bit(HCI_UART_PROTO_READY, &hu->flags);
> -		hu->proto->close(hu);
> -		return;
> -	}
> -
> -	set_bit(HCI_UART_REGISTERED, &hu->flags);
> -}
> -
> -int hci_uart_init_ready(struct hci_uart *hu)
> -{
> -	if (!test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
> -		return -EALREADY;
> -
> -	schedule_work(&hu->init_ready);
> -
> -	return 0;
> -}
> -
> /* ------- Interface to HCI layer ------ */
> /* Initialize device */
> static int hci_uart_open(struct hci_dev *hdev)
> @@ -490,7 +457,6 @@ static int hci_uart_tty_open(struct tty_struct *tty)
> 	hu->alignment = 1;
> 	hu->padding = 0;
> 
> -	INIT_WORK(&hu->init_ready, hci_uart_init_work);
> 	INIT_WORK(&hu->write_work, hci_uart_write_work);
> 
> 	percpu_init_rwsem(&hu->proto_lock);
> @@ -653,9 +619,6 @@ static int hci_uart_register_dev(struct hci_uart *hu)
> 	else
> 		hdev->dev_type = HCI_PRIMARY;
> 
> -	if (test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
> -		return 0;
> -
> 	if (hci_register_dev(hdev) < 0) {
> 		BT_ERR("Can't register HCI device");
> 		hu->hdev = NULL;
> @@ -699,7 +662,6 @@ static int hci_uart_set_flags(struct hci_uart *hu, unsigned long flags)
> 	unsigned long valid_flags = BIT(HCI_UART_RAW_DEVICE) |
> 				    BIT(HCI_UART_RESET_ON_INIT) |
> 				    BIT(HCI_UART_CREATE_AMP) |
> -				    BIT(HCI_UART_INIT_PENDING) |
> 				    BIT(HCI_UART_EXT_CONFIG) |
> 				    BIT(HCI_UART_VND_DETECT);
> 
> diff --git a/drivers/bluetooth/hci_serdev.c b/drivers/bluetooth/hci_serdev.c
> index e0e6461b9200..fe67eb6d4278 100644
> --- a/drivers/bluetooth/hci_serdev.c
> +++ b/drivers/bluetooth/hci_serdev.c
> @@ -333,9 +333,6 @@ int hci_uart_register_device(struct hci_uart *hu,
> 	else
> 		hdev->dev_type = HCI_PRIMARY;
> 
> -	if (test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
> -		return 0;
> -
> 	if (hci_register_dev(hdev) < 0) {
> 		BT_ERR("Can't register HCI device");
> 		err = -ENODEV;
> diff --git a/drivers/bluetooth/hci_uart.h b/drivers/bluetooth/hci_uart.h
> index 66e8c68e4607..47e755ff4092 100644
> --- a/drivers/bluetooth/hci_uart.h
> +++ b/drivers/bluetooth/hci_uart.h
> @@ -53,7 +53,7 @@
> #define HCI_UART_RAW_DEVICE	0
> #define HCI_UART_RESET_ON_INIT	1
> #define HCI_UART_CREATE_AMP	2
> -#define HCI_UART_INIT_PENDING	3
> +/* 3 is unused - was HCI_UART_INIT_PENDING */

#define HCI_UART_INIT_PENDING	3	/* unused */

I prefer it this way since it is easier on the eyes.

> #define HCI_UART_EXT_CONFIG	4
> #define HCI_UART_VND_DETECT	5
> 
> @@ -83,7 +83,6 @@ struct hci_uart {
> 	unsigned long		flags;
> 	unsigned long		hdev_flags;
> 
> -	struct work_struct	init_ready;
> 	struct work_struct	write_work;
> 
> 	const struct hci_uart_proto *proto;
> @@ -115,7 +114,6 @@ int hci_uart_register_device(struct hci_uart *hu, const struct hci_uart_proto *p
> void hci_uart_unregister_device(struct hci_uart *hu);
> 
> int hci_uart_tx_wakeup(struct hci_uart *hu);
> -int hci_uart_init_ready(struct hci_uart *hu);
> void hci_uart_set_baudrate(struct hci_uart *hu, unsigned int speed);
> void hci_uart_set_flow_control(struct hci_uart *hu, bool enable);
> void hci_uart_set_speeds(struct hci_uart *hu, unsigned int init_speed,

Regards

Marcel

  parent reply	other threads:[~2018-01-02 11:04 UTC|newest]

Thread overview: 123+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-01 20:42 [RFC v2 0/9] Realtek Bluetooth serdev support (H5 protocol) Martin Blumenstingl
2018-01-01 20:42 ` Martin Blumenstingl
2018-01-01 20:42 ` Martin Blumenstingl
     [not found] ` <20180101204217.26165-1-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2018-01-01 20:42   ` [RFC v2 1/9] serdev: implement parity configuration Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
     [not found]     ` <20180101204217.26165-2-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2018-01-02 11:16       ` Marcel Holtmann
2018-01-02 11:16         ` Marcel Holtmann
2018-01-02 11:16         ` Marcel Holtmann
     [not found]         ` <4FDCB65A-641A-4134-BAF1-4A777012FDE7-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-02 21:16           ` Martin Blumenstingl
2018-01-02 21:16             ` Martin Blumenstingl
2018-01-02 21:16             ` Martin Blumenstingl
     [not found]             ` <CAFBinCCq9mYBhzoL1XBVQNGxALg8oK5GB7Md9HJf_mchEMu3-A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-02 21:34               ` Martin Blumenstingl
2018-01-02 21:34                 ` Martin Blumenstingl
2018-01-02 21:34                 ` Martin Blumenstingl
     [not found]                 ` <CAFBinCD=iuE+ho22kihCFG=AJV5t+JtjRww8PLuq-cAJ2RkAHQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-03  9:06                   ` Johan Hovold
2018-01-03  9:06                     ` Johan Hovold
2018-01-03  9:06                     ` Johan Hovold
2018-01-03 12:37                   ` Marcel Holtmann
2018-01-03 12:37                     ` Marcel Holtmann
2018-01-03 12:37                     ` Marcel Holtmann
2018-01-01 20:42   ` [RFC v2 2/9] dt-bindings: net: bluetooth: add support for Realtek Bluetooth chips Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
     [not found]     ` <20180101204217.26165-3-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2018-01-02 11:16       ` Marcel Holtmann
2018-01-02 11:16         ` Marcel Holtmann
2018-01-02 11:16         ` Marcel Holtmann
     [not found]         ` <2A1D60F1-F86F-4A2B-A43A-F3419506DE99-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-02 21:10           ` Martin Blumenstingl
2018-01-02 21:10             ` Martin Blumenstingl
2018-01-02 21:10             ` Martin Blumenstingl
     [not found]             ` <CAFBinCBNro18Ak3h1fHFpAioDzimh5KcUeOE8PjQr_CCkAs7PA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-03 19:07               ` Rob Herring
2018-01-03 19:07                 ` Rob Herring
2018-01-03 19:07                 ` Rob Herring
2018-01-01 20:42   ` [RFC v2 3/9] Bluetooth: btrtl: add MODULE_FIRMWARE declarations Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42   ` [RFC v2 4/9] Bluetooth: btrtl: split the device initialization into smaller parts Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42   ` [RFC v2 5/9] Bluetooth: btrtl: add support for retrieving the UART settings Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42   ` [RFC v2 6/9] Bluetooth: btrtl: add support for the RTL8723BS and RTL8723DS chips Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42   ` [RFC v2 7/9] bluetooth: btrtl: load the config blob from devicetree when available Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
     [not found]     ` <20180101204217.26165-8-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2018-01-02 11:11       ` Marcel Holtmann
2018-01-02 11:11         ` Marcel Holtmann
2018-01-02 11:11         ` Marcel Holtmann
     [not found]         ` <563D6F9F-8495-40D4-BE56-5338ED2B9B99-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-02 11:15           ` Carlo Caione
2018-01-02 11:15             ` Carlo Caione
2018-01-02 11:15             ` Carlo Caione
     [not found]             ` <CAL9uMOEMDup4hRkxD-tM8R0YirGs5uQi31AjJUnFCPNMKUdRHg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-02 11:19               ` Marcel Holtmann
2018-01-02 11:19                 ` Marcel Holtmann
2018-01-02 11:19                 ` Marcel Holtmann
     [not found]                 ` <E8E39477-CF1A-4A3E-84C5-830E182C2266-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-02 11:31                   ` Carlo Caione
2018-01-02 11:31                     ` Carlo Caione
2018-01-02 11:31                     ` Carlo Caione
     [not found]                     ` <CAL9uMOH0N-4jgQncmPjK-KyU0vY9Q0ZnHYSAGgz3z3ywzc8Avw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-02 11:38                       ` Marcel Holtmann
2018-01-02 11:38                         ` Marcel Holtmann
2018-01-02 11:38                         ` Marcel Holtmann
     [not found]                         ` <F38429FB-2D20-4EF7-8547-E5A5D67D1618-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-02 21:43                           ` Martin Blumenstingl
2018-01-02 21:43                             ` Martin Blumenstingl
2018-01-02 21:43                             ` Martin Blumenstingl
2018-01-02 21:46                       ` Martin Blumenstingl
2018-01-02 21:46                         ` Martin Blumenstingl
2018-01-02 21:46                         ` Martin Blumenstingl
     [not found]                         ` <CAFBinCBB=SmviOMRHGDH6vzjTjV-mrtQEc8nBUhDbJGs9SBpgw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-02 23:06                           ` Carlo Caione
2018-01-02 23:06                             ` Carlo Caione
2018-01-02 23:06                             ` Carlo Caione
     [not found]                             ` <CAL9uMOFyfr_qGf5BeTojkMeWeH8LqPoKj=LrdgEMB2wmhGBxmA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-03 20:50                               ` Martin Blumenstingl
2018-01-03 20:50                                 ` Martin Blumenstingl
2018-01-03 20:50                                 ` Martin Blumenstingl
     [not found]                                 ` <CAFBinCAFsDRpp=4We1hQPiutM1Q0MrqebPLyS3e2_e+JcBoSmg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-04  9:46                                   ` Carlo Caione
2018-01-04  9:46                                     ` Carlo Caione
2018-01-04  9:46                                     ` Carlo Caione
     [not found]                                     ` <CAL9uMOGkZefjD_JNxjf4yJ0ATFtOG5Cm_XQq1fy0VQDjiMFBmg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-05 14:57                                       ` Marcel Holtmann
2018-01-05 14:57                                         ` Marcel Holtmann
2018-01-05 14:57                                         ` Marcel Holtmann
     [not found]                                         ` <EC216531-81EC-4EE8-BAC4-C6954C222092-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-05 16:15                                           ` Marcel Holtmann
2018-01-05 16:15                                             ` Marcel Holtmann
2018-01-05 16:15                                             ` Marcel Holtmann
     [not found]                                             ` <1F394D8B-CFB8-48BA-BC6B-15D1EE51DB08-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-05 20:44                                               ` Marcel Holtmann
2018-01-05 20:44                                                 ` Marcel Holtmann
2018-01-05 20:44                                                 ` Marcel Holtmann
     [not found]                                                 ` <41669609-3E28-473D-8616-71B9D0EEDCDF-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-07 20:07                                                   ` Martin Blumenstingl
2018-01-07 20:07                                                     ` Martin Blumenstingl
2018-01-07 20:07                                                     ` Martin Blumenstingl
     [not found]                                                     ` <CAFBinCBasb-WkLngxL2RAk9YMihC437ZgPKSkOd7Fm0RHG_aTw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-09 15:26                                                       ` Marcel Holtmann
2018-01-09 15:26                                                         ` Marcel Holtmann
2018-01-09 15:26                                                         ` Marcel Holtmann
2018-01-01 20:42   ` [RFC v2 8/9] Bluetooth: drop HCI_UART_INIT_PENDING support Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
     [not found]     ` <20180101204217.26165-9-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2018-01-02 11:04       ` Marcel Holtmann [this message]
2018-01-02 11:04         ` Marcel Holtmann
2018-01-02 11:04         ` Marcel Holtmann
     [not found]         ` <5F8922BB-5A97-43B1-88D5-591EB76FF787-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-02 21:06           ` Martin Blumenstingl
2018-01-02 21:06             ` Martin Blumenstingl
2018-01-02 21:06             ` Martin Blumenstingl
     [not found]             ` <CAFBinCAxUmxivp_PWkoydha84LbJi-GGv6Uhs6cKR+D_8c8QCw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-03 17:14               ` Loic Poulain
2018-01-03 17:14                 ` Loic Poulain
2018-01-03 17:14                 ` Loic Poulain
     [not found]                 ` <CAMZdPi9KkPZvuvrNgfGmRksJnR0cFti8P5XC-HTFeUfkFbCZ_g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-03 20:30                   ` Martin Blumenstingl
2018-01-03 20:30                     ` Martin Blumenstingl
2018-01-03 20:30                     ` Martin Blumenstingl
2018-01-03 18:38       ` Rob Herring
2018-01-03 18:38         ` Rob Herring
2018-01-03 18:38         ` Rob Herring
     [not found]         ` <CAL_JsqLB9aem0TXZyUvFpsfXP4p++oukPmQzGEYxkVwZt+bdvw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-03 20:38           ` Martin Blumenstingl
2018-01-03 20:38             ` Martin Blumenstingl
2018-01-03 20:38             ` Martin Blumenstingl
2018-01-01 20:42   ` [RFC v2 9/9] Bluetooth: hci_h5: add support for Realtek UART Bluetooth modules Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
2018-01-01 20:42     ` Martin Blumenstingl
     [not found]     ` <20180101204217.26165-10-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2018-01-02 11:11       ` Marcel Holtmann
2018-01-02 11:11         ` Marcel Holtmann
2018-01-02 11:11         ` Marcel Holtmann
     [not found]         ` <A32FB2B7-C20D-4E65-A353-1F7B89D9C702-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org>
2018-01-02 21:27           ` Martin Blumenstingl
2018-01-02 21:27             ` Martin Blumenstingl
2018-01-02 21:27             ` Martin Blumenstingl

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=5F8922BB-5A97-43B1-88D5-591EB76FF787@holtmann.org \
    --to=marcel-kz+m5ild9qbg9huczpvpmw@public.gmane.org \
    --cc=Larry.Finger-tQ5ms3gMjBLk1uMJSBkQmQ@public.gmane.org \
    --cc=carlo-6IF/jdPJHihWk0Htik3J/w@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=drake-6IF/jdPJHihWk0Htik3J/w@public.gmane.org \
    --cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
    --cc=gustavo-THi1TnShQwVAfugRpC6u6w@public.gmane.org \
    --cc=johan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=johan.hedberg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=jslaby-IBi9RG/b67k@public.gmane.org \
    --cc=linux-amlogic-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-bluetooth-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-serial-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
    --cc=martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org \
    --cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.