From a1380238cceefa2a714f817b4c20af7bc918c389 Mon Sep 17 00:00:00 2001
From: Federico Mandelli <federicomandelli@skywarder.eu>
Date: Thu, 27 Jul 2023 10:08:17 +0200
Subject: [PATCH] [CanDriver] Automatically initialize CAN1 clock if we create
 a CAN2 CanDriver

---
 src/shared/drivers/canbus/CanDriver/CanDriver.cpp  | 14 +++++++++++++-
 .../canbus/CanProtocol/test-can-protocol.cpp       |  3 ---
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/shared/drivers/canbus/CanDriver/CanDriver.cpp b/src/shared/drivers/canbus/CanDriver/CanDriver.cpp
index ea7d92dfa..5aa54ede5 100644
--- a/src/shared/drivers/canbus/CanDriver/CanDriver.cpp
+++ b/src/shared/drivers/canbus/CanDriver/CanDriver.cpp
@@ -49,6 +49,11 @@ CanbusDriver::CanbusDriver(CAN_TypeDef* can, CanbusConfig config,
                            BitTiming bitTiming)
     : can(can)
 {
+    if (can == CAN2)
+    {
+        // CAN2 also need the CAN1 clock
+        ClockUtils::enablePeripheralClock(CAN1);
+    }
     // Enable the peripheral clock
     ClockUtils::enablePeripheralClock(can);
 
@@ -126,7 +131,14 @@ CanbusDriver::CanbusDriver(CAN_TypeDef* can, CanbusConfig config,
     }
 }
 
-CanbusDriver::~CanbusDriver() { ClockUtils::disablePeripheralClock(can); }
+CanbusDriver::~CanbusDriver()
+{
+    ClockUtils::disablePeripheralClock(can);
+    if (can == CAN2)
+    {
+        ClockUtils::disablePeripheralClock(CAN1);
+    }
+}
 
 CanbusDriver::BitTiming CanbusDriver::calcBitTiming(AutoBitTiming autoBt)
 {
diff --git a/src/tests/drivers/canbus/CanProtocol/test-can-protocol.cpp b/src/tests/drivers/canbus/CanProtocol/test-can-protocol.cpp
index 57afa9bf9..686ebd184 100644
--- a/src/tests/drivers/canbus/CanProtocol/test-can-protocol.cpp
+++ b/src/tests/drivers/canbus/CanProtocol/test-can-protocol.cpp
@@ -67,9 +67,6 @@ int main()
     bitTiming.baudRate    = 50 * 1000;
     bitTiming.samplePoint = 87.5f / 100.0f;
 
-    // To make the CAN2 work the driver must be created also for CAN1
-    // TODO change this thing
-    CanbusDriver* driver1 = new CanbusDriver(CAN1, config, bitTiming);
     CanbusDriver* driver2 = new CanbusDriver(CAN2, config, bitTiming);
 
     // // Prepare the can driver
-- 
GitLab