From nobody Sun Sep 27 00:40:21 2026 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D981E4BC006 for ; Thu, 27 Aug 2026 18:16:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787854600; cv=none; b=Cq7UydtJCSM6IwcafOnoP5zlxJIxNxn8dQ045rCk9ENwJyimPE/gKpbkvq6jy78PcNQrnvS01M/9DhFcwvf86DeW4oIFyhnvByRm973o1jLebvAq9FK/Kdjcv1S3hZa7htuABnn19gyC+IbbK+hfii2azhEwT3dH9mmAmTP564g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787854600; c=relaxed/simple; bh=aTG/uz+tVhkKtaJIGX4Cd8rrk2gEkeMnqZ89kfxyTwc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NsS/Ds56AAqj5lrjvotoH/fYwW/YQrDyEfLlgOcs2+HrfoAI2JYoxQDvvAtYwjq3+lX68ZnTVlj4BSQTaDS9iSCUmsXFeop/bPQoYwk/vWO2JkKMQ2UBry7sCvVDDbLOkov8AunCidcC7Wm4EMonKkty20olfY2ngLTpNzHZH68= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gdlg9N/3; arc=none smtp.client-ip=209.85.221.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gdlg9N/3" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-47de0093c42so128354f8f.3 for ; Thu, 27 Aug 2026 11:16:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787854593; x=1788459393; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=dMiJJYqXk3kfgLrjtvNLpclwwx4oSYqJYc7envt2b2E=; b=gdlg9N/3Nh7FrKHvnG0KJ9xxCQJIB/t3cHnmOg3fPdNHkWMKUy/XzB7KxtQHFN28St sUdQiTazbl8JyE5JxI9lszwXhnqIL5kC3jYbKb9omzRv7y6AaO1zPzmFjScY4clIIarl ftRgp6g2HZDEO8I2csic24xECj9yPM2p+btAEgHnf+Qv5QsHGa03idiI2iI0tNEGI8Wp lKvXOPQ+xukVauqV2o7nfWzUwpHB4Za1x/3wh8VOPv911vPb0WHezCAhuDvMZAOp9cBW t0WBNZjl9oLa4Z3IHKrZGW58X55Ut5fvePQwtske+0cHoDd3oQsCtAzldCk+6Z55M9p1 50Hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787854593; x=1788459393; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=dMiJJYqXk3kfgLrjtvNLpclwwx4oSYqJYc7envt2b2E=; b=ZBalRMeArQbxQOrnEDG7VHWEfwTeacM5kGShKWGwfFBaOFWxvrYKO3tU4SEBTkU/kv QDKWhCyUp2luTFVmwuY50JJr7ARniKmlsfcbuML/R0mysLYjHqoLwH6aMNigdfeTm035 PvPcPR3YJp0dZougaUN9gPDHPXfZ4677wTZPJmAx790JkLHmBIbKR1SPyxW3J+18Q1TB OMO6jjQZLa/6A/8aKUbVdQ48nXm/W9sdD3Od0uv1Zgn80GgDRkC761GVqewjlRuOLpYL eEs91HvL5zE4SPEwLHJHTPAzPi5Y+kG6uT5kN3e+kADnL5JtoyYp5binRAZRLyVJ7HdC cPSw== X-Gm-Message-State: AFuF++kS2uJji9cgLC1v1C9HYnGghC2U9h7ihZsF9F4A37asvKVbS8YF aE9kBm2j8s5xF/ARw6DHrm8oxp74kClSVCes1GKJ5SMnkiC+zMiBOVWf X-Gm-Gg: AR+sD12J8/F8mpJoc88PSU+JWcT2dpYcrRybTn24qlyTs1/1KmMvz8NVLrXXltCTask au5uKdvgoMsVRAu4qozh6Jw9jil8ALOP1w//FN1oR90+ZmDpAciqOcNAGJIESEW36148dd+1y0C 4s/s9+MZVJjucEiUr1hG7iV2YhXlpTO8xeTJ8sEsXs5/CCS2RuNJl84p51Xb+aX6YMAk4b+GrfQ 0XWuLj5vQacAdVMmgOvAEMgJwb03Lce0Zx8my/+hobHRfERmGB7cKfT0DX2ef9vz8vaYlshHyV5 y58zH89BT5D+AmaccrZcMu9dQOHLc/y9yKLggvADjaMC7keSJIUcQu4lpXitTH/x9IfF8uPfD2M q/+JiTKI9eo+h3CvDT2i3yqq7NRbC1663J4z9ETMtCOyYPc7LX2Lue8mm9jVFX28wcpN2DanpzY tYSXu3cNOFBeZsNTq0+st1BqBmQEXbkB/0oYZPJ3fmM6Xdibt62r59FamIY7lz/XPG3inz+zbg9 L+YTZ4uxdmymLJQ2/hikZ1T3xoXWGG7lXQzm1EahFTg X-Received: by 2002:a05:6000:381:b0:482:552f:ef68 with SMTP id ffacd0b85a97d-482f79ccac5mr817136f8f.19.1787854592778; Thu, 27 Aug 2026 11:16:32 -0700 (PDT) Received: from 1Z10 ([78.213.170.242]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482e28dbf33sm11328702f8f.23.2026.08.27.11.16.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 11:16:31 -0700 (PDT) From: Maurizio Casciano To: platform-driver-x86@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Hans de Goede , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Andy Shevchenko , Bartosz Golaszewski , Linus Walleij , "Rafael J . Wysocki" , Maurizio Casciano Subject: [PATCH v2 1/4] platform/x86: x86-android-tablets: Fix GPIO software node matching Date: Thu, 27 Aug 2026 20:16:24 +0200 Message-ID: <20260827181627.2427880-2-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260827181627.2427880-1-mauriziocasciano7@gmail.com> References: <20260826132233.3342481-1-mauriziocasciano7@gmail.com> <20260827181627.2427880-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" gpio_secondary_fwnode_init() attaches each provider software node to the ACPI device. The registered gpio_device has a different primary fwnode, so gpio_device_find_by_fwnode() never sees that secondary node and software-node GPIO consumers defer indefinitely. Find the gpio_device by its matching label and attach the secondary node directly to that device. Keep the returned reference until the managed cleanup action unsets the node. Fixes: 1448c2d2ca5c ("platform/x86: x86-android-tablets: enable fwnode matc= hing of GPIO chips") Signed-off-by: Maurizio Casciano Assisted-by: Codex:gpt-5.6-sol sparse --- .../platform/x86/x86-android-tablets/core.c | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/drivers/platform/x86/x86-android-tablets/core.c b/drivers/plat= form/x86/x86-android-tablets/core.c index 5db794d65eb5..8dfd15afdca2 100644 --- a/drivers/platform/x86/x86-android-tablets/core.c +++ b/drivers/platform/x86/x86-android-tablets/core.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -364,9 +365,10 @@ static const struct software_node *cherryview_gpiochip= _node_group[] =3D { =20 static void gpio_secondary_unset(void *data) { - struct device *dev =3D data; + struct gpio_device *gdev =3D data; =20 - set_secondary_fwnode(dev, NULL); + set_secondary_fwnode(gpio_device_to_device(gdev), NULL); + gpio_device_put(gdev); } =20 static void gpio_secondary_unregister_node_group(void *data) @@ -396,20 +398,23 @@ static int gpio_secondary_fwnode_init(struct device *= parent) return ret; =20 for (swnode =3D gpiochip_node_group; *swnode; swnode++) { - struct device *dev __free(put_device) =3D - acpi_bus_find_device_by_name((*swnode)->name); - if (!dev) + struct gpio_device *gdev; + + gdev =3D gpio_device_find_by_label((*swnode)->name); + if (!gdev) return dev_err_probe(parent, -ENODEV, "Failed to find the required GPIO controller: %s\n", (*swnode)->name); =20 fwnode =3D software_node_fwnode(*swnode); - if (WARN_ON(!fwnode)) + if (WARN_ON(!fwnode)) { + gpio_device_put(gdev); return -ENOENT; + } =20 - set_secondary_fwnode(dev, fwnode); + set_secondary_fwnode(gpio_device_to_device(gdev), fwnode); =20 - ret =3D devm_add_action_or_reset(parent, gpio_secondary_unset, dev); + ret =3D devm_add_action_or_reset(parent, gpio_secondary_unset, gdev); if (ret) return ret; } --=20 2.53.0 From nobody Sun Sep 27 00:40:21 2026 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F6724C77BC for ; Thu, 27 Aug 2026 18:16:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787854601; cv=none; b=T5JRgqt0YFVuEoocGp3F1O4UucIRr2bf1hGJa6J8Leho/NpbwYwYRQD+UW7B5c6Nzo4zfzFJylIM+nI8WsxwrLnjll56Ex/GQ4Jjx5PvTMFi/Hfm3qUDXyQEjBV4MZUBXHIFpJKyRY9s7JnVw/72+ksWm55nhcCGoZJx/i0Yv/g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787854601; c=relaxed/simple; bh=i8e0I6RT2NONCVQGYcI7HSF2J5hymZ9G7KDgcwIVJs4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rYCbA8zMD8mWZGshuuJM41MORcyGIE9GR/wbhVj4N0vVyf0Jl6x18ZB5QanwqQ4rOaZ1nHlqQm46t+EzLWktRu7h+imr6lMt27mgDuWWoLAD8ALDQFQjREPUWJVVcaZycuLhEhgWsiUX7GannKa1J8g9Qf3KQSJy2uODU4ubnr4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=qG29QBK0; arc=none smtp.client-ip=209.85.221.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="qG29QBK0" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-47f93b2fe4cso88718f8f.0 for ; Thu, 27 Aug 2026 11:16:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787854595; x=1788459395; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=2kfaoFfZK2/xecQPRSoVdIJikE1e/m//LU0wNhG2/Zo=; b=qG29QBK0EvYwnpgamq5yEv3cxLjpYEiA4jre+resDAFnQt6+lMp0u/ATbTo1tKoXH4 8crVkcGXezRui38P7GqB50lUk7VSscTg85YHO3pwFbzqrnK5aOho7B6POYU9HJkagdLW +EYJ3hbSvpnjQJAIjwxtmT0CUM9pGOQTUseNAddHxOlI9cv8iaG0TeR3gnagTij6UO7S xkKyWyi4j/umau27K2AMseK9RySi8npNOKcjpC/Huo00k6hBc+8Q4kn2weeJmFfRn0CI jsoHz0BRVsIwIyJB7vIZP6F/IoAbq2eNMJ2KbKYO+sM9etRDRKmZUeza61FPWt1iJm46 5Cjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787854595; x=1788459395; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=2kfaoFfZK2/xecQPRSoVdIJikE1e/m//LU0wNhG2/Zo=; b=JpEnlie6X5LDHvXWLGRA4/NFEJ2r4aOGrnU0ryOi/zQSfb9ez/jzjSUrwjxNNDCe+e gHZfNM+RnWiyI+XhiSbJPdPU1gYHjfPIyaGow+MELGEaMCUaEDzpp5dLkO+SKg0aIdgY oTxS4ktPTYbaELMizIjzZ9hUv/clY2NV351AuAT5kBooCsYNSVvsl0413B4aBtMd+cyb YV286ADAnHjMA4LzbbeMTM3M4bqvopbacaM3Fj9j2s8DnCiFZ4jfXoP4MnJ9YSn2kd4H oLtpsijZrKGBXymjQfSQJ0zxz+c4+yupyzliwsD0gmt6JquU3xR8FrAnwWGIaW7Xfpb2 /0FA== X-Gm-Message-State: AFuF++m1HktX5ghFEkSYTQg5WXW52b4xoyYm+1jfbBFzBs9iSGkAeXj6 8Rw5fLfpPDlSsnzhi5JZsIhlaiHhLfxpGy5I/UtT6ltLjBjVkiPT/VGQCceO3z+i X-Gm-Gg: AR+sD12K2kXmScJo0QLVoFYuhLhdPilVlioDcQB+wQxDFx6MSYlX+wvBob0D5vBxhx1 RHd6vfLRIZ23rYzYtPkwj/GXEmDjSqQaIsv0rGR37Alq1R/1j2G2VKQdyFTNUzgblCESojPevmk dRB/AedMrhmcPsu2m2saD1/EiA77MQHkDqAZHgnwoMsgYgXIZG8x9zgxtk1/jGZPaang8NnG9RA cZLs3AExZov76v5YuO0imdhGIxWaNfLowaacYHRQWtmpCKLn51LUm8h8lMrdLmGBTU1jw/we5MJ 2uz11s+YkFIYsfqydA9NBNu8/l5QzJXeTopvzlbUzwOIDir4FIrkgIOQlECxus85Y+yBSgwmiAx ItElOEFMpPDlh8g0p2gycASqx4xiJKVy7T70KnYHZDJnDgUOPjBTeAE2pX0v/F98NICB3amim6h P9SUw22g5mUi7l4y/zhXLfuCqLc9dB4iBdFbED4a8Df+F0lDwvZkCbOWYg6OEilDDoUadiwyaLs 1Y/e2K19pGfzxriuno9vghw6yderIfuOFNkNA2uA8iw X-Received: by 2002:a05:6000:18af:b0:482:9dc6:16c4 with SMTP id ffacd0b85a97d-482f798ba02mr1260549f8f.1.1787854595208; Thu, 27 Aug 2026 11:16:35 -0700 (PDT) Received: from 1Z10 ([78.213.170.242]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482e28dbf33sm11328702f8f.23.2026.08.27.11.16.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 11:16:34 -0700 (PDT) From: Maurizio Casciano To: platform-driver-x86@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Hans de Goede , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Andy Shevchenko , Bartosz Golaszewski , Linus Walleij , "Rafael J . Wysocki" , Maurizio Casciano Subject: [PATCH v2 2/4] platform/x86: x86-android-tablets: Describe Yoga Book haptics Date: Thu, 27 Aug 2026 20:16:25 +0200 Message-ID: <20260827181627.2427880-3-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260827181627.2427880-1-mauriziocasciano7@gmail.com> References: <20260826132233.3342481-1-mauriziocasciano7@gmail.com> <20260827181627.2427880-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" ACPI enumerates the Yoga Book YB1-X91F/L haptic controllers as DRV2604:00 and DRV2604:01, but omits the properties used by drv260x to identify their mode, waveform library and enable GPIO. Register board software nodes and attach them to the existing I2C devices. Describe the enable signals using their Cherryview GPIO providers and pins from the firmware resource tables, keeping this board-specific mapping out of the generic input driver. Hold device references until removal, reprobe after adding properties to cover an earlier built-in probe, and detach the nodes in reverse order. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse --- .../platform/x86/x86-android-tablets/lenovo.c | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/drivers/platform/x86/x86-android-tablets/lenovo.c b/drivers/pl= atform/x86/x86-android-tablets/lenovo.c index 8d825e0b4661..a8c849ee03db 100644 --- a/drivers/platform/x86/x86-android-tablets/lenovo.c +++ b/drivers/platform/x86/x86-android-tablets/lenovo.c @@ -114,6 +114,41 @@ static const struct software_node lenovo_yb1_x90_hidee= p_ts_node =3D { .properties =3D lenovo_yb1_x90_hideep_ts_props, }; =20 +static const struct property_entry lenovo_yb1_x91_drv2604_0_props[] =3D { + PROPERTY_ENTRY_U32("mode", 0), /* DRV260X_LRA_MODE */ + PROPERTY_ENTRY_U32("library-sel", 0), /* DRV260X_LIB_EMPTY */ + PROPERTY_ENTRY_GPIO("enable-gpios", &cherryview_gpiochip_nodes[0], 79, + GPIO_ACTIVE_HIGH), + { } +}; + +static const struct property_entry lenovo_yb1_x91_drv2604_1_props[] =3D { + PROPERTY_ENTRY_U32("mode", 0), /* DRV260X_LRA_MODE */ + PROPERTY_ENTRY_U32("library-sel", 0), /* DRV260X_LIB_EMPTY */ + PROPERTY_ENTRY_GPIO("enable-gpios", &cherryview_gpiochip_nodes[1], 47, + GPIO_ACTIVE_HIGH), + { } +}; + +static const struct software_node lenovo_yb1_x91_drv2604_0_node =3D { + .properties =3D lenovo_yb1_x91_drv2604_0_props, +}; + +static const struct software_node lenovo_yb1_x91_drv2604_1_node =3D { + .properties =3D lenovo_yb1_x91_drv2604_1_props, +}; + +static const struct software_node *lenovo_yb1_x91_swnodes[] =3D { + &lenovo_yb1_x91_drv2604_0_node, + &lenovo_yb1_x91_drv2604_1_node, + NULL +}; + +static const struct software_node * const lenovo_yb1_x91_drv2604_nodes[] = =3D { + &lenovo_yb1_x91_drv2604_0_node, + &lenovo_yb1_x91_drv2604_1_node, +}; + static const struct x86_i2c_client_info lenovo_yb1_x90_i2c_clients[] __ini= tconst =3D { { /* BQ27542 fuel-gauge */ @@ -283,9 +318,72 @@ static const struct x86_i2c_client_info lenovo_yogaboo= k_x91_i2c_clients[] __init }, }; =20 +#define YB1_X91_DRV2604_0_DEVICE "i2c-DRV2604:00" +#define YB1_X91_DRV2604_1_DEVICE "i2c-DRV2604:01" + +static struct device *lenovo_yb1_x91_drv2604_devs[2]; + +static void lenovo_yb1_x91_add_haptics_props(struct device *dev, int index, + const char *name) +{ + struct device *haptics_dev; + int ret; + + haptics_dev =3D bus_find_device_by_name(&i2c_bus_type, NULL, name); + if (!haptics_dev) { + dev_warn(dev, "cannot find %s, haptics will be unavailable\n", name); + return; + } + + ret =3D device_add_software_node(haptics_dev, + lenovo_yb1_x91_drv2604_nodes[index]); + if (ret) { + put_device(haptics_dev); + dev_warn(dev, "failed to add properties to %s: %d\n", name, ret); + return; + } + + /* Apply the properties if a built-in driver already attempted to probe. = */ + ret =3D device_reprobe(haptics_dev); + if (ret) + dev_warn(dev, "failed to reprobe %s: %d\n", name, ret); + + lenovo_yb1_x91_drv2604_devs[index] =3D haptics_dev; +} + +static void lenovo_yb1_x91_remove_haptics_props(int index) +{ + struct device *haptics_dev =3D lenovo_yb1_x91_drv2604_devs[index]; + + if (!haptics_dev) + return; + + device_remove_software_node(haptics_dev); + put_device(haptics_dev); + lenovo_yb1_x91_drv2604_devs[index] =3D NULL; +} + +static int __init lenovo_yb1_x91_init(struct device *dev) +{ + lenovo_yb1_x91_add_haptics_props(dev, 0, YB1_X91_DRV2604_0_DEVICE); + lenovo_yb1_x91_add_haptics_props(dev, 1, YB1_X91_DRV2604_1_DEVICE); + + return 0; +} + +static void lenovo_yb1_x91_exit(void) +{ + lenovo_yb1_x91_remove_haptics_props(1); + lenovo_yb1_x91_remove_haptics_props(0); +} + const struct x86_dev_info lenovo_yogabook_x91_info __initconst =3D { .i2c_client_info =3D lenovo_yogabook_x91_i2c_clients, .i2c_client_count =3D ARRAY_SIZE(lenovo_yogabook_x91_i2c_clients), + .swnode_group =3D lenovo_yb1_x91_swnodes, + .gpiochip_type =3D X86_GPIOCHIP_CHERRYVIEW, + .init =3D lenovo_yb1_x91_init, + .exit =3D lenovo_yb1_x91_exit, }; =20 /* Lenovo Yoga Tablet 2 1050F/L's Android factory image has everything har= dcoded */ --=20 2.53.0 From nobody Sun Sep 27 00:40:21 2026 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 657474C042F for ; Thu, 27 Aug 2026 18:16:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787854603; cv=none; b=J2yXMZhsoqKpx6ExVB8UF36BH4K/n+dqEdu4DVbyQsnhbkusSdsfIr8ZdxclNb5ZEOEHekREPSSoxJAP8D0D1JMqnfQtoz+df+uLt9h7xjz9gFLbGy6ozV+znK3M2KbFAHb89zl0JnaoTx8z3+NCkEruYRmussKtga4GxOavkFY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787854603; c=relaxed/simple; bh=2S4T0eC7Kmna1hk61v36MroRNq9sEQ0STyE1FoXfjY0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=J4R3dcFS93XBJmEGY0OM5e6GMxdNRffa1P8ETLSBu8vQTdcjoBYuz8pTOnTNiXzpPpbwWi2o3x6udMSP6ohjgKVUxxmQdCgxlW7O2arlQdJXW+xK3YA9sHMmzZpNyEZQHT4GQ4bFwXuSS9u0iqdSJgmH8WoY8j0k8MmfTU7rmS8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ds2oCnkt; arc=none smtp.client-ip=209.85.221.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ds2oCnkt" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-47f633e6058so105534f8f.0 for ; Thu, 27 Aug 2026 11:16:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787854597; x=1788459397; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=3PlPZyn9Gp7asBZlBMMq0X5F7+8cWFv/GI7YGe1ICCI=; b=ds2oCnktNGyjUebNBsg/VZYpDnZMhYsdB6+aaVP/tPL8ziztor3tejgTMREfYNEUsk fwjXeVq7Quk1lt1NYsPH593ls80g0/E0uAlsUbW/w9hZRtTpHy1J8SrWJXI+4+wWQNh7 UEuY6poxIq5DRlJFV7Ji+7ObUwj9OMZuTCKIiSA2f6EsHkp9Tynt2EslAfdkKuFxZ13j lFqeDL8dDtoJIWjJTQ4qRsl73KJlmavn6uSoVtsuvJxWoAa75nhiR6GKVt1oyjpCdQWT a6kcVuSp1hdm7FFDu47F3erkDSkKZ1ofnU9C6qlQk75Vf9F8tBmaJejuHYJCkrlZkFFv 2g9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787854597; x=1788459397; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=3PlPZyn9Gp7asBZlBMMq0X5F7+8cWFv/GI7YGe1ICCI=; b=UNuhqA6uYXOJbTtg5abdCjN1iDMM9DxMl4tkcubKqcJF74A7mf+PXQvrJnV5c1EBe0 OCdzGU3h6SxJyrJjfJyxUxNtRH/496B03uV463fJCmDTZgNAm1IwP7adfK7f0iRxre0B AzfE+hv3vqEbERTKKW5eVwZLkhUof5gTERwgB0nbtHPdPzvkZj51pLFFFhHhf3PPNZ0w IXaXUEkxOdZ29UY1Z1afe7euXkUJXSc5nFec7Yp2vem4NIQGjx9/A/lwCtpfIO5Bnmki dczxQ91Sv/Rv6U9HTfabBqBCm7VY4kgKtuarXW3W62JhGhaCSFWJ7p57bYN+yTYkjaZV Cd4A== X-Gm-Message-State: AFuF++kJBgjVZa9SDN/x9Lv7HN7V7lbcv7g/XVuQ1BNHskgik0v62HTs HXBCA5UyL5FKE8AOtUNxuX4784bdAt5X82KvDmFykQ0LMdVq+LVdhSEt X-Gm-Gg: AR+sD11QRP+baaCHckU2hp2bDYjHRYi4yqXoJhJmsolFhReb2jQvshHqIA20vzLbk0I 07xfDiTnTajoMt0ejmG2SqN1DDf6d8GO14CLG7lYxwtrQeKK/7A8JqcZDQ7hFOqrtIzFiJb6pIO 7x3rw9Jt/Qv6pgM4WpSB3LtJV630F/4Lv10tou4b52XPXrmzzZTMEewfSPVVrdWRkDQgVzRvyAP jGpomEt/46HctMgLgqzAg8fMLQF4P1zPdPAZFI2W4/mH2lkb+A+KkI4txvSXHWs4qAIu0GcDaQG ipWmOp3p8+6SBy+gc77N5W4UG5ZdTCPhgi1I5P2Kl1CzLnL2yAUc4P9DnU2oq4GOaVfRM85qc3D cNdt6RWc4JWnwYGQ5vnQXdbUOCIw7ZK+i3O4eConW8jo1zSg8bPtDsJtOD2ZxMhU/E2JYq3ynQG 5Jd7a0ya4HqFf/UUc7oLWOF4tE2/zm3hi6d6u4iPtZagnL8dQIRfrW8nygrBxGv/RM2PaOOq2om EVpiWlciE12v9ZGmvuClaD5aLpq4x6bq7pVGp2sp/5oeXsI7l62QKE= X-Received: by 2002:a05:6000:2f8a:b0:481:5021:33cd with SMTP id ffacd0b85a97d-482f799da69mr950497f8f.3.1787854597208; Thu, 27 Aug 2026 11:16:37 -0700 (PDT) Received: from 1Z10 ([78.213.170.242]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482e28dbf33sm11328702f8f.23.2026.08.27.11.16.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 11:16:36 -0700 (PDT) From: Maurizio Casciano To: platform-driver-x86@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Hans de Goede , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Andy Shevchenko , Bartosz Golaszewski , Linus Walleij , "Rafael J . Wysocki" , Maurizio Casciano Subject: [PATCH v2 3/4] platform/x86: x86-android-tablets: Add Yoga Book TS3A227E Date: Thu, 27 Aug 2026 20:16:26 +0200 Message-ID: <20260827181627.2427880-4-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260827181627.2427880-1-mauriziocasciano7@gmail.com> References: <20260826132233.3342481-1-mauriziocasciano7@gmail.com> <20260827181627.2427880-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Yoga Book YB1-X91F/L firmware describes the TS3A227E headset detector as a secondary resource of the RT5677 codec rather than as an independent I2C device. No client is therefore created for it. Instantiate the device on I2C1 at address 0x3b, describe its GPIO interrupt, and provide the mic-bias setting used by the Yoga Book design. This lets the ASoC machine driver use jack and button detection. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse --- .../platform/x86/x86-android-tablets/lenovo.c | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/drivers/platform/x86/x86-android-tablets/lenovo.c b/drivers/pl= atform/x86/x86-android-tablets/lenovo.c index a8c849ee03db..88693b9a1b01 100644 --- a/drivers/platform/x86/x86-android-tablets/lenovo.c +++ b/drivers/platform/x86/x86-android-tablets/lenovo.c @@ -149,6 +149,16 @@ static const struct software_node * const lenovo_yb1_x= 91_drv2604_nodes[] =3D { &lenovo_yb1_x91_drv2604_1_node, }; =20 +static const struct property_entry lenovo_yb1_ts3a227e_props[] =3D { + /* Value taken from the Lenovo Android kernel code drop. */ + PROPERTY_ENTRY_U32("ti,micbias", 7), + { } +}; + +static const struct software_node lenovo_yb1_ts3a227e_node =3D { + .properties =3D lenovo_yb1_ts3a227e_props, +}; + static const struct x86_i2c_client_info lenovo_yb1_x90_i2c_clients[] __ini= tconst =3D { { /* BQ27542 fuel-gauge */ @@ -304,7 +314,7 @@ const struct x86_dev_info lenovo_yogabook_x90_info __in= itconst =3D { .init =3D lenovo_yb1_x90_init, }; =20 -/* Lenovo Yoga Book X91F/L Windows tablet needs manual instantiation of th= e fuel-gauge client */ +/* Lenovo Yoga Book X91F/L Windows tablet needs extra platform description= s. */ static const struct x86_i2c_client_info lenovo_yogabook_x91_i2c_clients[] = __initconst =3D { { /* BQ27542 fuel-gauge */ @@ -315,6 +325,23 @@ static const struct x86_i2c_client_info lenovo_yogaboo= k_x91_i2c_clients[] __init .swnode =3D &fg_bq25890_supply_node, }, .adapter_path =3D "\\_SB_.PCI0.I2C1", + }, { + /* The jack-detection IC is described as a secondary RT5677 resource. */ + .board_info =3D { + .type =3D "ts3a227e", + .addr =3D 0x3b, + .dev_name =3D "ts3a227e", + .swnode =3D &lenovo_yb1_ts3a227e_node, + }, + .adapter_path =3D "\\_SB_.PCI0.I2C1", + .irq_data =3D { + .type =3D X86_ACPI_IRQ_TYPE_GPIOINT, + .chip =3D "INT33FF:00", + .index =3D 77, + .trigger =3D ACPI_EDGE_SENSITIVE, + .polarity =3D ACPI_ACTIVE_LOW, + .con_id =3D "ts3a227e_irq", + }, }, }; =20 --=20 2.53.0 From nobody Sun Sep 27 00:40:21 2026 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B19804BCAD6 for ; Thu, 27 Aug 2026 18:16:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787854606; cv=none; b=oZ0WI2OiZibISOKY5YIoGgjzhAPZoBOvLDCS+tmdvG4V3+b6NAKIME/7QqLfWhwp8akOlCJ9ONr7m02GY4ZfudDuzcyDkK79h0cQRDd7yCPtPyQ5BKimxqxMrLkri0KPJtSBYE8ofSsK/3eHvJo8uM/7GEPI/YctJNMQUGgMpEM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787854606; c=relaxed/simple; bh=NzuVq/w7C8F8yq8Sk9Lb0kpmuAUTsBd2XPTp9Yy9qLQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eOwUIr6RPB7NRP+9Yzd/paRFyEtNw+ySGn5CsigOeuzIxesqJqLL278g0nb1It7c1LZSTIK9vv1BQn8CqpcVB9ZfX0ZYTxVjVRBBXnzfrJEXt2neZVCDaKZhQ+49tNwu/pl020mOs1f5TLk2pFGMMkO5eIn0dbeSryz/JOzco9g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GlFQjG0I; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GlFQjG0I" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-47db714766aso985288f8f.0 for ; Thu, 27 Aug 2026 11:16:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787854600; x=1788459400; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=LxaRY2y7dV8T3x7pQ4bDaHXO+vK0Rukz1PaECXgpyiI=; b=GlFQjG0IjQTIwK93gnMGdQqdstULK8Whoa0BCiwqvDFNIB5g8XioKdUp3xpiNhruv1 ucQbkRAak+5IIdkQLLR2FerQzITIHlxAggGgqstMSxCV8wEzstREbvmlOWGTpZv1ek3o kF++0KAKx6OUseBntLRctLJY0uyvRpFzFIjz5b5sEGAGElp3rVfbvht67OJ1SOAqA6G8 iDU4L5mx0Ttgg6PMoB44FlmmPqLl+B20nHLUrwoCngQvy0WU8vLqxYoj8c1KBYpzzann ckum+9qgTuHIQUtm5BGrciT+T2lCPFNi5feski/dQdalChHZ9oNdrA5zstmX3KguQCwN pkUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787854600; x=1788459400; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=LxaRY2y7dV8T3x7pQ4bDaHXO+vK0Rukz1PaECXgpyiI=; b=kZWhDfBuHw/uBTv7ha2IUAU1MpMeWreO1Fad3iVyhKl0+SUXJxUQu1kqzW1Gyvph6r 58pziyYcukCIt52BgejJoCuRpX2FNkmCBgx4yBt7J09j1WWCwLXfAGRR0/U9MUeQLR+2 4ILUnxrxquWZhbinCtLtqDCZ3aZ/pkD2YMBgHOkNB/xSF7mn580V7yOPn7lHKOI++U5Z g3t2eh4Fikq4ceJWozg0ij4LwJ/fxLcd6ae2eHSrFEPznjccWG8jx/V7tpxLkOh1YTk/ N7e0nM8Rugco9m0x0LEtjCGXLRfOOQB7dqCtjassF/4TJpFF9jLuxYgSXmMd2mGEBgNs qR4A== X-Gm-Message-State: AFuF++mpQr9mu64jj1Fq9MsxMXi53VsaTZK96o+7aeOpB/DCpxaCkmhx lJ2rrcjFZqyGjQq4TXSIrtvdUUFzTMIG9v2/0IBRVGSlcrMBH1JpOrCgNJgw3cFo X-Gm-Gg: AR+sD12HllnTEp+2D/d7JwrrkXeLqHV0IDC8Tj+D7sEXAhwY96bcBmhRVBRVhZaRwYa dzV/ksxgsc64kmZhvDzZ9mxuIv2onvKNCRHN5+iUOYAkWUpgVG1GWWV5jiDAKu1zc3F6z4dHtUn 0o8FPqD3CCk/Qgm3gsi/OpRqMt6jU1o4kqHHL8FGIxQc9ahYMVQ9KDgBImWVbDUT58ixltO1Hai FG4iMjsqABmuqwMv70YXsAMFzMRqBmb53lRS+qBulXW2Xz5nefggvQ0TCMqk+ulevvRRp1MWF3u DcTgIV0jbG8bqrI69/Mg4JR1MzmwKAIOrqQUyfyLV7mU7k/MKRYP23lxXQA/ZQOkebHe9MujnZ/ toBdncYe0RyhTahvf1nuAjkcKrfPYwEMjIy43bc1PL2XdoHiraNaa58xVe0cjAnhd1xR24LHMQ2 i1RDd6Cn7sWL/TN8nAedGY71J0I8z/OhgX2O+/J9J3tmXOAed3yWG/731p2Kt8NoakjD89o/dfC gY++nErjsGcVDBNOJDnk99voed6C/8nIXIHIFKtQRNH X-Received: by 2002:a05:600c:498a:b0:499:b81d:f580 with SMTP id 5b1f17b1804b1-49b0dea670dmr77990135e9.2.1787854600144; Thu, 27 Aug 2026 11:16:40 -0700 (PDT) Received: from 1Z10 ([78.213.170.242]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482e28dbf33sm11328702f8f.23.2026.08.27.11.16.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 11:16:38 -0700 (PDT) From: Maurizio Casciano To: platform-driver-x86@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Hans de Goede , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Andy Shevchenko , Bartosz Golaszewski , Linus Walleij , "Rafael J . Wysocki" , Maurizio Casciano Subject: [PATCH v2 4/4] platform/x86: x86-android-tablets: Add Yoga Book audio GPIOs Date: Thu, 27 Aug 2026 20:16:27 +0200 Message-ID: <20260827181627.2427880-5-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260827181627.2427880-1-mauriziocasciano7@gmail.com> References: <20260826132233.3342481-1-mauriziocasciano7@gmail.com> <20260827181627.2427880-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Yoga Book YB1-X91F/L uses two GPIOs provided by the RT5677 codec itself. GPIO2 enables the second speaker amplifier and GPIO4 enables the headphone path, but ACPI does not map either signal. Add lookup entries for the codec device so the Yoga Book ASoC machine driver can request both controls by function name. Register and remove the table with the tablet description lifetime. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse --- drivers/platform/x86/x86-android-tablets/lenovo.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/platform/x86/x86-android-tablets/lenovo.c b/drivers/pl= atform/x86/x86-android-tablets/lenovo.c index 88693b9a1b01..8a69194a724e 100644 --- a/drivers/platform/x86/x86-android-tablets/lenovo.c +++ b/drivers/platform/x86/x86-android-tablets/lenovo.c @@ -345,6 +345,16 @@ static const struct x86_i2c_client_info lenovo_yogaboo= k_x91_i2c_clients[] __init }, }; =20 +static struct gpiod_lookup_table lenovo_yb1_x91_rt5677_gpios =3D { + .dev_id =3D "i2c-10EC5677:00", + .table =3D { + /* GPIO2 drives the second speaker amp; GPIO4 drives headphones. */ + GPIO_LOOKUP("rt5677", 2, "speaker-enable2", GPIO_ACTIVE_HIGH), + GPIO_LOOKUP("rt5677", 4, "headphone-enable", GPIO_ACTIVE_HIGH), + { } + }, +}; + #define YB1_X91_DRV2604_0_DEVICE "i2c-DRV2604:00" #define YB1_X91_DRV2604_1_DEVICE "i2c-DRV2604:01" =20 @@ -392,6 +402,8 @@ static void lenovo_yb1_x91_remove_haptics_props(int ind= ex) =20 static int __init lenovo_yb1_x91_init(struct device *dev) { + gpiod_add_lookup_table(&lenovo_yb1_x91_rt5677_gpios); + lenovo_yb1_x91_add_haptics_props(dev, 0, YB1_X91_DRV2604_0_DEVICE); lenovo_yb1_x91_add_haptics_props(dev, 1, YB1_X91_DRV2604_1_DEVICE); =20 @@ -402,6 +414,7 @@ static void lenovo_yb1_x91_exit(void) { lenovo_yb1_x91_remove_haptics_props(1); lenovo_yb1_x91_remove_haptics_props(0); + gpiod_remove_lookup_table(&lenovo_yb1_x91_rt5677_gpios); } =20 const struct x86_dev_info lenovo_yogabook_x91_info __initconst =3D { --=20 2.53.0