1.1 --- a/pkg/devices/lib/cpm/src/x1600.cc Sun Sep 17 19:20:18 2023 +0200
1.2 +++ b/pkg/devices/lib/cpm/src/x1600.cc Sun Sep 17 21:36:19 2023 +0200
1.3 @@ -470,24 +470,24 @@
1.4 clocks[clock]->stop_clock(_cpm_regs);
1.5 }
1.6
1.7 -uint32_t
1.8 -Cpm_x1600_chip::get_divider(enum Clock_identifiers clock)
1.9 +int
1.10 +Cpm_x1600_chip::get_parameters(enum Clock_identifiers clock, uint32_t parameters[])
1.11 {
1.12 - Clock *clk = dynamic_cast<Clock *>(clocks[clock]);
1.13 + Clock_divided *clk = dynamic_cast<Clock_divided *>(clocks[clock]);
1.14
1.15 if (clk != NULL)
1.16 - return clk->get_divider(_cpm_regs);
1.17 + return clk->get_parameters(_cpm_regs, parameters);
1.18 else
1.19 - return 1;
1.20 + return 0;
1.21 }
1.22
1.23 void
1.24 -Cpm_x1600_chip::set_divider(enum Clock_identifiers clock, uint32_t division)
1.25 +Cpm_x1600_chip::set_parameters(enum Clock_identifiers clock, uint32_t parameters[])
1.26 {
1.27 - Clock *clk = dynamic_cast<Clock *>(clocks[clock]);
1.28 + Clock_divided *clk = dynamic_cast<Clock_divided *>(clocks[clock]);
1.29
1.30 if (clk != NULL)
1.31 - clk->set_divider(_cpm_regs, division);
1.32 + clk->set_parameters(_cpm_regs, parameters);
1.33 }
1.34
1.35 uint8_t
1.36 @@ -545,9 +545,11 @@
1.37
1.38 if (lcd != NULL)
1.39 {
1.40 + uint32_t parameters[] = {lcd->get_source_frequency(_cpm_regs) / frequency};
1.41 +
1.42 lcd->set_source(_cpm_regs, Source_mME_pll_M);
1.43 pll->start_clock(_cpm_regs);
1.44 - lcd->set_divider(_cpm_regs, lcd->get_source_frequency(_cpm_regs) / frequency);
1.45 + lcd->set_parameters(_cpm_regs, parameters);
1.46 }
1.47 break;
1.48 }
1.49 @@ -557,16 +559,6 @@
1.50 }
1.51 }
1.52
1.53 -void
1.54 -Cpm_x1600_chip::set_pll_parameters(enum Clock_identifiers clock, uint16_t multiplier,
1.55 - uint8_t in_divider, uint8_t out_divider)
1.56 -{
1.57 - Pll *pll = dynamic_cast<Pll *>(clocks[clock]);
1.58 -
1.59 - if (pll != NULL)
1.60 - pll->set_parameters(_cpm_regs, multiplier, in_divider, out_divider);
1.61 -}
1.62 -
1.63
1.64
1.65 // C language interface functions.
1.66 @@ -604,16 +596,16 @@
1.67 static_cast<Cpm_x1600_chip *>(cpm)->stop_clock(clock);
1.68 }
1.69
1.70 -uint32_t
1.71 -x1600_cpm_get_divider(void *cpm, enum Clock_identifiers clock)
1.72 +int
1.73 +x1600_cpm_get_parameters(void *cpm, enum Clock_identifiers clock, uint32_t parameters[])
1.74 {
1.75 - return static_cast<Cpm_x1600_chip *>(cpm)->get_divider(clock);
1.76 + return static_cast<Cpm_x1600_chip *>(cpm)->get_parameters(clock, parameters);
1.77 }
1.78
1.79 void
1.80 -x1600_cpm_set_divider(void *cpm, enum Clock_identifiers clock, uint32_t divider)
1.81 +x1600_cpm_set_parameters(void *cpm, enum Clock_identifiers clock, uint32_t parameters[])
1.82 {
1.83 - return static_cast<Cpm_x1600_chip *>(cpm)->set_divider(clock, divider);
1.84 + return static_cast<Cpm_x1600_chip *>(cpm)->set_parameters(clock, parameters);
1.85 }
1.86
1.87 uint8_t
1.88 @@ -645,9 +637,3 @@
1.89 {
1.90 static_cast<Cpm_x1600_chip *>(cpm)->set_frequency(clock, frequency);
1.91 }
1.92 -
1.93 -void
1.94 -x1600_cpm_set_mpll_parameters(void *cpm, uint16_t multiplier, uint8_t in_divider, uint8_t out_divider)
1.95 -{
1.96 - static_cast<Cpm_x1600_chip *>(cpm)->set_pll_parameters(Clock_pll_M, multiplier, in_divider, out_divider);
1.97 -}