diff --git a/epicardium/modules/hardware.c b/epicardium/modules/hardware.c
index 64581269be530cdb89daf51bed6197f005928964..f753d85a0da4dc16496ad1d8e382e9a0e84bbfb6 100644
--- a/epicardium/modules/hardware.c
+++ b/epicardium/modules/hardware.c
@@ -80,7 +80,11 @@ int hardware_early_init(void)
 			;
 	}
 
-	display_init();
+	/*
+	 * The bootloader has already initialized the display, so we only need
+	 * to do the bare minimum here (mostly the gfx datastructures).
+	 */
+	display_init_slim();
 
 	/*
 	 * RGB LEDs
diff --git a/lib/card10/display.c b/lib/card10/display.c
index 2756ccb7b1a78a2993ad4b96715ad4d846c77475..52bca138023930b9057e92a2081c673774a9f722 100644
--- a/lib/card10/display.c
+++ b/lib/card10/display.c
@@ -103,3 +103,18 @@ void display_init(void)
 	txt_init(&display_textb, &display_screen, &Font12);
 	gfx_clear(&display_screen);
 }
+
+void display_init_slim(void)
+{
+	if (!portexpander_detected()) {
+		// Open-drain
+		MAX77650_setDRV(false);
+		// Output
+		MAX77650_setDIR(false);
+	}
+
+	GPIO_Config(&DEV_DC_PIN);
+
+	display_screen = gfx_screen(LCD_framebuffer());
+	txt_init(&display_textb, &display_screen, &Font12);
+}
diff --git a/lib/card10/display.h b/lib/card10/display.h
index 47f82a37f275babff016ab5b32299b0e2e23a475..5d9508be5c2e9ff19281e1b9c6b006ccf8b0f8da 100644
--- a/lib/card10/display.h
+++ b/lib/card10/display.h
@@ -6,5 +6,6 @@ extern struct gfx_region display_screen;
 extern struct txt_buffer display_textb;
 
 void display_init(void);
+void display_init_slim(void);
 
 #endif