Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp580964pxj; Thu, 10 Jun 2021 07:53:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxDqbQt7C3AcxpulZJYhPsz5zJAzOkw4pCw6GkA+z3sqH7Jyv872isbPAz0aJboST8OlFFJ X-Received: by 2002:a17:906:fcaa:: with SMTP id qw10mr4845965ejb.233.1623336783249; Thu, 10 Jun 2021 07:53:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623336783; cv=none; d=google.com; s=arc-20160816; b=KDq39vw3PS2nFgBeDlWnRrLNiZGpvuFvFUoAf61/NUfgj+TGsEu/KjGiUH8Fpuiz6D vyf1+hivNzUZlpIRxsnzUy9BpORWlqVm1XJEItiwOXnBW1HwWZL6Z2T9gePjcU4Lv2qW WpYu9jSlow3pxQzozs2kFa6kz56larsuTE+D7nbEhDUkCzlB9UsMBDRk5gtufvGUooPd REZTFb4sSydi/vtcUbjd2s/RG6KIlZJLRoNt+dBntVEqbscGF7xctcQ72+un5HRRtdo/ HSwEIPT3s5VIoIYv25yiGa3yubEyWfo8+KEVpTP5FowFjlFdruG8vJFkfFx+GqIYFQBm iw7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:cc:to:subject:from:date; bh=e7E9s9LRbDP0w1MNgVGPoxV0H+Wni4LeZ3P56INj924=; b=u7SRhHIQGVGdmBaed+M05tGu7115UycaCKhSDMm+NH+r/pyFtPsdUbX8gmh95OLXsj SScnnb9G4VgMbedTd1qP9RP90nuqWwSF37DkaLrdOCvJ/JDfkoOWwDL6jKSrC1MunuAV 0JX4a/OP6FlL111O+9MoRBl0AVxi4Q0Os4FLw0x7HLWSxzPz8A3Jz/fY8TGDEGuHoUwO FjCxNm7dpscECpSPd5uMbKmxvV/O8FkKSqp7xHktN89QVLMyshO1G4rfQhnGJ8P858kS w5k2cynRYxu09/wqSrPn7djlpG2XimaP5iG4UkwBFkgRBe5lkmJOnqzavZURW2npAbUw feeA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y18si2384357edd.585.2021.06.10.07.52.38; Thu, 10 Jun 2021 07:53:03 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231420AbhFJOwG convert rfc822-to-8bit (ORCPT + 99 others); Thu, 10 Jun 2021 10:52:06 -0400 Received: from relay8-d.mail.gandi.net ([217.70.183.201]:58711 "EHLO relay8-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231336AbhFJOwG (ORCPT ); Thu, 10 Jun 2021 10:52:06 -0400 Received: (Authenticated sender: paul@opendingux.net) by relay8-d.mail.gandi.net (Postfix) with ESMTPSA id 41C4B1BF219; Thu, 10 Jun 2021 14:50:06 +0000 (UTC) Date: Thu, 10 Jun 2021 15:49:58 +0100 From: Paul Cercueil Subject: Re: [PATCH 2/2] iio: core: Add "extended_name" attribute to all channels To: Jonathan Cameron Cc: Jonathan Cameron , Lars-Peter Clausen , Michael Hennerich , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org Message-Id: In-Reply-To: <20210610153425.000029b6@Huawei.com> References: <20210610124556.34507-1-paul@crapouillou.net> <20210610124556.34507-3-paul@crapouillou.net> <20210610153425.000029b6@Huawei.com> X-Mailer: geary/40.0 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1; format=flowed Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Le jeu., juin 10 2021 at 15:34:25 +0100, Jonathan Cameron a ?crit : > On Thu, 10 Jun 2021 13:45:56 +0100 > Paul Cercueil wrote: > >> The point of this new attribute is to make the IIO tree actually >> parsable. >> >> Before, given this attribute as a filename: >> in_voltage0_aux_sample_rate >> >> Userspace had no way to know if the attribute name was >> "aux_sample_rate" with no extended name, or "sample_rate" with >> "aux" as >> the extended name, or just "rate" with "aux_sample" as the extended >> name. >> >> This was somewhat possible to deduce when there was more than one >> attribute present for a given channel, e.g: >> in_voltage0_aux_sample_rate >> in_voltage0_aux_frequency >> >> There, it was possible to deduce that "aux" was the extended name. >> But >> even with more than one attribute, this wasn't very robust, as two >> attributes starting with the same prefix (e.g. "sample_rate" and >> "sample_size") would result in the first part of the prefix being >> interpreted as being part of the extended name. >> >> To address this issue, add an "extended_name" attribute to all >> channels >> that actually do have an extended name. > > Change the patch title to make it clear that it only applies to those > that have extended_name set. > >> For this attribute, the extended >> name is not present in the filename; so in this example, the file >> name >> would be "in_voltage0_extended_name", and reading it would return >> "aux". > > Ah. Now I see the slightly issue with my immediate thought that we > should > just put this in the label attribute (and not allow both extended_name > and label to be provided). Are there cases where extended_name and label are both used? If they are exclusive, then it would be fine to put it in the label attribute. Parsing would be a bit more awkward because of the extended name but still possible (e.g. libiio would read 'in_voltage0_foo_label' and check that it returns 'foo'). -Paul > Hmm. It's a bit ugly but given it hopefully doesn't effect that many > drivers > I could probably live with it. > > However, needs a patch to Documentation/ABI/testing/sysfs-bus-iio > and a clear statement that this is for backwards compatibility > reasons. > I don't want to see extended_name getting added to new drivers! > > Jonathan > >> >> Signed-off-by: Paul Cercueil >> --- >> drivers/iio/industrialio-core.c | 41 >> +++++++++++++++++++++++++++++++++ >> 1 file changed, 41 insertions(+) >> >> diff --git a/drivers/iio/industrialio-core.c >> b/drivers/iio/industrialio-core.c >> index ec34d930920c..4cdf9f092d73 100644 >> --- a/drivers/iio/industrialio-core.c >> +++ b/drivers/iio/industrialio-core.c >> @@ -723,6 +723,16 @@ static ssize_t iio_read_channel_label(struct >> device *dev, >> return indio_dev->info->read_label(indio_dev, this_attr->c, buf); >> } >> >> +static ssize_t iio_read_channel_extended_name(struct device *dev, >> + struct device_attribute *attr, >> + char *buf) >> +{ >> + const struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); >> + const struct iio_chan_spec *chan = this_attr->c; >> + >> + return sprintf(buf, "%s\n", chan->extend_name); >> +} >> + >> static ssize_t iio_read_channel_info(struct device *dev, >> struct device_attribute *attr, >> char *buf) >> @@ -1185,6 +1195,32 @@ static int >> iio_device_add_channel_label(struct iio_dev *indio_dev, >> return 1; >> } >> >> +static int >> +iio_device_add_channel_extended_name(struct iio_dev *indio_dev, >> + struct iio_chan_spec const *chan) >> +{ >> + struct iio_dev_opaque *iio_dev_opaque = >> to_iio_dev_opaque(indio_dev); >> + int ret; >> + >> + if (!chan->extend_name) >> + return 0; >> + >> + ret = __iio_add_chan_devattr("extended_name", >> + chan, >> + &iio_read_channel_extended_name, >> + NULL, >> + 0, >> + IIO_SEPARATE, >> + &indio_dev->dev, >> + NULL, >> + &iio_dev_opaque->channel_attr_list, >> + false); >> + if (ret < 0) >> + return ret; >> + >> + return 1; >> +} >> + >> static int iio_device_add_info_mask_type(struct iio_dev *indio_dev, >> struct iio_chan_spec const *chan, >> enum iio_shared_by shared_by, >> @@ -1327,6 +1363,11 @@ static int >> iio_device_add_channel_sysfs(struct iio_dev *indio_dev, >> return ret; >> attrcount += ret; >> >> + ret = iio_device_add_channel_extended_name(indio_dev, chan); >> + if (ret < 0) >> + return ret; >> + attrcount += ret; >> + >> if (chan->ext_info) { >> unsigned int i = 0; >> for (ext_info = chan->ext_info; ext_info->name; ext_info++) { >