From nobody Sun Sep 27 00:39:06 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.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 4529C3DCD9B for ; Thu, 27 Aug 2026 23:17:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787872632; cv=none; b=tIFm00QRaZjdJXgjsdJ7L2EzKDARCjsCW1CU3pBsHYXAlQbNKq8FHjNqBhL4lHJvlZHiIMmhEnCm8Fe91qDgb+frcSXMiy6WP0xwOzhffrYEUZ2aORpmXX2QCd/8o2ZSmvb/IhEb+GsS9D30KLR1EpLm7Xxp1UK083DqaD8Usac= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787872632; c=relaxed/simple; bh=i8e0I6RT2NONCVQGYcI7HSF2J5hymZ9G7KDgcwIVJs4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cNEowL3VMz68xVc4IaK1xGHW+pbAgGmp97+e77nBD6fffK5gO7Ffve64nILivJuFgeDWvCLvrWXhkk7NgQ30iHmbIdY+EwDrnEFS809b/oSPDdJOtPekFti6YxbDQrwzE3raveuLqhiPlcnWmFAvVDXny4tRF39fH6ivclrbXSo= 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=TdUYgCZp; arc=none smtp.client-ip=209.85.128.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="TdUYgCZp" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-4980fe6b3beso10134035e9.0 for ; Thu, 27 Aug 2026 16:17:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787872628; x=1788477428; 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=TdUYgCZpF2p2q+A8bRpMR09AJdtOz6OYE6g0sXUC+jPl1+bMkdNBdl1czG5+a4RhJq pI3couCF3c4OgT0fMFMSQ6iqpiQhSKcHkez5GRMYFLXyweIrQKSMz0mGa/8sBNFhci1w 5T7z6JWD73iU/p+Rx3vd8dJBnZXcBdngLuDHVFFGn4C6zbvlT3jZVkJjrgk8b4S9Mn/s 1heqC2Q1lvr8so4na+1lMedMsKVM5hd1XGB8xUQMg3khmbUsa/KWKMA8ukxbMAlI3GcH Bdl2BdcUxAr35IGZf7QwRTENjwSnI9uAURPt+3XWlg3YRh/5wJWWIyY80EvVeQvkq8dy 85BA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787872628; x=1788477428; 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=QtiK8i58KvRaO1rJs9TECBUH3fFw3qM3F1N8daNrKsJUBWhV4Z8NzBq1dJ18KXMJqx rua7qMdf/BmB7CxVThGpaOehzoNVlLTS8tyFvMa7kzVUNhWIWEIMNW23b49fcL5ca4q+ QJk20qr9upv+d8K3EK8sjyUnlg/q7zU6yN8AuZ/Cx9rlHD6WVbT1KpcVD+V9XJkYlvp2 PvAKRg3d5rr0PTmC7naJySEesl+sQ8wCh921OvWO5+jtFVWl42DSjDY05FL3S7gnxwTd Y5wnkPhe9NM4enQPrTq3ku+UQSiIpZSuePp1eVr+bG5CV5CST/E7+xEadE0ZxHOYNHyR FHrw== X-Forwarded-Encrypted: i=1; AHgh+RodvoM5zDRAHpDr2RWCHX3CQHoXxwIfyV5K3qp8qwSE4DD8hwLQ8i5PlwzPTWmdwAtb0//1oESgEZkKIwo=@vger.kernel.org X-Gm-Message-State: AFuF++n6R01JZVSMvY/YwEsG+QdErBhbD8KK1LmqqPNnZVWqspwPaLjc gLcwCArA27cVkJVhAcErO+nnCQbj9MLYsotbPXxZaxXZAt6eGvWL0t7r X-Gm-Gg: AR+sD12sv5AdUXTnOJ4S4xFt35+p51PBTixeQuzw5kQSQtTMmYi+oY2f1i4KvdFyOM7 iUgmX0awiA8dvHaP1PgkToT6+dFeLudF6JbiW7dnFisXESitV56QHsH5zmj5ma/9c1yjYzFMkOA PfFS1e9U0Jwa86p1m2MEGeeYx1Ithn1jg9MRyIaI8rv30GdCu668KrAEqIcbWd0qvCyVSi7Y6eY Oo7+sKvcLbmLKHH6UXaeXcUEOB19G+yiO1WcxRvmvCJKaW+knS2RlB8U3t0h2z6MsYWW35S1dFo EACz3NOma6wcG3/fwJWlh64sGC2e3iBPz1dOhxWSTpxaIhqPq1a9BVljtvDV+JsC3yBQVwEbaU2 OD3GIfdzx9YJD9rw5cbqgGjWuVM4FHOOLrRD+jr4Kk8a5uh+SaKZp7O2w/5ZU5tINBf8MDVZx/p zXzKaIjZ0YKJuz39YTZQepDrlqAIZoyX8QYrvtY5hlDf60KifrXBcjeRmgw/CIHx6ssaOHE3Ys7 sn9/A9mx/MRcgsWBOLet2B1I3ZfPaNauylSFpkATI0/ X-Received: by 2002:a05:600d:1:b0:499:8afd:4a9f with SMTP id 5b1f17b1804b1-49b0dd4e54fmr124606595e9.0.1787872628428; Thu, 27 Aug 2026 16:17:08 -0700 (PDT) Received: from 1Z10 ([78.213.170.242]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482e28f5e2fsm10900940f8f.33.2026.08.27.16.17.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 16:17:07 -0700 (PDT) From: Maurizio Casciano To: Hans de Goede Cc: Ilpo Jarvinen , Dmitry Torokhov , platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v2 1/3] platform/x86: x86-android-tablets: Describe Yoga Book haptics Date: Fri, 28 Aug 2026 01:16:58 +0200 Message-ID: <9c88d16abc426c31bb34deb7e17be5e105bf6dc6.1787872237.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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:39:06 2026 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (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 75F003D9DB4 for ; Thu, 27 Aug 2026 23:17:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787872634; cv=none; b=tGCqXajykJBLH5b7AhoNYhPY9pS3u6Z7MbLAwP1LVITm2s5nB+vc6KtI00G+xm+TFmQ9she4ka4Dh7AxJKj7Ur1Gi3zreBdbLLum7I4PeIpQoR6LAW5/TYUQUrn3rut27yHklfqjAQvTDX/eSzHjeJwcx2HS4u9ELclXxpGgEs0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787872634; c=relaxed/simple; bh=2S4T0eC7Kmna1hk61v36MroRNq9sEQ0STyE1FoXfjY0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Fm49dfArVY8gUTtR0af9GENP2X/pMW1swFY4kDdTu5ehg/oBiKWIapf9/xbZBoVfOXX26Mf6dtlPd2vRisEpDi7tBscOwXPbybAHED+NIVWnbbKjb4RYplePPop4p4uxTFDgVSjY5fzQHbRi8io+5a40pIgKZzsTQwaJc+hbtFM= 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=il0IucYy; arc=none smtp.client-ip=209.85.221.49 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="il0IucYy" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-482dd6ee390so299015f8f.3 for ; Thu, 27 Aug 2026 16:17:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787872630; x=1788477430; 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=il0IucYyp2Wq1zCqQYKiSqYMgpy5v1dvgbsfiTvZCAcxJUxAO6z52p2wIv2xdCxSv+ o0obOquyAbApXYMrLC+rv1KhdubiVV3gDDoryzv7B+Qpt+EbH2xj3LdaHtOgGGVIVwMT Hz2CNrxeKNRsaXdAJeA1k1zWZLLWaOhiGaTr/fvoyedjtHEKLjKTz5pio0usbA2zHXtu 3JIrXW7eZLFkHIpm5AX3t+1+hkMcvTldTDK/iyLhvC2A2qptXQYCPKqnmXxyid7ikKdZ a1DfvH/5JPq+ddtEVMbxoPvXFVy7bSaTkrPf1NopZsgyI5t7YiFuqvfXpf0ZYOOdgnkP Sv3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787872630; x=1788477430; 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=me1NSrutQFerIAMOGmXCN5N2Yq3D9mXmQb72MouLYfjhAfDx/KpsDRh8/VLWWGGV4C ik1sWuyhOo5dTcfR/Aih+/WQo778joGtpq/10AxFKq0So4nHpjUsvlNjUC/eurZvxx95 87djQn7ZrR4L7Ew9VymAi/Oph1L4VJXa8j3Ch/XvDQuQjASvCT3pDMFOES+HwRKXVl1b ah2PWXygpJJdY/IMrvvJLjzNS6Qs5M8oRSqGAuzG21JKQMyLTVh6Itsbe8lue9vF2q+8 WMuY46ZwErPGJjZdF4ktBuRLQ2pRYFDs+IJ2ixduj2rXRp+DW5mIdICJVegVYlhCjb/W Pe6Q== X-Forwarded-Encrypted: i=1; AHgh+RpytJBpVPEAHzaQOm/HlHEwtFGfqw4zQXaWQKP+wFDJdCq0vFDzUTnHnFobmoptk+lhjQ9VtYZX3imTgIs=@vger.kernel.org X-Gm-Message-State: AFuF++lOjqFdZYro3F4q6isp3XJZ600dC44zk5ue8Jfwqrfvff9Q5qml 9IIjTBbk76dozapJnopxoI17BQ6nxGJMqGSWEhicZ95vguQzw+fdPqLY X-Gm-Gg: AR+sD12PlW/lXiLAYSGC+y71LSPtJzK/028d/cGHzyTfD8epA1HXqQr1FaP0NjkZxZp hHSZa7zkGNeB/savUG/M7AFX2Fv6ry1XilMQk0QZWjTUOjotn4YoPT+mWWbD/+Ljz2OBekC6AHC 4W6DJVh5vqqUV4lXSS1sAHXf5PMyGP34AAzoH0JsnNx2akwPqbAD9kjn7HlCFLtuQ0hjEYTxjqg KwkTMKa0Byumoc/GEO41Uvaavc7aos+WDFIWkXStgIs3eha+B+rtBOawSJkNcIIJKfpC+kO7vAJ z0WdpmtWkcIWwIhP/eYlooDSQbBOvzZbG6/Y6ZTga4PudOjAaAlV5iCopXEgk9/g7bR6RjcVWFb k2aBaJFrol40EQ5bA7ZY59vfAmAy21IwgR+I6RIj3RF8m75wWt2yyTJD0lDYr2DZySXDGVKjDYF 4a533TTUvygg6YDKHzNlZkGkKG6uY/WjbaQT4smAv0zqC5aYc2N6yH3VB+uOiwhyfkJgX5M/mh2 78+JOhB7eul6BemS6atTbnO++t/euBk2WjFq/60OoEd X-Received: by 2002:a05:6000:4609:b0:482:e451:6810 with SMTP id ffacd0b85a97d-482f7976116mr3794492f8f.1.1787872630215; Thu, 27 Aug 2026 16:17:10 -0700 (PDT) Received: from 1Z10 ([78.213.170.242]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482e28f5e2fsm10900940f8f.33.2026.08.27.16.17.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 16:17:09 -0700 (PDT) From: Maurizio Casciano To: Hans de Goede Cc: Ilpo Jarvinen , Dmitry Torokhov , platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v2 2/3] platform/x86: x86-android-tablets: Add Yoga Book TS3A227E Date: Fri, 28 Aug 2026 01:16:59 +0200 Message-ID: <1730abf78a36de8e0f0dcf754dd2111da8926223.1787872237.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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:39:06 2026 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) (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 064DE36B92B for ; Thu, 27 Aug 2026 23:17:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787872635; cv=none; b=k+7IlLjMQQQfR0TLV1CCT9WXA3bI/HZQpqyUYNCzizFBiK5kFxTT8Zsb6G52qczbcpzgJ0u6Czgglnl38K1pjlOqGIoOzYExMoQl3nfvGEb7oEMXZFmwv3Av6i7BCY8PBW50y4sk9TTmEUz0CaExVsJaAlG0TOdQw5K4Z3soVE8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787872635; c=relaxed/simple; bh=NzuVq/w7C8F8yq8Sk9Lb0kpmuAUTsBd2XPTp9Yy9qLQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LRZ6WtHVRyeMS54EHsYqUsqWoztjiVhXtslCGHpQ5oIYSjkllR2rgXhr2bOhItxUYs6bFb/wC0U8F2ZxItJl64g0dCvcUxO06NX4+gn1QtL+tA1UbBKeGBTZehyPX8CK8E4+KSiWyEuXOHMcA722V1NUC7kiiAqQE0ghs6WLCz4= 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=lzWQWYFy; arc=none smtp.client-ip=209.85.221.50 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="lzWQWYFy" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-47db714766aso1141228f8f.0 for ; Thu, 27 Aug 2026 16:17:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787872632; x=1788477432; 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=lzWQWYFyafSOGUJDdudwCrmKw7uRulfi8vWiJWIBKI5x9Rn7XCEJUGGbQjXi7Cce4G I8EaSf0OHB0ArAk6nb2O8lfxdLMk9+A7gRUc2YCzzXAwQNMk5SOgW94vDqNlbZNXRE/L D5niHAJnD29K3UwUe6qpiRC/owgzjWNpZwC+te5IQsLHOkzIfZxd7+yD9v8n3KkdL7bm EYIPXBY5Kwfc7hd0rcrxEdmkfbGhoKOllFJ+tglgPnnVDrv+BU2d0oidBpwPuDHMJhcW ddyorgKT4HyXKy/VKmUWB+zdp5a8nYzn6d/VBHG3YEJZRi4uors8WCxMipkhtq8n13EB Fbvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787872632; x=1788477432; 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=qV5sZJGE5cUQPtPv4eXzWny5Gj6Hf5wDlmH9Sw3QYKMFbi3tAyYGEExKX0I8DjpuLJ jrlk7LDCnLbzZy3Rtpnfzpj28nojbHxKBLYvyiqnIlkO47Q3n9krZ7FZ2NHbkZ1E38hv gnFE86sCdELN0W7vDYzLkyv9aeK0kI/np25T8A3bQJH90uvX86cPflTO4Zr1hythry3/ 99NDtnVZWOTxzqni4EGXlYT8ZlftcndlV4mLJyzeh5NojzurXQ6QwN0yll8/8lbCQcGF ngitZh3fDl1/eHK+72lP/DrOQcQu/jWDM/3G1l06+PA38/iqMdYY4Q/ai9IEajwfoGrr ZLgQ== X-Forwarded-Encrypted: i=1; AHgh+RrdjtD8iJzwJ07dN63CrnLPcDyTT925WpPNSirbzn71600YtJAmTVZHG1jmWfcRMnVD1qe9ck2wStxhW6M=@vger.kernel.org X-Gm-Message-State: AFuF++l077ZqaYZ6Wcg9bNz7O71Nupfcaqy+hfl85BLLsuQPAQYAYh0u zcs0t2VI2xroN+o5LAhUClr777tyzAjfoP4Fm9L7NdMhbCVX7nWXFRkg X-Gm-Gg: AR+sD11rQmGzyElvCeorRfaMK5P2jX7ZSufJsLC8CPh8rVEWKoPHtjly2CB4LQi1FJB zYEPrlo7sFdG/KaYp1tjrCeXGji7JlYVCsSjc1vDy2cw7+NDKOwWwmAQPDKU9Uv9dzloR9JgKbo ueGatuBuNIIsWHbjZ/rvYHGj0nfRj23fTf+Ac7CjlMH1Pf5R4RM+bmodZmTL0XhGE0ESAfvFnwz pmzKCfucm7ehjhU3Shf2xOpBv7hLL7r7rF2VfB3Dekls14jim4Pol511e3g6+NHT3fsOfwoGn7H VwFdpemT6QpJyzBzbXLPZ/JVEAf7hd6JJQno85u5VvjBpbxIXL5b/Z8ZQ4feG0aGcqvMG5Sl/Tu 9egQiT0HVlg0T0Hx2W+PKiAXmX7IAv/bRo0NjzvA5mBTnLZvA39Ut6A7FQjQKK7rqQpO1vvCndD Pjtsx5cuK2H/hk2lQLvzQqKZgMHl+d8NuXewcj2JstMvD+9CdOBELEsX5ET6ecoeD7KQyMjTaKI sRwNV9eKs7rMc3uFJiHwjYCza3rZ+Jev5vF4vh6oNkN X-Received: by 2002:a05:600c:498a:b0:499:b81d:f580 with SMTP id 5b1f17b1804b1-49b0dea670dmr88417215e9.2.1787872632069; Thu, 27 Aug 2026 16:17:12 -0700 (PDT) Received: from 1Z10 ([78.213.170.242]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482e28f5e2fsm10900940f8f.33.2026.08.27.16.17.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 16:17:11 -0700 (PDT) From: Maurizio Casciano To: Hans de Goede Cc: Ilpo Jarvinen , Dmitry Torokhov , platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v2 3/3] platform/x86: x86-android-tablets: Add Yoga Book audio GPIOs Date: Fri, 28 Aug 2026 01:17:00 +0200 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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