1.1 --- a/pkg/devices/lib/cpm/include/cpm-common.h Thu Nov 16 17:48:32 2023 +0100
1.2 +++ b/pkg/devices/lib/cpm/include/cpm-common.h Thu Nov 16 22:03:51 2023 +0100
1.3 @@ -275,8 +275,32 @@
1.4 // Other operations.
1.5
1.6 virtual int get_parameters(Cpm_regs ®s, uint32_t parameters[]) = 0;
1.7 + virtual int set_parameters(Cpm_regs ®s, int num_parameters, uint32_t parameters[]) = 0;
1.8 +};
1.9
1.10 - virtual int set_parameters(Cpm_regs ®s, int num_parameters, uint32_t parameters[]) = 0;
1.11 +
1.12 +
1.13 +// Fixed divider.
1.14 +
1.15 +class Divider_fixed : public Divider_base
1.16 +{
1.17 + uint32_t _value;
1.18 +
1.19 +public:
1.20 + explicit Divider_fixed(uint32_t value)
1.21 + : _value(value)
1.22 + {
1.23 + }
1.24 +
1.25 + // Output frequency.
1.26 +
1.27 + uint64_t get_frequency(Cpm_regs ®s, uint64_t source_frequency);
1.28 + int set_frequency(Cpm_regs ®s, uint64_t source_frequency, uint64_t frequency);
1.29 +
1.30 + // Other operations.
1.31 +
1.32 + int get_parameters(Cpm_regs ®s, uint32_t parameters[]);
1.33 + int set_parameters(Cpm_regs ®s, int num_parameters, uint32_t parameters[]);
1.34 };
1.35
1.36
1.37 @@ -631,6 +655,27 @@
1.38
1.39
1.40
1.41 +// Fixed divider clock description.
1.42 +
1.43 +class Clock_divided_fixed : public Clock_divided_base
1.44 +{
1.45 + Control _control;
1.46 + Divider_fixed _divider;
1.47 +
1.48 + virtual Control_base &_get_control() { return _control; }
1.49 + virtual Divider_base &_get_divider() { return _divider; }
1.50 +
1.51 +public:
1.52 + explicit Clock_divided_fixed(Source source, Divider_fixed divider)
1.53 + : Clock_divided_base(source), _control(Control::undefined), _divider(divider)
1.54 + {
1.55 + }
1.56 +
1.57 + const char *clock_type() { return "fix_div"; }
1.58 +};
1.59 +
1.60 +
1.61 +
1.62 // I2S clock description.
1.63
1.64 class Clock_divided_i2s : public Clock_divided_base