devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Balakrishna Godavarthi <bgodavar@codeaurora.org>
To: Matthias Kaehlcke <mka@chromium.org>
Cc: marcel@holtmann.org, johan.hedberg@gmail.com,
	linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
	linux-bluetooth@vger.kernel.org, rtatiya@codeaurora.org,
	hemantg@codeaurora.org, linux-arm-msm@vger.kernel.org
Subject: Re: [PATCH v8 4/7] Bluetooth: hci_qca: Add wrapper functions for setting UART speed
Date: Tue, 26 Jun 2018 10:43:31 +0530	[thread overview]
Message-ID: <66681ee5281749e17394cab6f58083d8@codeaurora.org> (raw)
In-Reply-To: <20180626000529.GJ129942@google.com>

Hi Matthias,

On 2018-06-26 05:35, Matthias Kaehlcke wrote:
> On Mon, Jun 25, 2018 at 04:43:54PM -0700, Matthias Kaehlcke wrote:
>> This is a nice improvement, a few remaining questions inline.
>> 
>> On Mon, Jun 25, 2018 at 07:10:10PM +0530, Balakrishna Godavarthi 
>> wrote:
>> > In function qca_setup, we set initial and operating speeds for Qualcomm
>> > Bluetooth SoC's. This block of code is common across different
>> > Qualcomm Bluetooth SoC's. Instead of duplicating the code, created
>> > a wrapper function to set the speeds. So that future coming SoC's
>> > can use these wrapper functions to set speeds.
>> >
>> > Signed-off-by: Balakrishna Godavarthi <bgodavar@codeaurora.org>
>> > ---
>> > Changes in v8:
>> >     * common function to set INIT and operating speeds.
>> >     * moved hardware flow control to qca_set_speed().
>> >
>> > Changes in v7:
>> >     * initial patch
>> >     * created wrapper functions for init and operating speeds.
>> > ---
>> >  drivers/bluetooth/hci_qca.c | 89 +++++++++++++++++++++++++++----------
>> >  1 file changed, 65 insertions(+), 24 deletions(-)
>> >
>> > diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
>> > index fe62420ef838..38b7dbe6c897 100644
>> > --- a/drivers/bluetooth/hci_qca.c
>> > +++ b/drivers/bluetooth/hci_qca.c
>> > @@ -119,6 +119,11 @@ struct qca_data {
>> >  	u64 votes_off;
>> >  };
>> >
>> > +enum qca_speed_type {
>> > +	QCA_INIT_SPEED = 1,
>> > +	QCA_OPER_SPEED
>> > +};
>> > +
>> >  struct qca_serdev {
>> >  	struct hci_uart	 serdev_hu;
>> >  	struct gpio_desc *bt_en;
>> > @@ -923,6 +928,60 @@ static inline void host_set_baudrate(struct hci_uart *hu, unsigned int speed)
>> >  		hci_uart_set_baudrate(hu, speed);
>> >  }
>> >
>> > +static unsigned int qca_get_speed(struct hci_uart *hu,
>> > +				  enum qca_speed_type speed_type)
>> > +{
>> > +	unsigned int speed = 0;
>> > +
>> > +	if (speed_type == QCA_INIT_SPEED) {
>> > +		if (hu->init_speed)
>> > +			speed = hu->init_speed;
>> > +		else if (hu->proto->init_speed)
>> > +			speed = hu->proto->init_speed;
>> > +	} else {
>> > +		if (hu->oper_speed)
>> > +			speed = hu->oper_speed;
>> > +		else if (hu->proto->oper_speed)
>> > +			speed = hu->proto->oper_speed;
>> > +	}
>> > +
>> > +	return speed;
>> > +}
>> > +
>> > +static int qca_set_speed(struct hci_uart *hu, enum qca_speed_type speed_type)
>> > +{
>> > +	unsigned int speed, qca_baudrate;
>> > +	int ret;
>> > +
>> > +	if (speed_type == QCA_INIT_SPEED) {
>> > +		speed = qca_get_speed(hu, QCA_INIT_SPEED);
>> > +		if (speed)
>> > +			host_set_baudrate(hu, speed);
>> > +		else
>> > +			bt_dev_err(hu->hdev, "Init speed should be non zero");
>> 
>> The check for 'speed == 0' is done in multiple places. From this
>> code I deduce that it is expected that both INIT and OPER speed are
>> set to non-zero values. What happens if either of them is zero? Is the
>> driver still operational?
>> 
>> > +		return 0;
>> > +	}
>> > +
>> > +	speed = qca_get_speed(hu, QCA_OPER_SPEED);
>> > +	if (!speed) {
>> > +		bt_dev_err(hu->hdev, "operating speed should be non zero");
>> > +		return 0;
>> > +	}
>> > +
>> > +	qca_baudrate = qca_get_baudrate_value(speed);
>> > +	bt_dev_info(hu->hdev, "Set UART speed to %d", speed);
>> > +	ret = qca_set_baudrate(hu->hdev, qca_baudrate);
>> > +	if (ret) {
>> > +		bt_dev_err(hu->hdev, "Failed to change the baudrate (%d)", ret);
>> > +		return ret;
>> > +	}
>> > +
>> > +	host_set_baudrate(hu, speed);
>> > +
>> > +	return ret;
>> > +}
>> 
>> In the discussion on "[v7,8/8] Bluetooth: hci_qca: Add support for
>> Qualcomm Bluetooth chip wcn3990" you mentioned the possbility to move
>> the hci_uart_set_flow_control() calls into _set_speed(). This seemed
>> interesting but finally it isn't done in this series. Did you
>> encounter that it is not feasible/desirable for some reason?
> 
> I got that half wrong. "[v8,7/7] Bluetooth: hci_qca: Add support for
> Qualcomm Bluetooth chip wcn3990" adds the flow control calls to
> _set_speed() however there are still_set_flow_control() calls in
> qca_setup(), which confused/s me.
> 
> Could you provide a brief summary on the situations (relevant for this
> driver) in which flow controls needs to be enabled/disabled?

you will not find enable or disable of hardware flow control in this 
patch.
there is no hardware flow control in ROME chip.
you will find hardware flow control in wcn3990 i.e. patch [v8 7/7]

in wcn3990. we disable hardware flow control, when we sent mandatory 
commands to BT chip.

i.e while sending power on pulse i.e 0xFC byte for wcn3990 to boot up 
completely and sending change baudrate request to BT chip.
before sending these commands, we disable the chip flow control and 
enable flow control once we sent these commands.

so in our current code after integrating wcn3990, we disable flow 
control two times.

1. Before sending power on pulse i.e. qca_send_vendor_cmd(hdev, 
QCA_WCN3990_POWERON_PULSE); in qca_setup.
    so we find disable or enable hardware flow control in qca_setup()
2. Before sending change BT CHIP baudrate request i.e.  
qca_set_baudrate(hu->hdev, qca_baudrate); in qca_set_speed().



-- 
Regards
Balakrishna.

  reply	other threads:[~2018-06-26  5:13 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-25 13:40 [PATCH v8 0/7] Enable Bluetooth functionality for WCN3990 Balakrishna Godavarthi
2018-06-25 13:40 ` [PATCH v8 1/7] dt-bindings: net: bluetooth: Add device tree bindings for QTI chip wcn3990 Balakrishna Godavarthi
2018-06-25 14:58   ` Rob Herring
2018-07-05 15:47     ` Balakrishna Godavarthi
2018-06-25 13:40 ` [PATCH v8 2/7] Bluetooth: btqca: Rename ROME specific functions to Generic functions Balakrishna Godavarthi
2018-06-25 23:00   ` Matthias Kaehlcke
2018-06-25 13:40 ` [PATCH v8 3/7] Bluetooth: btqca: Redefine qca_uart_setup() to generic function Balakrishna Godavarthi
2018-06-25 23:20   ` Matthias Kaehlcke
2018-06-26  1:23     ` Balakrishna Godavarthi
2018-06-26 19:53       ` Matthias Kaehlcke
2018-06-29 15:32         ` Balakrishna Godavarthi
2018-06-25 13:40 ` [PATCH v8 4/7] Bluetooth: hci_qca: Add wrapper functions for setting UART speed Balakrishna Godavarthi
2018-06-25 23:43   ` Matthias Kaehlcke
2018-06-26  0:05     ` Matthias Kaehlcke
2018-06-26  5:13       ` Balakrishna Godavarthi [this message]
2018-06-26 18:32         ` Matthias Kaehlcke
2018-06-26 18:45           ` Balakrishna Godavarthi
2018-06-26  1:31     ` Balakrishna Godavarthi
2018-06-26 19:02       ` Matthias Kaehlcke
2018-06-29 15:29         ` Balakrishna Godavarthi
2018-06-29 21:01           ` Matthias Kaehlcke
2018-07-03 15:59             ` Balakrishna Godavarthi
2018-06-25 13:40 ` [PATCH v8 5/7] Bluetooth: hci_qca: Enable 3.2 Mbps operating speed Balakrishna Godavarthi
2018-06-25 13:40 ` [PATCH v8 6/7] Bluetooth: btqca: Add wcn3990 firmware download support Balakrishna Godavarthi
2018-06-25 13:40 ` [PATCH v8 7/7] Bluetooth: hci_qca: Add support for Qualcomm Bluetooth chip wcn3990 Balakrishna Godavarthi
2018-06-26  1:05   ` Matthias Kaehlcke
2018-06-29 17:37     ` Balakrishna Godavarthi

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=66681ee5281749e17394cab6f58083d8@codeaurora.org \
    --to=bgodavar@codeaurora.org \
    --cc=devicetree@vger.kernel.org \
    --cc=hemantg@codeaurora.org \
    --cc=johan.hedberg@gmail.com \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marcel@holtmann.org \
    --cc=mka@chromium.org \
    --cc=rtatiya@codeaurora.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).