[PATCH net-next] mrf24j40: separate h/w init and add checkings

Subsystems: ieee 802.15.4 subsystem, mrf24j40 ieee 802.15.4 radio driver, networking drivers, the rest

STALE4465d

4 messages, 2 authors, 2014-06-13 · open the first message on its own page

[PATCH net-next] mrf24j40: separate h/w init and add checkings

From: Varka Bhadram <hidden>
Date: 2014-06-12 09:11:51

separate the mrf24j40 hardware initialisation from probe()
and adds the sanity checkings.

These checkings are required if somebody hasn't a right spi configuration 
the probe function should fail. So we have to return from there.

Signed-off-by: Varka Bhadram <redacted>
---
 drivers/net/ieee802154/mrf24j40.c |  114 +++++++++++++++++++++++++++++--------
 1 file changed, 89 insertions(+), 25 deletions(-)
diff --git a/drivers/net/ieee802154/mrf24j40.c b/drivers/net/ieee802154/mrf24j40.c
index 4048062..9574d10 100644
--- a/drivers/net/ieee802154/mrf24j40.c
+++ b/drivers/net/ieee802154/mrf24j40.c
@@ -610,6 +610,92 @@ out:
 	return IRQ_HANDLED;
 }
 
+static int mrf24j40_hw_init(struct mrf24j40 *devrec)
+{
+	int ret;
+	u8 val;
+
+	/* Initialize the device.
+		From datasheet section 3.2: Initialization. */
+	ret = write_short_reg(devrec, REG_SOFTRST, 0x07);
+	if (ret)
+		goto err_ret;
+
+	ret = write_short_reg(devrec, REG_PACON2, 0x98);
+	if (ret)
+		goto err_ret;
+
+	ret = write_short_reg(devrec, REG_TXSTBL, 0x95);
+	if (ret)
+		goto err_ret;
+
+	ret = write_long_reg(devrec, REG_RFCON0, 0x03);
+	if (ret)
+		goto err_ret;
+
+	ret = write_long_reg(devrec, REG_RFCON1, 0x01);
+	if (ret)
+		goto err_ret;
+
+	ret = write_long_reg(devrec, REG_RFCON2, 0x80);
+	if (ret)
+		goto err_ret;
+
+	ret = write_long_reg(devrec, REG_RFCON6, 0x90);
+	if (ret)
+		goto err_ret;
+
+	ret = write_long_reg(devrec, REG_RFCON7, 0x80);
+	if (ret)
+		goto err_ret;
+
+	ret = write_long_reg(devrec, REG_RFCON8, 0x10);
+	if (ret)
+		goto err_ret;
+
+	ret = write_long_reg(devrec, REG_SLPCON1, 0x21);
+	if (ret)
+		goto err_ret;
+
+	ret = write_short_reg(devrec, REG_BBREG2, 0x80);
+	if (ret)
+		goto err_ret;
+
+	ret = write_short_reg(devrec, REG_CCAEDTH, 0x60);
+	if (ret)
+		goto err_ret;
+
+	ret = write_short_reg(devrec, REG_BBREG6, 0x40);
+	if (ret)
+		goto err_ret;
+
+	ret = write_short_reg(devrec, REG_RFCTL, 0x04);
+	if (ret)
+		goto err_ret;
+
+	ret = write_short_reg(devrec, REG_RFCTL, 0x0);
+	if (ret)
+		goto err_ret;
+
+	udelay(192);
+
+	/* Set RX Mode. RXMCR<1:0>: 0x0 normal, 0x1 promisc, 0x2 error */
+	ret = read_short_reg(devrec, REG_RXMCR, &val);
+	if (ret)
+		goto err_ret;
+
+	val &= ~0x3; /* Clear RX mode (normal) */
+
+	ret = write_short_reg(devrec, REG_RXMCR, val);
+	if (ret)
+		goto err_ret;
+
+	return 0;
+
+err_ret:
+	return ret;
+}
+
 static int mrf24j40_probe(struct spi_device *spi)
 {
 	int ret = -ENOMEM;
@@ -650,31 +736,9 @@ static int mrf24j40_probe(struct spi_device *spi)
 	if (ret)
 		goto err_register_device;
 
-	/* Initialize the device.
-		From datasheet section 3.2: Initialization. */
-	write_short_reg(devrec, REG_SOFTRST, 0x07);
-	write_short_reg(devrec, REG_PACON2, 0x98);
-	write_short_reg(devrec, REG_TXSTBL, 0x95);
-	write_long_reg(devrec, REG_RFCON0, 0x03);
-	write_long_reg(devrec, REG_RFCON1, 0x01);
-	write_long_reg(devrec, REG_RFCON2, 0x80);
-	write_long_reg(devrec, REG_RFCON6, 0x90);
-	write_long_reg(devrec, REG_RFCON7, 0x80);
-	write_long_reg(devrec, REG_RFCON8, 0x10);
-	write_long_reg(devrec, REG_SLPCON1, 0x21);
-	write_short_reg(devrec, REG_BBREG2, 0x80);
-	write_short_reg(devrec, REG_CCAEDTH, 0x60);
-	write_short_reg(devrec, REG_BBREG6, 0x40);
-	write_short_reg(devrec, REG_RFCTL, 0x04);
-	write_short_reg(devrec, REG_RFCTL, 0x0);
-	udelay(192);
-
-	/* Set RX Mode. RXMCR<1:0>: 0x0 normal, 0x1 promisc, 0x2 error */
-	ret = read_short_reg(devrec, REG_RXMCR, &val);
+	ret = mrf24j40_hw_init(devrec);
 	if (ret)
-		goto err_read_reg;
-	val &= ~0x3; /* Clear RX mode (normal) */
-	write_short_reg(devrec, REG_RXMCR, val);
+		return err_hw_init;
 
 	ret = devm_request_threaded_irq(&spi->dev,
 					spi->irq,
@@ -692,7 +756,7 @@ static int mrf24j40_probe(struct spi_device *spi)
 	return 0;
 
 err_irq:
-err_read_reg:
+err_hw_init:
 	ieee802154_unregister_device(devrec->dev);
 err_register_device:
 	ieee802154_free_device(devrec->dev);
-- 
1.7.9.5

Re: [PATCH net-next] mrf24j40: separate h/w init and add checkings

From: David Miller <davem@davemloft.net>
Date: 2014-06-12 18:03:26

From: Varka Bhadram <redacted>
Date: Thu, 12 Jun 2014 14:40:48 +0530
separate the mrf24j40 hardware initialisation from probe()
and adds the sanity checkings.

These checkings are required if somebody hasn't a right spi configuration 
the probe function should fail. So we have to return from there.

Signed-off-by: Varka Bhadram <redacted>
Applied, thanks.

Re: [PATCH net-next] mrf24j40: separate h/w init and add checkings

From: David Miller <davem@davemloft.net>
Date: 2014-06-12 18:05:23

From: David Miller <davem@davemloft.net>
Date: Thu, 12 Jun 2014 11:03:24 -0700 (PDT)
From: Varka Bhadram <redacted>
Date: Thu, 12 Jun 2014 14:40:48 +0530
quoted
separate the mrf24j40 hardware initialisation from probe()
and adds the sanity checkings.

These checkings are required if somebody hasn't a right spi configuration 
the probe function should fail. So we have to return from there.

Signed-off-by: Varka Bhadram <redacted>
Applied, thanks.
Reverted, did you even compile test this change?

drivers/net/ieee802154/mrf24j40.c: In function ‘mrf24j40_probe’:
drivers/net/ieee802154/mrf24j40.c:741:10: error: ‘err_hw_init’ undeclared (first use in this function)
drivers/net/ieee802154/mrf24j40.c:741:10: note: each undeclared identifier is reported only once for each function it appears in
drivers/net/ieee802154/mrf24j40.c:759:1: warning: label ‘err_hw_init’ defined but not used [-Wunused-label]
drivers/net/ieee802154/mrf24j40.c:702:5: warning: unused variable ‘val’ [-Wunused-variable]
make[1]: *** [drivers/net/ieee802154/mrf24j40.o] Error 1
make: *** [drivers/net/ieee802154/mrf24j40.o] Error 2
------------------------------------------------------------------------------
HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions
Find What Matters Most in Your Big Data with HPCC Systems
Open Source. Fast. Scalable. Simple. Ideal for Dirty Data.
Leverages Graph Analysis for Fast Processing & Easy Data Exploration
http://p.sf.net/sfu/hpccsystems
_______________________________________________
Linux-zigbee-devel mailing list
Linux-zigbee-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel

Re: [PATCH net-next] mrf24j40: separate h/w init and add checkings

From: Varka Bhadram <hidden>
Date: 2014-06-13 03:36:55

Hi David,

Sorry for the noise. i will send the fixed patch.

Thanks.

-Varka Bhadram

On Thu, Jun 12, 2014 at 11:35 PM, David Miller [off-list ref] wrote:
From: David Miller <davem@davemloft.net>
Date: Thu, 12 Jun 2014 11:03:24 -0700 (PDT)
quoted
From: Varka Bhadram <redacted>
Date: Thu, 12 Jun 2014 14:40:48 +0530
quoted
separate the mrf24j40 hardware initialisation from probe()
and adds the sanity checkings.

These checkings are required if somebody hasn't a right spi configuration
the probe function should fail. So we have to return from there.

Signed-off-by: Varka Bhadram <redacted>
Applied, thanks.
Reverted, did you even compile test this change?

drivers/net/ieee802154/mrf24j40.c: In function ‘mrf24j40_probe’:
drivers/net/ieee802154/mrf24j40.c:741:10: error: ‘err_hw_init’ undeclared (first use in this function)
drivers/net/ieee802154/mrf24j40.c:741:10: note: each undeclared identifier is reported only once for each function it appears in
drivers/net/ieee802154/mrf24j40.c:759:1: warning: label ‘err_hw_init’ defined but not used [-Wunused-label]
drivers/net/ieee802154/mrf24j40.c:702:5: warning: unused variable ‘val’ [-Wunused-variable]
make[1]: *** [drivers/net/ieee802154/mrf24j40.o] Error 1
make: *** [drivers/net/ieee802154/mrf24j40.o] Error 2
------------------------------------------------------------------------------
HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions
Find What Matters Most in Your Big Data with HPCC Systems
Open Source. Fast. Scalable. Simple. Ideal for Dirty Data.
Leverages Graph Analysis for Fast Processing & Easy Data Exploration
http://p.sf.net/sfu/hpccsystems
_______________________________________________
Linux-zigbee-devel mailing list
Linux-zigbee-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help