From patchwork Wed Jun 9 01:31:32 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: 12308605 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=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,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=ham 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 17DA0C4743D for ; Wed, 9 Jun 2021 01:35:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 04B066120F for ; Wed, 9 Jun 2021 01:35:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236137AbhFIBh2 (ORCPT ); Tue, 8 Jun 2021 21:37:28 -0400 Received: from mail-pl1-f169.google.com ([209.85.214.169]:34605 "EHLO mail-pl1-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232102AbhFIBh1 (ORCPT ); Tue, 8 Jun 2021 21:37:27 -0400 Received: by mail-pl1-f169.google.com with SMTP id h1so4037573plt.1; Tue, 08 Jun 2021 18:35:21 -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=19qNksG3pa57GXuH7o9u4eMtasQffXDZRLPl8079NZc=; b=Qi/8yOW7HIUyrSYwjAP8jm1sEtyIsiVckPcf54N5PS50/dhmRzSACb7Wm14oJAAZoa iFEDULGnTK4IgFWvggpzby90PIzIotfi+w3ynhTA39+aQXuUqzPxyUVN2TVGtxoA82KH 4Vc7toTr44h5Cf4Vi7Q4Z4MMjSNP5d569ET7dUb9dZOS8ffmC4+ovJ+yiEUavDDlhfWO nMHb7ayPXphTU5gY3HKx6/Vkd7vJfrvI13Rf3GtAKOA93TwHceSejikiwq1IOp9xh+Td slCb47C/Stad2VTFxVpy5RYQX7aRy9qrLtK/jG7yMD2ndzxD5abNH5nG04uIfu94T/Fo wRJQ== 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=19qNksG3pa57GXuH7o9u4eMtasQffXDZRLPl8079NZc=; b=Xt72uZoUHc2ca7rzCPRIaT7YzXbe+dgd50CwTjLtELDTJi7806BCa0XGe/CV97yCyh 4ODCYMgXX4Se5JPmtdzxvklQENCSisOBwmYbpifrYsBpquQQXQl5G3/deGHi7si+BXjl zAOCsm+onkad9vgZLiUOKpiWb6wCCQgOaaz2vnQUgGdUIMgnbzUf2SxjSWDh9opJ9As7 ymJh3azwWyUtGrZdHR3ZXNivZxPxEXSf2dsxPT5dc2RfNDPqw3v3SfzO1+LhbTm2Fvq5 X6l/vI/a5ymWZd3iFFI97TT7AFlu7vFLG0xtF1C3Kzlmi+lf72ezfcuaiQAQcZAtJ3pM m+PA== X-Gm-Message-State: AOAM530GvJV8ZY/jUB4pHKoXrJTqChAn+h1Dc+Av98nItp1r0HcfFcwf UP6YYh3naca7ljj/4N+pVV0= X-Google-Smtp-Source: ABdhPJwKy2zVWw/UbJCM8hI6C5EAGFQTIIhDoB06VRv/2MsiDmb+hBOppC8fEiym/OqDnXKHwLQLjQ== X-Received: by 2002:a17:90a:a607:: with SMTP id c7mr29235476pjq.199.1623202460980; Tue, 08 Jun 2021 18:34:20 -0700 (PDT) Received: from localhost.localdomain ([156.146.35.76]) by smtp.gmail.com with ESMTPSA id v14sm12659815pgl.86.2021.06.08.18.34.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Jun 2021 18:34:20 -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 v11 29/33] counter: Implement signalZ_action_component_id sysfs attribute Date: Wed, 9 Jun 2021 10:31:32 +0900 Message-Id: <9a747ffe047c92fa4bab4bc7d799493babd7a04b.1623201082.git.vilhelm.gray@gmail.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.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: David Lechner Cc: Gwendal Grignou Cc: Dan Carpenter Signed-off-by: William Breathitt Gray --- Documentation/ABI/testing/sysfs-bus-counter | 7 ++++ drivers/counter/counter-sysfs.c | 45 +++++++++++++++++++++ 2 files changed, 52 insertions(+) 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 07588130600a..bb49a10f160b 100644 --- a/drivers/counter/counter-sysfs.c +++ b/drivers/counter/counter-sysfs.c @@ -533,6 +533,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", @@ -627,6 +667,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;