From patchwork Tue Oct 10 17:20:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikita Kravets X-Patchwork-Id: 13415773 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 E2735CD8CAC for ; Tue, 10 Oct 2023 17:22:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234015AbjJJRWD (ORCPT ); Tue, 10 Oct 2023 13:22:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46784 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233970AbjJJRWC (ORCPT ); Tue, 10 Oct 2023 13:22:02 -0400 Received: from mail-lf1-x12c.google.com (mail-lf1-x12c.google.com [IPv6:2a00:1450:4864:20::12c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8D7BE8E for ; Tue, 10 Oct 2023 10:22:00 -0700 (PDT) Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-50433d8385cso7956149e87.0 for ; Tue, 10 Oct 2023 10:22:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696958518; x=1697563318; 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; bh=uKxtMXjcsXq1ad3+ROeY4NR6VvCZzHU/kFj4HlyMsXo=; b=IL7AChrQl8RISijZalosmXmR+xfO+ZArC/c+hk1dIf9b9xo+4KD6TuZ2YXeL92Jsv4 wnFGtm/PSYzaQ8p01FvBHkDks0qwl/jakYcF0asSNDs2teWK6u5NX0Wq+X+CHrteYMZK 26AHTGOnjnAsJWeDM0aFXrvyzTwcc9eqxyIamksm7Zt+u/VIXWQeU1tTxRW4j7KE8dPy cNzDnP3Sjv56NEumFsCEMJQU1DXReIebX+6DAgaMHN0c2z0Wiz42/YjPw2TPOdDdELOt 6Dz7F12rRKLawII2c9IoyZT9z4AHtUUOeDajScWk25GPaSWxhnWwLCDiza5FlF8uOqgm EdDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696958518; x=1697563318; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uKxtMXjcsXq1ad3+ROeY4NR6VvCZzHU/kFj4HlyMsXo=; b=TkYN27tEiCGzzy69ceRqgCTLoHpTdSSwgHhN6RprRMiHZLzZHx5oiuypNBcAJ3SFfJ UL0pGHNQvsXPr+K8tUp67qtesLruq8x43pbPcHOBaGUUoVCGr9yaBsFZhgg/HK9p7420 PK7bkt+egNxfkThBRxOQik693oFuiFn67ZR9UB6yNLK6hCqCdbWbIyzMzRcx9/PtfCsq nX0XbnnbCHynzWnnAYjOBHfIiTEAZ6yhVcGT7eHwmmxdwPbcjH3KbZE2R1X2bGzECo4y jQ/Tci5l0fO526aehNeTimiwbd8rzCsWs5aYDRP+E7DAS2MxPwJeiR9rY9AvS+MR5kTX L2qg== X-Gm-Message-State: AOJu0YxNVQkJ1XVIxl2FmBLQq4UxrojlmFCjEhwK58dghpef+Lq2/F+J HxPurYM7gq+KhEHbDqAXVk8fqxsH2uI= X-Google-Smtp-Source: AGHT+IGY8lYVGSuaAgm9cCu13jLiQB96eMAVf6E5y/PMXwvzlC8R67tPxy5PhtEpCf/OWDxOZBHwtw== X-Received: by 2002:ac2:4d87:0:b0:4fb:77d6:89c3 with SMTP id g7-20020ac24d87000000b004fb77d689c3mr14886248lfe.12.1696958518343; Tue, 10 Oct 2023 10:21:58 -0700 (PDT) Received: from localhost.localdomain ([81.177.126.138]) by smtp.gmail.com with ESMTPSA id y2-20020a197502000000b005041f004d33sm1881636lfe.90.2023.10.10.10.21.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Oct 2023 10:21:58 -0700 (PDT) From: Nikita Kravets To: platform-driver-x86@vger.kernel.org Cc: Hans de Goede , Nikita Kravets , Aakash Singh , Jose Angel Pastrana Subject: [PATCH 1/5] platform/x86: msi-ec: Register a platform driver Date: Tue, 10 Oct 2023 20:20:36 +0300 Message-ID: <20231010172037.611063-5-teackot@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231010172037.611063-3-teackot@gmail.com> References: <20231010172037.611063-3-teackot@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: platform-driver-x86@vger.kernel.org Register a platform driver for the future features. Cc: Aakash Singh Cc: Jose Angel Pastrana Signed-off-by: Nikita Kravets --- drivers/platform/x86/msi-ec.c | 44 +++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/drivers/platform/x86/msi-ec.c b/drivers/platform/x86/msi-ec.c index f26a3121092f..12c559c9eac4 100644 --- a/drivers/platform/x86/msi-ec.c +++ b/drivers/platform/x86/msi-ec.c @@ -818,6 +818,30 @@ static struct acpi_battery_hook battery_hook = { .name = MSI_EC_DRIVER_NAME, }; +/* + * Sysfs platform driver + */ + +static int msi_platform_probe(struct platform_device *pdev) +{ + return 0; +} + +static int msi_platform_remove(struct platform_device *pdev) +{ + return 0; +} + +static struct platform_device *msi_platform_device; + +static struct platform_driver msi_platform_driver = { + .driver = { + .name = MSI_EC_DRIVER_NAME, + }, + .probe = msi_platform_probe, + .remove = msi_platform_remove, +}; + /* * Module load/unload */ @@ -878,6 +902,23 @@ static int __init msi_ec_init(void) if (result < 0) return result; + result = platform_driver_register(&msi_platform_driver); + if (result < 0) + return result; + + msi_platform_device = platform_device_alloc(MSI_EC_DRIVER_NAME, -1); + if (msi_platform_device == NULL) { + platform_driver_unregister(&msi_platform_driver); + return -ENOMEM; + } + + result = platform_device_add(msi_platform_device); + if (result < 0) { + platform_device_del(msi_platform_device); + platform_driver_unregister(&msi_platform_driver); + return result; + } + battery_hook_register(&battery_hook); return 0; } @@ -885,6 +926,9 @@ static int __init msi_ec_init(void) static void __exit msi_ec_exit(void) { battery_hook_unregister(&battery_hook); + + platform_driver_unregister(&msi_platform_driver); + platform_device_del(msi_platform_device); } MODULE_LICENSE("GPL"); From patchwork Tue Oct 10 17:20:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikita Kravets X-Patchwork-Id: 13415774 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 786A9CD8CA9 for ; Tue, 10 Oct 2023 17:22:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233936AbjJJRWZ (ORCPT ); Tue, 10 Oct 2023 13:22:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52592 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232756AbjJJRWY (ORCPT ); Tue, 10 Oct 2023 13:22:24 -0400 Received: from mail-lj1-x231.google.com (mail-lj1-x231.google.com [IPv6:2a00:1450:4864:20::231]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7D34E94 for ; Tue, 10 Oct 2023 10:22:22 -0700 (PDT) Received: by mail-lj1-x231.google.com with SMTP id 38308e7fff4ca-2c124adf469so68250031fa.0 for ; Tue, 10 Oct 2023 10:22:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696958540; x=1697563340; 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; bh=LttAJoa3Sxh6ubGT0mh0natp5cd6jUzXflX3YVOLyz8=; b=gUraeNb7TZ7lMZIhzKT0uKExzlPWKW7okcgB7lEno16hLO2fWBde5Dl0dqTlWcfoBe NHfzn5/9Xz27LyZ8Q9tV4rMshy5i9MlU+3/puxMqv04sUyWm3UEVWtvj1G7zUcUllaRC pdkGuTJNotnrIhNLvlLzPm65e9FYSwf1rA9jiFFA5GajhaPhA56Nq/HR5hQtDgdH2a9N lc/0MMXKnyn9c6ndzx0S+HRk9zd8hKi/tBYpmgl5wSq6CgDZ6YcFID4pFqOShqFVKcxA +Fwpw8gdT4yt6nkqXujbx4N3xXtj/guCTLzjcl0JF7oEbvgztet7yS2xtQWy/rUSA8yl m48w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696958540; x=1697563340; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LttAJoa3Sxh6ubGT0mh0natp5cd6jUzXflX3YVOLyz8=; b=Z+xtv5/TFbUX+L5dgbh8hjc57BswZHaBT2aRRmaEtMmuwm50ahI5KS/mi3g4uBxeuV 7icvraTqs/hXxBj1TjJx5yzZ2g4KeN4tISdM71dgGYeoYHMn/Dvp6r8TDJKpgLVcXF+f k/cLAbtDrhjCGPbVkftUDZfGuQ3Tsg8hOzQCVEjpPYzBiEhBVu6xN1UomYjkh5zIw1a7 x2QF42c0ktTP364tHIMZIgQx3+olcDOQre+5VfAA8IV00+D7qRSLG2DlMbMUICTDqwwl xsWKMMmlk0BDkas7v+p+7jRPKAGqSp3XdXuO/a7JcE5lLo0sjbzUirLD0wcCIDq4tCK8 bOXg== X-Gm-Message-State: AOJu0YxvvceokiBu6xSVNXJHa4448CvJ1PkA3biV/Nu9MhWQqDm6HtLd hXbIsE5JCKyQMcE1lrZ9RBvWjvKLdkc= X-Google-Smtp-Source: AGHT+IHUiu6vwPjIIHrTriasMGGNJZz7ipN7DVW+19L7taw4Ue2gIU9/3uYwq8CGnpB46WIt1ecokg== X-Received: by 2002:a19:9153:0:b0:503:2089:d3b8 with SMTP id y19-20020a199153000000b005032089d3b8mr14539932lfj.8.1696958540375; Tue, 10 Oct 2023 10:22:20 -0700 (PDT) Received: from localhost.localdomain ([81.177.126.138]) by smtp.gmail.com with ESMTPSA id y2-20020a197502000000b005041f004d33sm1881636lfe.90.2023.10.10.10.22.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Oct 2023 10:22:19 -0700 (PDT) From: Nikita Kravets To: platform-driver-x86@vger.kernel.org Cc: Hans de Goede , Nikita Kravets , Aakash Singh , Jose Angel Pastrana Subject: [PATCH 2/5] platform/x86: msi-ec: Add fw version and release date attributes Date: Tue, 10 Oct 2023 20:20:38 +0300 Message-ID: <20231010172037.611063-7-teackot@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231010172037.611063-3-teackot@gmail.com> References: <20231010172037.611063-3-teackot@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: platform-driver-x86@vger.kernel.org Create a root attribute group and add the first platform device attributes: firmware version and firmware release date. Firmware version attribute uses an already present ec_get_firmware_version() function. Both features are present on all supported laptops. Cc: Aakash Singh Cc: Jose Angel Pastrana Signed-off-by: Nikita Kravets --- drivers/platform/x86/msi-ec.c | 67 ++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/drivers/platform/x86/msi-ec.c b/drivers/platform/x86/msi-ec.c index 12c559c9eac4..772b230fb47e 100644 --- a/drivers/platform/x86/msi-ec.c +++ b/drivers/platform/x86/msi-ec.c @@ -818,17 +818,82 @@ static struct acpi_battery_hook battery_hook = { .name = MSI_EC_DRIVER_NAME, }; +/* + * Sysfs platform device attributes + */ + +static ssize_t fw_version_show(struct device *device, + struct device_attribute *attr, char *buf) +{ + u8 rdata[MSI_EC_FW_VERSION_LENGTH + 1]; + int result; + + result = ec_get_firmware_version(rdata); + if (result < 0) + return result; + + return sysfs_emit(buf, "%s\n", rdata); +} + +static ssize_t fw_release_date_show(struct device *device, + struct device_attribute *attr, char *buf) +{ + u8 rdate[MSI_EC_FW_DATE_LENGTH + 1]; + u8 rtime[MSI_EC_FW_TIME_LENGTH + 1]; + int result; + int year, month, day, hour, minute, second; + + memset(rdate, 0, MSI_EC_FW_DATE_LENGTH + 1); + result = ec_read_seq(MSI_EC_FW_DATE_ADDRESS, + rdate, + MSI_EC_FW_DATE_LENGTH); + if (result < 0) + return result; + + result = sscanf(rdate, "%02d%02d%04d", &month, &day, &year); + if (result != 3) + return -EINVAL; + + memset(rtime, 0, MSI_EC_FW_TIME_LENGTH + 1); + result = ec_read_seq(MSI_EC_FW_TIME_ADDRESS, + rtime, + MSI_EC_FW_TIME_LENGTH); + if (result < 0) + return result; + + result = sscanf(rtime, "%02d:%02d:%02d", &hour, &minute, &second); + if (result != 3) + return -EINVAL; + + return sysfs_emit(buf, "%04d/%02d/%02d %02d:%02d:%02d\n", year, month, day, + hour, minute, second); +} + +static DEVICE_ATTR_RO(fw_version); +static DEVICE_ATTR_RO(fw_release_date); + +static struct attribute *msi_root_attrs[] = { + &dev_attr_fw_version.attr, + &dev_attr_fw_release_date.attr, + NULL +}; + +static struct attribute_group msi_root_group = { + .attrs = msi_root_attrs, +}; + /* * Sysfs platform driver */ static int msi_platform_probe(struct platform_device *pdev) { - return 0; + return sysfs_create_group(&pdev->dev.kobj, &msi_root_group); } static int msi_platform_remove(struct platform_device *pdev) { + sysfs_remove_group(&pdev->dev.kobj, &msi_root_group); return 0; } From patchwork Tue Oct 10 17:20:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikita Kravets X-Patchwork-Id: 13415775 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 70F15CD8CA9 for ; Tue, 10 Oct 2023 17:22:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232756AbjJJRWx (ORCPT ); Tue, 10 Oct 2023 13:22:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58844 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233484AbjJJRWw (ORCPT ); Tue, 10 Oct 2023 13:22:52 -0400 Received: from mail-lf1-x12e.google.com (mail-lf1-x12e.google.com [IPv6:2a00:1450:4864:20::12e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 86BBBA7 for ; Tue, 10 Oct 2023 10:22:49 -0700 (PDT) Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-50567477b29so7715184e87.3 for ; Tue, 10 Oct 2023 10:22:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696958567; x=1697563367; 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; bh=AuMZiwnPxp//oSdJI92Jz/jQPOBiUUP6G7MFH1mH3QM=; b=FfwqX2ZFSLngUaWn4p8zFnnITnYIwJ8C733cB5EzvX4Uz2klEZvzs31ybo2rnhV2Pj u2isbIh5vyXz1OMzUDt8gJNpnfJyac9IdOzn1MF2OUe8FiBX4bGO4CZGKNRFQX13ar2J fBnQ3BjMl1/GYSPtnbvsmvbKVBgMdufpBPYOP4d3RlXf3T3RoeU93qPYj35yUoP2WKtO 0qKRy84lLmTKTalbjTm/2vb/ftU/cNBokrFwr/4sSxU5Yddz+VWddK7AmqKGT2H3dmwX x4rT5vljDg+xaLiG2gdYVnkBsA1hyDztUAK5bkCj0RojbZiWurfVFwPpN/PLTxmZJ8RG kK4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696958567; x=1697563367; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AuMZiwnPxp//oSdJI92Jz/jQPOBiUUP6G7MFH1mH3QM=; b=bhVPBYi3hJGMQQjhYsyi/QoelDOfMjl1WSe239M8yW22pDuEPDWXvuvJi2FH/wriWZ wdSxgCuEFoKFPXQecBnEYLFrCBK5QmUlOFx2XG9oPXH+HeU0nJ/dVIVlpsTwP6ood1vU ux/HZ/pKfcZHqMJN87ZUS3m8KVVXY0tnFgW9C18wRL1GKu8Zf1YwVjhCPCEWKbi3RYE0 sOojoXIOXOPwnI3J4BpkATM9DwzSPIJODrlk4nY3boipg1AsHlamNJv/jmd8dadLU2cE wEJXNJCc5Dr1dqv8HFPnRuyz4KJ0bR1aPj6WWd0UCpGBdxzo7yaJhvv+PFgoDw1w8+D8 pDBg== X-Gm-Message-State: AOJu0Ywj7mAKZlvu4AYqdJq9Jll6RxmYkMZ+AbTCZwcXlqJcPh6mCFJS G57bI6PzNFoak9lZbI8MvMB5VzRXqGI= X-Google-Smtp-Source: AGHT+IFwXIt8qa0lJxl4yYlAMPAoWLuauGqXebD7FLb/Gf0mrg5F4cASjRo1So30JdPHLUhNX/Swlw== X-Received: by 2002:a05:6512:475:b0:503:3b6:597d with SMTP id x21-20020a056512047500b0050303b6597dmr13414182lfd.3.1696958567190; Tue, 10 Oct 2023 10:22:47 -0700 (PDT) Received: from localhost.localdomain ([81.177.126.138]) by smtp.gmail.com with ESMTPSA id y2-20020a197502000000b005041f004d33sm1881636lfe.90.2023.10.10.10.22.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Oct 2023 10:22:46 -0700 (PDT) From: Nikita Kravets To: platform-driver-x86@vger.kernel.org Cc: Hans de Goede , Nikita Kravets , Aakash Singh , Jose Angel Pastrana Subject: [PATCH 3/5] platform/x86: msi-ec: Filter out unsupported attributes Date: Tue, 10 Oct 2023 20:20:40 +0300 Message-ID: <20231010172037.611063-9-teackot@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231010172037.611063-3-teackot@gmail.com> References: <20231010172037.611063-3-teackot@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: platform-driver-x86@vger.kernel.org Filter the attributes and only create those which are supported by the currently loaded configuration. The filtered attributes are saved in an attribute group to be easily created and removed. root_attrs_support is an array of all attributes and their support conditions. fw_version and fw_release_date are supported on all models so their condition is always true. Cc: Aakash Singh Cc: Jose Angel Pastrana Signed-off-by: Nikita Kravets --- drivers/platform/x86/msi-ec.c | 40 +++++++++++++++++++++++++++-------- drivers/platform/x86/msi-ec.h | 5 +++++ 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/drivers/platform/x86/msi-ec.c b/drivers/platform/x86/msi-ec.c index 772b230fb47e..09472b21e093 100644 --- a/drivers/platform/x86/msi-ec.c +++ b/drivers/platform/x86/msi-ec.c @@ -872,22 +872,44 @@ static ssize_t fw_release_date_show(struct device *device, static DEVICE_ATTR_RO(fw_version); static DEVICE_ATTR_RO(fw_release_date); -static struct attribute *msi_root_attrs[] = { - &dev_attr_fw_version.attr, - &dev_attr_fw_release_date.attr, - NULL -}; - -static struct attribute_group msi_root_group = { - .attrs = msi_root_attrs, -}; +static struct attribute_group msi_root_group; /* * Sysfs platform driver */ +/* + * Copies supported attributes from `attributes` to `filtered` + */ +static void filter_attributes(struct attribute_support *attributes, + struct attribute **filtered, + size_t size) +{ + for (int i = 0, j = 0; i < size; i++) { + if (attributes[i].supported) + filtered[j++] = attributes[i].attribute; + } +} + static int msi_platform_probe(struct platform_device *pdev) { + struct attribute_support root_attrs_support[] = { + { + &dev_attr_fw_version.attr, + true, + }, + { + &dev_attr_fw_release_date.attr, + true, + }, + }; + + /* +1 to null-terminate the array */ + static struct attribute *root_attrs[ARRAY_SIZE(root_attrs_support) + 1] = {0}; + + filter_attributes(root_attrs_support, root_attrs, ARRAY_SIZE(root_attrs_support)); + msi_root_group.attrs = root_attrs; + return sysfs_create_group(&pdev->dev.kobj, &msi_root_group); } diff --git a/drivers/platform/x86/msi-ec.h b/drivers/platform/x86/msi-ec.h index be3533dc9cc6..f4198f0df5d9 100644 --- a/drivers/platform/x86/msi-ec.h +++ b/drivers/platform/x86/msi-ec.h @@ -119,4 +119,9 @@ struct msi_ec_conf { struct msi_ec_kbd_bl_conf kbd_bl; }; +struct attribute_support { + struct attribute *attribute; + bool supported; +}; + #endif // _MSI_EC_H_ From patchwork Tue Oct 10 17:20:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikita Kravets X-Patchwork-Id: 13415776 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 129DDCD8CAC for ; Tue, 10 Oct 2023 17:23:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233887AbjJJRXQ (ORCPT ); Tue, 10 Oct 2023 13:23:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233484AbjJJRXQ (ORCPT ); Tue, 10 Oct 2023 13:23:16 -0400 Received: from mail-lf1-x12e.google.com (mail-lf1-x12e.google.com [IPv6:2a00:1450:4864:20::12e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AA4ACB8 for ; Tue, 10 Oct 2023 10:23:12 -0700 (PDT) Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-5056ca2b6d1so66299e87.1 for ; Tue, 10 Oct 2023 10:23:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696958590; x=1697563390; 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; bh=Iwibm9SaTNErdoXF5GMv+K/Hk5BX2h8+gk8z0mNk/b4=; b=BYf4+2mM4YRUTzmn7LxAtwkj1slzqmaKneiWlwmlvLzaAsu3o6ucurdfgCxRbFYJzi s+xM33556wxzSN1gBnrFefwvuQiFfM502RsWDNdq/6W95nkW9TMeHPiC7BKfTTVJKn9v irxT53xFogHsrfDY6SAcWi/C1+K8wirBCDhY8kmYrPrJw8rhR3HxdSGiKA5/NwIqkimN MjJl7Rpb1nLOBXM4rUEv/zB2cC9/FpY4MeKSKOZHJ2ZIl3l/4OIcTwMWndsmI6m/Ajop XrK1u0PpEyGL+cQE1PTSg2RA4bUz18qGuFIPLIkTlqEjix819CFA9sc4x+RXrh7rm7oI /bKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696958590; x=1697563390; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Iwibm9SaTNErdoXF5GMv+K/Hk5BX2h8+gk8z0mNk/b4=; b=MaY5Kvpgr9tUFdeXVQjirFltoW0xXUCnMpT8OS9VRxDnbCD4Ce18yNzdqr6DmrPbdg ImjKdhb5UV83inillVLYbAzmWRO//fY0U4NheTIIQeOCRKEmfxEaPf/b/K7vUc5b3FV5 nT50U1y7M2l+PfNbPkaQ4xi/s3FdQkgKAAH/UN9kzr2tSGov1SvPrb+RriG4lQejlnLY xK3N40aQnRN08bkz3+UOe9H5qKdCMBbdvcuLj5F4oP5aXm1IpUQ468OOazRnP5iLQplL 4hh6OtH+O9hmBNiAR6EiJ0FDF5UWmIsbR0W/r4h1kyHwFNy5yWn3fCEYRwz0z45gSdQQ md1g== X-Gm-Message-State: AOJu0YxyaBAW/ArQK1UorVMBheEl3/lpwhB913VwxkpqzU0CLPU0jLjX oWuXWVME/jd7+oFmGnOjHRMr5OeEwnI= X-Google-Smtp-Source: AGHT+IEci6RhxnwOk3mRgwB66uvPPHmso8A66sYs1OP7zCqWIZQHgYWHw2IhKDVfAYsH+47ek6PIrQ== X-Received: by 2002:a05:6512:313c:b0:500:96dd:f95a with SMTP id p28-20020a056512313c00b0050096ddf95amr11580918lfd.24.1696958590298; Tue, 10 Oct 2023 10:23:10 -0700 (PDT) Received: from localhost.localdomain ([81.177.126.138]) by smtp.gmail.com with ESMTPSA id y2-20020a197502000000b005041f004d33sm1881636lfe.90.2023.10.10.10.23.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Oct 2023 10:23:09 -0700 (PDT) From: Nikita Kravets To: platform-driver-x86@vger.kernel.org Cc: Hans de Goede , Nikita Kravets , Aakash Singh , Jose Angel Pastrana Subject: [PATCH 4/5] platform/x86: msi-ec: Add EC bit operation functions Date: Tue, 10 Oct 2023 20:20:42 +0300 Message-ID: <20231010172037.611063-11-teackot@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231010172037.611063-3-teackot@gmail.com> References: <20231010172037.611063-3-teackot@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: platform-driver-x86@vger.kernel.org The EC of MSI laptops supports several features represented by a single bit. Add ec_set_bit and ec_check_bit functions to operate on these bits. Cc: Aakash Singh Cc: Jose Angel Pastrana Signed-off-by: Nikita Kravets --- drivers/platform/x86/msi-ec.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/platform/x86/msi-ec.c b/drivers/platform/x86/msi-ec.c index 09472b21e093..ae73dcf01d09 100644 --- a/drivers/platform/x86/msi-ec.c +++ b/drivers/platform/x86/msi-ec.c @@ -699,6 +699,34 @@ static int ec_read_seq(u8 addr, u8 *buf, u8 len) return 0; } +static int ec_set_bit(u8 addr, u8 bit, bool value) +{ + int result; + u8 stored; + + result = ec_read(addr, &stored); + if (result < 0) + return result; + + stored ^= (-(u8) value ^ stored) & (1 << bit); + + return ec_write(addr, stored); +} + +static int ec_check_bit(u8 addr, u8 bit, bool *output) +{ + int result; + u8 stored; + + result = ec_read(addr, &stored); + if (result < 0) + return result; + + *output = (stored >> bit) & 1; + + return 0; +} + static int ec_get_firmware_version(u8 buf[MSI_EC_FW_VERSION_LENGTH + 1]) { int result; From patchwork Tue Oct 10 17:20:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikita Kravets X-Patchwork-Id: 13415777 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 D1AFFCD8CAC for ; Tue, 10 Oct 2023 17:23:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233484AbjJJRXX (ORCPT ); Tue, 10 Oct 2023 13:23:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57916 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233897AbjJJRXW (ORCPT ); Tue, 10 Oct 2023 13:23:22 -0400 Received: from mail-lf1-x12c.google.com (mail-lf1-x12c.google.com [IPv6:2a00:1450:4864:20::12c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 44CCFBA for ; Tue, 10 Oct 2023 10:23:21 -0700 (PDT) Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-50337b43ee6so7747957e87.3 for ; Tue, 10 Oct 2023 10:23:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696958599; x=1697563399; 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; bh=ecNctNVZCiah3eV9bvV6uMypTAlFhP6WeVV7YkTNVnY=; b=YM+O1fsTDRdGW55YlyUgUp4lm4cpBjyeS1eEM7of01EX2rsDrN0XGoqYFSFXSJpqa7 R8zlExsVFAYU+PJdFB720Ag0XDkmxkHw2ky834RssbLshe9QFjjoDP0lsPn0O45FUQMe KWifV5KbnIobfJ4l0C6lNYLRpbY039zjPr3OqMGd7jIjJ3w7THlUmKRarpeo8VC/GYuR CQOD36HI7i0kYIjiKxGcSGibMqUrB2P83KHQu5RlS5R4qtkGDs0em1A8k3vjt9TAruKK 6XZ4zCv4jEj4/QfwXlQ+SXQBojXyjeBJ6GAICguYi3/yupiwTlBnjvw3xlFf9RaXua0L SqMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696958599; x=1697563399; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ecNctNVZCiah3eV9bvV6uMypTAlFhP6WeVV7YkTNVnY=; b=RJ3TuBYp/WVydQKWUUngx9Az/Gjc2mmY3xIHHIIiASaIDpTwW/TIWZ3jC2vavX3QAx l28fZyFBbiZyYIKLgIKygGCN9XoK4CtgJMQ5uLJjK16fNEoxF4mJJyliyFUGyNpQbUop SgJiT2lxF3q4HzdWtIC/wZsjdX849f/aU33bEt1QUpEcpWjbxbz9A4qNR6IyI3M5B8ba R5jhyDTp1WFJR6HQDK5RorcouElj2CuBGCfqN45vYDsifiZjq70uOo7jkRDVvwKin6Io Ojq91DSm0izShT/DijsFJVHX87tCFsoj3k3iTnZPWzGPx5IzNZZS87PGxx8nK9a+2z1W 9pgw== X-Gm-Message-State: AOJu0YzAaodo2yuMJ/GM/n/SRitc0dlG+tQ4m3g7Y+wanHeYFTv8KfXj Uxc0V78MN/Z45sBadyjYMOEIlMIVegI= X-Google-Smtp-Source: AGHT+IHEe3fjbXwp9nAI9IJN8LljBIPy23qzo+ZP9izCEKZsM15G2XDsOZLN9j4qIUZSiePxkmO0Bw== X-Received: by 2002:a19:7b03:0:b0:503:b65:5d95 with SMTP id w3-20020a197b03000000b005030b655d95mr15048332lfc.6.1696958598876; Tue, 10 Oct 2023 10:23:18 -0700 (PDT) Received: from localhost.localdomain ([81.177.126.138]) by smtp.gmail.com with ESMTPSA id y2-20020a197502000000b005041f004d33sm1881636lfe.90.2023.10.10.10.23.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Oct 2023 10:23:18 -0700 (PDT) From: Nikita Kravets To: platform-driver-x86@vger.kernel.org Cc: Hans de Goede , Nikita Kravets , Aakash Singh , Jose Angel Pastrana Subject: [PATCH 5/5] platform/x86: msi-ec: Add a cooler boost attribute Date: Tue, 10 Oct 2023 20:20:44 +0300 Message-ID: <20231010172037.611063-13-teackot@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231010172037.611063-3-teackot@gmail.com> References: <20231010172037.611063-3-teackot@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: platform-driver-x86@vger.kernel.org Cooler boost increases the fan speed to improve the laptop cooling. This is a simple on/off feature that is easy to test: if it works you'll hear the fans spinning much faster. So far all supported models have this feature represented by a single bit at the 0x98 EC address. The attribute makes use of the previously added bit operation functions. Cc: Aakash Singh Cc: Jose Angel Pastrana Signed-off-by: Nikita Kravets --- drivers/platform/x86/msi-ec.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/drivers/platform/x86/msi-ec.c b/drivers/platform/x86/msi-ec.c index ae73dcf01d09..f4e770b3dda1 100644 --- a/drivers/platform/x86/msi-ec.c +++ b/drivers/platform/x86/msi-ec.c @@ -26,6 +26,7 @@ #include #include #include +#include #define SM_ECO_NAME "eco" #define SM_COMFORT_NAME "comfort" @@ -850,6 +851,35 @@ static struct acpi_battery_hook battery_hook = { * Sysfs platform device attributes */ +static ssize_t cooler_boost_show(struct device *device, + struct device_attribute *attr, char *buf) +{ + int result; + bool value; + + result = ec_check_bit(conf.cooler_boost.address, conf.cooler_boost.bit, &value); + + return sysfs_emit(buf, "%s\n", value ? "on" : "off"); +} + +static ssize_t cooler_boost_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + int result; + bool value; + + result = kstrtobool(buf, &value); + if (result) + return result; + + result = ec_set_bit(conf.cooler_boost.address, conf.cooler_boost.bit, value); + if (result < 0) + return result; + + return count; +} + static ssize_t fw_version_show(struct device *device, struct device_attribute *attr, char *buf) { @@ -897,6 +927,7 @@ static ssize_t fw_release_date_show(struct device *device, hour, minute, second); } +static DEVICE_ATTR_RW(cooler_boost); static DEVICE_ATTR_RO(fw_version); static DEVICE_ATTR_RO(fw_release_date); @@ -922,6 +953,10 @@ static void filter_attributes(struct attribute_support *attributes, static int msi_platform_probe(struct platform_device *pdev) { struct attribute_support root_attrs_support[] = { + { + &dev_attr_cooler_boost.attr, + conf.cooler_boost.address != MSI_EC_ADDR_UNSUPP, + }, { &dev_attr_fw_version.attr, true,