Lines Matching refs:devrec
100 static int write_short_reg(struct mrf24j40 *devrec, u8 reg, u8 value) in write_short_reg() argument
106 .tx_buf = devrec->buf, in write_short_reg()
107 .rx_buf = devrec->buf, in write_short_reg()
113 mutex_lock(&devrec->buffer_mutex); in write_short_reg()
114 devrec->buf[0] = MRF24J40_WRITESHORT(reg); in write_short_reg()
115 devrec->buf[1] = value; in write_short_reg()
117 ret = spi_sync(devrec->spi, &msg); in write_short_reg()
119 dev_err(printdev(devrec), in write_short_reg()
122 mutex_unlock(&devrec->buffer_mutex); in write_short_reg()
126 static int read_short_reg(struct mrf24j40 *devrec, u8 reg, u8 *val) in read_short_reg() argument
132 .tx_buf = devrec->buf, in read_short_reg()
133 .rx_buf = devrec->buf, in read_short_reg()
139 mutex_lock(&devrec->buffer_mutex); in read_short_reg()
140 devrec->buf[0] = MRF24J40_READSHORT(reg); in read_short_reg()
141 devrec->buf[1] = 0; in read_short_reg()
143 ret = spi_sync(devrec->spi, &msg); in read_short_reg()
145 dev_err(printdev(devrec), in read_short_reg()
148 *val = devrec->buf[1]; in read_short_reg()
150 mutex_unlock(&devrec->buffer_mutex); in read_short_reg()
154 static int read_long_reg(struct mrf24j40 *devrec, u16 reg, u8 *value) in read_long_reg() argument
161 .tx_buf = devrec->buf, in read_long_reg()
162 .rx_buf = devrec->buf, in read_long_reg()
169 mutex_lock(&devrec->buffer_mutex); in read_long_reg()
170 devrec->buf[0] = cmd >> 8 & 0xff; in read_long_reg()
171 devrec->buf[1] = cmd & 0xff; in read_long_reg()
172 devrec->buf[2] = 0; in read_long_reg()
174 ret = spi_sync(devrec->spi, &msg); in read_long_reg()
176 dev_err(printdev(devrec), in read_long_reg()
179 *value = devrec->buf[2]; in read_long_reg()
181 mutex_unlock(&devrec->buffer_mutex); in read_long_reg()
185 static int write_long_reg(struct mrf24j40 *devrec, u16 reg, u8 val) in write_long_reg() argument
192 .tx_buf = devrec->buf, in write_long_reg()
193 .rx_buf = devrec->buf, in write_long_reg()
200 mutex_lock(&devrec->buffer_mutex); in write_long_reg()
201 devrec->buf[0] = cmd >> 8 & 0xff; in write_long_reg()
202 devrec->buf[1] = cmd & 0xff; in write_long_reg()
203 devrec->buf[2] = val; in write_long_reg()
205 ret = spi_sync(devrec->spi, &msg); in write_long_reg()
207 dev_err(printdev(devrec), in write_long_reg()
210 mutex_unlock(&devrec->buffer_mutex); in write_long_reg()
217 static int write_tx_buf(struct mrf24j40 *devrec, u16 reg, in write_tx_buf() argument
226 .tx_buf = devrec->buf, in write_tx_buf()
239 …dev_err(printdev(devrec), "write_tx_buf() was passed too large a buffer. Performing short write.\n… in write_tx_buf()
249 mutex_lock(&devrec->buffer_mutex); in write_tx_buf()
250 devrec->buf[0] = cmd >> 8 & 0xff; in write_tx_buf()
251 devrec->buf[1] = cmd & 0xff; in write_tx_buf()
255 ret = spi_sync(devrec->spi, &msg); in write_tx_buf()
257 dev_err(printdev(devrec), "SPI write Failed for TX buf\n"); in write_tx_buf()
259 mutex_unlock(&devrec->buffer_mutex); in write_tx_buf()
263 static int mrf24j40_read_rx_buf(struct mrf24j40 *devrec, in mrf24j40_read_rx_buf() argument
287 ret = read_long_reg(devrec, REG_RX_FIFO, &rx_len); in mrf24j40_read_rx_buf()
294 dev_err(printdev(devrec), "Invalid length read from device. Performing short read.\n"); in mrf24j40_read_rx_buf()
300 dev_err(printdev(devrec), "Buffer not big enough. Performing short read\n"); in mrf24j40_read_rx_buf()
315 ret = spi_sync(devrec->spi, &msg); in mrf24j40_read_rx_buf()
317 dev_err(printdev(devrec), "SPI RX Buffer Read Failed.\n"); in mrf24j40_read_rx_buf()
337 struct mrf24j40 *devrec = hw->priv; in mrf24j40_tx() local
341 dev_dbg(printdev(devrec), "tx packet of %d bytes\n", skb->len); in mrf24j40_tx()
343 ret = write_tx_buf(devrec, 0x000, skb->data, skb->len); in mrf24j40_tx()
347 reinit_completion(&devrec->tx_complete); in mrf24j40_tx()
350 ret = read_short_reg(devrec, REG_TXNCON, &val); in mrf24j40_tx()
357 write_short_reg(devrec, REG_TXNCON, val); in mrf24j40_tx()
361 &devrec->tx_complete, in mrf24j40_tx()
366 dev_warn(printdev(devrec), "Timeout waiting for TX interrupt\n"); in mrf24j40_tx()
372 ret = read_short_reg(devrec, REG_TXSTAT, &val); in mrf24j40_tx()
376 dev_dbg(printdev(devrec), "Error Sending. Retry count exceeded\n"); in mrf24j40_tx()
379 dev_dbg(printdev(devrec), "Packet Sent\n"); in mrf24j40_tx()
396 struct mrf24j40 *devrec = hw->priv; in mrf24j40_start() local
400 dev_dbg(printdev(devrec), "start\n"); in mrf24j40_start()
402 ret = read_short_reg(devrec, REG_INTCON, &val); in mrf24j40_start()
406 write_short_reg(devrec, REG_INTCON, val); in mrf24j40_start()
413 struct mrf24j40 *devrec = hw->priv; in mrf24j40_stop() local
417 dev_dbg(printdev(devrec), "stop\n"); in mrf24j40_stop()
419 ret = read_short_reg(devrec, REG_INTCON, &val); in mrf24j40_stop()
423 write_short_reg(devrec, REG_INTCON, val); in mrf24j40_stop()
428 struct mrf24j40 *devrec = hw->priv; in mrf24j40_set_channel() local
432 dev_dbg(printdev(devrec), "Set Channel %d\n", channel); in mrf24j40_set_channel()
440 write_long_reg(devrec, REG_RFCON0, val); in mrf24j40_set_channel()
443 ret = read_short_reg(devrec, REG_RFCTL, &val); in mrf24j40_set_channel()
447 write_short_reg(devrec, REG_RFCTL, val); in mrf24j40_set_channel()
449 write_short_reg(devrec, REG_RFCTL, val); in mrf24j40_set_channel()
460 struct mrf24j40 *devrec = hw->priv; in mrf24j40_filter() local
462 dev_dbg(printdev(devrec), "filter\n"); in mrf24j40_filter()
471 write_short_reg(devrec, REG_SADRH, addrh); in mrf24j40_filter()
472 write_short_reg(devrec, REG_SADRL, addrl); in mrf24j40_filter()
473 dev_dbg(printdev(devrec), in mrf24j40_filter()
483 write_short_reg(devrec, REG_EADR0 + i, addr[i]); in mrf24j40_filter()
499 write_short_reg(devrec, REG_PANIDH, panidh); in mrf24j40_filter()
500 write_short_reg(devrec, REG_PANIDL, panidl); in mrf24j40_filter()
502 dev_dbg(printdev(devrec), "Set PANID to %04hx\n", filt->pan_id); in mrf24j40_filter()
510 ret = read_short_reg(devrec, REG_RXMCR, &val); in mrf24j40_filter()
517 write_short_reg(devrec, REG_RXMCR, val); in mrf24j40_filter()
523 dev_dbg(printdev(devrec), "Set Pan Coord to %s\n", in mrf24j40_filter()
530 static int mrf24j40_handle_rx(struct mrf24j40 *devrec) in mrf24j40_handle_rx() argument
540 ret = read_short_reg(devrec, REG_BBREG1, &val); in mrf24j40_handle_rx()
544 write_short_reg(devrec, REG_BBREG1, val); in mrf24j40_handle_rx()
552 ret = mrf24j40_read_rx_buf(devrec, skb_put(skb, len), &len, &lqi); in mrf24j40_handle_rx()
554 dev_err(printdev(devrec), "Failure reading RX FIFO\n"); in mrf24j40_handle_rx()
566 ieee802154_rx_irqsafe(devrec->hw, skb, lqi); in mrf24j40_handle_rx()
568 dev_dbg(printdev(devrec), "RX Handled\n"); in mrf24j40_handle_rx()
572 ret = read_short_reg(devrec, REG_BBREG1, &val); in mrf24j40_handle_rx()
576 write_short_reg(devrec, REG_BBREG1, val); in mrf24j40_handle_rx()
593 struct mrf24j40 *devrec = data; in mrf24j40_isr() local
598 ret = read_short_reg(devrec, REG_INTSTAT, &intstat); in mrf24j40_isr()
604 complete(&devrec->tx_complete); in mrf24j40_isr()
608 mrf24j40_handle_rx(devrec); in mrf24j40_isr()
614 static int mrf24j40_hw_init(struct mrf24j40 *devrec) in mrf24j40_hw_init() argument
621 ret = write_short_reg(devrec, REG_SOFTRST, 0x07); in mrf24j40_hw_init()
625 ret = write_short_reg(devrec, REG_PACON2, 0x98); in mrf24j40_hw_init()
629 ret = write_short_reg(devrec, REG_TXSTBL, 0x95); in mrf24j40_hw_init()
633 ret = write_long_reg(devrec, REG_RFCON0, 0x03); in mrf24j40_hw_init()
637 ret = write_long_reg(devrec, REG_RFCON1, 0x01); in mrf24j40_hw_init()
641 ret = write_long_reg(devrec, REG_RFCON2, 0x80); in mrf24j40_hw_init()
645 ret = write_long_reg(devrec, REG_RFCON6, 0x90); in mrf24j40_hw_init()
649 ret = write_long_reg(devrec, REG_RFCON7, 0x80); in mrf24j40_hw_init()
653 ret = write_long_reg(devrec, REG_RFCON8, 0x10); in mrf24j40_hw_init()
657 ret = write_long_reg(devrec, REG_SLPCON1, 0x21); in mrf24j40_hw_init()
661 ret = write_short_reg(devrec, REG_BBREG2, 0x80); in mrf24j40_hw_init()
665 ret = write_short_reg(devrec, REG_CCAEDTH, 0x60); in mrf24j40_hw_init()
669 ret = write_short_reg(devrec, REG_BBREG6, 0x40); in mrf24j40_hw_init()
673 ret = write_short_reg(devrec, REG_RFCTL, 0x04); in mrf24j40_hw_init()
677 ret = write_short_reg(devrec, REG_RFCTL, 0x0); in mrf24j40_hw_init()
684 ret = read_short_reg(devrec, REG_RXMCR, &val); in mrf24j40_hw_init()
690 ret = write_short_reg(devrec, REG_RXMCR, val); in mrf24j40_hw_init()
694 if (spi_get_device_id(devrec->spi)->driver_data == MRF24J40MC) { in mrf24j40_hw_init()
698 read_long_reg(devrec, REG_TESTMODE, &val); in mrf24j40_hw_init()
700 write_long_reg(devrec, REG_TESTMODE, val); in mrf24j40_hw_init()
702 read_short_reg(devrec, REG_TRISGPIO, &val); in mrf24j40_hw_init()
704 write_short_reg(devrec, REG_TRISGPIO, val); in mrf24j40_hw_init()
706 read_short_reg(devrec, REG_GPIO, &val); in mrf24j40_hw_init()
708 write_short_reg(devrec, REG_GPIO, val); in mrf24j40_hw_init()
713 write_long_reg(devrec, REG_RFCON3, 0x28); in mrf24j40_hw_init()
725 struct mrf24j40 *devrec; in mrf24j40_probe() local
729 devrec = devm_kzalloc(&spi->dev, sizeof(struct mrf24j40), GFP_KERNEL); in mrf24j40_probe()
730 if (!devrec) in mrf24j40_probe()
732 devrec->buf = devm_kzalloc(&spi->dev, 3, GFP_KERNEL); in mrf24j40_probe()
733 if (!devrec->buf) in mrf24j40_probe()
740 mutex_init(&devrec->buffer_mutex); in mrf24j40_probe()
741 init_completion(&devrec->tx_complete); in mrf24j40_probe()
742 devrec->spi = spi; in mrf24j40_probe()
743 spi_set_drvdata(spi, devrec); in mrf24j40_probe()
747 devrec->hw = ieee802154_alloc_hw(0, &mrf24j40_ops); in mrf24j40_probe()
748 if (!devrec->hw) in mrf24j40_probe()
751 devrec->hw->priv = devrec; in mrf24j40_probe()
752 devrec->hw->parent = &devrec->spi->dev; in mrf24j40_probe()
753 devrec->hw->phy->channels_supported[0] = CHANNEL_MASK; in mrf24j40_probe()
754 devrec->hw->flags = IEEE802154_HW_OMIT_CKSUM | IEEE802154_HW_AACK | in mrf24j40_probe()
757 dev_dbg(printdev(devrec), "registered mrf24j40\n"); in mrf24j40_probe()
758 ret = ieee802154_register_hw(devrec->hw); in mrf24j40_probe()
762 ret = mrf24j40_hw_init(devrec); in mrf24j40_probe()
772 devrec); in mrf24j40_probe()
775 dev_err(printdev(devrec), "Unable to get IRQ"); in mrf24j40_probe()
783 ieee802154_unregister_hw(devrec->hw); in mrf24j40_probe()
785 ieee802154_free_hw(devrec->hw); in mrf24j40_probe()
792 struct mrf24j40 *devrec = spi_get_drvdata(spi); in mrf24j40_remove() local
794 dev_dbg(printdev(devrec), "remove\n"); in mrf24j40_remove()
796 ieee802154_unregister_hw(devrec->hw); in mrf24j40_remove()
797 ieee802154_free_hw(devrec->hw); in mrf24j40_remove()