New laptop for me

Got brightness control working here too! Great!

Still no luck with:

  • Turning the screen off.
  • Using HDMI output.

(lucky you with the touchpad! mine still won’t work :smiley: (is one of those that uses I2C).

Here’s my diff:

diff --git a/headers/private/graphics/intel_extreme/intel_extreme.h b/headers/private/graphics/intel_extreme/intel_extreme.h
index 41e0439e1..27a527bc6 100644
--- a/headers/private/graphics/intel_extreme/intel_extreme.h
+++ b/headers/private/graphics/intel_extreme/intel_extreme.h
@@ -89,6 +90,8 @@
 #define INTEL_MODEL_SKYS	(INTEL_GROUP_SKY | INTEL_TYPE_SERVER)
 #define INTEL_MODEL_KBY		(INTEL_GROUP_KBY)
 #define INTEL_MODEL_KBYM	(INTEL_GROUP_KBY | INTEL_TYPE_MOBILE)
+#define INTEL_MODEL_GML		(INTEL_GROUP_KBY)	// No Desktop/Mobile diff on GeminiLake device IDs.
+#define INTEL_MODEL_GMLM	(INTEL_GROUP_KBY | INTEL_TYPE_MOBILE)
 #define INTEL_MODEL_CFL		(INTEL_GROUP_CFL)
 #define INTEL_MODEL_CFLM	(INTEL_GROUP_CFL | INTEL_TYPE_MOBILE)
 #define INTEL_MODEL_CML		(INTEL_GROUP_CML)
@@ -108,6 +111,7 @@
 #define INTEL_PCH_SPT_DEVICE_ID		0xa100
 #define INTEL_PCH_SPT_LP_DEVICE_ID	0x9d00
 #define INTEL_PCH_KBP_DEVICE_ID		0xa280
+#define INTEL_PCH_GMP_DEVICE_ID		0x3180
 #define INTEL_PCH_CNP_DEVICE_ID		0xa300
 #define INTEL_PCH_CNP_LP_DEVICE_ID	0x9d80
 #define INTEL_PCH_CMP_DEVICE_ID		0x0280
diff --git a/src/add-ons/kernel/busses/agp_gart/intel_gart.cpp b/src/add-ons/kernel/busses/agp_gart/intel_gart.cpp
index c1f546604..dc1cdae1f 100644
--- a/src/add-ons/kernel/busses/agp_gart/intel_gart.cpp
+++ b/src/add-ons/kernel/busses/agp_gart/intel_gart.cpp
@@ -176,6 +176,9 @@ const struct supported_device {
 	{0x5904, 0x5926, INTEL_MODEL_KBY,  "Kabylake ULT GT3"},
 	{0x5904, 0x5927, INTEL_MODEL_KBY,  "Kabylake ULT GT3"},
 
+//	{0x31f0, 0x3184, INTEL_MODEL_GML,	"GeminiLake GT1.5"},
+	{0x31f0, 0x3185, INTEL_MODEL_GML,	"GeminiLake GT1"},
+
 	{0x3e0f, 0x3e90, INTEL_MODEL_CFL,  "CoffeeLake GT1"},
 	{0x3e0f, 0x3e93, INTEL_MODEL_CFL,  "CoffeeLake GT1"},
 	{0x3e1f, 0x3e91, INTEL_MODEL_CFL,  "CoffeeLake GT2"},
diff --git a/src/add-ons/kernel/drivers/graphics/intel_extreme/driver.cpp b/src/add-ons/kernel/drivers/graphics/intel_extreme/driver.cpp
index f1981e735..8a237e0aa 100644
--- a/src/add-ons/kernel/drivers/graphics/intel_extreme/driver.cpp
+++ b/src/add-ons/kernel/drivers/graphics/intel_extreme/driver.cpp
@@ -161,6 +161,9 @@ const struct supported_device {
 	{0x5926, INTEL_MODEL_KBY,  "Kabylake ULT GT3"},
 	{0x5927, INTEL_MODEL_KBY,  "Kabylake ULT GT3"},
 
+	{0x3184, INTEL_MODEL_GMLM,  "GeminiLake GT1.5"},
+	{0x3185, INTEL_MODEL_GMLM,  "GeminiLake GT1"},
+
 	{0x3e90, INTEL_MODEL_CFL,  "CoffeeLake GT1"},
 	{0x3e93, INTEL_MODEL_CFL,  "CoffeeLake GT1"},
 	{0x3e91, INTEL_MODEL_CFL,  "CoffeeLake GT2"},
@@ -275,6 +278,9 @@ detect_intel_pch()
 			case INTEL_PCH_KBP_DEVICE_ID:
 				ERROR("%s: Found Kaby Lake PCH\n", __func__);
 				return INTEL_PCH_SPT;
+			case INTEL_PCH_GMP_DEVICE_ID:
+				ERROR("%s: Found Gemini Lake PCH\n", __func__);
+				return INTEL_PCH_CNP;
 			case INTEL_PCH_CNP_DEVICE_ID:
 			case INTEL_PCH_CNP_LP_DEVICE_ID:
 				ERROR("%s: Found Cannon Lake PCH\n", __func__);


And here the notes I took while trying different things:


GeminiLake/GeminiLake Refresh.

  • Intel Gen9 Graphics with Kaby Lake improvements.
  • No Desktop/Mobile IDs distinction for the graphics
    (but we need to set INTEL_TYPE_MOBILE for brighness control)

Product IDs:

  • 0x3185 - UHD Graphics 600 (GeminiLake GT1), 12 EU
    Celeron J4105, J4005, N4100, N4000
    Celeron J4125, J4025, N4120, N4020
  • 0x3184 - UHD Graphics 605 (GeminiLake GT1.5), 18 EU
    Pentium Silver J5005, N5000
    Pentium Silver J5040, N5030

Relevant “defines”, in relation to Haiku’s intel_extreme driver/accelerant:

INTEL_FAMILY_xxx

As long as it is INTEL_FAMILY_LAKE, we’re good.

INTEL_GROUP_xxx

DigitalDisplayInterface::_PortRegister(): (INTEL_PORT_F) returns DDI_BUF_CTL_F if != INTEL_GROUP_SKY.

(driver): info.shared_info->pll_info differs if INTEL_GROUP_SKY

So… INTEL_GROUP_KBY/INTEL_GROUP_CFL should be good enough.

INTEL_MODEL_xxx

Not relevant for GeminiLake (so far).

INTEL_PCH_xxx pch_info enum (returned detect_intel_pch())

Only matters that its value is:

  • != to INTEL_PCH_NONE, INTEL_PCH_IBX, INTEL_PCH_CPT, or INTEL_PCH_LPT.

  • for Port::_DDCPin() mapping of INTEL_I2C_IO_x differes for:
    >= INTEL_PCH_ICP,
    >= INTEL_PCH_CNP,
    rest of Gen 9 graphics.

  • (driver): gen8_handle_interrupts() has extra stuff for >= INTEL_PCH_ICP (IceLake’s SHOTPLUG_CTL_DDI/SHOTPLUG_CTL_TC)

  • For brightness control to work:

    Needs >= INTEL_PCH_CNP, and INTEL_TYPE_MOBILE

  • (driver): intel_extreme_init()
    just an empty if block instead of reading “hraw_clock” if >= INTEL_PCH_CNP

So… just return INTEL_PCH_CNP from detect_intel_pch().