diff --git a/src/ipa/libipa/exposure_mode_helper.cpp b/src/ipa/libipa/exposure_mode_helper.cpp
index 683a564a01c8..9d1387636d05 100644
--- a/src/ipa/libipa/exposure_mode_helper.cpp
+++ b/src/ipa/libipa/exposure_mode_helper.cpp
@@ -166,7 +166,7 @@  ExposureModeHelper::splitExposure(utils::Duration exposure) const
 		return { minShutter_, minGain_, exposure / (minShutter_ * minGain_) };
 
 	utils::Duration shutter;
-	double stageGain;
+	double stageGain = 1.0;
 	double gain;
 
 	for (unsigned int stage = 0; stage < gains_.size(); stage++) {
@@ -198,15 +198,12 @@  ExposureModeHelper::splitExposure(utils::Duration exposure) const
 	}
 
 	/*
-	 * From here on all we can do is max out the shutter time, followed by
-	 * the analogue gain. If we still haven't achieved the target we send
-	 * the rest of the exposure time to digital gain. If we were given no
-	 * stages to use then set stageGain to 1.0 so that shutter time is maxed
-	 * before gain touched at all.
+	 * From here on all we can do is max out the shutter time, followed by the
+	 * analogue gain. If we still haven't achieved the target we send the rest
+	 * of the exposure time to digital gain. If we were given no stages to use
+	 * then the default stageGain of 1.0 is used so that shutter time is maxed
+	 * before gain is touched at all.
 	 */
-	if (gains_.empty())
-		stageGain = 1.0;
-
 	shutter = clampShutter(exposure / clampGain(stageGain));
 	gain = clampGain(exposure / shutter);
 
diff --git a/src/ipa/rpi/controller/rpi/awb.cpp b/src/ipa/rpi/controller/rpi/awb.cpp
index 003c8fa137f3..3503a5ab9218 100644
--- a/src/ipa/rpi/controller/rpi/awb.cpp
+++ b/src/ipa/rpi/controller/rpi/awb.cpp
@@ -91,7 +91,7 @@  static int readCtCurve(ipa::Pwl &ctR, ipa::Pwl &ctB, const libcamera::YamlObject
 
 int AwbConfig::read(const libcamera::YamlObject &params)
 {
-	int ret;
+	int ret = 0;
 
 	bayes = params["bayes"].get<int>(1);
 	framePeriod = params["frame_period"].get<uint16_t>(10);
diff --git a/src/libcamera/device_enumerator_sysfs.cpp b/src/libcamera/device_enumerator_sysfs.cpp
index fc33ba52b813..7866885c0f73 100644
--- a/src/libcamera/device_enumerator_sysfs.cpp
+++ b/src/libcamera/device_enumerator_sysfs.cpp
@@ -33,7 +33,7 @@  int DeviceEnumeratorSysfs::init()
 int DeviceEnumeratorSysfs::enumerate()
 {
 	struct dirent *ent;
-	DIR *dir;
+	DIR *dir = nullptr;
 
 	static const char * const sysfs_dirs[] = {
 		"/sys/subsystem/media/devices",
diff --git a/src/libcamera/pipeline/rpi/vc4/vc4.cpp b/src/libcamera/pipeline/rpi/vc4/vc4.cpp
index 4a89e35f5d7b..e5b6ef2b37cd 100644
--- a/src/libcamera/pipeline/rpi/vc4/vc4.cpp
+++ b/src/libcamera/pipeline/rpi/vc4/vc4.cpp
@@ -802,7 +802,7 @@  void Vc4CameraData::ispInputDequeue(FrameBuffer *buffer)
 void Vc4CameraData::ispOutputDequeue(FrameBuffer *buffer)
 {
 	RPi::Stream *stream = nullptr;
-	unsigned int index;
+	unsigned int index = 0;
 
 	if (!isRunning())
 		return;
