drivers: clock_control: nrf fll16 remove closed loop impl
Remove the closed loop mode implementation for the fll16m clock. Closed loop causes a hardware bug resulting in increased current consumption if SoC experiences high, but within spec, temperatures. Signed-off-by: Bjarki Arge Andreasen <bjarki.andreasen@nordicsemi.no>
This commit is contained in:
parent
53e751dcf9
commit
f94c6f20ff
3 changed files with 1 additions and 34 deletions
|
@ -21,7 +21,7 @@ BUILD_ASSERT(DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) == 1,
|
||||||
#define FLAG_HFXO_STARTED BIT(FLAGS_COMMON_BITS)
|
#define FLAG_HFXO_STARTED BIT(FLAGS_COMMON_BITS)
|
||||||
|
|
||||||
#define FLL16M_MODE_OPEN_LOOP 0
|
#define FLL16M_MODE_OPEN_LOOP 0
|
||||||
#define FLL16M_MODE_CLOSED_LOOP 1
|
#define FLL16M_MODE_CLOSED_LOOP 1 /* <-- DO NOT IMPLEMENT, CAN CAUSE HARDWARE BUG */
|
||||||
#define FLL16M_MODE_BYPASS 2
|
#define FLL16M_MODE_BYPASS 2
|
||||||
#define FLL16M_MODE_DEFAULT FLL16M_MODE_OPEN_LOOP
|
#define FLL16M_MODE_DEFAULT FLL16M_MODE_OPEN_LOOP
|
||||||
#define FLL16M_MODE_LOOP_MASK BIT(0)
|
#define FLL16M_MODE_LOOP_MASK BIT(0)
|
||||||
|
@ -33,7 +33,6 @@ BUILD_ASSERT(FLL16M_MODE_CLOSED_LOOP == NRF_LRCCONF_CLK_SRC_CLOSED_LOOP);
|
||||||
|
|
||||||
#define FLL16M_HFXO_ACCURACY DT_PROP(FLL16M_HFXO_NODE, accuracy_ppm)
|
#define FLL16M_HFXO_ACCURACY DT_PROP(FLL16M_HFXO_NODE, accuracy_ppm)
|
||||||
#define FLL16M_OPEN_LOOP_ACCURACY DT_INST_PROP(0, open_loop_accuracy_ppm)
|
#define FLL16M_OPEN_LOOP_ACCURACY DT_INST_PROP(0, open_loop_accuracy_ppm)
|
||||||
#define FLL16M_CLOSED_LOOP_BASE_ACCURACY DT_INST_PROP(0, closed_loop_base_accuracy_ppm)
|
|
||||||
#define FLL16M_MAX_ACCURACY FLL16M_HFXO_ACCURACY
|
#define FLL16M_MAX_ACCURACY FLL16M_HFXO_ACCURACY
|
||||||
|
|
||||||
#define BICR (NRF_BICR_Type *)DT_REG_ADDR(DT_NODELABEL(bicr))
|
#define BICR (NRF_BICR_Type *)DT_REG_ADDR(DT_NODELABEL(bicr))
|
||||||
|
@ -47,9 +46,6 @@ static struct clock_options {
|
||||||
.accuracy = FLL16M_OPEN_LOOP_ACCURACY,
|
.accuracy = FLL16M_OPEN_LOOP_ACCURACY,
|
||||||
.mode = FLL16M_MODE_OPEN_LOOP,
|
.mode = FLL16M_MODE_OPEN_LOOP,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
.mode = FLL16M_MODE_CLOSED_LOOP,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
/* Bypass mode uses HFXO */
|
/* Bypass mode uses HFXO */
|
||||||
.accuracy = FLL16M_HFXO_ACCURACY,
|
.accuracy = FLL16M_HFXO_ACCURACY,
|
||||||
|
@ -229,27 +225,6 @@ static int api_get_rate_fll16m(const struct device *dev,
|
||||||
static int fll16m_init(const struct device *dev)
|
static int fll16m_init(const struct device *dev)
|
||||||
{
|
{
|
||||||
struct fll16m_dev_data *dev_data = dev->data;
|
struct fll16m_dev_data *dev_data = dev->data;
|
||||||
nrf_bicr_lfosc_mode_t lfosc_mode;
|
|
||||||
|
|
||||||
clock_options[1].accuracy = FLL16M_CLOSED_LOOP_BASE_ACCURACY;
|
|
||||||
|
|
||||||
/* Closed-loop mode uses LFXO as source if present, HFXO otherwise */
|
|
||||||
lfosc_mode = nrf_bicr_lfosc_mode_get(BICR);
|
|
||||||
|
|
||||||
if (lfosc_mode != NRF_BICR_LFOSC_MODE_UNCONFIGURED &&
|
|
||||||
lfosc_mode != NRF_BICR_LFOSC_MODE_DISABLED) {
|
|
||||||
int ret;
|
|
||||||
uint16_t accuracy;
|
|
||||||
|
|
||||||
ret = lfosc_get_accuracy(&accuracy);
|
|
||||||
if (ret < 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
clock_options[1].accuracy += accuracy;
|
|
||||||
} else {
|
|
||||||
clock_options[1].accuracy += FLL16M_HFXO_ACCURACY;
|
|
||||||
}
|
|
||||||
|
|
||||||
return clock_config_init(&dev_data->clk_cfg,
|
return clock_config_init(&dev_data->clk_cfg,
|
||||||
ARRAY_SIZE(dev_data->clk_cfg.onoff),
|
ARRAY_SIZE(dev_data->clk_cfg.onoff),
|
||||||
|
|
|
@ -18,7 +18,6 @@ description: |
|
||||||
|
|
||||||
fll16m {
|
fll16m {
|
||||||
open-loop-accuracy-ppm = <20000>;
|
open-loop-accuracy-ppm = <20000>;
|
||||||
closed-loop-base-accuracy-ppm = <5000>;
|
|
||||||
clocks = <&hfxo>, <&lfxo>;
|
clocks = <&hfxo>, <&lfxo>;
|
||||||
clock-names = "hfxo", "lfxo";
|
clock-names = "hfxo", "lfxo";
|
||||||
};
|
};
|
||||||
|
@ -34,9 +33,3 @@ properties:
|
||||||
open-loop-accuracy-ppm:
|
open-loop-accuracy-ppm:
|
||||||
type: int
|
type: int
|
||||||
description: Clock accuracy in parts per million if open-loop clock source is used.
|
description: Clock accuracy in parts per million if open-loop clock source is used.
|
||||||
|
|
||||||
closed-loop-base-accuracy-ppm:
|
|
||||||
type: int
|
|
||||||
description: |
|
|
||||||
Base clock accuracy in parts per million if closed-loop clock source is used.
|
|
||||||
The actual accuracy is this property plus the accuracy of the HFXO or LFXO.
|
|
||||||
|
|
1
dts/vendor/nordic/nrf54h20.dtsi
vendored
1
dts/vendor/nordic/nrf54h20.dtsi
vendored
|
@ -177,7 +177,6 @@
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <DT_FREQ_M(16)>;
|
clock-frequency = <DT_FREQ_M(16)>;
|
||||||
open-loop-accuracy-ppm = <20000>;
|
open-loop-accuracy-ppm = <20000>;
|
||||||
closed-loop-base-accuracy-ppm = <5000>;
|
|
||||||
clocks = <&hfxo>, <&lfxo>;
|
clocks = <&hfxo>, <&lfxo>;
|
||||||
clock-names = "hfxo", "lfxo";
|
clock-names = "hfxo", "lfxo";
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue