Lines Matching refs:lp

68 	struct at86rf230_local *lp;
295 at86rf230_async_state_change(struct at86rf230_local *lp,
300 __at86rf230_write(struct at86rf230_local *lp,
303 return regmap_write(lp->regmap, addr, data);
307 __at86rf230_read(struct at86rf230_local *lp,
310 return regmap_read(lp->regmap, addr, data);
314 at86rf230_read_subreg(struct at86rf230_local *lp,
320 rc = __at86rf230_read(lp, addr, data);
328 at86rf230_write_subreg(struct at86rf230_local *lp,
332 return regmap_update_bits(lp->regmap, addr, mask, data << shift);
452 struct at86rf230_local *lp = ctx->lp;
454 at86rf230_async_state_change(lp, ctx, STATE_RX_AACK_ON, NULL);
458 at86rf230_async_error(struct at86rf230_local *lp,
461 dev_err(&lp->spi->dev, "spi_async error %d\n", rc);
463 at86rf230_async_state_change(lp, ctx, STATE_FORCE_TRX_OFF,
469 at86rf230_async_read_reg(struct at86rf230_local *lp, const u8 reg,
478 return spi_async(lp->spi, &ctx->msg);
485 struct at86rf230_local *lp = ctx->lp;
513 at86rf230_async_state_change(lp, ctx,
521 dev_warn(&lp->spi->dev, "unexcept state change from 0x%02x to 0x%02x. Actual state: 0x%02x\n",
535 struct at86rf230_local *lp = ctx->lp;
536 struct at86rf2xx_chip_data *c = lp->data;
607 rc = at86rf230_async_read_reg(lp, RG_TRX_STATUS, ctx,
610 dev_err(&lp->spi->dev, "spi_async error %d\n", rc);
617 struct at86rf230_local *lp = ctx->lp;
625 rc = at86rf230_async_read_reg(lp, RG_TRX_STATUS, ctx,
628 dev_err(&lp->spi->dev, "spi_async error %d\n", rc);
649 rc = spi_async(lp->spi, &ctx->msg);
651 dev_err(&lp->spi->dev, "spi_async error %d\n", rc);
655 at86rf230_async_state_change(struct at86rf230_local *lp,
662 return at86rf230_async_read_reg(lp, RG_TRX_STATUS, ctx,
670 struct at86rf230_local *lp = ctx->lp;
672 complete(&lp->state_complete);
680 at86rf230_sync_state_change(struct at86rf230_local *lp, unsigned int state)
684 rc = at86rf230_async_state_change(lp, &lp->state, state,
687 at86rf230_async_error(lp, &lp->state, rc);
691 rc = wait_for_completion_timeout(&lp->state_complete,
703 struct at86rf230_local *lp = ctx->lp;
705 complete(&lp->tx_complete);
712 struct at86rf230_local *lp = ctx->lp;
715 rc = at86rf230_async_state_change(lp, &lp->irq, STATE_RX_AACK_ON,
718 at86rf230_async_error(lp, ctx, rc);
725 struct at86rf230_local *lp = ctx->lp;
728 rc = at86rf230_async_state_change(lp, ctx, STATE_TX_ON,
731 at86rf230_async_error(lp, ctx, rc);
738 struct at86rf230_local *lp = ctx->lp;
748 rc = at86rf230_async_state_change(lp, ctx, STATE_FORCE_TRX_OFF,
751 at86rf230_async_error(lp, ctx, rc);
763 struct at86rf230_local *lp = ctx->lp;
766 rc = at86rf230_async_read_reg(lp, RG_TRX_STATE, ctx,
769 at86rf230_async_error(lp, ctx, rc);
773 at86rf230_rx(struct at86rf230_local *lp,
789 dev_vdbg(&lp->spi->dev, "corrupted frame received\n");
795 enable_irq(lp->spi->irq);
799 dev_vdbg(&lp->spi->dev, "failed to allocate sk_buff\n");
808 ieee802154_rx_irqsafe(lp->dev, skb, lqi);
815 struct at86rf230_local *lp = ctx->lp;
816 const u8 *buf = lp->irq.buf;
819 at86rf230_rx(lp, buf + 2, len);
823 at86rf230_rx_read_frame(struct at86rf230_local *lp)
825 u8 *buf = lp->irq.buf;
828 lp->irq.trx.len = AT86RF2XX_MAX_BUF;
829 lp->irq.msg.complete = at86rf230_rx_read_frame_complete;
830 return spi_async(lp->spi, &lp->irq.msg);
837 struct at86rf230_local *lp = ctx->lp;
846 rc = at86rf230_rx_read_frame(lp);
848 enable_irq(lp->spi->irq);
849 at86rf230_async_error(lp, ctx, rc);
854 at86rf230_irq_trx_end(struct at86rf230_local *lp)
856 spin_lock(&lp->lock);
857 if (lp->is_tx) {
858 lp->is_tx = 0;
859 spin_unlock(&lp->lock);
860 enable_irq(lp->spi->irq);
862 if (lp->tx_aret)
863 return at86rf230_async_state_change(lp, &lp->irq,
867 return at86rf230_async_state_change(lp, &lp->irq,
871 spin_unlock(&lp->lock);
872 return at86rf230_async_read_reg(lp, RG_TRX_STATE, &lp->irq,
881 struct at86rf230_local *lp = ctx->lp;
882 const u8 *buf = lp->irq.buf;
887 rc = at86rf230_irq_trx_end(lp);
889 at86rf230_async_error(lp, ctx, rc);
891 enable_irq(lp->spi->irq);
892 dev_err(&lp->spi->dev, "not supported irq %02x received\n",
899 struct at86rf230_local *lp = data;
900 struct at86rf230_state_change *ctx = &lp->irq;
904 disable_irq_nosync(lp->spi->irq);
909 rc = spi_async(lp->spi, &ctx->msg);
911 at86rf230_async_error(lp, ctx, rc);
922 struct at86rf230_local *lp = ctx->lp;
930 rc = spi_async(lp->spi, &ctx->msg);
932 at86rf230_async_error(lp, ctx, rc);
939 struct at86rf230_local *lp = ctx->lp;
940 struct sk_buff *skb = lp->tx_skb;
941 u8 *buf = lp->tx.buf;
944 spin_lock(&lp->lock);
945 lp->is_tx = 1;
946 spin_unlock(&lp->lock);
951 lp->tx.trx.len = skb->len + 2;
952 lp->tx.msg.complete = at86rf230_write_frame_complete;
953 rc = spi_async(lp->spi, &lp->tx.msg);
955 at86rf230_async_error(lp, ctx, rc);
962 struct at86rf230_local *lp = ctx->lp;
965 rc = at86rf230_async_state_change(lp, ctx, STATE_TX_ARET_ON,
968 at86rf230_async_error(lp, ctx, rc);
974 struct at86rf230_local *lp = dev->priv;
975 struct at86rf230_state_change *ctx = &lp->tx;
980 lp->tx_skb = skb;
986 if (lp->tx_aret)
989 rc = at86rf230_async_state_change(lp, ctx, STATE_TX_ON,
992 at86rf230_async_error(lp, ctx, rc);
995 rc = wait_for_completion_interruptible_timeout(&lp->tx_complete,
996 msecs_to_jiffies(lp->data->t_tx_timeout));
998 at86rf230_async_error(lp, ctx, rc);
1008 usleep_range(lp->data->t_lifs, lp->data->t_lifs + 10);
1010 usleep_range(lp->data->t_sifs, lp->data->t_sifs + 10);
1037 at86rf23x_set_channel(struct at86rf230_local *lp, int page, int channel)
1039 return at86rf230_write_subreg(lp, SR_CHANNEL, channel);
1043 at86rf212_set_channel(struct at86rf230_local *lp, int page, int channel)
1048 rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 0);
1050 rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 1);
1055 rc = at86rf230_write_subreg(lp, SR_BPSK_QPSK, 0);
1056 lp->data->rssi_base_val = -100;
1058 rc = at86rf230_write_subreg(lp, SR_BPSK_QPSK, 1);
1059 lp->data->rssi_base_val = -98;
1064 return at86rf230_write_subreg(lp, SR_CHANNEL, channel);
1070 struct at86rf230_local *lp = dev->priv;
1076 !(lp->dev->phy->channels_supported[page] & BIT(channel))) {
1081 rc = lp->data->set_channel(lp, page, channel);
1086 usleep_range(lp->data->t_channel_switch,
1087 lp->data->t_channel_switch + 10);
1099 struct at86rf230_local *lp = dev->priv;
1104 dev_vdbg(&lp->spi->dev,
1106 __at86rf230_write(lp, RG_SHORT_ADDR_0, addr);
1107 __at86rf230_write(lp, RG_SHORT_ADDR_1, addr >> 8);
1113 dev_vdbg(&lp->spi->dev,
1115 __at86rf230_write(lp, RG_PAN_ID_0, pan);
1116 __at86rf230_write(lp, RG_PAN_ID_1, pan >> 8);
1123 dev_vdbg(&lp->spi->dev,
1126 __at86rf230_write(lp, RG_IEEE_ADDR_0 + i, addr[i]);
1130 dev_vdbg(&lp->spi->dev,
1133 at86rf230_write_subreg(lp, SR_AACK_I_AM_COORD, 1);
1135 at86rf230_write_subreg(lp, SR_AACK_I_AM_COORD, 0);
1144 struct at86rf230_local *lp = dev->priv;
1157 return __at86rf230_write(lp, RG_PHY_TX_PWR, 0x60 | db);
1163 struct at86rf230_local *lp = dev->priv;
1165 return at86rf230_write_subreg(lp, SR_CSMA_LBT_MODE, on);
1171 struct at86rf230_local *lp = dev->priv;
1173 return at86rf230_write_subreg(lp, SR_CCA_MODE, mode);
1177 at86rf212_get_desens_steps(struct at86rf230_local *lp, s32 level)
1179 return (level - lp->data->rssi_base_val) * 100 / 207;
1183 at86rf23x_get_desens_steps(struct at86rf230_local *lp, s32 level)
1185 return (level - lp->data->rssi_base_val) / 2;
1191 struct at86rf230_local *lp = dev->priv;
1193 if (level < lp->data->rssi_base_val || level > 30)
1196 return at86rf230_write_subreg(lp, SR_CCA_ED_THRES,
1197 lp->data->get_desense_steps(lp, level));
1204 struct at86rf230_local *lp = dev->priv;
1210 rc = at86rf230_write_subreg(lp, SR_MIN_BE, min_be);
1214 rc = at86rf230_write_subreg(lp, SR_MAX_BE, max_be);
1218 return at86rf230_write_subreg(lp, SR_MAX_CSMA_RETRIES, retries);
1224 struct at86rf230_local *lp = dev->priv;
1230 lp->tx_aret = retries >= 0;
1233 rc = at86rf230_write_subreg(lp, SR_MAX_FRAME_RETRIES, retries);
1302 static int at86rf230_hw_init(struct at86rf230_local *lp)
1308 rc = at86rf230_sync_state_change(lp, STATE_FORCE_TRX_OFF);
1312 irq_type = irq_get_trigger_type(lp->spi->irq);
1316 rc = at86rf230_write_subreg(lp, SR_IRQ_POLARITY, irq_pol);
1320 rc = at86rf230_write_subreg(lp, SR_RX_SAFE_MODE, 1);
1324 rc = at86rf230_write_subreg(lp, SR_IRQ_MASK, IRQ_TRX_END);
1329 rc = at86rf230_write_subreg(lp, SR_CSMA_SEED_0, csma_seed[0]);
1332 rc = at86rf230_write_subreg(lp, SR_CSMA_SEED_1, csma_seed[1]);
1337 rc = at86rf230_write_subreg(lp, SR_CLKM_SHA_SEL, 0x00);
1342 rc = at86rf230_write_subreg(lp, SR_CLKM_CTRL, 0x00);
1346 usleep_range(lp->data->t_sleep_cycle,
1347 lp->data->t_sleep_cycle + 100);
1349 rc = at86rf230_read_subreg(lp, SR_DVDD_OK, &dvdd);
1353 dev_err(&lp->spi->dev, "DVDD error\n");
1381 at86rf230_detect_device(struct at86rf230_local *lp)
1388 rc = __at86rf230_read(lp, RG_MAN_ID_0, &val);
1393 rc = __at86rf230_read(lp, RG_MAN_ID_1, &val);
1398 rc = __at86rf230_read(lp, RG_PART_NUM, &part);
1402 rc = __at86rf230_read(lp, RG_PART_NUM, &version);
1407 dev_err(&lp->spi->dev, "Non-Atmel dev found (MAN_ID %02x %02x)\n",
1412 lp->dev->extra_tx_headroom = 0;
1413 lp->dev->flags = IEEE802154_HW_OMIT_CKSUM | IEEE802154_HW_AACK |
1423 lp->data = &at86rf231_data;
1424 lp->dev->phy->channels_supported[0] = 0x7FFF800;
1429 lp->data = &at86rf212_data;
1430 lp->dev->flags |= IEEE802154_HW_LBT;
1431 lp->dev->phy->channels_supported[0] = 0x00007FF;
1432 lp->dev->phy->channels_supported[2] = 0x00007FF;
1439 lp->data = &at86rf233_data;
1440 lp->dev->phy->channels_supported[0] = 0x7FFF800;
1448 dev_info(&lp->spi->dev, "Detected %s chip version %d\n", chip, version);
1454 at86rf230_setup_spi_messages(struct at86rf230_local *lp)
1456 lp->state.lp = lp;
1457 spi_message_init(&lp->state.msg);
1458 lp->state.msg.context = &lp->state;
1459 lp->state.trx.tx_buf = lp->state.buf;
1460 lp->state.trx.rx_buf = lp->state.buf;
1461 spi_message_add_tail(&lp->state.trx, &lp->state.msg);
1463 lp->irq.lp = lp;
1464 spi_message_init(&lp->irq.msg);
1465 lp->irq.msg.context = &lp->irq;
1466 lp->irq.trx.tx_buf = lp->irq.buf;
1467 lp->irq.trx.rx_buf = lp->irq.buf;
1468 spi_message_add_tail(&lp->irq.trx, &lp->irq.msg);
1470 lp->tx.lp = lp;
1471 spi_message_init(&lp->tx.msg);
1472 lp->tx.msg.context = &lp->tx;
1473 lp->tx.trx.tx_buf = lp->tx.buf;
1474 lp->tx.trx.rx_buf = lp->tx.buf;
1475 spi_message_add_tail(&lp->tx.trx, &lp->tx.msg);
1482 struct at86rf230_local *lp;
1520 dev = ieee802154_alloc_device(sizeof(*lp), &at86rf230_ops);
1524 lp = dev->priv;
1525 lp->dev = dev;
1526 lp->spi = spi;
1529 lp->regmap = devm_regmap_init_spi(spi, &at86rf230_regmap_spi_config);
1530 if (IS_ERR(lp->regmap)) {
1531 rc = PTR_ERR(lp->regmap);
1537 at86rf230_setup_spi_messages(lp);
1539 rc = at86rf230_detect_device(lp);
1543 spin_lock_init(&lp->lock);
1544 init_completion(&lp->tx_complete);
1545 init_completion(&lp->state_complete);
1547 spi_set_drvdata(spi, lp);
1549 rc = at86rf230_hw_init(lp);
1554 rc = at86rf230_read_subreg(lp, RG_IRQ_STATUS, 0xff, 0, &status);
1563 IRQF_SHARED | irq_type, dev_name(&spi->dev), lp);
1567 rc = ieee802154_register_device(lp->dev);
1574 ieee802154_free_device(lp->dev);
1581 struct at86rf230_local *lp = spi_get_drvdata(spi);
1584 at86rf230_write_subreg(lp, SR_IRQ_MASK, 0);
1585 ieee802154_unregister_device(lp->dev);
1586 ieee802154_free_device(lp->dev);