Lines Matching refs:lp

63 	struct at86rf230_local *lp;
103 at86rf230_async_state_change(struct at86rf230_local *lp,
108 at86rf230_sleep(struct at86rf230_local *lp)
110 if (lp->slp_tr) {
111 gpiod_set_value(lp->slp_tr, 1);
112 usleep_range(lp->data->t_off_to_sleep,
113 lp->data->t_off_to_sleep + 10);
114 lp->sleep = true;
119 at86rf230_awake(struct at86rf230_local *lp)
121 if (lp->slp_tr) {
122 gpiod_set_value(lp->slp_tr, 0);
123 usleep_range(lp->data->t_sleep_to_off,
124 lp->data->t_sleep_to_off + 100);
125 lp->sleep = false;
130 __at86rf230_write(struct at86rf230_local *lp,
133 bool sleep = lp->sleep;
138 at86rf230_awake(lp);
140 ret = regmap_write(lp->regmap, addr, data);
144 at86rf230_sleep(lp);
150 __at86rf230_read(struct at86rf230_local *lp,
153 bool sleep = lp->sleep;
158 at86rf230_awake(lp);
160 ret = regmap_read(lp->regmap, addr, data);
164 at86rf230_sleep(lp);
170 at86rf230_read_subreg(struct at86rf230_local *lp,
176 rc = __at86rf230_read(lp, addr, data);
184 at86rf230_write_subreg(struct at86rf230_local *lp,
188 bool sleep = lp->sleep;
193 at86rf230_awake(lp);
195 ret = regmap_update_bits(lp->regmap, addr, mask, data << shift);
199 at86rf230_sleep(lp);
205 at86rf230_slp_tr_rising_edge(struct at86rf230_local *lp)
207 gpiod_set_value(lp->slp_tr, 1);
209 gpiod_set_value(lp->slp_tr, 0);
331 struct at86rf230_local *lp = ctx->lp;
336 if (lp->was_tx) {
337 lp->was_tx = 0;
338 ieee802154_xmit_hw_error(lp->hw, lp->tx_skb);
346 struct at86rf230_local *lp = ctx->lp;
348 if (lp->is_tx) {
349 lp->was_tx = 1;
350 lp->is_tx = 0;
353 at86rf230_async_state_change(lp, ctx, STATE_RX_AACK_ON,
358 at86rf230_async_error(struct at86rf230_local *lp,
361 dev_err(&lp->spi->dev, "spi_async error %d\n", rc);
363 at86rf230_async_state_change(lp, ctx, STATE_FORCE_TRX_OFF,
369 at86rf230_async_read_reg(struct at86rf230_local *lp, u8 reg,
379 rc = spi_async(lp->spi, &ctx->msg);
381 at86rf230_async_error(lp, ctx, rc);
385 at86rf230_async_write_reg(struct at86rf230_local *lp, u8 reg, u8 val,
394 rc = spi_async(lp->spi, &ctx->msg);
396 at86rf230_async_error(lp, ctx, rc);
403 struct at86rf230_local *lp = ctx->lp;
439 if (lp->tx_retry >= AT86RF2XX_MAX_TX_RETRIES)
441 lp->tx_retry++;
443 at86rf230_async_state_change(lp, ctx, state,
449 dev_warn(&lp->spi->dev, "unexcept state change from 0x%02x to 0x%02x. Actual state: 0x%02x\n",
462 struct at86rf230_local *lp = ctx->lp;
464 at86rf230_async_read_reg(lp, RG_TRX_STATUS, ctx,
475 struct at86rf230_local *lp = ctx->lp;
476 struct at86rf2xx_chip_data *c = lp->data;
507 lp->cal_timeout = jiffies + AT86RF2XX_CAL_LOOP_TIMEOUT;
516 lp->cal_timeout = jiffies + AT86RF2XX_CAL_LOOP_TIMEOUT;
566 struct at86rf230_local *lp = ctx->lp;
573 at86rf230_async_read_reg(lp, RG_TRX_STATUS, ctx,
591 at86rf230_async_write_reg(lp, RG_TRX_STATE, ctx->to_state, ctx,
596 at86rf230_async_state_change(struct at86rf230_local *lp,
603 at86rf230_async_read_reg(lp, RG_TRX_STATUS, ctx,
611 struct at86rf230_local *lp = ctx->lp;
613 complete(&lp->state_complete);
621 at86rf230_sync_state_change(struct at86rf230_local *lp, unsigned int state)
625 at86rf230_async_state_change(lp, &lp->state, state,
628 rc = wait_for_completion_timeout(&lp->state_complete,
631 at86rf230_async_error(lp, &lp->state, -ETIMEDOUT);
642 struct at86rf230_local *lp = ctx->lp;
645 ieee802154_xmit_complete(lp->hw, lp->tx_skb, false);
647 ieee802154_xmit_error(lp->hw, lp->tx_skb, ctx->trac);
656 struct at86rf230_local *lp = ctx->lp;
658 at86rf230_async_state_change(lp, ctx, STATE_RX_AACK_ON,
666 struct at86rf230_local *lp = ctx->lp;
684 at86rf230_async_state_change(lp, ctx, STATE_TX_ON, at86rf230_tx_on);
691 struct at86rf230_local *lp = ctx->lp;
698 dev_vdbg(&lp->spi->dev, "corrupted frame received\n");
705 dev_vdbg(&lp->spi->dev, "failed to allocate sk_buff\n");
711 ieee802154_rx_irqsafe(lp->hw, skb, lqi);
719 struct at86rf230_local *lp = ctx->lp;
726 rc = spi_async(lp->spi, &ctx->msg);
729 at86rf230_async_error(lp, ctx, rc);
737 struct at86rf230_local *lp = ctx->lp;
739 if (lp->is_tx) {
740 lp->is_tx = 0;
741 at86rf230_async_read_reg(lp, RG_TRX_STATE, ctx,
744 at86rf230_async_read_reg(lp, RG_TRX_STATE, ctx,
753 struct at86rf230_local *lp = ctx->lp;
757 enable_irq(lp->spi->irq);
762 dev_err(&lp->spi->dev, "not supported irq %02x received\n",
769 at86rf230_setup_spi_messages(struct at86rf230_local *lp,
772 state->lp = lp;
773 state->irq = lp->spi->irq;
786 struct at86rf230_local *lp = data;
798 at86rf230_setup_spi_messages(lp, ctx);
804 rc = spi_async(lp->spi, &ctx->msg);
806 at86rf230_async_error(lp, ctx, rc);
818 struct at86rf230_local *lp = ctx->lp;
822 if (lp->slp_tr)
823 at86rf230_slp_tr_rising_edge(lp);
825 at86rf230_async_write_reg(lp, RG_TRX_STATE, STATE_BUSY_TX, ctx,
833 struct at86rf230_local *lp = ctx->lp;
834 struct sk_buff *skb = lp->tx_skb;
838 lp->is_tx = 1;
845 rc = spi_async(lp->spi, &ctx->msg);
848 at86rf230_async_error(lp, ctx, rc);
856 struct at86rf230_local *lp = ctx->lp;
858 at86rf230_async_state_change(lp, ctx, STATE_TX_ARET_ON,
866 struct at86rf230_local *lp = ctx->lp;
869 if (lp->is_tx_from_off)
870 at86rf230_async_state_change(lp, ctx, STATE_TX_ARET_ON,
873 at86rf230_async_state_change(lp, ctx, STATE_TX_ON,
880 struct at86rf230_local *lp = hw->priv;
881 struct at86rf230_state_change *ctx = &lp->tx;
883 lp->tx_skb = skb;
884 lp->tx_retry = 0;
890 * to TX_ON, the lp->cal_timeout should be reinit by state_delay
893 if (time_is_before_jiffies(lp->cal_timeout)) {
894 lp->is_tx_from_off = true;
895 at86rf230_async_state_change(lp, ctx, STATE_TRX_OFF,
898 lp->is_tx_from_off = false;
916 struct at86rf230_local *lp = hw->priv;
918 at86rf230_awake(lp);
919 enable_irq(lp->spi->irq);
921 return at86rf230_sync_state_change(lp, STATE_RX_AACK_ON);
927 struct at86rf230_local *lp = hw->priv;
930 at86rf230_sync_state_change(lp, STATE_FORCE_TRX_OFF);
932 disable_irq(lp->spi->irq);
940 at86rf230_write_subreg(lp, SR_CSMA_SEED_0, csma_seed[0]);
941 at86rf230_write_subreg(lp, SR_CSMA_SEED_1, csma_seed[1]);
943 at86rf230_sleep(lp);
947 at86rf23x_set_channel(struct at86rf230_local *lp, u8 page, u8 channel)
949 return at86rf230_write_subreg(lp, SR_CHANNEL, channel);
974 at86rf212_update_cca_ed_level(struct at86rf230_local *lp, int rssi_base_val)
979 rc = at86rf230_read_subreg(lp, SR_CCA_ED_THRES, &cca_ed_thres);
985 lp->hw->phy->supported.cca_ed_levels = at86rf212_ed_levels_98;
986 lp->hw->phy->supported.cca_ed_levels_size = ARRAY_SIZE(at86rf212_ed_levels_98);
987 lp->hw->phy->cca_ed_level = at86rf212_ed_levels_98[cca_ed_thres];
990 lp->hw->phy->supported.cca_ed_levels = at86rf212_ed_levels_100;
991 lp->hw->phy->supported.cca_ed_levels_size = ARRAY_SIZE(at86rf212_ed_levels_100);
992 lp->hw->phy->cca_ed_level = at86rf212_ed_levels_100[cca_ed_thres];
1002 at86rf212_set_channel(struct at86rf230_local *lp, u8 page, u8 channel)
1007 rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 0);
1009 rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 1);
1014 rc = at86rf230_write_subreg(lp, SR_BPSK_QPSK, 0);
1015 lp->data->rssi_base_val = -100;
1017 rc = at86rf230_write_subreg(lp, SR_BPSK_QPSK, 1);
1018 lp->data->rssi_base_val = -98;
1023 rc = at86rf212_update_cca_ed_level(lp, lp->data->rssi_base_val);
1027 return at86rf230_write_subreg(lp, SR_CHANNEL, channel);
1033 struct at86rf230_local *lp = hw->priv;
1036 rc = lp->data->set_channel(lp, page, channel);
1038 usleep_range(lp->data->t_channel_switch,
1039 lp->data->t_channel_switch + 10);
1041 lp->cal_timeout = jiffies + AT86RF2XX_CAL_LOOP_TIMEOUT;
1050 struct at86rf230_local *lp = hw->priv;
1055 dev_vdbg(&lp->spi->dev, "%s called for saddr\n", __func__);
1056 __at86rf230_write(lp, RG_SHORT_ADDR_0, addr);
1057 __at86rf230_write(lp, RG_SHORT_ADDR_1, addr >> 8);
1063 dev_vdbg(&lp->spi->dev, "%s called for pan id\n", __func__);
1064 __at86rf230_write(lp, RG_PAN_ID_0, pan);
1065 __at86rf230_write(lp, RG_PAN_ID_1, pan >> 8);
1072 dev_vdbg(&lp->spi->dev, "%s called for IEEE addr\n", __func__);
1074 __at86rf230_write(lp, RG_IEEE_ADDR_0 + i, addr[i]);
1078 dev_vdbg(&lp->spi->dev, "%s called for panc change\n", __func__);
1080 at86rf230_write_subreg(lp, SR_AACK_I_AM_COORD, 1);
1082 at86rf230_write_subreg(lp, SR_AACK_I_AM_COORD, 0);
1107 at86rf23x_set_txpower(struct at86rf230_local *lp, s32 mbm)
1111 for (i = 0; i < lp->hw->phy->supported.tx_powers_size; i++) {
1112 if (lp->hw->phy->supported.tx_powers[i] == mbm)
1113 return at86rf230_write_subreg(lp, SR_TX_PWR_23X, i);
1120 at86rf212_set_txpower(struct at86rf230_local *lp, s32 mbm)
1124 for (i = 0; i < lp->hw->phy->supported.tx_powers_size; i++) {
1125 if (lp->hw->phy->supported.tx_powers[i] == mbm)
1126 return at86rf230_write_subreg(lp, SR_TX_PWR_212, i);
1135 struct at86rf230_local *lp = hw->priv;
1137 return lp->data->set_txpower(lp, mbm);
1143 struct at86rf230_local *lp = hw->priv;
1145 return at86rf230_write_subreg(lp, SR_CSMA_LBT_MODE, on);
1152 struct at86rf230_local *lp = hw->priv;
1179 return at86rf230_write_subreg(lp, SR_CCA_MODE, val);
1185 struct at86rf230_local *lp = hw->priv;
1190 return at86rf230_write_subreg(lp, SR_CCA_ED_THRES, i);
1200 struct at86rf230_local *lp = hw->priv;
1203 rc = at86rf230_write_subreg(lp, SR_MIN_BE, min_be);
1207 rc = at86rf230_write_subreg(lp, SR_MAX_BE, max_be);
1211 return at86rf230_write_subreg(lp, SR_MAX_CSMA_RETRIES, retries);
1217 struct at86rf230_local *lp = hw->priv;
1219 return at86rf230_write_subreg(lp, SR_MAX_FRAME_RETRIES, retries);
1225 struct at86rf230_local *lp = hw->priv;
1229 rc = at86rf230_write_subreg(lp, SR_AACK_DIS_ACK, 1);
1233 rc = at86rf230_write_subreg(lp, SR_AACK_PROM_MODE, 1);
1237 rc = at86rf230_write_subreg(lp, SR_AACK_PROM_MODE, 0);
1241 rc = at86rf230_write_subreg(lp, SR_AACK_DIS_ACK, 0);
1311 static int at86rf230_hw_init(struct at86rf230_local *lp, u8 xtal_trim)
1317 rc = at86rf230_sync_state_change(lp, STATE_FORCE_TRX_OFF);
1321 irq_type = irq_get_trigger_type(lp->spi->irq);
1326 rc = at86rf230_write_subreg(lp, SR_IRQ_POLARITY, irq_pol);
1330 rc = at86rf230_write_subreg(lp, SR_RX_SAFE_MODE, 1);
1334 rc = at86rf230_write_subreg(lp, SR_IRQ_MASK, IRQ_TRX_END);
1339 rc = at86rf230_write_subreg(lp, SR_IRQ_MASK_MODE, 0);
1344 rc = at86rf230_write_subreg(lp, SR_CSMA_SEED_0, csma_seed[0]);
1347 rc = at86rf230_write_subreg(lp, SR_CSMA_SEED_1, csma_seed[1]);
1352 rc = at86rf230_write_subreg(lp, SR_CLKM_SHA_SEL, 0x00);
1357 rc = at86rf230_write_subreg(lp, SR_CLKM_CTRL, 0x00);
1361 usleep_range(lp->data->t_sleep_cycle,
1362 lp->data->t_sleep_cycle + 100);
1399 rc = at86rf230_write_subreg(lp, SR_XTAL_TRIM, xtal_trim);
1403 rc = at86rf230_read_subreg(lp, SR_DVDD_OK, &dvdd);
1407 dev_err(&lp->spi->dev, "DVDD error\n");
1415 return at86rf230_write_subreg(lp, SR_SLOTTED_OPERATION, 0);
1419 at86rf230_detect_device(struct at86rf230_local *lp)
1426 rc = __at86rf230_read(lp, RG_MAN_ID_0, &val);
1431 rc = __at86rf230_read(lp, RG_MAN_ID_1, &val);
1436 rc = __at86rf230_read(lp, RG_PART_NUM, &part);
1440 rc = __at86rf230_read(lp, RG_VERSION_NUM, &version);
1445 dev_err(&lp->spi->dev, "Non-Atmel dev found (MAN_ID %02x %02x)\n",
1450 lp->hw->flags = IEEE802154_HW_TX_OMIT_CKSUM |
1455 lp->hw->phy->flags = WPAN_PHY_FLAG_TXPOWER |
1459 lp->hw->phy->supported.cca_modes = BIT(NL802154_CCA_ENERGY) |
1461 lp->hw->phy->supported.cca_opts = BIT(NL802154_CCA_OPT_ENERGY_CARRIER_AND) |
1464 lp->hw->phy->cca.mode = NL802154_CCA_ENERGY;
1473 lp->data = &at86rf231_data;
1474 lp->hw->phy->supported.channels[0] = 0x7FFF800;
1475 lp->hw->phy->current_channel = 11;
1476 lp->hw->phy->supported.tx_powers = at86rf231_powers;
1477 lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf231_powers);
1478 lp->hw->phy->supported.cca_ed_levels = at86rf231_ed_levels;
1479 lp->hw->phy->supported.cca_ed_levels_size = ARRAY_SIZE(at86rf231_ed_levels);
1483 lp->data = &at86rf212_data;
1484 lp->hw->flags |= IEEE802154_HW_LBT;
1485 lp->hw->phy->supported.channels[0] = 0x00007FF;
1486 lp->hw->phy->supported.channels[2] = 0x00007FF;
1487 lp->hw->phy->current_channel = 5;
1488 lp->hw->phy->supported.lbt = NL802154_SUPPORTED_BOOL_BOTH;
1489 lp->hw->phy->supported.tx_powers = at86rf212_powers;
1490 lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf212_powers);
1491 lp->hw->phy->supported.cca_ed_levels = at86rf212_ed_levels_100;
1492 lp->hw->phy->supported.cca_ed_levels_size = ARRAY_SIZE(at86rf212_ed_levels_100);
1496 lp->data = &at86rf233_data;
1497 lp->hw->phy->supported.channels[0] = 0x7FFF800;
1498 lp->hw->phy->current_channel = 13;
1499 lp->hw->phy->supported.tx_powers = at86rf233_powers;
1500 lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf233_powers);
1501 lp->hw->phy->supported.cca_ed_levels = at86rf233_ed_levels;
1502 lp->hw->phy->supported.cca_ed_levels_size = ARRAY_SIZE(at86rf233_ed_levels);
1510 lp->hw->phy->cca_ed_level = lp->hw->phy->supported.cca_ed_levels[7];
1511 lp->hw->phy->transmit_power = lp->hw->phy->supported.tx_powers[0];
1514 dev_info(&lp->spi->dev, "Detected %s chip version %d\n", chip, version);
1522 struct at86rf230_local *lp;
1567 hw = ieee802154_alloc_hw(sizeof(*lp), &at86rf230_ops);
1571 lp = hw->priv;
1572 lp->hw = hw;
1573 lp->spi = spi;
1574 lp->slp_tr = slp_tr;
1578 lp->regmap = devm_regmap_init_spi(spi, &at86rf230_regmap_spi_config);
1579 if (IS_ERR(lp->regmap)) {
1580 rc = PTR_ERR(lp->regmap);
1586 at86rf230_setup_spi_messages(lp, &lp->state);
1587 at86rf230_setup_spi_messages(lp, &lp->tx);
1589 rc = at86rf230_detect_device(lp);
1593 init_completion(&lp->state_complete);
1595 spi_set_drvdata(spi, lp);
1597 rc = at86rf230_hw_init(lp, xtal_trim);
1602 rc = at86rf230_read_subreg(lp, RG_IRQ_STATUS, 0xff, 0, &status);
1611 IRQF_SHARED | irq_type, dev_name(&spi->dev), lp);
1619 at86rf230_sleep(lp);
1621 rc = ieee802154_register_hw(lp->hw);
1628 ieee802154_free_hw(lp->hw);
1635 struct at86rf230_local *lp = spi_get_drvdata(spi);
1638 at86rf230_write_subreg(lp, SR_IRQ_MASK, 0);
1639 ieee802154_unregister_hw(lp->hw);
1640 ieee802154_free_hw(lp->hw);