From patchwork Tue Aug 3 12:06:23 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: 12416149 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 09E91C4338F for ; Tue, 3 Aug 2021 12:29:26 +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 C7D7360F56 for ; Tue, 3 Aug 2021 12:29:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org C7D7360F56 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=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=uR8lHNyO8VKP73 lQIbGNas9+YbfMZiKB5wY9dp++Dv+nn4xpW9YQbNiGyr7KAt8H4z1RKkhVjFHPlvtpzd7NfTYgD9R pLY/j6b/DpM7nMrbU5Mqxy5G9rnlY/7rz6Qu2/qR/tlI+L6czRysQ0k9ZiOqPfXAFeUEqdyiERzjx a5OSL6XkfuN6XK0LPZHkGDxAWMaqWSOglTqS7Hc5wX0NHP6HXnF17d7wlmM8a80eldMGy/8tfVSHx je1u5KMOHJSpvhc1OdfxfNC4c9PIFvOXV65f63+24mrlC9EfxE0Yl0r/CSfILYqALubBFk8l5J6KP F4NOh6omwdJ+fRpLdwKg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mAtVa-002cxN-JO; Tue, 03 Aug 2021 12:27:00 +0000 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mAtDB-002WR0-0Y for linux-arm-kernel@lists.infradead.org; Tue, 03 Aug 2021 12:07:59 +0000 Received: by mail-pj1-x102c.google.com with SMTP id m10-20020a17090a34cab0290176b52c60ddso4352943pjf.4 for ; Tue, 03 Aug 2021 05:07:56 -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=t16QRjZIxcuYdstsPWLMVOH/nKmuF5tZxc61xEAvfR0GMoxYmpjaQeUAS8sUFqX9jl YAjhlkc964yIo8VUWzcnAI5hI0QNDqpJXnAFTtLaR81HI4UGEm7iODItlB9BKddN5M6t qU/eHbDqLg3xO2WqXTUoeMolqnhBPPtmfr1sWKwqMnNrAqw8BRXJFKNS/2/kmxOBrixu JotPQAyEfy38LcVluV5FmfUksZHpQ4mtN0JWc3XaO+ElD/KITPegAlAzbiQaVjvc9D+X NCrO20OOyxtjKvMEwmVt9uEr/joDaV40IgIEdh/jzM61V0B69ZasMH4yrmNLOCpe2XCi ltNg== 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=WRbBinBgqX7L0z6UJ9A1pP+qDNpQKQg3oCNdzVg9nfSCQyD0NjvdBFLopodzB9shyo vH+9gd9RFpZpIKLEnQktnh63Gg/zkYDQgs67S+qdnxeSFtxL6/LkAZFiTqLGhTCqhBRI GWjNBv5xxH+uCLrTl4qGgMtuv9GUkmJGn2STx4P5yTUrVmEKBs19GDX6TTe/SJvlNE+8 T1EqzWhDosVG4DbArQwqIRRwOHSPCt1npDg7dvQA0Vz4uoGsSgSunsrnLzpKDSPaMmUy KWUKmnxYIGikaFMgbENVr+LBEnHh+RdevhuwFyFu/0G3Q6eiuq1+TTLlhYRzeKtBQsMA bFVg== X-Gm-Message-State: AOAM5318R70GhgHMuKlv4NeW3eX8/uNqSrqQz0oK9q3kF5a3MMRJbHi0 2HY2MpsIRrC4D4iLMBMLMdg= X-Google-Smtp-Source: ABdhPJyLpOQSNtH7EmIuEBrCh2Djo5Spq15M66GUUwHZD0BSAe1IAKjafBjht842rzJiws9CuFZIJQ== X-Received: by 2002:a17:90a:fc6:: with SMTP id 64mr22516402pjz.1.1627992476483; Tue, 03 Aug 2021 05:07:56 -0700 (PDT) Received: from localhost.localdomain ([156.146.35.76]) by smtp.gmail.com with ESMTPSA id n35sm7197502pfv.152.2021.08.03.05.07.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Aug 2021 05:07:55 -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 v14 13/17] counter: Implement signalZ_action_component_id sysfs attribute Date: Tue, 3 Aug 2021 21:06:23 +0900 Message-Id: <7a9fc7e7272650e0d43b23a6ba65bffe889f4c86.1627990337.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-20210803_050757_129200_8DCADF8F X-CRM114-Status: GOOD ( 16.22 ) 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;