Message ID | 20241209104201.25205-3-antoniu.miclaus@analog.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | [v2,1/3] dt-bindings: iio: adf4371: add differential ref | expand |
Hi Antoniu, kernel test robot noticed the following build warnings: https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Antoniu-Miclaus/iio-frequency-adf4371-add-differential-ref/20241209-184437 base: https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg patch link: https://lore.kernel.org/r/20241209104201.25205-3-antoniu.miclaus%40analog.com patch subject: [PATCH v2 3/3] iio: frequency: adf4371: add ref doubler config: parisc-randconfig-r073-20241219 (https://download.01.org/0day-ci/archive/20241219/202412191811.lAia02sc-lkp@intel.com/config) compiler: hppa-linux-gcc (GCC) 14.2.0 If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Reported-by: Dan Carpenter <dan.carpenter@linaro.org> | Closes: https://lore.kernel.org/r/202412191811.lAia02sc-lkp@intel.com/ smatch warnings: drivers/iio/frequency/adf4371.c:545 adf4371_setup() error: uninitialized symbol 'ref_doubler_en'. vim +/ref_doubler_en +545 drivers/iio/frequency/adf4371.c 7f699bd14913423 Stefan Popa 2019-06-04 487 static int adf4371_setup(struct adf4371_state *st) 7f699bd14913423 Stefan Popa 2019-06-04 488 { 7f699bd14913423 Stefan Popa 2019-06-04 489 unsigned int synth_timeout = 2, timeout = 1, vco_alc_timeout = 1; 347e385fdd6ecda Antoniu Miclaus 2024-12-09 490 unsigned int vco_band_div, tmp, ref_doubler_en; 011032df594999f Antoniu Miclaus 2024-12-09 491 bool ref_diff_en; 7f699bd14913423 Stefan Popa 2019-06-04 492 int ret; 7f699bd14913423 Stefan Popa 2019-06-04 493 7f699bd14913423 Stefan Popa 2019-06-04 494 /* Perform a software reset */ 7f699bd14913423 Stefan Popa 2019-06-04 495 ret = regmap_write(st->regmap, ADF4371_REG(0x0), ADF4371_RESET_CMD); 7f699bd14913423 Stefan Popa 2019-06-04 496 if (ret < 0) 7f699bd14913423 Stefan Popa 2019-06-04 497 return ret; 7f699bd14913423 Stefan Popa 2019-06-04 498 7f699bd14913423 Stefan Popa 2019-06-04 499 ret = regmap_multi_reg_write(st->regmap, adf4371_reg_defaults, 7f699bd14913423 Stefan Popa 2019-06-04 500 ARRAY_SIZE(adf4371_reg_defaults)); 7f699bd14913423 Stefan Popa 2019-06-04 501 if (ret < 0) 7f699bd14913423 Stefan Popa 2019-06-04 502 return ret; 7f699bd14913423 Stefan Popa 2019-06-04 503 def914a4c3899b6 Stefan Popa 2019-06-24 504 /* Mute to Lock Detect */ def914a4c3899b6 Stefan Popa 2019-06-24 505 if (device_property_read_bool(&st->spi->dev, "adi,mute-till-lock-en")) { def914a4c3899b6 Stefan Popa 2019-06-24 506 ret = regmap_update_bits(st->regmap, ADF4371_REG(0x25), def914a4c3899b6 Stefan Popa 2019-06-24 507 ADF4371_MUTE_LD_MSK, def914a4c3899b6 Stefan Popa 2019-06-24 508 ADF4371_MUTE_LD(1)); def914a4c3899b6 Stefan Popa 2019-06-24 509 if (ret < 0) def914a4c3899b6 Stefan Popa 2019-06-24 510 return ret; def914a4c3899b6 Stefan Popa 2019-06-24 511 } def914a4c3899b6 Stefan Popa 2019-06-24 512 011032df594999f Antoniu Miclaus 2024-12-09 513 ref_diff_en = device_property_read_bool(&st->spi->dev, "adi,ref-differential-enable"); 011032df594999f Antoniu Miclaus 2024-12-09 514 7f699bd14913423 Stefan Popa 2019-06-04 515 /* Set address in ascending order, so the bulk_write() will work */ 7f699bd14913423 Stefan Popa 2019-06-04 516 ret = regmap_update_bits(st->regmap, ADF4371_REG(0x0), 7f699bd14913423 Stefan Popa 2019-06-04 517 ADF4371_ADDR_ASC_MSK | ADF4371_ADDR_ASC_R_MSK, 7f699bd14913423 Stefan Popa 2019-06-04 518 ADF4371_ADDR_ASC(1) | ADF4371_ADDR_ASC_R(1)); 7f699bd14913423 Stefan Popa 2019-06-04 519 if (ret < 0) 7f699bd14913423 Stefan Popa 2019-06-04 520 return ret; 011032df594999f Antoniu Miclaus 2024-12-09 521 011032df594999f Antoniu Miclaus 2024-12-09 522 if ((ref_diff_en && st->clkin_freq > ADF4371_MAX_FREQ_REFIN) || 011032df594999f Antoniu Miclaus 2024-12-09 523 (!ref_diff_en && st->clkin_freq > ADF4371_MAX_FREQ_REFIN_SE)) 011032df594999f Antoniu Miclaus 2024-12-09 524 return -EINVAL; 011032df594999f Antoniu Miclaus 2024-12-09 525 347e385fdd6ecda Antoniu Miclaus 2024-12-09 526 if (st->clkin_freq < ADF4371_MAX_CLKIN_DOUB_FREQ && 347e385fdd6ecda Antoniu Miclaus 2024-12-09 527 st->clkin_freq > ADF4371_MIN_CLKIN_DOUB_FREQ) 347e385fdd6ecda Antoniu Miclaus 2024-12-09 528 ref_doubler_en = 1; Uninitialized on else path. 347e385fdd6ecda Antoniu Miclaus 2024-12-09 529 011032df594999f Antoniu Miclaus 2024-12-09 530 ret = regmap_update_bits(st->regmap, ADF4371_REG(0x22), 011032df594999f Antoniu Miclaus 2024-12-09 531 ADF4371_REFIN_MODE_MASK, 011032df594999f Antoniu Miclaus 2024-12-09 532 ADF4371_REFIN_MODE(ref_diff_en)); 011032df594999f Antoniu Miclaus 2024-12-09 533 if (ret < 0) 011032df594999f Antoniu Miclaus 2024-12-09 534 return ret; 011032df594999f Antoniu Miclaus 2024-12-09 535 7f699bd14913423 Stefan Popa 2019-06-04 536 /* 7f699bd14913423 Stefan Popa 2019-06-04 537 * Calculate and maximize PFD frequency 7f699bd14913423 Stefan Popa 2019-06-04 538 * fPFD = REFIN × ((1 + D)/(R × (1 + T))) 7f699bd14913423 Stefan Popa 2019-06-04 539 * Where D is the REFIN doubler bit, T is the reference divide by 2, 7f699bd14913423 Stefan Popa 2019-06-04 540 * R is the reference division factor 7f699bd14913423 Stefan Popa 2019-06-04 541 * TODO: it is assumed D and T equal 0. 7f699bd14913423 Stefan Popa 2019-06-04 542 */ 7f699bd14913423 Stefan Popa 2019-06-04 543 do { 7f699bd14913423 Stefan Popa 2019-06-04 544 st->ref_div_factor++; 347e385fdd6ecda Antoniu Miclaus 2024-12-09 @545 st->fpfd = st->clkin_freq * (1 + ref_doubler_en) / 347e385fdd6ecda Antoniu Miclaus 2024-12-09 546 st->ref_div_factor; 7f699bd14913423 Stefan Popa 2019-06-04 547 } while (st->fpfd > ADF4371_MAX_FREQ_PFD); 7f699bd14913423 Stefan Popa 2019-06-04 548 7f699bd14913423 Stefan Popa 2019-06-04 549 /* Calculate Timeouts */ 7f699bd14913423 Stefan Popa 2019-06-04 550 vco_band_div = DIV_ROUND_UP(st->fpfd, 2400000U); 7f699bd14913423 Stefan Popa 2019-06-04 551 7f699bd14913423 Stefan Popa 2019-06-04 552 tmp = DIV_ROUND_CLOSEST(st->fpfd, 1000000U); 7f699bd14913423 Stefan Popa 2019-06-04 553 do { 7f699bd14913423 Stefan Popa 2019-06-04 554 timeout++; 7f699bd14913423 Stefan Popa 2019-06-04 555 if (timeout > 1023) { 7f699bd14913423 Stefan Popa 2019-06-04 556 timeout = 2; 7f699bd14913423 Stefan Popa 2019-06-04 557 synth_timeout++; 7f699bd14913423 Stefan Popa 2019-06-04 558 } 7f699bd14913423 Stefan Popa 2019-06-04 559 } while (synth_timeout * 1024 + timeout <= 20 * tmp); 7f699bd14913423 Stefan Popa 2019-06-04 560 7f699bd14913423 Stefan Popa 2019-06-04 561 do { 7f699bd14913423 Stefan Popa 2019-06-04 562 vco_alc_timeout++; 7f699bd14913423 Stefan Popa 2019-06-04 563 } while (vco_alc_timeout * 1024 - timeout <= 50 * tmp); 7f699bd14913423 Stefan Popa 2019-06-04 564 7f699bd14913423 Stefan Popa 2019-06-04 565 st->buf[0] = vco_band_div; 7f699bd14913423 Stefan Popa 2019-06-04 566 st->buf[1] = timeout & 0xFF; 7f699bd14913423 Stefan Popa 2019-06-04 567 st->buf[2] = ADF4371_TIMEOUT(timeout >> 8) | 0x04; 7f699bd14913423 Stefan Popa 2019-06-04 568 st->buf[3] = synth_timeout; 7f699bd14913423 Stefan Popa 2019-06-04 569 st->buf[4] = ADF4371_VCO_ALC_TOUT(vco_alc_timeout); 7f699bd14913423 Stefan Popa 2019-06-04 570 7f699bd14913423 Stefan Popa 2019-06-04 571 return regmap_bulk_write(st->regmap, ADF4371_REG(0x30), st->buf, 5); 7f699bd14913423 Stefan Popa 2019-06-04 572 }
diff --git a/drivers/iio/frequency/adf4371.c b/drivers/iio/frequency/adf4371.c index 55bee06fb42d..fd33a6f1cd9a 100644 --- a/drivers/iio/frequency/adf4371.c +++ b/drivers/iio/frequency/adf4371.c @@ -44,6 +44,8 @@ /* ADF4371_REG22 */ #define ADF4371_REFIN_MODE_MASK BIT(6) #define ADF4371_REFIN_MODE(x) FIELD_PREP(ADF4371_REFIN_MODE_MASK, x) +#define ADF4371_REF_DOUB_MASK BIT(5) +#define ADF4371_REF_DOUB(x) FIELD_PREP(ADF4371_REF_DOUB_MASK, x)\ /* ADF4371_REG24 */ #define ADF4371_RF_DIV_SEL_MSK GENMASK(6, 4) @@ -75,6 +77,9 @@ #define ADF4371_MAX_FREQ_REFIN 600000000UL /* Hz */ #define ADF4371_MAX_FREQ_REFIN_SE 500000000UL /* Hz */ +#define ADF4371_MIN_CLKIN_DOUB_FREQ 10000000ULL /* Hz */ +#define ADF4371_MAX_CLKIN_DOUB_FREQ 125000000ULL /* Hz */ + /* MOD1 is a 24-bit primary modulus with fixed value of 2^25 */ #define ADF4371_MODULUS1 33554432ULL /* MOD2 is the programmable, 14-bit auxiliary fractional modulus */ @@ -480,7 +485,7 @@ static const struct iio_info adf4371_info = { static int adf4371_setup(struct adf4371_state *st) { unsigned int synth_timeout = 2, timeout = 1, vco_alc_timeout = 1; - unsigned int vco_band_div, tmp; + unsigned int vco_band_div, tmp, ref_doubler_en; bool ref_diff_en; int ret; @@ -516,6 +521,10 @@ static int adf4371_setup(struct adf4371_state *st) (!ref_diff_en && st->clkin_freq > ADF4371_MAX_FREQ_REFIN_SE)) return -EINVAL; + if (st->clkin_freq < ADF4371_MAX_CLKIN_DOUB_FREQ && + st->clkin_freq > ADF4371_MIN_CLKIN_DOUB_FREQ) + ref_doubler_en = 1; + ret = regmap_update_bits(st->regmap, ADF4371_REG(0x22), ADF4371_REFIN_MODE_MASK, ADF4371_REFIN_MODE(ref_diff_en)); @@ -531,7 +540,8 @@ static int adf4371_setup(struct adf4371_state *st) */ do { st->ref_div_factor++; - st->fpfd = st->clkin_freq / st->ref_div_factor; + st->fpfd = st->clkin_freq * (1 + ref_doubler_en) / + st->ref_div_factor; } while (st->fpfd > ADF4371_MAX_FREQ_PFD); /* Calculate Timeouts */
Add support for the reference doubler. Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com> --- changes in v2: - drop redundant brackets. drivers/iio/frequency/adf4371.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-)