Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add the min. changes required to support the GF variant. #1492

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
35 changes: 34 additions & 1 deletion nimble/drivers/dialog_cmac/src/ble_rf.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,14 @@
#define RF_CALIBRATION_1 (0x02)
#define RF_CALIBRATION_2 (0x04)

enum chip_variant {
CHIP_VARIANT_TSMC,
CHIP_VARIANT_GF,
CHIP_VARIANT_UNKNOWN
};

static int g_chip_variant;

static const int8_t g_ble_rf_power_lvls[] = {
-18, -12, -8, -6, -3, -2, -1, 0, 1, 2, 3, 4, 4, 5, 6
};
Expand Down Expand Up @@ -114,6 +122,21 @@ set_reg16_mask(uint32_t addr, uint16_t mask, uint16_t val)
*reg = (*reg & (~mask)) | (val & mask);
}

static inline int
read_chip_variant(void)
{
uint32_t chip_id1 = get_reg32_bits(0x50040200, 0xFF);

switch (chip_id1) {
case '2':
return CHIP_VARIANT_TSMC;
case '3':
return CHIP_VARIANT_GF;
default:
return CHIP_VARIANT_UNKNOWN;
}
}

static void
delay_us(uint32_t delay_us)
{
Expand Down Expand Up @@ -233,6 +256,9 @@ ble_rf_synth_is_enabled(void)
static void
ble_rf_synth_apply_recommended_settings(void)
{
if (g_chip_variant == CHIP_VARIANT_GF) {
set_reg32_mask(0x40022034, 0x00000018, 0x0215807B);
}
set_reg32_mask(0x40022048, 0x0000000c, 0x000000d5);
set_reg32_mask(0x40022050, 0x00000300, 0x00000300);
set_reg16_mask(0x40022024, 0x0001, 0x0001);
Expand Down Expand Up @@ -335,7 +361,11 @@ ble_rf_calibration_1(void)
set_reg32(0x40020000, 0x0f168820);
set_reg32_bits(0x40022000, 0x00000001, 0);
set_reg32_bits(0x4002101c, 0x00001e00, 0);
set_reg32_bits(0x4002001c, 0x0000003f, 47);
if (g_chip_variant == CHIP_VARIANT_TSMC) {
set_reg32_bits(0x4002001c, 0x0000003f, 47);
} else {
set_reg32_bits(0x4002001c, 0x0000003f, 44);
}
set_reg8(0x40020006, 1);
set_reg32(0x40020020, 16);
set_reg32_bits(0x4002003c, 0x00000800, 1);
Expand Down Expand Up @@ -537,6 +567,9 @@ ble_rf_init(void)
static bool done = false;
uint32_t val;

g_chip_variant = read_chip_variant();
assert(g_chip_variant != CHIP_VARIANT_UNKNOWN);

ble_rf_disable();

if (done) {
Expand Down