From nobody Fri Jun 12 00:47:37 2026 Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.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 ABCD5378812 for ; Thu, 11 Jun 2026 08:29:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781166591; cv=none; b=MODfmOKm9T9bauAHMfzv8fGKBRglEAv8ssx6AoT7Ub6t2oO1MAZCgQZdWeFl6eGJF92F7sMDXl8AY9LUlwsSl8sjAAifUpioENWhguK/foAYFTSl+XbhwVo3DyUT7Y1sJwQzPnmxpnGxl10sfL7CUqFFU1M0OX3d5G9v2eK5OFU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781166591; c=relaxed/simple; bh=eOXUiRTU62DT8pBaqCNMtgFsXYo1Mq3DTgIfeZj/3VU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NG+yEmeTHo09pSo1tuJDXMTYqAdPKog0BgO3WcqWMc8zUqagvvkTWVNgELyWD/bdkkymWI5ud7Pwjjl/TcLu9N/mmsnObH1O1byFGZLpZyaTA6g5FGoE7qwKDkVT37G1pghk9YHjlXvUKGPwT1WLO+tthJyfwOAShsVsooEZ3Bs= 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=M5Z0jvzE; arc=none smtp.client-ip=209.85.218.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="M5Z0jvzE" Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-bec450b950dso1138889866b.2 for ; Thu, 11 Jun 2026 01:29:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781166588; x=1781771388; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=VmQBDUKUi8edzX/XCrjva8dOSDu8H7sDICZRwwYP1I8=; b=M5Z0jvzE0ewJn4gkTo6kLtmSgk47oUCD+UARW6z+VuJ72zPlGiYsAgud0ak3W/GYzx Sz4o5yKZM5/tYmPYucdeG0vtcfJUp3PhZQNFK6Edg8DldLsu1HyF5eZB64m2gXcupvQH ym4nEt0sM3LgDI6IIshYwsAZmf7eP0/hAD6WChIh1UYldVwX3STlsIaR8Hul6pX6y0/x rAefGBvcycD5PyP8HgoSU5daZ5ZvgDqKTp0au+WvQxuTahBbCesHFE4T10c/ULNHMr6F Hg715BrqjARf2lEgDYJoc8Fu87VK4XpD4vPMbFsS7fAulLKIwXK1uFdxftiLBaJP5Ty3 WRFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781166588; x=1781771388; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=VmQBDUKUi8edzX/XCrjva8dOSDu8H7sDICZRwwYP1I8=; b=q7Rgm1JVw96FCXvcBszgvcBZRu3vpNv2UI5DznEeF2J6Tcs8zaJhik4mUB0PrZtm3Y X+5DBGuF3OV/lzLJ5MMLZ5Cm/t4tYRfC5SvL90ndRrrVljre3YnL21kOiE/YoZrFpbR3 hUJzKNRujQK3vqU9QnZL229fd90sXcsxld3Y/oSfTP/pDf6g0pTxS6UbIjm6eN6XoXrq ZIVl/Hf53/IdsxYnMjUv7M4CGBmThDjU7SYVeCPGIE84xJcYjI/sSIlkz8kplFHx8mGr bMZtdcDJ2gBkptHtAI5R4mUVbmLcKGPTLhK/30R8uWtA1+uL5G4+OaO5wsgqVEhFXze4 tZsQ== X-Forwarded-Encrypted: i=1; AFNElJ/dDNQfYTp1NeXZTiq3LpA3jyv6NX5jRGkC3EVbDF8bSsw+y0hd1kFBw/bozX72Ut5ixJjUActYDKWbphw=@vger.kernel.org X-Gm-Message-State: AOJu0Yyw2oPKjoPw1g7PR1CxuXX4QvxMowlb0YBsM7PJ3JSHWpyjhhhZ FFVpi06n5T5lQpWGjUecy3xn63jclCQYWXpl3OMBgs3Sj9YYXkrpmZo6 X-Gm-Gg: Acq92OFz1lPJEX3LUq5B1slGQ63IsSTXzfZ/eqtYrSn9cOSzm40kPYciDz7PglSdZDe gPP7jRljLbAoeaYLDdkgIMIFNyabE5Zs8e7BvapCuguZEDLJjbQpgiqiz8yBT0k/XiHzDelpm3V LUPGDuJi2BDkDisxpeRAIsmTyqcclnZinEjlR05WLxeVZyeP0qpn4vP3WkXA6wgFYH49sWY2ZbE 7nv/9VOcJS+mNjUUzpvhTkXsa2o+cNZd1WVr1pn/IiAjL3mSqZsaosCFUliqI3nquGCC+A1M27U NyQ0jJzSGVRBbfrd8cfyFeLAhRsbsHsP087FKrnOjhgGDlwo50ZQM9sav5w04j1noikYfVSw1Kg kQvfL+rUf7kDisFHRDaDI6RmUF3pZqfilnfPgOoFbKG7mwW7rXkbaiZzzknzkxbsxlVYNr4IiEp WfvrnU77GeiHHXyUTV4NW6ouTNkz22 X-Received: by 2002:a17:907:72c5:b0:bfa:e7bb:f059 with SMTP id a640c23a62f3a-bfc872e1864mr83710166b.38.1781166587795; Thu, 11 Jun 2026 01:29:47 -0700 (PDT) Received: from [127.0.1.1] ([46.251.53.180]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfcb60b771bsm27347866b.54.2026.06.11.01.29.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Jun 2026 01:29:47 -0700 (PDT) From: Yauhen Kharuzhy Date: Thu, 11 Jun 2026 11:29:35 +0300 Subject: [PATCH v3 1/2] platform: x86-android-tablets: lenovo: Add Yoga Book haptics entries Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260611-x86-tablets-yogabook-v3-1-de407672e4df@gmail.com> References: <20260611-x86-tablets-yogabook-v3-0-de407672e4df@gmail.com> In-Reply-To: <20260611-x86-tablets-yogabook-v3-0-de407672e4df@gmail.com> To: Hans de Goede , =?utf-8?q?Ilpo_J=C3=A4rvinen?= Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Yauhen Kharuzhy X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781166586; l=4628; i=jekhor@gmail.com; s=20260301; h=from:subject:message-id; bh=eOXUiRTU62DT8pBaqCNMtgFsXYo1Mq3DTgIfeZj/3VU=; b=gDj93c7t2OqR53+FQYzQ/LZ75vY8UAcvLzJMfq9yerw85y76lJlVyRloRlCzyrli+THWtR3wn wKzMbQj9tc4B34QGvTzOhTifkaV87bZmk88xRnRsCNMTLi//zNFkLwF X-Developer-Key: i=jekhor@gmail.com; a=ed25519; pk=C/csaZJs7UBNDgeJcUAmPu4ntqNeaZ3BKfBQiH8tuGc= Add drv2604l i2c_board_info for drv2604l haptics drivers present in Lenovo Yoga Book YB1-X90 and YB1-X91. Set properties required for device initialization and self-calibration. Signed-off-by: Yauhen Kharuzhy --- drivers/platform/x86/x86-android-tablets/lenovo.c | 94 +++++++++++++++++++= ++++ 1 file changed, 94 insertions(+) diff --git a/drivers/platform/x86/x86-android-tablets/lenovo.c b/drivers/pl= atform/x86/x86-android-tablets/lenovo.c index 8d825e0b4661..81453217fec5 100644 --- a/drivers/platform/x86/x86-android-tablets/lenovo.c +++ b/drivers/platform/x86/x86-android-tablets/lenovo.c @@ -10,6 +10,8 @@ =20 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt =20 +#include +#include #include #include #include @@ -114,6 +116,32 @@ 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_x9x_drv2604l_0_props[] =3D { + PROPERTY_ENTRY_U32("vib-rated-mv", 1500), + PROPERTY_ENTRY_U32("vib-overdrive-mv", 2100), + PROPERTY_ENTRY_U32("mode", 0), /* LRA */ + PROPERTY_ENTRY_U32("library-sel", 0), /* DRV260X_LIB_EMPTY */ + PROPERTY_ENTRY_GPIO("enable-gpios", &cherryview_gpiochip_nodes[0], 79, GP= IO_ACTIVE_HIGH), + {} +}; + +static const struct software_node lenovo_yb1_x9x_drv2604l_0_node =3D { + .properties =3D lenovo_yb1_x9x_drv2604l_0_props, +}; + +static const struct property_entry lenovo_yb1_x9x_drv2604l_1_props[] =3D { + PROPERTY_ENTRY_U32("vib-rated-mv", 1500), + PROPERTY_ENTRY_U32("vib-overdrive-mv", 2100), + PROPERTY_ENTRY_U32("mode", 0), /* LRA */ + PROPERTY_ENTRY_U32("library-sel", 0), /* DRV260X_LIB_EMPTY */ + PROPERTY_ENTRY_GPIO("enable-gpios", &cherryview_gpiochip_nodes[1], 47, GP= IO_ACTIVE_HIGH), + {} +}; + +static const struct software_node lenovo_yb1_x9x_drv2604l_1_node =3D { + .properties =3D lenovo_yb1_x9x_drv2604l_1_props, +}; + static const struct x86_i2c_client_info lenovo_yb1_x90_i2c_clients[] __ini= tconst =3D { { /* BQ27542 fuel-gauge */ @@ -159,6 +187,24 @@ static const struct x86_i2c_client_info lenovo_yb1_x90= _i2c_clients[] __initconst .polarity =3D ACPI_ACTIVE_LOW, .con_id =3D "wacom_irq", }, + }, { + /* Keyboard haptics driver */ + .board_info =3D { + .type =3D "drv2604l", + .addr =3D 0x5a, + .dev_name =3D "drv2604l.0", + .swnode =3D &lenovo_yb1_x9x_drv2604l_0_node, + }, + .adapter_path =3D "\\_SB_.PCI0.I2C1", + }, { + /* Keyboard haptics driver */ + .board_info =3D { + .type =3D "drv2604l", + .addr =3D 0x5a, + .dev_name =3D "drv2604l.1", + .swnode =3D &lenovo_yb1_x9x_drv2604l_1_node, + }, + .adapter_path =3D "\\_SB_.PCI0.I2C4", }, { /* LP8557 Backlight controller */ .board_info =3D { @@ -283,9 +329,57 @@ static const struct x86_i2c_client_info lenovo_yogaboo= k_x91_i2c_clients[] __init }, }; =20 +#define YB1_X91_DRV2604L_0_DEVICE "i2c-DRV2604:00" +#define YB1_X91_DRV2604L_1_DEVICE "i2c-DRV2604:01" + +static int __init lenovo_yb1_x91_init(struct device *dev) +{ + int ret =3D 0; + + struct device *drv2604l_0_dev __free(put_device) =3D + bus_find_device_by_name(&i2c_bus_type, NULL, + YB1_X91_DRV2604L_0_DEVICE); + if (!drv2604l_0_dev) { + pr_err("error: cannot find %s device\n", + YB1_X91_DRV2604L_0_DEVICE); + return -ENODEV; + } + + ret =3D device_create_managed_software_node(drv2604l_0_dev, + lenovo_yb1_x9x_drv2604l_0_props, + NULL); + if (ret) { + pr_err("error: cannot create software node for %s: %d\n", + YB1_X91_DRV2604L_0_DEVICE, ret); + return ret; + } + + struct device *drv2604l_1_dev __free(put_device) =3D + bus_find_device_by_name(&i2c_bus_type, NULL, + YB1_X91_DRV2604L_1_DEVICE); + if (!drv2604l_1_dev) { + pr_err("error: cannot find %s device\n", + YB1_X91_DRV2604L_1_DEVICE); + return -ENODEV; + } + + ret =3D device_create_managed_software_node(drv2604l_1_dev, + lenovo_yb1_x9x_drv2604l_1_props, + NULL); + if (ret) { + pr_err("error: cannot create software node for %s\n", + YB1_X91_DRV2604L_1_DEVICE); + return ret; + } + + return 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), + .gpiochip_type =3D X86_GPIOCHIP_CHERRYVIEW, + .init =3D lenovo_yb1_x91_init, }; =20 /* Lenovo Yoga Tablet 2 1050F/L's Android factory image has everything har= dcoded */ --=20 2.53.0 From nobody Fri Jun 12 00:47:37 2026 Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.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 514413793BB for ; Thu, 11 Jun 2026 08:29:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781166592; cv=none; b=T630tYD2nS0TtWQY1yTZWguR5Q/8tprDXsYnd9UQ7RobkfoF527ux5HC+CKFA/9hGh/DrDlgYuVuSikrduP20LGYRN3cZL/6NtYhMtn/BqtAtGWuerAommd7TUxgiQlatMYj8JZXDQe8VgekTSsdi/M9Uc442IUVf/pqlD6t2KY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781166592; c=relaxed/simple; bh=I0wm8jkWLmJkq/OxmycFrxqYsN2T26pj7RqMV2E9plA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mC8GZrW8oP1+jKiTq9NNGgxTkl5cpNr/pcQ87fATibSKRYjumj5J9gmZjnSBNTkx38fdGoK4vx+CRqSL69u6JtGM6SQnj/jH+yuwtj9uWnspiewXRDkHSotVTogycUzHySiaqZknHFvZlOWPqPAG16M8xcM87646JNxx4+Bl48Q= 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=TShwIwdA; arc=none smtp.client-ip=209.85.208.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="TShwIwdA" Received: by mail-ed1-f49.google.com with SMTP id 4fb4d7f45d1cf-68d233bf083so11034405a12.1 for ; Thu, 11 Jun 2026 01:29:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781166589; x=1781771389; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=VICK7QWrxISVWmsMjJox+vSHYRFkfKTyecNbIWQbZfM=; b=TShwIwdAJoAkn52v5vyGs1QCrMlL//XsVbOK65NtNSFlKs4QMz9Z+P7Xn2YrNHU7Oh +g/Wg8owKkJ65NjW0FOBRE9iapaFcE3ZQbDHHudOxH+y2BXOSH1+tR2q7v3NC/OtWI48 R7IQJbnngwl83qTMgqHB/AhGRL82tY41nksoWdxrzmFmMoAWX8Ym0lb4L/dBh77MtQ9u 9OfUzAx4CczRUpD47kmV3EYlXGFd+CacJdiKCcRnQ3/qRU7oxW2NtEhOXBH1qT06ndek qnq41rm5YBQ3v80+BhjGSh/hncEanzVOtnuZZmpD1caE6gMVcCPD7F1Q7KC3O/BMDFk6 IgrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781166589; x=1781771389; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=VICK7QWrxISVWmsMjJox+vSHYRFkfKTyecNbIWQbZfM=; b=lnJyupHKSJra0jKTg/an+gxvKzWOskkQ5GNkD2bdeZwk9Cgwn4laNHu8nTOuRnSeV2 ZJLLGWlMml8IuietfsQNcG2hxdFrGJIDsvjeqJ68GPv4u4P8igQXeWeR8QA/IsfkPWWq z4P2QEi4QI2KcIns0pl9JuoEaoCgSnDXtDPk1/r7SMYTOX1Nwjw8ZH/nRcTMJhul0SUi COMeiF5ynlzQBPY/4Jq8TE/wUdlWhT4IgTdu+dW8Narc6dUg1iRJu6UZtnougwfbGn83 /jdvDI8rQ9MXCjDqI7mgQThdvytgLXRXNDDzoT3M7izv7nPzQSIMK6ud2mHi9o/LLaSS SLDA== X-Forwarded-Encrypted: i=1; AFNElJ+Aa3raEL7j/3I2DQVj/RBUAhoNEcLErBBqYiqMEcuoAf7J+1DuQHB6YL9BDOHoagXsQQPW71+BGOijjok=@vger.kernel.org X-Gm-Message-State: AOJu0YwCw0X6DFgUZUQXCZ6K+YE7oM+6HFkIhssrR3z8Cj00sKL76ehI 3s6t5e13O8zVh0rgm+S1HO1FGczTvnmJ8yD7OZOW0bsAcAqgEyT5p81w X-Gm-Gg: Acq92OHReabIP5jw3MD8aOYKnTmhxB3LyubAfaVmCZF/eG4oQkFZCReCP/WCw7aeEaS QO4kIoxo801g0uWVc+Kwz23FuA0P+cUJW6o5aVhF6n10vbk6+qm5Tl9lE2B87qfuqEkQfHTLcrZ Vs0qK/6fhwGSB90RDESBUgo0a48+QWc5S/bnO2FQs2jmL5Dub89nZXppgggqgptPtJ8aLJq7awp HCFkreWVVK1e9HlJEP6q+fWH1LZfbnwXSgmwQ/hyZDhyTgUrh/tYYGqtO5jdnBYhIScRdFBct+L se1+4GZ2AZ2ssGGTIQ586lwlQOdnFx84Nw1td7U3yRs48UlPpKutzGMT1EnsgsO+q7qtbslYWCi CHx1jeFBJaXJ8sDeTzuyebw8twrejyWWKqx4361Y2OHF/xIixDTHMaXCGbfQHSWM0D4giJXVTMh jE5WXEy1/JyzpsVx0O83Qc6a4xoPMJ X-Received: by 2002:a17:907:3f20:b0:bee:ed4:ea17 with SMTP id a640c23a62f3a-bfc86905d78mr74535566b.26.1781166588547; Thu, 11 Jun 2026 01:29:48 -0700 (PDT) Received: from [127.0.1.1] ([46.251.53.180]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfcb60b771bsm27347866b.54.2026.06.11.01.29.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Jun 2026 01:29:48 -0700 (PDT) From: Yauhen Kharuzhy Date: Thu, 11 Jun 2026 11:29:36 +0300 Subject: [PATCH v3 2/2] platform: x86-android-tablets: lenovo: Add Yoga Book YB1 sound card info Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260611-x86-tablets-yogabook-v3-2-de407672e4df@gmail.com> References: <20260611-x86-tablets-yogabook-v3-0-de407672e4df@gmail.com> In-Reply-To: <20260611-x86-tablets-yogabook-v3-0-de407672e4df@gmail.com> To: Hans de Goede , =?utf-8?q?Ilpo_J=C3=A4rvinen?= Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Yauhen Kharuzhy X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781166586; l=6687; i=jekhor@gmail.com; s=20260301; h=from:subject:message-id; bh=I0wm8jkWLmJkq/OxmycFrxqYsN2T26pj7RqMV2E9plA=; b=kIN321H5QVPz8abfPPzh0KAkHSoz2XN5UFMVXKw2gZTg16BPK1JmDbiDR6R3qe9EU+59oxOT9 qMDjC08HpgCCf+7fzwVanZwBevvYmT5tPKm+QxmJo1yNWetEuLPDuib X-Developer-Key: i=jekhor@gmail.com; a=ed25519; pk=C/csaZJs7UBNDgeJcUAmPu4ntqNeaZ3BKfBQiH8tuGc= Define I2C devices, their properties, and GPIO lookup tables for the Yoga Book YB1-X90 sound codec and jack detection IC. The YB1-X90 doesn't have a valid codec entry in the DSDT, while the YB1-X91 does. The YB1-X91 includes additional information in the ACPI _CRS method regarding the jack detection IC connection, but it is also defined in this driver to simplify the unification of the sound driver for both tablet versions. Signed-off-by: Yauhen Kharuzhy --- drivers/platform/x86/x86-android-tablets/lenovo.c | 130 ++++++++++++++++++= ++++ 1 file changed, 130 insertions(+) diff --git a/drivers/platform/x86/x86-android-tablets/lenovo.c b/drivers/pl= atform/x86/x86-android-tablets/lenovo.c index 81453217fec5..95ed201c5cb0 100644 --- a/drivers/platform/x86/x86-android-tablets/lenovo.c +++ b/drivers/platform/x86/x86-android-tablets/lenovo.c @@ -142,6 +142,49 @@ static const struct software_node lenovo_yb1_x9x_drv26= 04l_1_node =3D { .properties =3D lenovo_yb1_x9x_drv2604l_1_props, }; =20 +static const struct software_node lenovo_yb1_rt5677_gpiochip_node =3D { + .name =3D "rt5677", +}; + +/* + * Certain properties are used by the cht_yogabook sound platform driver. = The sound + * configuration is defined as the RT5677 ACPI entry on YB1-X91; hence, th= e same + * approach is utilized for YB1-X90 as well. + */ +static const struct property_entry lenovo_yb1_x9x_rt5677_props[] =3D { + PROPERTY_ENTRY_BOOL("realtek,lout1-differential"), + PROPERTY_ENTRY_BOOL("realtek,lout2-differential"), + PROPERTY_ENTRY_BOOL("realtek,lout3-differential"), + PROPERTY_ENTRY_BOOL("realtek,in1-differential"), + PROPERTY_ENTRY_BOOL("realtek,in2-differential"), + PROPERTY_ENTRY_GPIO("realtek,reset-gpios", + &cherryview_gpiochip_nodes[3], 25, GPIO_ACTIVE_LOW), + PROPERTY_ENTRY_GPIO("realtek,pow-ldo2-gpios", + &cherryview_gpiochip_nodes[3], 18, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("speaker-enable-gpios", + &cherryview_gpiochip_nodes[3], 48, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("speaker-enable2-gpios", + &lenovo_yb1_rt5677_gpiochip_node, 2, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("headphone-enable-gpios", + &lenovo_yb1_rt5677_gpiochip_node, 4, GPIO_ACTIVE_HIGH), + {} +}; + +static const struct software_node lenovo_yb1_x90_rt5677_node =3D { + .properties =3D lenovo_yb1_x9x_rt5677_props, +}; + +static const struct property_entry lenovo_yb1_ts3a227e_props[] =3D { + /* MICBIAS is 2.5V */ + PROPERTY_ENTRY_U32("ti,micbias", 4), + PROPERTY_ENTRY_U32("ti,debounce-insertion-ms", 2000), + {} +}; + +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 */ @@ -231,6 +274,40 @@ static const struct x86_i2c_client_info lenovo_yb1_x90= _i2c_clients[] __initconst .polarity =3D ACPI_ACTIVE_LOW, .con_id =3D "hideep_ts_irq", }, + }, { + /* Audio codec */ + .board_info =3D { + .type =3D "rt5677", + .addr =3D 0x2c, + .dev_name =3D "rt5677", + .swnode =3D &lenovo_yb1_x90_rt5677_node, + }, + .adapter_path =3D "\\_SB_.PCI0.I2C1", + .irq_data =3D { + .type =3D X86_ACPI_IRQ_TYPE_GPIOINT, + .chip =3D "INT33FF:00", + .index =3D 91, + .trigger =3D ACPI_EDGE_SENSITIVE, + .polarity =3D ACPI_ACTIVE_LOW, + .con_id =3D "rt5677_irq", + }, + }, { + /* Audio jack detection IC */ + .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 @@ -284,6 +361,11 @@ static const struct software_node *lenovo_yb1_x90_lid_= swnodes[] =3D { NULL }; =20 +static const struct software_node *lenovo_yb1_x90_swnodes[] =3D { + &lenovo_yb1_rt5677_gpiochip_node, + NULL +}; + static int __init lenovo_yb1_x90_init(struct device *dev) { /* Enable the regulators used by the touchscreens */ @@ -311,6 +393,7 @@ const struct x86_dev_info lenovo_yogabook_x90_info __in= itconst =3D { .serdev_info =3D lenovo_yb1_x90_serdevs, .serdev_count =3D ARRAY_SIZE(lenovo_yb1_x90_serdevs), .gpio_button_swnodes =3D lenovo_yb1_x90_lid_swnodes, + .swnode_group =3D lenovo_yb1_x90_swnodes, .gpiochip_type =3D X86_GPIOCHIP_CHERRYVIEW, .init =3D lenovo_yb1_x90_init, }; @@ -327,10 +410,33 @@ static const struct x86_i2c_client_info lenovo_yogabo= ok_x91_i2c_clients[] __init }, .adapter_path =3D "\\_SB_.PCI0.I2C1", }, + { + /* Audio jack detection IC. Its configuration (I2C address and + * IRQ) is defined as additional resources in RTEK (10EC5677) + * ACPI node but define them here to simplify handling in + * the driver + */ + .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 #define YB1_X91_DRV2604L_0_DEVICE "i2c-DRV2604:00" #define YB1_X91_DRV2604L_1_DEVICE "i2c-DRV2604:01" +#define YB1_X91_RT5677_DEVICE "i2c-10EC5677:00" =20 static int __init lenovo_yb1_x91_init(struct device *dev) { @@ -372,12 +478,36 @@ static int __init lenovo_yb1_x91_init(struct device *= dev) return ret; } =20 + struct device *rt5677_dev __free(put_device) =3D + bus_find_device_by_name(&i2c_bus_type, NULL, + YB1_X91_RT5677_DEVICE); + if (!rt5677_dev) { + pr_err("error: cannot find %s device\n", + YB1_X91_RT5677_DEVICE); + return -ENODEV; + } + + ret =3D device_create_managed_software_node(rt5677_dev, + lenovo_yb1_x9x_rt5677_props, + NULL); + if (ret) { + pr_err("error: cannot create software node for %s\n", + YB1_X91_RT5677_DEVICE); + return ret; + } + return 0; } =20 +static const struct software_node *lenovo_yb1_x91_swnodes[] =3D { + &lenovo_yb1_rt5677_gpiochip_node, + NULL +}; + 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, }; --=20 2.53.0