1.1 --- a/pkg/devices/lib/cpm/include/cpm-common.h Mon Sep 18 00:41:04 2023 +0200
1.2 +++ b/pkg/devices/lib/cpm/include/cpm-common.h Mon Sep 18 02:21:50 2023 +0200
1.3 @@ -153,10 +153,6 @@
1.4 // Clock source frequency.
1.5
1.6 uint32_t get_frequency(Cpm_regs ®s);
1.7 -
1.8 - // Undefined source object.
1.9 -
1.10 - static Source undefined;
1.11 };
1.12
1.13
1.14 @@ -208,10 +204,6 @@
1.15 int have_clock(Cpm_regs ®s);
1.16 void start_clock(Cpm_regs ®s);
1.17 void stop_clock(Cpm_regs ®s);
1.18 -
1.19 - // Undefined control.
1.20 -
1.21 - static Control undefined;
1.22 };
1.23
1.24
1.25 @@ -295,10 +287,6 @@
1.26
1.27 int get_parameters(Cpm_regs ®s, uint32_t parameters[]);
1.28 void set_parameters(Cpm_regs ®s, uint32_t parameters[]);
1.29 -
1.30 - // Undefined divider.
1.31 -
1.32 - static Divider undefined;
1.33 };
1.34
1.35
1.36 @@ -482,18 +470,18 @@
1.37
1.38 // Divided clock interface.
1.39
1.40 -class Clock_divided : public Clock_active
1.41 +class Clock_divided_base : public Clock_active
1.42 {
1.43 protected:
1.44 virtual Divider_base &_get_divider() = 0;
1.45
1.46 public:
1.47 - explicit Clock_divided(Source source)
1.48 + explicit Clock_divided_base(Source source)
1.49 : Clock_active(source)
1.50 {
1.51 }
1.52
1.53 - virtual ~Clock_divided();
1.54 + virtual ~Clock_divided_base();
1.55
1.56 virtual int get_parameters(Cpm_regs ®s, uint32_t parameters[]);
1.57 virtual void set_parameters(Cpm_regs ®s, uint32_t parameters[]);
1.58 @@ -507,7 +495,7 @@
1.59
1.60 // PLL description.
1.61
1.62 -class Pll : public Clock_divided
1.63 +class Pll : public Clock_divided_base
1.64 {
1.65 Control_pll _control;
1.66 Divider_pll _divider;
1.67 @@ -517,7 +505,7 @@
1.68
1.69 public:
1.70 explicit Pll(Source source, Control_pll control, Divider_pll divider)
1.71 - : Clock_divided(source), _control(control), _divider(divider)
1.72 + : Clock_divided_base(source), _control(control), _divider(divider)
1.73 {
1.74 }
1.75
1.76 @@ -532,9 +520,33 @@
1.77
1.78
1.79
1.80 -// Clock description.
1.81 +// Plain clock description.
1.82 +
1.83 +class Clock : public Clock_active
1.84 +{
1.85 + Control _control;
1.86 +
1.87 + virtual Control_base &_get_control() { return _control; }
1.88 +
1.89 +public:
1.90 + explicit Clock(Source source, Control control)
1.91 + : Clock_active(source), _control(control)
1.92 + {
1.93 + }
1.94
1.95 -class Clock : public Clock_divided
1.96 + explicit Clock(Source source)
1.97 + : Clock_active(source)
1.98 + {
1.99 + }
1.100 +
1.101 + const char *clock_type() { return "clock"; }
1.102 +};
1.103 +
1.104 +
1.105 +
1.106 +// Divided clock description.
1.107 +
1.108 +class Clock_divided : public Clock_divided_base
1.109 {
1.110 Control _control;
1.111 Divider _divider;
1.112 @@ -543,9 +555,8 @@
1.113 virtual Divider_base &_get_divider() { return _divider; }
1.114
1.115 public:
1.116 - explicit Clock(Source source, Control control = Control::undefined,
1.117 - Divider divider = Divider::undefined)
1.118 - : Clock_divided(source), _control(control), _divider(divider)
1.119 + explicit Clock_divided(Source source, Control control, Divider divider)
1.120 + : Clock_divided_base(source), _control(control), _divider(divider)
1.121 {
1.122 }
1.123
1.124 @@ -556,7 +567,7 @@
1.125
1.126 // I2S clock description.
1.127
1.128 -class Clock_divided_i2s : public Clock_divided
1.129 +class Clock_divided_i2s : public Clock_divided_base
1.130 {
1.131 Control _control;
1.132 Divider_i2s _divider;
1.133 @@ -566,7 +577,7 @@
1.134
1.135 public:
1.136 explicit Clock_divided_i2s(Source source, Control control, Divider_i2s divider)
1.137 - : Clock_divided(source), _control(control), _divider(divider)
1.138 + : Clock_divided_base(source), _control(control), _divider(divider)
1.139 {
1.140 }
1.141