int zd_rf_init_hw(struct zd_rf *rf, u8 type)
{ int r = 0; int t; struct zd_chip *chip = zd_rf_to_chip(rf);
ZD_ASSERT(mutex_is_locked(&chip->mutex)); switch (type) { case RF2959_RF:
r = zd_rf_init_rf2959(rf); break; case AL2230_RF: case AL2230S_RF:
r = zd_rf_init_al2230(rf); break; case AL7230B_RF:
r = zd_rf_init_al7230b(rf); break; case MAXIM_NEW_RF: case UW2453_RF:
r = zd_rf_init_uw2453(rf); break; default:
dev_err(zd_chip_dev(chip), "RF %s %#x is not supported\n", zd_rf_name(type), type);
rf->type = 0; return -ENODEV;
}
if (r) return r;
rf->type = type;
r = zd_chip_lock_phy_regs(chip); if (r) return r;
t = rf->init_hw(rf);
r = zd_chip_unlock_phy_regs(chip); if (t)
r = t; return r;
}
int zd_rf_set_channel(struct zd_rf *rf, u8 channel)
{ int r;
ZD_ASSERT(mutex_is_locked(&zd_rf_to_chip(rf)->mutex)); if (channel < MIN_CHANNEL24) return -EINVAL; if (channel > MAX_CHANNEL24) return -EINVAL;
dev_dbg_f(zd_chip_dev(zd_rf_to_chip(rf)), "channel: %d\n", channel);
r = rf->set_channel(rf, channel); if (r >= 0)
rf->channel = channel; return r;
}
int zd_switch_radio_on(struct zd_rf *rf)
{ int r, t; struct zd_chip *chip = zd_rf_to_chip(rf);
ZD_ASSERT(mutex_is_locked(&chip->mutex));
r = zd_chip_lock_phy_regs(chip); if (r) return r;
t = rf->switch_radio_on(rf);
r = zd_chip_unlock_phy_regs(chip); if (t)
r = t; return r;
}
int zd_switch_radio_off(struct zd_rf *rf)
{ int r, t; struct zd_chip *chip = zd_rf_to_chip(rf);
/* TODO: move phy regs handling to zd_chip */
ZD_ASSERT(mutex_is_locked(&chip->mutex));
r = zd_chip_lock_phy_regs(chip); if (r) return r;
t = rf->switch_radio_off(rf);
r = zd_chip_unlock_phy_regs(chip); if (t)
r = t; return r;
}
int zd_rf_patch_6m_band_edge(struct zd_rf *rf, u8 channel)
{ if (!rf->patch_6m_band_edge) return 0;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.