All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matthias Kaehlcke <mka@chromium.org>
To: Balakrishna Godavarthi <bgodavar@codeaurora.org>
Cc: marcel@holtmann.org, johan.hedberg@gmail.com,
	thierry.escande@linaro.org, linux-bluetooth@vger.kernel.org,
	rtatiya@codeaurora.org, hemantg@codeaurora.org,
	linux-arm-msm@vger.kernel.org
Subject: Re: [PATCH v7 5/8] Bluetooth: hci_qca: Defined wrapper functions for setting UART speeds
Date: Wed, 20 Jun 2018 16:10:56 -0700	[thread overview]
Message-ID: <20180620231056.GJ169030@google.com> (raw)
In-Reply-To: <431406f54800ff5d1a20b69e5a2fdf9c@codeaurora.org>

Hi Balakrishna,

On Thu, Jun 21, 2018 at 01:19:00AM +0530, Balakrishna Godavarthi wrote:
> Hi Matthias,
> 
> On 2018-06-19 12:41, Balakrishna Godavarthi wrote:
> > HI Matthias,
> > 
> > Please find my comments in line.
> > 
> > On 2018-06-19 03:21, Matthias Kaehlcke wrote:
> > > On Sat, Jun 16, 2018 at 11:57:15AM +0530, Balakrishna Godavarthi
> > > wrote:
> > > > Subject: Bluetooth: hci_qca: Defined wrapper functions for setting
> > > >          UART speeds
> > > 
> > > s/Defined/Define/
> > > 
> > > or
> > > 
> > > s/Defined/Add/
> > > 
> > [Bala]: will update the text.
> > > > 
> > > > In 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 v7:
> > > > 	* initial patch
> > > > 	* created wrapper functions for init and operating speeds.
> > > > 
> > > > ---
> > > >  drivers/bluetooth/hci_qca.c | 64
> > > > ++++++++++++++++++++++++++-----------
> > > >  1 file changed, 45 insertions(+), 19 deletions(-)
> > > > 
> > > > diff --git a/drivers/bluetooth/hci_qca.c
> > > > b/drivers/bluetooth/hci_qca.c
> > > > index fe62420ef838..3e09c6223baf 100644
> > > > --- a/drivers/bluetooth/hci_qca.c
> > > > +++ b/drivers/bluetooth/hci_qca.c
> > > > @@ -923,21 +923,10 @@ static inline void
> > > > host_set_baudrate(struct hci_uart *hu, unsigned int speed)
> > > >  		hci_uart_set_baudrate(hu, speed);
> > > >  }
> > > > 
> > > > -static int qca_setup(struct hci_uart *hu)
> > > > +static void qca_set_init_speed(struct hci_uart *hu)
> > > >  {
> > > > -	struct hci_dev *hdev = hu->hdev;
> > > > -	struct qca_data *qca = hu->priv;
> > > > -	unsigned int speed, qca_baudrate = QCA_BAUDRATE_115200;
> > > > -	int ret;
> > > > -	int soc_ver = 0;
> > > > -
> > > > -	bt_dev_info(hdev, "ROME setup");
> > > > -
> > > > -	/* Patch downloading has to be done without IBS mode */
> > > > -	clear_bit(STATE_IN_BAND_SLEEP_ENABLED, &qca->flags);
> > > > +	unsigned int speed = 0;
> > > > 
> > > > -	/* Setup initial baudrate */
> > > > -	speed = 0;
> > > >  	if (hu->init_speed)
> > > >  		speed = hu->init_speed;
> > > >  	else if (hu->proto->init_speed)
> > > > @@ -945,27 +934,64 @@ static int qca_setup(struct hci_uart *hu)
> > > > 
> > > >  	if (speed)
> > > >  		host_set_baudrate(hu, speed);
> > > > +}
> > > > +
> > > > +static int qca_get_oper_speed(struct hci_uart *hu)
> > > 
> > > Return type should be unsigned int.
> > > 
> > [Bala]: will update
> > > > +{
> > > > +	unsigned int speed = 0;
> > > > 
> > > > -	/* Setup user speed if needed */
> > > > -	speed = 0;
> > > >  	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_oper_speed(struct hci_uart *hu)
> > > > +{
> > > > +	unsigned int speed = 0, qca_baudrate;
> > > 
> > > initialization is not needed.
> > > 
> > [Bala]: will update
> > 
> > > > +	int ret = 0;
> > > > +
> > > > +	speed = qca_get_oper_speed(hu);
> > > >  	if (speed) {
> > > 
> > > nit:
> > > 	if (!speed)
> > > 		return 0;
> > > 
> > > 
> > [Bala]: will update.
> > 
> > > >  		qca_baudrate = qca_get_baudrate_value(speed);
> > > > -
> > > > -		bt_dev_info(hdev, "Set UART speed to %d", speed);
> > > > -		ret = qca_set_baudrate(hdev, qca_baudrate);
> > > > +		bt_dev_info(hu->hdev, "Set UART speed to %d", speed);
> > > > +		ret = qca_set_baudrate(hu->hdev, qca_baudrate);
> > > >  		if (ret) {
> > > > -			bt_dev_err(hdev, "Failed to change the baud rate (%d)",
> > > > +			bt_dev_err(hu->hdev, "Failed to change the baud rate (%d)",
> > > >  				   ret);
> > > >  			return ret;
> > > >  		}
> > > >  		host_set_baudrate(hu, speed);
> > > >  	}
> > > > 
> > > > +	return ret;
> > > > +}
> > > > +
> > > > +static int qca_setup(struct hci_uart *hu)
> > > > +{
> > > > +	struct hci_dev *hdev = hu->hdev;
> > > > +	struct qca_data *qca = hu->priv;
> > > > +	unsigned int speed, qca_baudrate = QCA_BAUDRATE_115200;
> > > > +	int ret;
> > > > +	int soc_ver = 0;
> > > > +
> > > > +	bt_dev_info(hdev, "ROME setup");
> > > > +
> > > > +	/* Patch downloading has to be done without IBS mode */
> > > > +	clear_bit(STATE_IN_BAND_SLEEP_ENABLED, &qca->flags);
> > > > +
> > > > +	/* Setup initial baudrate */
> > > > +	qca_set_init_speed(hu);
> > > > +	/* Setup user speed if needed */
> > > > +	ret = qca_set_oper_speed(hu);
> > > > +	if (ret)
> > > > +		return ret;
> > > > +	speed = qca_get_oper_speed(hu);
> > > > +	if (speed)
> > > > +		qca_baudrate = qca_get_baudrate_value(speed);
> > > 
> > > nit: the sequence
> > > 
> > > qca_set_oper_speed()
> > > qca_get_oper_speed()
> > > 
> > > is slightly awkward to read. This could be avoided if the speed was
> > > passed as parameter, though I understand this isn't done for symmetry
> > > with qca_set_init_speed(). An alternative could be:
> > > 
> > > static int qca_set_speed(struct hci_uart *hu, unsigned int speed, enum
> > >     qca_speed_type speed_type)
> > > {
> > > 	unsigned int qca_baudrate;
> > > 
> > > 	if (speed_type == QCA_OPER_SPEED) {
> > > 		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 baud rate (%d)",
> > > 				ret);
> > > 			return ret;
> > > 		}
> > > 	}
> > > 
> > > 	host_set_baudrate(hu, speed);
> > > 
> > > 	/* If the order doesn't matter set the host baudrate first and
> > > 	   return if speed_type != QCA_OPER_SPEED */
> > > 
> > > 	return 0;
> > > }
> > > 
> > > static int qca_setup(struct hci_uart *hu)
> > > {
> > > 	...
> > > 	speed = qca_get_init_speed(hu);
> > > 	if (speed)
> > > 		qca_set_speed(hu, speed, QCA_INIT_SPEED);
> > > 
> > > 	speed = qca_get_oper_speed(hu);
> > > 	if (speed) {
> > > 	   	qca_set_speed(hu, speed, QCA_OPER_SPEED);
> > > 		qca_baudrate = qca_get_baudrate_value(speed);
> > > 	}
> > > 	...
> > > }
> > > 
> > > Just a suggestion, ok for me if you prefer to keep it as is.
> > 
> > [Bala]: will study and update the same.
> 
> [Bala]: you are suggestion looks ok to me. i am thinking to optimize
> further.
> 
> 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, unsigned int speed,
>                          enum qca_speed_type speed_type)
> {
>         unsigned int qca_baudrate;
>         int ret;
> 
>         if (speed_type == QCA_OPER_SPEED) {
>                 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);

nit: if the order doesn't matter consider setting the host baudrate
first and return if 'speed_type != QCA_OPER_SPEED', which reduces the
indentiation (just a minor not really important thing though).

I also see a point in not setting the host baudrate if the chip
baudrate couldn't be set, so whatever ;-)

> 
>         return ret;
> }
> 
>  static int qca_setup(struct hci_uart *hu)
>  {
>  	...
>     /* Setup initial baudrate */
>         speed = qca_get_speed(hu, QCA_INIT_SPEED);
>         if (speed)
>                 qca_set_speed(hu, speed, QCA_INIT_SPEED);
> 
>         /* Setup user speed if needed */
>         speed = qca_get_speed(hu, QCA_OPER_SPEED);
>         if (speed) {
>                 ret = qca_set_speed(hu, speed, QCA_OPER_SPEED);
>                 if (ret)
>                         return ret;
> 
>                 qca_baudrate = qca_get_baudrate_value(speed);
>         }
> 
> }
> 
> will have two functions,
> qca_set_speed(): for setting speed
> qca_get_speed(): to get the speed.
> 
> is this preferable?

Looks good to me, thanks!

  reply	other threads:[~2018-06-20 23:10 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-16  6:27 [PATCH v7 0/8] Enable Bluetooth functionality for WCN3990 Balakrishna Godavarthi
2018-06-16  6:27 ` [PATCH v7 1/8] dt-bindings: net: bluetooth: Add device tree bindings for QTI chip wcn3990 Balakrishna Godavarthi
2018-06-18 13:29   ` Rob Herring
2018-06-20 11:33     ` Balakrishna Godavarthi
2018-06-20 14:54       ` Rob Herring
2018-06-20 15:28         ` Balakrishna Godavarthi
2018-06-16  6:27 ` [PATCH v7 2/8] Bluetooth: btqca: Rename string ROME to QCA in logs Balakrishna Godavarthi
2018-06-18 19:42   ` Matthias Kaehlcke
2018-06-19  6:49     ` Balakrishna Godavarthi
2018-06-16  6:27 ` [PATCH v7 3/8] Bluetooth: btqca: Rename ROME related functions to Generic functions Balakrishna Godavarthi
2018-06-18 19:59   ` Matthias Kaehlcke
2018-06-19  7:06     ` Balakrishna Godavarthi
2018-06-16  6:27 ` [PATCH v7 4/8] Bluetooth: btqca: Redefine qca_uart_setup() to generic function Balakrishna Godavarthi
2018-06-18 21:19   ` Matthias Kaehlcke
2018-06-19  7:09     ` Balakrishna Godavarthi
2018-06-19 20:03       ` Matthias Kaehlcke
2018-06-20 10:53         ` Balakrishna Godavarthi
2018-06-20 23:33           ` Matthias Kaehlcke
2018-06-21 11:20             ` Balakrishna Godavarthi
2018-06-21 22:09               ` Matthias Kaehlcke
2018-06-22 15:11                 ` Balakrishna Godavarthi
2018-06-22 17:42                   ` Matthias Kaehlcke
2018-06-16  6:27 ` [PATCH v7 5/8] Bluetooth: hci_qca: Defined wrapper functions for setting UART speeds Balakrishna Godavarthi
2018-06-18 21:51   ` Matthias Kaehlcke
2018-06-19  7:11     ` Balakrishna Godavarthi
2018-06-20 19:49       ` Balakrishna Godavarthi
2018-06-20 23:10         ` Matthias Kaehlcke [this message]
2018-06-16  6:27 ` [PATCH v7 6/8] Bluetooth: hci_qca: Enable 3.2 Mbps operating speed Balakrishna Godavarthi
2018-06-16  6:27 ` [PATCH v7 7/8] Bluetooth: btqca: Add wcn3990 firmware download support Balakrishna Godavarthi
2018-06-18 22:02   ` Matthias Kaehlcke
2018-06-19  6:14     ` Marcel Holtmann
2018-06-16  6:27 ` [PATCH v7 8/8] Bluetooth: hci_qca: Add support for Qualcomm Bluetooth chip wcn3990 Balakrishna Godavarthi
2018-06-18 16:42   ` Stephen Boyd
2018-06-18 17:07     ` Balakrishna Godavarthi
2018-06-22  1:28       ` Stephen Boyd
2018-06-22 15:25         ` Balakrishna Godavarthi
2018-06-19 21:53   ` Matthias Kaehlcke
2018-06-21 14:00     ` Balakrishna Godavarthi
2018-06-21 21:16       ` Matthias Kaehlcke
2018-06-22 11:05         ` 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=20180620231056.GJ169030@google.com \
    --to=mka@chromium.org \
    --cc=bgodavar@codeaurora.org \
    --cc=hemantg@codeaurora.org \
    --cc=johan.hedberg@gmail.com \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=marcel@holtmann.org \
    --cc=rtatiya@codeaurora.org \
    --cc=thierry.escande@linaro.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.