diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp
index 85e5126..be418b4 100644
--- a/src/Backends/DRMBackend.cpp
+++ b/src/Backends/DRMBackend.cpp
@@ -2149,6 +2149,7 @@ namespace gamescope
 			( m_Mutable.szMakePNP == "WLC"sv && m_Mutable.szModel == "ANX7530 U"sv ) ||
 			( m_Mutable.szMakePNP == "ANX"sv && m_Mutable.szModel == "ANX7530 U"sv ) ||
 			( m_Mutable.szMakePNP == "VLV"sv && m_Mutable.szModel == "ANX7530 U"sv ) ||
+			( m_Mutable.szMakePNP == "DHD"sv && m_Mutable.szModel == "DeckHD-1200p"sv ) ||
 			( m_Mutable.szMakePNP == "VLV"sv && m_Mutable.szModel == "Jupiter"sv ) ||
 			( m_Mutable.szMakePNP == "VLV"sv && m_Mutable.szModel == "Galileo"sv );
 
@@ -2160,6 +2161,7 @@ namespace gamescope
 		{
 			static constexpr uint32_t kPIDGalileoSDC = 0x3003;
 			static constexpr uint32_t kPIDGalileoBOE = 0x3004;
+			static constexpr uint32_t kPIDJupiterDHD = 0x4001;
 
 			if ( pProduct->product == kPIDGalileoSDC )
 			{
@@ -2171,6 +2173,10 @@ namespace gamescope
 				m_Mutable.eKnownDisplay = GAMESCOPE_KNOWN_DISPLAY_STEAM_DECK_OLED_BOE;
 				m_Mutable.ValidDynamicRefreshRates = std::span( s_kSteamDeckOLEDRates );
 			}
+			else if (pProduct-> product == kPIDJupiterDHD ) {
+				m_Mutable.eKnownDisplay = GAMESCOPE_KNOWN_DISPLAY_STEAM_DECK_LCD_DHD;
+				m_Mutable.ValidDynamicRefreshRates = std::span( s_kSteamDeckLCDRates );
+			}
 			else
 			{
 				m_Mutable.eKnownDisplay = GAMESCOPE_KNOWN_DISPLAY_STEAM_DECK_LCD;
@@ -2200,7 +2206,8 @@ namespace gamescope
 			drm_log.infof( "[colorimetry]: Steam Deck LCD detected. Using known colorimetry" );
 			m_Mutable.DisplayColorimetry = displaycolorimetry_steamdeck_measured;
 		}
-		else
+		else if (m_Mutable.eKnownDisplay == GAMESCOPE_KNOWN_DISPLAY_STEAM_DECK_OLED_BOE ||
+				 m_Mutable.eKnownDisplay == GAMESCOPE_KNOWN_DISPLAY_STEAM_DECK_OLED_SDC )
 		{
 			// Steam Deck OLED has calibrated chromaticity coordinates in the EDID
 			// for each unit.
@@ -2330,7 +2337,7 @@ namespace gamescope
 				.uMinContentLightLevel = nits_to_u16_dark( 0 ),
 			};
 		}
-		else if ( eKnownDisplay == GAMESCOPE_KNOWN_DISPLAY_STEAM_DECK_LCD )
+		else if ( eKnownDisplay == GAMESCOPE_KNOWN_DISPLAY_STEAM_DECK_LCD || eKnownDisplay == GAMESCOPE_KNOWN_DISPLAY_STEAM_DECK_LCD_DHD )
 		{
 			// Set up some HDR fallbacks for undocking
 			return BackendConnectorHDRInfo
diff --git a/src/gamescope_shared.h b/src/gamescope_shared.h
index ed30d8c..3b60774 100644
--- a/src/gamescope_shared.h
+++ b/src/gamescope_shared.h
@@ -8,6 +8,7 @@ namespace gamescope
 	{
 		GAMESCOPE_KNOWN_DISPLAY_UNKNOWN,
 		GAMESCOPE_KNOWN_DISPLAY_STEAM_DECK_LCD,      // Jupiter
+		GAMESCOPE_KNOWN_DISPLAY_STEAM_DECK_LCD_DHD,  // Jupiter Deck HD
 		GAMESCOPE_KNOWN_DISPLAY_STEAM_DECK_OLED_SDC, // Galileo SDC
 		GAMESCOPE_KNOWN_DISPLAY_STEAM_DECK_OLED_BOE, // Galileo BOE
 	};
diff --git a/src/modegen.cpp b/src/modegen.cpp
index d174c2d..5dd1136 100644
--- a/src/modegen.cpp
+++ b/src/modegen.cpp
@@ -293,13 +293,32 @@ unsigned int galileo_boe_vfp[] =
 	172,152,136,120,100,84,68,52,36,20,8
 };
 
-#define GALILEO_MIN_REFRESH 45
+//SD LCD Stock Timings
+#define JUPITER_BOE_PID     0x3001
+#define JUPITER_B_PID       0x3002
+#define JUPITER_HFP         40
+#define JUPITER_HSYNC       4
+#define JUPITER_HBP         40
+#define JUPITER_VFP         30
+#define JUPITER_VSYNC       4
+#define JUPITER_VBP         8
+//SD LCD DeckHD Timings
+#define JUPITER_DHD_PID     0x4001
+#define JUPITER_DHD_HFP     40
+#define JUPITER_DHD_HSYNC   20
+#define JUPITER_DHD_HBP     40
+#define JUPITER_DHD_VFP     18
+#define JUPITER_DHD_VSYNC   2
+#define JUPITER_DHD_VBP     20
+//SD OLED SDC Timings
 #define GALILEO_SDC_PID     0x3003
 #define GALILEO_SDC_VSYNC   1
 #define GALILEO_SDC_VBP     22
+//SD OLED BOE Timings
 #define GALILEO_BOE_PID     0x3004
 #define GALILEO_BOE_VSYNC   2
 #define GALILEO_BOE_VBP     30
+#define GALILEO_MIN_REFRESH 45
 #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
 
 unsigned int get_galileo_vfp( int vrefresh, unsigned int * vfp_array, unsigned int num_rates )
@@ -344,17 +363,28 @@ void generate_fixed_mode(drmModeModeInfo *mode, const drmModeModeInfo *base, int
 		mode->vsync_end = mode->vsync_start + vsync;
 		mode->vtotal = mode->vsync_end + vbp;
 	} else {
-		if ( eKnownDisplay == gamescope::GAMESCOPE_KNOWN_DISPLAY_STEAM_DECK_LCD )
+		if ( eKnownDisplay == gamescope::GAMESCOPE_KNOWN_DISPLAY_STEAM_DECK_LCD_DHD ) {
+			mode->hdisplay = 1200;
+			mode->hsync_start = mode->hdisplay + JUPITER_DHD_HFP;
+			mode->hsync_end = mode->hsync_start + JUPITER_DHD_HSYNC;
+			mode->htotal = mode->hsync_end + JUPITER_DHD_HBP;
+
+			mode->vdisplay = 1920;
+			mode->vsync_start = mode->vdisplay + JUPITER_DHD_VFP;
+			mode->vsync_end = mode->vsync_start + JUPITER_DHD_VSYNC;
+			mode->vtotal = mode->vsync_end + JUPITER_DHD_VBP;
+		}
+		else if ( eKnownDisplay == gamescope::GAMESCOPE_KNOWN_DISPLAY_STEAM_DECK_LCD )
 		{
 			mode->hdisplay = 800;
-			mode->hsync_start = 840;
-			mode->hsync_end = 844;
-			mode->htotal = 884;
+			mode->hsync_start = mode->hdisplay + JUPITER_HFP;
+			mode->hsync_end = mode->hsync_start + JUPITER_HSYNC;
+			mode->htotal = mode->hsync_end + JUPITER_HBP;
 
 			mode->vdisplay = 1280;
-			mode->vsync_start = 1310;
-			mode->vsync_end = 1314;
-			mode->vtotal = 1322;
+			mode->vsync_start = mode->vdisplay + JUPITER_VFP;
+			mode->vsync_end = mode->vsync_start + JUPITER_VSYNC;
+			mode->vtotal = mode->vsync_end + JUPITER_VBP;
 		}
 
 		mode->clock = ( ( mode->htotal * mode->vtotal * vrefresh ) + 999 ) / 1000;