RE: [PATCH] Bluetooth: Support SCO over HCI for Atheros AR300x Bluetooth device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Suraj,

> * Suraj Sumangala <suraj@xxxxxxxxxxx> [2011-05-20 13:36:11 +0530]:
> 
> > This patch adds SCO over HCI support to Atheros AR300x HCI transport
> > driver.
> >
> > Signed-off-by: Suraj Sumangala <suraj@xxxxxxxxxxx>
> > ---
> >  drivers/bluetooth/hci_ath.c |   14 +++++++-------
> >  1 files changed, 7 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/bluetooth/hci_ath.c b/drivers/bluetooth/hci_ath.c
> > index 4093935..8e15c31 100644
> > --- a/drivers/bluetooth/hci_ath.c
> > +++ b/drivers/bluetooth/hci_ath.c
> > @@ -162,11 +162,6 @@ static int ath_enqueue(struct hci_uart *hu, struct sk_buff *skb)
> >  {
> >       struct ath_struct *ath = hu->priv;
> >
> > -     if (bt_cb(skb)->pkt_type == HCI_SCODATA_PKT) {
> > -             kfree_skb(skb);
> > -             return 0;
> > -     }
> > -
> >       /*
> >        * Update power management enable flag with parameters of
> >        * HCI sleep enable vendor specific HCI command.
> > @@ -184,9 +179,14 @@ static int ath_enqueue(struct hci_uart *hu, struct sk_buff *skb)
> >       memcpy(skb_push(skb, 1), &bt_cb(skb)->pkt_type, 1);
> >
> >       skb_queue_tail(&ath->txq, skb);
> > -     set_bit(HCI_UART_SENDING, &hu->tx_state);
> >
> > -     schedule_work(&ath->ctxtsw);
> > +     if (bt_cb(skb)->pkt_type == HCI_SCODATA_PKT) {
> > +             clear_bit(HCI_UART_SENDING, &hu->tx_state);
> > +             hci_uart_tx_wakeup(hu);
> 
> We can't do that, prioritize SCO over HCI Events. This can lead to weird sync
> problems, so please remove this and send me a new patch.
> 
> The reason why I went with this approach was
> 1. In the schedule_work path, we were doing some power management logic which was relevent only for ACL packets.
> 2. Without this somehow the SCO audio quality was bad and the controller team mention that they were not getting SCO packets in this rate.

you might actually have to re-design your driver then. Since essentially
you need to ensure that events like HCI_Conn_Complete arrive in the
proper order to make sure that ACL and SCO handles are properly
available before ACL or SCO packets are send.

This has been always the problem. Especially with USB endpoints where
SCO packets and ACL packets are on different endpoints. Getting the
order right is pretty tricky.

In addition you have the completed packet events that need to be handled
properly. Otherwise you might screw up the flow control.

Regards

Marcel


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


[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux