From nobody Mon Jun 22 15:43:55 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C97DCC433EF for ; Mon, 21 Mar 2022 19:11:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352486AbiCUTMj (ORCPT ); Mon, 21 Mar 2022 15:12:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39870 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352469AbiCUTMd (ORCPT ); Mon, 21 Mar 2022 15:12:33 -0400 Received: from mail-pf1-x434.google.com (mail-pf1-x434.google.com [IPv6:2607:f8b0:4864:20::434]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DBE5F16F049 for ; Mon, 21 Mar 2022 12:11:03 -0700 (PDT) Received: by mail-pf1-x434.google.com with SMTP id t2so16286661pfj.10 for ; Mon, 21 Mar 2022 12:11:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Y8xKsOKQoYHLByfOe51jB9Pdd/Kku28PTFesOqH+BHQ=; b=a/wUtTrzJZ88ZdS3AVoW24UHEU68v+xnSwdesJpUMBwCbIZfekHcio2TCKhij0nOpa OCjgj8Per1gAFGqZxA2+1s7a6nhUvF0BOqHNJseprvbjc82DetVtxab7DzbtCBgpfTHx pJjaI/x8xXG46eJozZgliPjtIlsw6f/Uzo58M= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Y8xKsOKQoYHLByfOe51jB9Pdd/Kku28PTFesOqH+BHQ=; b=BWCVF1qgA6dRDdrO+DV7znhzxARiv4xYvxa3F1ISX2tyw7KClabvfHPDoXtJZL2IfZ zRAJ7MBitYJTFrwVgMzPddFkMxZRGYD4kDf6ZeUUHyafKvX42NgROUr82y5ne9fwjqMX T1cDL0EjTVxJ/08YtHFunWgTXYoY+HH9030VYnGXLn7cFaQikHSOqv9BdxfwgKqT+jMH xs+RwpWcX5s19eZh9GK8g1pWgHyTwAnWw8Kp6YaWIeml+mMaA/p5pm2Ll/qvOxz+fICx sU15abEQSf0h498NLRIVSJpqDzJ5isqU9AcWzxyf84FodnUhAS1SItuoWcWyObJ+N+A0 atdg== X-Gm-Message-State: AOAM533I/XpHayLKSop2/zRgUT8ygISOg4G+yfGxw9qEkSwUwQkA1iWm 9Y/ydTQPUxGfh9M8eS1WLLzIUA== X-Google-Smtp-Source: ABdhPJzcynlfZI6q4Y8x/ntQYEEgl6MQIbVAzndxpP1vJNsgWD1rHv5EflpnTaA945avao1y2ykHVg== X-Received: by 2002:a65:6d0c:0:b0:382:a4b1:c93 with SMTP id bf12-20020a656d0c000000b00382a4b10c93mr2390953pgb.237.1647889863416; Mon, 21 Mar 2022 12:11:03 -0700 (PDT) Received: from smtp.gmail.com ([2620:15c:202:201:2ffa:f7a0:c7f5:8171]) by smtp.gmail.com with ESMTPSA id y14-20020a056a001c8e00b004fa829db45csm3384022pfw.218.2022.03.21.12.11.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Mar 2022 12:11:03 -0700 (PDT) From: Stephen Boyd To: Benson Leung Cc: linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Rob Herring , devicetree@vger.kernel.org, Guenter Roeck , Douglas Anderson , Craig Hesling , Tom Hughes , Alexandru M Stan , Tzung-Bi Shih , Matthias Kaehlcke Subject: [PATCH v4 1/3] dt-bindings: chrome: Add ChromeOS fingerprint binding Date: Mon, 21 Mar 2022 12:10:57 -0700 Message-Id: <20220321191100.1993-2-swboyd@chromium.org> X-Mailer: git-send-email 2.35.1.894.gb6a874cedc-goog In-Reply-To: <20220321191100.1993-1-swboyd@chromium.org> References: <20220321191100.1993-1-swboyd@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add a binding to describe the fingerprint processor found on Chromebooks with a fingerprint sensor. Previously we've been describing this with the google,cros-ec-spi binding but it lacks gpio and regulator control used during firmware flashing. Cc: Rob Herring Cc: Cc: Guenter Roeck Reviewed-by: Douglas Anderson Cc: Craig Hesling Cc: Tom Hughes Cc: Alexandru M Stan Cc: Tzung-Bi Shih Cc: Matthias Kaehlcke Signed-off-by: Stephen Boyd --- .../bindings/chrome/google,cros-ec-fp.yaml | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Documentation/devicetree/bindings/chrome/google,cros-ec= -fp.yaml diff --git a/Documentation/devicetree/bindings/chrome/google,cros-ec-fp.yam= l b/Documentation/devicetree/bindings/chrome/google,cros-ec-fp.yaml new file mode 100644 index 000000000000..b7fbaaa94d65 --- /dev/null +++ b/Documentation/devicetree/bindings/chrome/google,cros-ec-fp.yaml @@ -0,0 +1,66 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/chrome/google,cros-ec-fp.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: ChromeOS Embedded Fingerprint Controller + +description: + Google's ChromeOS embedded fingerprint controller is a device which + implements fingerprint functionality such as unlocking a Chromebook + without typing a password. + +maintainers: + - Tom Hughes + +properties: + compatible: + const: google,cros-ec-fp + + reg: + maxItems: 1 + + spi-max-frequency: + maximum: 3000000 + + interrupts: + maxItems: 1 + + reset-gpios: true + boot0-gpios: + maxItems: 1 + description: Assert for bootloader mode. + + vdd-supply: true + +required: + - compatible + - reg + - interrupts + - reset-gpios + - boot0-gpios + - vdd-supply + - spi-max-frequency + +additionalProperties: false + +examples: + - | + #include + #include + spi { + #address-cells =3D <0x1>; + #size-cells =3D <0x0>; + ec@0 { + compatible =3D "google,cros-ec-fp"; + reg =3D <0>; + interrupt-parent =3D <&gpio_controller>; + interrupts =3D <4 IRQ_TYPE_LEVEL_LOW>; + spi-max-frequency =3D <3000000>; + reset-gpios =3D <&gpio_controller 5 GPIO_ACTIVE_LOW>; + boot0-gpios =3D <&gpio_controller 10 GPIO_ACTIVE_HIGH>; + vdd-supply =3D <&pp3300_fp_mcu>; + }; + }; +... --=20 https://chromeos.dev From nobody Mon Jun 22 15:43:55 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EBEF7C433F5 for ; Mon, 21 Mar 2022 19:11:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352492AbiCUTMl (ORCPT ); Mon, 21 Mar 2022 15:12:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39872 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1351807AbiCUTMd (ORCPT ); Mon, 21 Mar 2022 15:12:33 -0400 Received: from mail-pg1-x532.google.com (mail-pg1-x532.google.com [IPv6:2607:f8b0:4864:20::532]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 067A316F050 for ; Mon, 21 Mar 2022 12:11:05 -0700 (PDT) Received: by mail-pg1-x532.google.com with SMTP id o13so10963435pgc.12 for ; Mon, 21 Mar 2022 12:11:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2S7ShVJAy626NONsIWJsSJwwvja+2+hPi/cA9JVaGwU=; b=JMQZL+JUW/xaIOLRzFSLEcIywoAUAsY8Aq/8MMUP9fftDpOAFp/Od63YzymBQUSdT3 n22HZYl5klKcsAHxTxTrqneEak2tOvU5t5ZaHGBuTBXl3QrR4cBekNm4chhO7g9+AkqV oewbc/4DhQbpvRaMT5oZMFBEka4PyQPQ01FEk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2S7ShVJAy626NONsIWJsSJwwvja+2+hPi/cA9JVaGwU=; b=VAZEFm3Mh7Nlk3VD93bUzbhJvEBzS+gbQshTEcD6o5lMFIWAfiqyruXeUp/gqSE/m4 gfMUkmiCorxunwcI+Q8CMAMCTAg1HT7THxQKnUQ9aZOJ5IJVgxJ1e1ZUpCxeC2K3UmGd F00WJ7Bp2q7A2ISk2v3TCezi8jpUJP7evTFocsLFNQIUg65S20ZnKWDBkONZdq8dXugs GNXciU9IOu1ZP7o7Vdhu37P8nTmj+eZEIYbh/zUgLrAkH9NXDLpowCfbWt8Qqej8GzIh dtOSRZ4OgcbRoDL/nYLreUkJmYFrmBzhfeuhPm5D81pVPkiAha/wiej705jelmBemaHb DJxw== X-Gm-Message-State: AOAM531A1MrIH3x+EToFDoDwwULDONsCX5zbI+HW816LxVjjrtC4Rxq1 MtwfOJ0fMqKU+zc0AbwnA0NKwQ== X-Google-Smtp-Source: ABdhPJwYrurevKmMK2GwtHliuAAWk+ENh/FntvetNgQnFy1BsgAoj7JXWTJdYoDQzHCFN+QXqI1vvA== X-Received: by 2002:a63:4d15:0:b0:37f:f622:fe0f with SMTP id a21-20020a634d15000000b0037ff622fe0fmr19084086pgb.68.1647889864572; Mon, 21 Mar 2022 12:11:04 -0700 (PDT) Received: from smtp.gmail.com ([2620:15c:202:201:2ffa:f7a0:c7f5:8171]) by smtp.gmail.com with ESMTPSA id y14-20020a056a001c8e00b004fa829db45csm3384022pfw.218.2022.03.21.12.11.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Mar 2022 12:11:04 -0700 (PDT) From: Stephen Boyd To: Benson Leung Cc: linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Guenter Roeck , Douglas Anderson , Craig Hesling , Tom Hughes , Alexandru M Stan , Tzung-Bi Shih , Matthias Kaehlcke Subject: [PATCH v4 2/3] platform/chrome: cros_ec_spi: Match cros-ec-fp compatible Date: Mon, 21 Mar 2022 12:10:58 -0700 Message-Id: <20220321191100.1993-3-swboyd@chromium.org> X-Mailer: git-send-email 2.35.1.894.gb6a874cedc-goog In-Reply-To: <20220321191100.1993-1-swboyd@chromium.org> References: <20220321191100.1993-1-swboyd@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add the fingerprint cros-ec compatible so that we can probe fingerprint devices using the cros-ec-fp binding. Cc: Guenter Roeck Reviewed-by: Douglas Anderson Cc: Craig Hesling Cc: Tom Hughes Cc: Alexandru M Stan Cc: Tzung-Bi Shih Reviewed-by: Matthias Kaehlcke Signed-off-by: Stephen Boyd --- drivers/platform/chrome/cros_ec_spi.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/platform/chrome/cros_ec_spi.c b/drivers/platform/chrom= e/cros_ec_spi.c index 14c4046fa04d..51b64b392c51 100644 --- a/drivers/platform/chrome/cros_ec_spi.c +++ b/drivers/platform/chrome/cros_ec_spi.c @@ -813,6 +813,7 @@ static SIMPLE_DEV_PM_OPS(cros_ec_spi_pm_ops, cros_ec_sp= i_suspend, cros_ec_spi_resume); =20 static const struct of_device_id cros_ec_spi_of_match[] =3D { + { .compatible =3D "google,cros-ec-fp", }, { .compatible =3D "google,cros-ec-spi", }, { /* sentinel */ }, }; --=20 https://chromeos.dev From nobody Mon Jun 22 15:43:55 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 33535C433F5 for ; Mon, 21 Mar 2022 19:11:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352511AbiCUTMp (ORCPT ); Mon, 21 Mar 2022 15:12:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39912 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352472AbiCUTMd (ORCPT ); Mon, 21 Mar 2022 15:12:33 -0400 Received: from mail-pl1-x62c.google.com (mail-pl1-x62c.google.com [IPv6:2607:f8b0:4864:20::62c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4EAB816F058 for ; Mon, 21 Mar 2022 12:11:06 -0700 (PDT) Received: by mail-pl1-x62c.google.com with SMTP id n18so13581140plg.5 for ; Mon, 21 Mar 2022 12:11:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Jo0rr8ZpSLV3qvfVz0KPry1nOi2K/nNJPkdeobJ874Y=; b=TlrFMgg0Iz4RdU9/zJvCJydtlUaEdm1Dx1GzEKfdz8n+/zMlFXjX3iTtDwPkf7cP96 7QCIH/fF850r6VxGxVb1fRE+A8Xw83UKvKdt/oes4mzJp7FLWFhFI61ijIXYIaevTyLb Iaet1vwqNWzuzAZlVTZK4jT4Ac6W74FdUo3Oo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Jo0rr8ZpSLV3qvfVz0KPry1nOi2K/nNJPkdeobJ874Y=; b=SIIvYjqkyyOM8Je13cwZO3hYkqaGRke6pQCGRumaoffuvnBSSvvkm2nEuR7w9+h/HN 0cwN2JIKhnPsoJZw2K+c9ZsgpM8oAk7sOtL23vwRQaDAe5dn5vE0EmzxjmarfQfVfnfs DOJ9OVkGlDv0XpGqb8iRpTTURNjqfW5AhFCGJot6/jGlOXYbwSHr5+BhW7d076rgXcrD 75M5PEA/OutPIMYd1CfSVDVHM6Tqjjyvi5GpVofJEZ6TZmXvFxgnEcAJOjEwavCDCiOi ojyCSGaNgji1KpGB3qwhZ3S9zUnX849QSyW4WBofpocv9+BdKL9xH7aSueyfLOhb3e1f MTiA== X-Gm-Message-State: AOAM533LVrz/Qvne39PBO9GvzcFqscAcV/m8G0Iwh2EdLxiH2fmcNO/v xvXlnFCTZF6bEy+o3Op1vQ9Czw== X-Google-Smtp-Source: ABdhPJyTTf34HH9ZLA3L9/IT5iokvHAhZVOENl+IMUqWV3x308aF5Ua1jvXeBcL0FB4/NG6tDowH+A== X-Received: by 2002:a17:903:11cc:b0:151:71e4:dadc with SMTP id q12-20020a17090311cc00b0015171e4dadcmr14030982plh.78.1647889865770; Mon, 21 Mar 2022 12:11:05 -0700 (PDT) Received: from smtp.gmail.com ([2620:15c:202:201:2ffa:f7a0:c7f5:8171]) by smtp.gmail.com with ESMTPSA id y14-20020a056a001c8e00b004fa829db45csm3384022pfw.218.2022.03.21.12.11.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Mar 2022 12:11:05 -0700 (PDT) From: Stephen Boyd To: Benson Leung Cc: linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Guenter Roeck , Douglas Anderson , Craig Hesling , Tom Hughes , Alexandru M Stan , Tzung-Bi Shih , Matthias Kaehlcke Subject: [PATCH v4 3/3] platform/chrome: cros_ec_spi: Boot fingerprint processor during probe Date: Mon, 21 Mar 2022 12:10:59 -0700 Message-Id: <20220321191100.1993-4-swboyd@chromium.org> X-Mailer: git-send-email 2.35.1.894.gb6a874cedc-goog In-Reply-To: <20220321191100.1993-1-swboyd@chromium.org> References: <20220321191100.1993-1-swboyd@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add gpio control to this driver so that the fingerprint device can be booted if the BIOS isn't doing it already. This eases bringup of new hardware as we don't have to wait for the BIOS to be ready, supports kexec where the GPIOs may not be configured by the previous boot stage, and is all around good hygiene because we control GPIOs for this device from the device driver. Cc: Guenter Roeck Cc: Douglas Anderson Cc: Craig Hesling Cc: Tom Hughes Cc: Alexandru M Stan Cc: Tzung-Bi Shih Reviewed-by: Matthias Kaehlcke Signed-off-by: Stephen Boyd --- drivers/platform/chrome/cros_ec_spi.c | 42 +++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/drivers/platform/chrome/cros_ec_spi.c b/drivers/platform/chrom= e/cros_ec_spi.c index 51b64b392c51..92518f90f86e 100644 --- a/drivers/platform/chrome/cros_ec_spi.c +++ b/drivers/platform/chrome/cros_ec_spi.c @@ -4,6 +4,7 @@ // Copyright (C) 2012 Google, Inc =20 #include +#include #include #include #include @@ -690,11 +691,13 @@ static int cros_ec_cmd_xfer_spi(struct cros_ec_device= *ec_dev, return cros_ec_xfer_high_pri(ec_dev, ec_msg, do_cros_ec_cmd_xfer_spi); } =20 -static void cros_ec_spi_dt_probe(struct cros_ec_spi *ec_spi, struct device= *dev) +static int cros_ec_spi_dt_probe(struct cros_ec_spi *ec_spi, struct device = *dev) { struct device_node *np =3D dev->of_node; u32 val; int ret; + struct gpio_desc *boot0; + struct gpio_desc *reset; =20 ret =3D of_property_read_u32(np, "google,cros-ec-spi-pre-delay", &val); if (!ret) @@ -703,6 +706,37 @@ static void cros_ec_spi_dt_probe(struct cros_ec_spi *e= c_spi, struct device *dev) ret =3D of_property_read_u32(np, "google,cros-ec-spi-msg-delay", &val); if (!ret) ec_spi->end_of_msg_delay =3D val; + + if (!of_device_is_compatible(np, "google,cros-ec-fp")) + return 0; + + boot0 =3D devm_gpiod_get(dev, "boot0", 0); + if (IS_ERR(boot0)) + return PTR_ERR(boot0); + + reset =3D devm_gpiod_get(dev, "reset", 0); + if (IS_ERR(reset)) + return PTR_ERR(reset); + + /* + * Take the FPMCU out of reset and wait for it to boot if it's in + * bootloader mode or held in reset. This isn't the normal flow because + * typically the BIOS has already powered on the device to avoid the + * multi-second delay waiting for the FPMCU to boot and be responsive. + */ + if (gpiod_get_value(boot0) || gpiod_get_value(reset)) { + /* Boot0 is sampled on reset deassertion */ + gpiod_set_value(boot0, 0); + gpiod_set_value(reset, 1); + usleep_range(1000, 2000); + gpiod_set_value(reset, 0); + + /* Wait for boot; there isn't a "boot done" signal */ + dev_info(dev, "Waiting for FPMCU to boot\n"); + msleep(2000); + } + + return 0; } =20 static void cros_ec_spi_high_pri_release(void *worker) @@ -754,8 +788,10 @@ static int cros_ec_spi_probe(struct spi_device *spi) if (!ec_dev) return -ENOMEM; =20 - /* Check for any DT properties */ - cros_ec_spi_dt_probe(ec_spi, dev); + /* Check for any DT properties and boot FPMCU if applicable */ + err =3D cros_ec_spi_dt_probe(ec_spi, dev); + if (err) + return err; =20 spi_set_drvdata(spi, ec_dev); ec_dev->dev =3D dev; --=20 https://chromeos.dev