diff --git a/epicardium/drivers/display/api.c b/epicardium/drivers/display/api.c
index f0a145292521dbb3c383129fae893653ec8cd3f3..25a6ebae3e69508ad912c7768de3d8adcf0b7804 100644
--- a/epicardium/drivers/display/api.c
+++ b/epicardium/drivers/display/api.c
@@ -339,6 +339,11 @@ int epic_disp_framebuffer(union disp_framebuffer *fb)
 int epic_disp_backlight(uint16_t brightness)
 {
 	/* TODO: lock? */
+	if (brightness == 0) {
+		lcd_set_sleep(true);
+	} else {
+		lcd_set_sleep(false);
+	}
 	LCD_SetBacklight(brightness);
 	return 0;
 }
diff --git a/epicardium/drivers/display/lcd.c b/epicardium/drivers/display/lcd.c
index ae0eac9c6ce5fad9afb62cf407b684a38b7cc06c..ac0e6c30cc62ad4deb800d2347c3a6aecdfe8c35 100644
--- a/epicardium/drivers/display/lcd.c
+++ b/epicardium/drivers/display/lcd.c
@@ -86,6 +86,8 @@ static void lcd_delay(size_t millis)
 /* HAL Interfaces }}} */
 
 enum lcd_commands {
+	/** Sleep In */
+	LCD_SLPIN = 0x10,
 	/** Sleep Out */
 	LCD_SLPOUT = 0x11,
 	/** Display Inversion On */
@@ -157,6 +159,15 @@ static void lcd_hard_reset(void)
 	lcd_delay(20);
 }
 
+void lcd_set_sleep(bool sleep)
+{
+	if (sleep) {
+		lcd_send_command(LCD_SLPIN, NULL, 0);
+	} else {
+		lcd_send_command(LCD_SLPOUT, NULL, 0);
+	}
+}
+
 /**
  * Perform a minimal initialization under the assumption that the bootloader has
  * already turned on the display.  This is faster and prevents visible
diff --git a/epicardium/drivers/display/lcd.h b/epicardium/drivers/display/lcd.h
index 3b8a507d654a06cccae7fb23b0a959fc55e3cffd..104f8e6b0e4a9f7ca8985f6761a20b109e74e271 100644
--- a/epicardium/drivers/display/lcd.h
+++ b/epicardium/drivers/display/lcd.h
@@ -3,6 +3,7 @@
 #include <stdbool.h>
 #include <stdint.h>
 
+void lcd_set_sleep(bool sleep);
 void lcd_reconfigure(void);
 void lcd_initialize(void);
 void lcd_write_fb_partial(