* [PATCH net-next] ieee802154: use helper function to get rid of redundancy
@ 2014-05-31 23:39 Jean Sacren
2014-06-01 7:26 ` Alexander Aring
0 siblings, 1 reply; 8+ messages in thread
From: Jean Sacren @ 2014-05-31 23:39 UTC (permalink / raw)
To: Alexander Smirnov, Dmitry Eremin-Solenikov
Cc: Alexander Aring, linux-zigbee-devel, netdev
In some call sites of at86rf230_write_subreg(), they are rather
redundant. Use a helper function to replace those call sites for
efficiency.
With at86rf230_write_subreg_by_page(), now ->rssi_base_val is
assigned before at86rf230_write_subreg() is evaluated. Looking at
at86rf230_write_subreg(), that change could possibly affect
__at86rf230_read_subreg()
and
__at86rf230_write()
only or vice versa. Yet by the definition of
struct at86rf230_local
changing ->rssi_base_val will in no way affect those two functions
above and evaluation of those two has no impact on ->rssi_base_val.
Thus, at86rf230_write_subreg_by_page() itself is safe.
Additionally at86rf230_write_subreg_by_channel() is simple and safe.
Signed-off-by: Jean Sacren <sakiwit@gmail.com>
---
drivers/net/ieee802154/at86rf230.c | 34 +++++++++++++++++++++++-----------
1 file changed, 23 insertions(+), 11 deletions(-)
diff --git a/drivers/net/ieee802154/at86rf230.c b/drivers/net/ieee802154/at86rf230.c
index 4517b149ed07..5aecbd1c402c 100644
--- a/drivers/net/ieee802154/at86rf230.c
+++ b/drivers/net/ieee802154/at86rf230.c
@@ -597,25 +597,37 @@ at86rf230_set_channel(struct at86rf230_local *lp, int page, int channel)
return at86rf230_write_subreg(lp, SR_CHANNEL, channel);
}
+static int at86rf230_write_subreg_by_channel(struct at86rf230_local *lp,
+ int channel)
+{
+ if (channel)
+ channel = 1;
+
+ return at86rf230_write_subreg(lp, SR_SUB_MODE, channel);
+}
+
+static int at86rf230_write_subreg_by_page(struct at86rf230_local *lp, int page)
+{
+ if (page) {
+ lp->rssi_base_val = -98;
+ page = 1;
+ } else {
+ lp->rssi_base_val = -100;
+ }
+
+ return at86rf230_write_subreg(lp, SR_BPSK_QPSK, page);
+}
+
static int
at86rf212_set_channel(struct at86rf230_local *lp, int page, int channel)
{
int rc;
- if (channel == 0)
- rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 0);
- else
- rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 1);
+ rc = at86rf230_write_subreg_by_channel(lp, channel);
if (rc < 0)
return rc;
- if (page == 0) {
- rc = at86rf230_write_subreg(lp, SR_BPSK_QPSK, 0);
- lp->rssi_base_val = -100;
- } else {
- rc = at86rf230_write_subreg(lp, SR_BPSK_QPSK, 1);
- lp->rssi_base_val = -98;
- }
+ rc = at86rf230_write_subreg_by_page(lp, page);
if (rc < 0)
return rc;
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-next] ieee802154: use helper function to get rid of redundancy
2014-05-31 23:39 [PATCH net-next] ieee802154: use helper function to get rid of redundancy Jean Sacren
@ 2014-06-01 7:26 ` Alexander Aring
2014-06-01 14:23 ` Jean Sacren
0 siblings, 1 reply; 8+ messages in thread
From: Alexander Aring @ 2014-06-01 7:26 UTC (permalink / raw)
To: Jean Sacren
Cc: Alexander Smirnov, Dmitry Eremin-Solenikov, linux-zigbee-devel,
netdev
Hi Jean,
the at86rf230 driver supports several at86rf2xx chips. You split the
at86rf212_set_channel which is at86rf212 specific in two function which
are named at86rf230_foo.
Sorry, but I think we should not do this. One reason is that the code is
much easier to read when we have one channel_set callback for at86rf23x
and at86rf212 chips.
Btw. I preparing a big cleanup for this driver which supports regmap and
asychronous handling for rx/tx paths.
- Alex
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next] ieee802154: use helper function to get rid of redundancy
2014-06-01 7:26 ` Alexander Aring
@ 2014-06-01 14:23 ` Jean Sacren
[not found] ` <20140601142317.GA19754-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
0 siblings, 1 reply; 8+ messages in thread
From: Jean Sacren @ 2014-06-01 14:23 UTC (permalink / raw)
To: Alexander Aring
Cc: Alexander Smirnov, Dmitry Eremin-Solenikov, linux-zigbee-devel,
netdev
From: Alexander Aring <alex.aring@gmail.com>
Date: Sun, 01 Jun 2014 09:26:57 +0200
Hi Alex,
Thank you very much for the feedback.
> the at86rf230 driver supports several at86rf2xx chips. You split the
> at86rf212_set_channel which is at86rf212 specific in two function which
> are named at86rf230_foo.
I didn't "split" at86rf212_set_channel() in two functions. I spliced
those two sections of code and made at86rf212_set_channel() far
succinct and easy to read.
> Sorry, but I think we should not do this. One reason is that the code is
> much easier to read when we have one channel_set callback for at86rf23x
> and at86rf212 chips.
If you use one channel_set callback as before the change, how would you
overcome the redundancy?
> Btw. I preparing a big cleanup for this driver which supports regmap and
> asychronous handling for rx/tx paths.
Thank you for letting me know. I'm sure I will learn a lot.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next] ieee802154: use helper function to get rid of redundancy
[not found] ` <20140601142317.GA19754-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2014-06-01 14:35 ` Alexander Aring
2014-06-01 15:35 ` Jean Sacren
0 siblings, 1 reply; 8+ messages in thread
From: Alexander Aring @ 2014-06-01 14:35 UTC (permalink / raw)
To: Jean Sacren
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
linux-zigbee-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
Hi,
On Sun, Jun 01, 2014 at 08:23:17AM -0600, Jean Sacren wrote:
> From: Alexander Aring <alex.aring-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> Date: Sun, 01 Jun 2014 09:26:57 +0200
>
> Hi Alex,
>
> Thank you very much for the feedback.
>
> > the at86rf230 driver supports several at86rf2xx chips. You split the
> > at86rf212_set_channel which is at86rf212 specific in two function which
> > are named at86rf230_foo.
>
> I didn't "split" at86rf212_set_channel() in two functions. I spliced
> those two sections of code and made at86rf212_set_channel() far
> succinct and easy to read.
>
yes, but this driver supports more than one chip and it's easier to read
if we have one channel_set function for each chip type. Note you also
named the specific channel_set function to a another at86rf230_foo
function which is at86rf212 specific only. Sorry that will confuse
all the people who will ever read this code.
There is a at86rf230_ops and at86rf212_ops struct. The channel_set
function it's much easier to have only one callback for each struct,
otherwise you have 4 different channel_set functions and nobody knows
for which at86rf2xx type that function is for.
> > Sorry, but I think we should not do this. One reason is that the code is
> > much easier to read when we have one channel_set callback for at86rf23x
> > and at86rf212 chips.
>
> If you use one channel_set callback as before the change, how would you
> overcome the redundancy?
>
There is no redundancy, sorry. There would be a redundancy if two
chiptypes like at86rf231 and at86rf212 needs some code of this callback
and you can do some codesharing, but you can't do that there.
- Alex
------------------------------------------------------------------------------
Time is money. Stop wasting it! Get your web API in 5 minutes.
www.restlet.com/download
http://p.sf.net/sfu/restlet
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next] ieee802154: use helper function to get rid of redundancy
2014-06-01 14:35 ` Alexander Aring
@ 2014-06-01 15:35 ` Jean Sacren
2014-06-01 16:39 ` Alexander Aring
0 siblings, 1 reply; 8+ messages in thread
From: Jean Sacren @ 2014-06-01 15:35 UTC (permalink / raw)
To: Alexander Aring
Cc: Alexander Smirnov, Dmitry Eremin-Solenikov, linux-zigbee-devel,
netdev
From: Alexander Aring <alex.aring@gmail.com>
Date: Sun, 01 Jun 2014 16:35:53 +0200
>
> Hi,
>
> On Sun, Jun 01, 2014 at 08:23:17AM -0600, Jean Sacren wrote:
> > From: Alexander Aring <alex.aring@gmail.com>
> > Date: Sun, 01 Jun 2014 09:26:57 +0200
> >
> > Hi Alex,
> >
> > Thank you very much for the feedback.
> >
> > > the at86rf230 driver supports several at86rf2xx chips. You split the
> > > at86rf212_set_channel which is at86rf212 specific in two function which
> > > are named at86rf230_foo.
> >
> > I didn't "split" at86rf212_set_channel() in two functions. I spliced
> > those two sections of code and made at86rf212_set_channel() far
> > succinct and easy to read.
> >
>
> yes, but this driver supports more than one chip and it's easier to read
> if we have one channel_set function for each chip type. Note you also
> named the specific channel_set function to a another at86rf230_foo
> function which is at86rf212 specific only. Sorry that will confuse
> all the people who will ever read this code.
>
> There is a at86rf230_ops and at86rf212_ops struct. The channel_set
> function it's much easier to have only one callback for each struct,
> otherwise you have 4 different channel_set functions and nobody knows
> for which at86rf2xx type that function is for.
You mean something like the following will be less confusing?
diff --git a/drivers/net/ieee802154/at86rf230.c b/drivers/net/ieee802154/at86rf230.c
index 4517b149ed07..06b494bacc44 100644
--- a/drivers/net/ieee802154/at86rf230.c
+++ b/drivers/net/ieee802154/at86rf230.c
@@ -602,20 +602,21 @@ at86rf212_set_channel(struct at86rf230_local *lp, int page, int channel)
{
int rc;
- if (channel == 0)
- rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 0);
- else
- rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 1);
+ if (channel)
+ channel = 1;
+
+ rc = at86rf230_write_subreg(lp, SR_SUB_MODE, channel);
if (rc < 0)
return rc;
- if (page == 0) {
- rc = at86rf230_write_subreg(lp, SR_BPSK_QPSK, 0);
- lp->rssi_base_val = -100;
- } else {
- rc = at86rf230_write_subreg(lp, SR_BPSK_QPSK, 1);
+ if (page) {
lp->rssi_base_val = -98;
+ page = 1;
+ } else {
+ lp->rssi_base_val = -100;
}
+
+ rc = at86rf230_write_subreg(lp, SR_BPSK_QPSK, page);
if (rc < 0)
return rc;
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-next] ieee802154: use helper function to get rid of redundancy
2014-06-01 15:35 ` Jean Sacren
@ 2014-06-01 16:39 ` Alexander Aring
2014-06-01 17:49 ` Jean Sacren
0 siblings, 1 reply; 8+ messages in thread
From: Alexander Aring @ 2014-06-01 16:39 UTC (permalink / raw)
To: Jean Sacren
Cc: Alexander Smirnov, Dmitry Eremin-Solenikov, linux-zigbee-devel,
netdev
On Sun, Jun 01, 2014 at 09:35:47AM -0600, Jean Sacren wrote:
> From: Alexander Aring <alex.aring@gmail.com>
> Date: Sun, 01 Jun 2014 16:35:53 +0200
> >
> > Hi,
> >
> > On Sun, Jun 01, 2014 at 08:23:17AM -0600, Jean Sacren wrote:
> > > From: Alexander Aring <alex.aring@gmail.com>
> > > Date: Sun, 01 Jun 2014 09:26:57 +0200
> > >
> > > Hi Alex,
> > >
> > > Thank you very much for the feedback.
> > >
> > > > the at86rf230 driver supports several at86rf2xx chips. You split the
> > > > at86rf212_set_channel which is at86rf212 specific in two function which
> > > > are named at86rf230_foo.
> > >
> > > I didn't "split" at86rf212_set_channel() in two functions. I spliced
> > > those two sections of code and made at86rf212_set_channel() far
> > > succinct and easy to read.
> > >
> >
> > yes, but this driver supports more than one chip and it's easier to read
> > if we have one channel_set function for each chip type. Note you also
> > named the specific channel_set function to a another at86rf230_foo
> > function which is at86rf212 specific only. Sorry that will confuse
> > all the people who will ever read this code.
> >
> > There is a at86rf230_ops and at86rf212_ops struct. The channel_set
> > function it's much easier to have only one callback for each struct,
> > otherwise you have 4 different channel_set functions and nobody knows
> > for which at86rf2xx type that function is for.
>
> You mean something like the following will be less confusing?
Yes that's less but there are issues and I don't see any reason why we
should do that.
>
> diff --git a/drivers/net/ieee802154/at86rf230.c b/drivers/net/ieee802154/at86rf230.c
> index 4517b149ed07..06b494bacc44 100644
> --- a/drivers/net/ieee802154/at86rf230.c
> +++ b/drivers/net/ieee802154/at86rf230.c
> @@ -602,20 +602,21 @@ at86rf212_set_channel(struct at86rf230_local *lp, int page, int channel)
> {
> int rc;
>
> - if (channel == 0)
> - rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 0);
> - else
> - rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 1);
> + if (channel)
> + channel = 1;
> +
> + rc = at86rf230_write_subreg(lp, SR_SUB_MODE, channel);
> if (rc < 0)
> return rc;
>
First:
This will break the at86rf212_set_channel function. At the end of this
function we need the channel parameter and you overwrite it here.
At the end of this function stands:
"return at86rf230_write_subreg(lp, SR_CHANNEL, channel);"
Second:
The variable channel should be a new variable named sub_mode and initialized
to 0, this fixes the first issue.
But again, I don't see any reasons why we should change that. It's the
same thing like before.
- Alex
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next] ieee802154: use helper function to get rid of redundancy
2014-06-01 16:39 ` Alexander Aring
@ 2014-06-01 17:49 ` Jean Sacren
2014-06-01 17:53 ` Jean Sacren
0 siblings, 1 reply; 8+ messages in thread
From: Jean Sacren @ 2014-06-01 17:49 UTC (permalink / raw)
To: Alexander Aring
Cc: Alexander Smirnov, Dmitry Eremin-Solenikov, linux-zigbee-devel,
netdev
From: Alexander Aring <alex.aring@gmail.com>
Date: Sun, 01 Jun 2014 18:39:28 +0200
>
> > You mean something like the following will be less confusing?
>
> Yes that's less but there are issues and I don't see any reason why we
> should do that.
>
> >
> > diff --git a/drivers/net/ieee802154/at86rf230.c b/drivers/net/ieee802154/at86rf230.c
> > index 4517b149ed07..06b494bacc44 100644
> > --- a/drivers/net/ieee802154/at86rf230.c
> > +++ b/drivers/net/ieee802154/at86rf230.c
> > @@ -602,20 +602,21 @@ at86rf212_set_channel(struct at86rf230_local *lp, int page, int channel)
> > {
> > int rc;
> >
> > - if (channel == 0)
> > - rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 0);
> > - else
> > - rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 1);
> > + if (channel)
> > + channel = 1;
> > +
> > + rc = at86rf230_write_subreg(lp, SR_SUB_MODE, channel);
> > if (rc < 0)
> > return rc;
> >
>
> First:
>
> This will break the at86rf212_set_channel function. At the end of this
> function we need the channel parameter and you overwrite it here.
> At the end of this function stands:
>
> "return at86rf230_write_subreg(lp, SR_CHANNEL, channel);"
You are right, but we can:
if (channel)
rc = 1;
rc = at86rf230_write_subreg(lp, SR_SUB_MODE, rc);
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next] ieee802154: use helper function to get rid of redundancy
2014-06-01 17:49 ` Jean Sacren
@ 2014-06-01 17:53 ` Jean Sacren
0 siblings, 0 replies; 8+ messages in thread
From: Jean Sacren @ 2014-06-01 17:53 UTC (permalink / raw)
To: Alexander Aring
Cc: Alexander Smirnov, Dmitry Eremin-Solenikov, linux-zigbee-devel,
netdev
From: Jean Sacren <sakiwit@gmail.com>
Date: Sun, 01 Jun 2014 11:49:29 -0600
>
> From: Alexander Aring <alex.aring@gmail.com>
> Date: Sun, 01 Jun 2014 18:39:28 +0200
> >
> > > You mean something like the following will be less confusing?
> >
> > Yes that's less but there are issues and I don't see any reason why we
> > should do that.
> >
> > >
> > > diff --git a/drivers/net/ieee802154/at86rf230.c b/drivers/net/ieee802154/at86rf230.c
> > > index 4517b149ed07..06b494bacc44 100644
> > > --- a/drivers/net/ieee802154/at86rf230.c
> > > +++ b/drivers/net/ieee802154/at86rf230.c
> > > @@ -602,20 +602,21 @@ at86rf212_set_channel(struct at86rf230_local *lp, int page, int channel)
> > > {
> > > int rc;
> > >
> > > - if (channel == 0)
> > > - rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 0);
> > > - else
> > > - rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 1);
> > > + if (channel)
> > > + channel = 1;
> > > +
> > > + rc = at86rf230_write_subreg(lp, SR_SUB_MODE, channel);
> > > if (rc < 0)
> > > return rc;
> > >
> >
> > First:
> >
> > This will break the at86rf212_set_channel function. At the end of this
> > function we need the channel parameter and you overwrite it here.
> > At the end of this function stands:
> >
> > "return at86rf230_write_subreg(lp, SR_CHANNEL, channel);"
>
> You are right, but we can:
>
> if (channel)
> rc = 1;
>
> rc = at86rf230_write_subreg(lp, SR_SUB_MODE, rc);
Obviously:
int rc = 0;
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2014-06-01 17:53 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-31 23:39 [PATCH net-next] ieee802154: use helper function to get rid of redundancy Jean Sacren
2014-06-01 7:26 ` Alexander Aring
2014-06-01 14:23 ` Jean Sacren
[not found] ` <20140601142317.GA19754-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-06-01 14:35 ` Alexander Aring
2014-06-01 15:35 ` Jean Sacren
2014-06-01 16:39 ` Alexander Aring
2014-06-01 17:49 ` Jean Sacren
2014-06-01 17:53 ` Jean Sacren
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).