From patchwork Tue Jul 13 09:53:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: William Breathitt Gray X-Patchwork-Id: 12373421 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D87F4C11F66 for ; Tue, 13 Jul 2021 10:06:44 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 667F56128B for ; Tue, 13 Jul 2021 10:06:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 667F56128B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=nmsk0+24ev2M8JMac0cwoWFm+QrrM1jZymMEckxds28=; b=DdLY66gVfJwSCQ XdmdaBmiCX93sfGE1Yqqk0OgywEITOtycgO4FQddTg3jL/0r6Qp5T3YVUJ78bmtUG2uKRUe7+s434 SArZVJabR15fH3YZASgHCpg5XrFT+zEZneC80H9KWr4M/TDN5/rgaJR4PpzWFF9FssY7947NsZplY fTHzHX4JzyLV3I2KjCHdE2O+hMMPH9K1N4ANLKZrBNAJYrp12FkKsNL3NZtirVybGifiyQrjyJkam bx2L8pG2fdc7YaAqTlkfzMR883InSmGm2HguclxP5AwuXDn6BiM1z8VrXZG4gObKE4rEaiBwM9Rjz ewLMTHyh8LNC/G5mc4lQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m3FHK-009nXe-6V; Tue, 13 Jul 2021 10:04:40 +0000 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1m3F7r-009jt9-FO for linux-arm-kernel@lists.infradead.org; Tue, 13 Jul 2021 09:54:53 +0000 Received: by mail-pj1-x102d.google.com with SMTP id i16-20020a17090acf90b02901736d9d2218so1756084pju.1 for ; Tue, 13 Jul 2021 02:54:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GKMCNriu6Oe0b4ijgDqgdhWJc4dVQTXn+gR1UFw9WGc=; b=ZzZ60IcEm8eQ675WRZQPPjG1kXqeE+PpuEdi5aufsn4CS0axmPdYTNjQJQrzyWjsab Ca2fOXWkXreHkXwUrEHA1bpo+eQePXrA2i4w2MpkEelamS/0FoW7Ymafx4p7576FfEaG PNDr2d15z+rkLWjn84JXvmoA2DqY6KiQidRUPMFHWn4YPIHOy8wl64DM70RGtUba2Svp HnD9RfEkaLDbuWhV3Anuf5USTqahJKBkhAc7tErFZeIDl6E3lyhTuKFvEIz/Pd4Ksg1R d3NxLQYC5DjUJoctWQCjJIMmA/FwY+MtGQtIHrSMDz8xZLe4X11i4VNzlNfBgM3/L9wf zERg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GKMCNriu6Oe0b4ijgDqgdhWJc4dVQTXn+gR1UFw9WGc=; b=cJYdOSIJnNJ+abCAxExtV5ZxqPMkBimlTwuyJnUQlREDHXh5Y3WyXZuxPRfAPH3gv1 yknsRBLwVeVzK5jFaqxosOqmk9+YJiYw48lVQtpOCtovyyrvEZqBe+KWGRR99DcJfDsZ VEnaCWMCdliuCF5C8WCcpH72LrAr1ghUiOjXhFUdubGYSWhfUBuCc7LiSleUJ50jnn76 1sjBdJRRNt3y9iJxUxU3coLU+k5oI/8Y2rQOaCjccdMOyoGAtTdTbFnqhkwoqqrYybX4 yovrPiCI0Udpi8UQyeC6W1uFnF1gpYYvMFr8U655tifoCkb1Wy0UhnEeHLqGPqQrz3Fr jy9A== X-Gm-Message-State: AOAM531OvCsFpyIxS9aSqE5C67mUK2IItToLarCL8S+ICyHbe+zRtDgC 87pJgMEWvHHQ4nSZ0e4GpaGr5UhaubAvaA== X-Google-Smtp-Source: ABdhPJwFsHMWQ6sM9np6r9JTm0IN3nZJXPQ52x1q1eD+KhmycLAfSrajFnnAYVzuzg0nOvDVnt0tGQ== X-Received: by 2002:a17:90a:2c09:: with SMTP id m9mr18819303pjd.212.1626170091027; Tue, 13 Jul 2021 02:54:51 -0700 (PDT) Received: from localhost.localdomain ([156.146.35.76]) by smtp.gmail.com with ESMTPSA id f6sm18153854pfj.28.2021.07.13.02.54.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 Jul 2021 02:54:50 -0700 (PDT) From: William Breathitt Gray To: jic23@kernel.org Cc: linux-stm32@st-md-mailman.stormreply.com, kernel@pengutronix.de, a.fatoum@pengutronix.de, kamel.bouhara@bootlin.com, gwendal@chromium.org, alexandre.belloni@bootlin.com, david@lechnology.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, syednwaris@gmail.com, patrick.havelange@essensium.com, fabrice.gasnier@st.com, mcoquelin.stm32@gmail.com, alexandre.torgue@st.com, o.rempel@pengutronix.de, jarkko.nikula@linux.intel.com, William Breathitt Gray , Dan Carpenter Subject: [PATCH v13 13/17] counter: Implement signalZ_action_component_id sysfs attribute Date: Tue, 13 Jul 2021 18:53:17 +0900 Message-Id: <7760da4dc427db28b6c74c07183b62876b505989.1626165765.git.vilhelm.gray@gmail.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: References: MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210713_025451_598313_43C6F52F X-CRM114-Status: GOOD ( 15.82 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The Generic Counter chrdev interface expects users to supply component IDs in order to select Synapses for requests. In order for users to know what component ID belongs to which Synapse this information must be exposed. The signalZ_action_component_id attribute provides a way for users to discover what component ID belongs to the respective Synapse. Cc: Gwendal Grignou Cc: Dan Carpenter Reviewed-by: David Lechner Signed-off-by: William Breathitt Gray --- Documentation/ABI/testing/sysfs-bus-counter | 7 ++++ drivers/counter/counter-sysfs.c | 46 ++++++++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/Documentation/ABI/testing/sysfs-bus-counter b/Documentation/ABI/testing/sysfs-bus-counter index dee79b606847..9809d8a47431 100644 --- a/Documentation/ABI/testing/sysfs-bus-counter +++ b/Documentation/ABI/testing/sysfs-bus-counter @@ -203,6 +203,13 @@ Description: both edges: Any state transition. +What: /sys/bus/counter/devices/counterX/countY/signalZ_action_component_id +KernelVersion: 5.15 +Contact: linux-iio@vger.kernel.org +Description: + Read-only attribute that indicates the component ID of the + respective Synapse of Count Y for Signal Z. + What: /sys/bus/counter/devices/counterX/countY/spike_filter_ns KernelVersion: 5.14 Contact: linux-iio@vger.kernel.org diff --git a/drivers/counter/counter-sysfs.c b/drivers/counter/counter-sysfs.c index dbb507c9da11..11bef9f8190f 100644 --- a/drivers/counter/counter-sysfs.c +++ b/drivers/counter/counter-sysfs.c @@ -393,7 +393,6 @@ static int counter_avail_attr_create(struct device *const dev, struct counter_attribute *counter_attr; struct device_attribute *dev_attr; - /* Allocate Counter attribute */ counter_attr = devm_kzalloc(dev, sizeof(*counter_attr), GFP_KERNEL); if (!counter_attr) return -ENOMEM; @@ -535,6 +534,46 @@ static int counter_name_attr_create(struct device *const dev, return 0; } +static ssize_t counter_comp_id_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + const size_t id = (size_t)to_counter_attribute(attr)->comp.priv; + + return sprintf(buf, "%zu\n", id); +} + +static int counter_comp_id_attr_create(struct device *const dev, + struct counter_attribute_group *const group, + const char *name, const size_t id) +{ + struct counter_attribute *counter_attr; + + /* Allocate Counter attribute */ + counter_attr = devm_kzalloc(dev, sizeof(*counter_attr), GFP_KERNEL); + if (!counter_attr) + return -ENOMEM; + + /* Generate component ID name */ + name = devm_kasprintf(dev, GFP_KERNEL, "%s_component_id", name); + if (!name) + return -ENOMEM; + + /* Configure Counter attribute */ + counter_attr->comp.priv = (void *)id; + + /* Configure device attribute */ + sysfs_attr_init(&counter_attr->dev_attr.attr); + counter_attr->dev_attr.attr.name = name; + counter_attr->dev_attr.attr.mode = 0444; + counter_attr->dev_attr.show = counter_comp_id_show; + + /* Store list node */ + list_add(&counter_attr->l, &group->attr_list); + group->num_attr++; + + return 0; +} + static struct counter_comp counter_signal_comp = { .type = COUNTER_COMP_SIGNAL_LEVEL, .name = "signal", @@ -629,6 +668,11 @@ static int counter_sysfs_synapses_add(struct counter_device *const counter, COUNTER_SCOPE_COUNT, count); if (err < 0) return err; + + /* Create Synapse component ID attribute */ + err = counter_comp_id_attr_create(dev, group, comp.name, i); + if (err < 0) + return err; } return 0;