Message ID | 1402564248-20606-1-git-send-email-varkab@cdac.in |
---|---|
State | Rejected, archived |
Delegated to: | David Miller |
Headers | show |
From: Varka Bhadram <varkabhadram@gmail.com> 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 <varkab@cdac.in> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: David Miller <davem@davemloft.net> Date: Thu, 12 Jun 2014 11:03:24 -0700 (PDT) > From: Varka Bhadram <varkabhadram@gmail.com> > 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 <varkab@cdac.in> > > 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
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 <davem@davemloft.net> wrote: > From: David Miller <davem@davemloft.net> > Date: Thu, 12 Jun 2014 11:03:24 -0700 (PDT) > >> From: Varka Bhadram <varkabhadram@gmail.com> >> 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 <varkab@cdac.in> >> >> 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 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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);
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 <varkab@cdac.in> --- drivers/net/ieee802154/mrf24j40.c | 114 +++++++++++++++++++++++++++++-------- 1 file changed, 89 insertions(+), 25 deletions(-)