From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752035AbcKRGTV (ORCPT ); Fri, 18 Nov 2016 01:19:21 -0500 Received: from mail-he1eur01on0135.outbound.protection.outlook.com ([104.47.0.135]:45334 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751320AbcKRGTS (ORCPT ); Fri, 18 Nov 2016 01:19:18 -0500 X-Greylist: delayed 21273 seconds by postgrey-1.27 at vger.kernel.org; Fri, 18 Nov 2016 01:19:16 EST Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peda@axentia.se; From: Peter Rosin To: CC: Peter Rosin , Wolfram Sang , "Rob Herring" , Mark Rutland , "Jonathan Cameron" , Hartmut Knaack , "Lars-Peter Clausen" , Peter Meerwald-Stadler , "Arnd Bergmann" , Greg Kroah-Hartman , , , Subject: [RFC PATCH v2 3/7] iio: inkern: api for manipulating ext_info of iio channels Date: Thu, 17 Nov 2016 22:48:05 +0100 Message-ID: <1479419289-17553-4-git-send-email-peda@axentia.se> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1479419289-17553-1-git-send-email-peda@axentia.se> References: <1479419289-17553-1-git-send-email-peda@axentia.se> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [217.210.101.82] X-ClientProxiedBy: DB5PR03CA0075.eurprd03.prod.outlook.com (10.164.34.43) To DB6PR0201MB2311.eurprd02.prod.outlook.com (10.169.222.150) X-Microsoft-Exchange-Diagnostics: 1;DB6PR0201MB2311;2:g3wExf2OTddx6H6oHcgd2sJx2hu2MQKha4iAVeHH8S+Fu+qmtD3+6WYmszqlFo91lk3mE8wWQAaN8Rr1Ox817j8G9zS3Jre93plyTOq5cbObHpec8pZ6ihoubkJLSQ6+NWi3ztFAFFk/nT6XrL+XLpTY1MpYMLCwt8pdUQ2mwyo=;3:RzgXad2VobYRNvrPQPJa37aUJYcxgIyaWp7Kb1mXNy1UiPIlN8dDHTygV5tZkVzs3tIR6B6Dx4YFk7MBVBpsWudzLEjU05+mAgGZqkpZsQg3sN3a/Kgcgz08S0Q7N7ILdY8hDaOXAiYRmnBKtw7B7/byAUKTNO+CrheyQs/te00=;25:fgy0OgY9l2n1JGaKQZCzvCg1unL7Y4qeZvzXpdvB7Cie2s4l4Lx6uC0Zb7fzFZf6vrr+uxfejqNXnYOGroumCEk4bWk0W9zybWoZsfhdeKQ8i/riZoQUwcuxW5mcm7qHWw9yINpPUg+tAyYpuRaWwVvDtOpZSHw4cq1iHUrgY0BN4/NXMACfmW8EWgB6x/awgIoY/hKczRUE+ltiWgj9hTUgbnB68E93GDz1FQZ3c0hR3jVXmiEzY0EmFpu2wBXFnynmw7TGhHRduudOHufRYLD7T+7eFWEYIcR9V8ngTX/OScH9nJwQchGHs0ukzltManwL4iAb8tSq0TdHKeAfZ1LVaXoSGMndoQq492BolGKZVeYTrOi12gvNAPCv4qJxLm4F9zeZNadMJwRd+ucpsCEPcjN9+N0u6rxjSwaQasU0ASJZ+bxKIZVC0lUZb6v7b4F3LSss6cuFOtcfpoWMRg== X-MS-Office365-Filtering-Correlation-Id: c6890d26-689b-40ea-5c33-08d40f3389a5 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:DB6PR0201MB2311; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0201MB2311;31:FQihMgtiOfHigNUHQs6lIwfVdRkEk008mu0jujk4O2qDnbLYyhWML6gJVO9VUE3wMmcS/Ve2GH2pEiNOa36k3+SGhCWT1ZDUjeiKC+/49PVw0uBj2EWzMHYT6v1apRlTGxKx1Ch6OjmoqrQl9JZ4JHMHOIqkyU7S8RG60aRhj29f34o+YMHR8JS38DWsmy5461MGONkV/8yt8TeWlBYxJa4H2xm+mKARkML6tIlo2gMGulCk5ZCWt/IRy/Fqa5tvTakgzffXclzqBwf4TIcdRWi73LitB1j2DWNBuxH4GbzMPt2HYFhhtwzFKDqqcoqN;4:ifBAJAe7vDQcUMH9/W8xlb36FSOJPmM4BX0fTzAefz3eacBxeCKkTzeN982sgsypLPIpxlWh8cIo6yde9rXybacpCfZ2TEfpPLvYy/+7plpX/At6RmrJf8WO/xvd+IS3PMO30yEk/qTSmdB5grd3arUYhZmoeF5smmClpaC1i7WB+pDW7CYvF4X+PaDVVDpopGRZBYEm6J96mtA66K0LErIDzeD0em1qDXoqpdK5/hpzl4lnlz2uOvJJG3vaxVmEFxMP3yscIylK62iXFR/3xMdobY6JQfNqlEgfRUgdQNnEsmeB5xTC1xk7Oc092SEgkZ7mm0ZFz6uh5yMDhHmm9jbrhQvEDmhE2z7m5Qz1aBlY/Zb7mWk0XZZ9jAVYis0Ws3QgKwIwlZNAB/ukwU868OCMSavlgqRQ4GJDk5j4CVYjK3MB975U90FxhdWzos5UlDSjgqL4N6rfgs1SLNijwuYoAlSfzXvbU4fRFW3B1Ic= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040281)(6060326)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6061324)(6041223)(6043046);SRVR:DB6PR0201MB2311;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0201MB2311; X-Forefront-PRVS: 01294F875B X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6069001)(7916002)(189002)(199003)(305945005)(8676002)(101416001)(7416002)(8666005)(7736002)(7846002)(50466002)(48376002)(92566002)(50986999)(76176999)(105586002)(106356001)(2351001)(36756003)(33646002)(42186005)(74482002)(6116002)(3846002)(2906002)(4326007)(81166006)(5003940100001)(81156014)(50226002)(110136003)(5660300001)(6666003)(2950100002)(6916009)(47776003)(66066001)(68736007)(77096005)(86362001)(189998001)(97736004)(7059030)(217873001)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0201MB2311;H:localhost.localdomain;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB6PR0201MB2311;23:mpBIbWf+BOnD/m3IN/kUqu9y1ethHEwrpiAbBi9?= =?us-ascii?Q?/TZtb/fOCVzD+meCxzoj3WjQxmKmxr/4v+v204QRuLhD2uQ4Urfht5gzC2Hn?= =?us-ascii?Q?Nn1LYItZtOXX6TokotfZXK5/i3YguMvKy8bPNdslaXSLQItlWdTYZKq8dryb?= =?us-ascii?Q?dkJNyR51LVGLgdHEZ5gSbo7Vf36uVfYrzP7swa9xLVXKEAMd82hyvmELLMiq?= =?us-ascii?Q?Zd0DgL8OMV2AgoQaLToTBSq0hC3nbPNOaNryizBAte2/jERX4B7QtbeLB84y?= =?us-ascii?Q?rw6t09StfXHSQLEypDv4ZqPY0yi1XiuXljq09PzI9sRKqP4sYfJZGNzUavUS?= =?us-ascii?Q?4YrFkSk6u+CgPI7iL9DpZGsvkqDPJuJsTvHoWeHUbYhHMXWxiXstaUnR7LX1?= =?us-ascii?Q?QxJlzi/prND+PCMZpp2iEnFLi/GBMRRDhSH/XtFGE13ZEKUXWhGipScy4OzL?= =?us-ascii?Q?oUSRKa9/GIhmZn57VOYARjnNU4M/vWSVVw/9YeEp2CIBzn/b7+7IBLQ69Xl2?= =?us-ascii?Q?zJKZxm+xCTBw9ArwBe11N7EPeWM5qyA1E1GC59IMuiW5lq+8S67XVquqxsQQ?= =?us-ascii?Q?ENpoSCJWKundWWcVlSOAHIzmG7It967ZejtUicnhzs6qfg+ToC8GJekyflDO?= =?us-ascii?Q?NDgcrxjLr1HAzMNPl6J4Ox+4xxyKtxHnVj9WmGDd0BhAZnqjTN8xJomxXEEd?= =?us-ascii?Q?CK13eDcdsJM7t1YKs3ryf1ct3QSSTUbHRKj8GGQQBr/SchVzfRzFtfN51AP3?= =?us-ascii?Q?7+BegP+G2LvgEa3gnao0C3LWoshamYInQueUm3q+3tI9Q8FeKhzmyU5C6G93?= =?us-ascii?Q?D0Opr8mEXgsNQKvGqNgddlsgguMwzIkL85PmE74pyCbtR19aWixzMuoCizbb?= =?us-ascii?Q?ILCee9jdSyOgOTY06Ltcd7iQ/VPyDMzAmkeZRYfd+WYbDiHWxEWv8W7hj1F9?= =?us-ascii?Q?G56Q7CClQh6KeQ1FepumiJTfRd6FMm7mgU/hdHZJsPhW1DGcyI5t/wirHE+B?= =?us-ascii?Q?4AMA9dBzWqYgRhCHmyTXRIHbwo9pa229HFIfFyBmkSe+EYrh9rXCZ1Nu+v04?= =?us-ascii?Q?6vOAg7MzpRIc+jOwkY4eVW1vONxLsPGNHkpgs4GgBbGy8Tq1gQfHtzlDq7TX?= =?us-ascii?Q?6e/EUY4npcx8FQd/mXd87hi1OO1J9Kpwr?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0201MB2311;6:/sqaBYfwaE8/nMVL1m310aVnhXX7b9WctJJ12LIOEuqZdJ2akXRoEVJVg4YEapnF+WhMQ807LRZrh59K/fLcQflAT8w3KSQkO4KSSg6JcdkBPkh+wtN/G8XGLB9XfeWjRHWuNmtUk3AIhSRihYNwRfC2eo0eJQGaVZNQA5MQVmcqdUjJv0jntHf5YUeNmcyngCiE0UKhRwHzULf9qyrj6jimGGteX4B8s+hvbX+gmGNPzxe7cXFRnSlt2qwL0eUSt9Bkss0uQKRf8UCAf7aEKdFVd1Vq4vImYheDXWOg2rkBJYHOaUdxI7za9Kaxq1HgkiIZ7kgryCpxxXrM6yMTVDoSiA8eJKUYc4YrxdqQMj+t7upDTvDWJOiJqvldhlON;5:9ZUaKOhFx4DKuqKm7iSCgF3bCLkyfRzwJ10ev3SgO4MOftx3NoBGQALy0EI6TASnHfIb8BX2kzzQQ55pkzWRlxPVZmqcL8KluBUS+K86dYqdNdBfpkD6XSkpBh3ewBf/UY18vwU3zZEaw+IkTLaI6pBbh4lEA+eln1ebk8n4k8c=;24:zknM0TO6cWL1Y4EYdNrgASP0ALwKA6JTTWnmHBqeE4pVNIRfkBHAKe6TxtAUU9gKjKla3n4yLjHbHHDvY9+Cq2KQUsgOjwOfoQmp5X8XJhQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0201MB2311;7:0tvcYEqtcv4zNqL4TYJRSCuRngbcc+YGHQ10w6pL6gxr2jjnG9R1ncrIuuDEnWT+6ACC6teA5qC5sD/WdI6QgenyrHl9+JwGhnaHZGLjmTXBgW2Nt7tDC0YqltWxwLdDlnZ7sqAZQ1lJfE5RCnQNaEQYjixkT/siCAj9NPEYG+REEKo2E9qoe+QjEEHKmSb1jhFSJJLZlILOTpxE1oHDOuByIfILsoegpOAGS9qE5sAV3axlrrkuLD/+hcdsWXuXXTNNn0VJ9zH372q6K+JqHnO12Fjpg6xaicm1L1SVd+VbokZaSG4hOm4TrIBPlIZues1jLF3fyQ60HlmHpvj1PHYMSG9Qv/sGWWjaiE1NlwM= X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Nov 2016 21:48:57.9275 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0201MB2311 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Extend the inkern api with functions for reading and writing ext_info of iio channels. --- drivers/iio/inkern.c | 55 ++++++++++++++++++++++++++++++++++++++++++++ include/linux/iio/consumer.h | 6 +++++ 2 files changed, 61 insertions(+) diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c index cfca17ba2535..a8099b164222 100644 --- a/drivers/iio/inkern.c +++ b/drivers/iio/inkern.c @@ -850,3 +850,58 @@ int iio_write_channel_raw(struct iio_channel *chan, int val) return ret; } EXPORT_SYMBOL_GPL(iio_write_channel_raw); + +int iio_get_channel_ext_info_count(struct iio_channel *chan) +{ + const struct iio_chan_spec_ext_info *ext_info; + unsigned int i = 0; + + if (!chan->channel->ext_info) + return i; + + for (ext_info = chan->channel->ext_info; ext_info->name; ext_info++) + ++i; + + return i; +} +EXPORT_SYMBOL_GPL(iio_get_channel_ext_info_count); + +ssize_t iio_read_channel_ext_info(struct iio_channel *chan, + const char *attr, char *buf) +{ + const struct iio_chan_spec_ext_info *ext_info; + + if (!chan->channel->ext_info) + return -EINVAL; + + for (ext_info = chan->channel->ext_info; ext_info->name; ++ext_info) { + if (strcmp(attr, ext_info->name)) + continue; + + return ext_info->read(chan->indio_dev, ext_info->private, + chan->channel, buf); + } + + return -EINVAL; +} +EXPORT_SYMBOL_GPL(iio_read_channel_ext_info); + +ssize_t iio_write_channel_ext_info(struct iio_channel *chan, const char *attr, + const char *buf, size_t len) +{ + const struct iio_chan_spec_ext_info *ext_info; + + if (!chan->channel->ext_info) + return -EINVAL; + + for (ext_info = chan->channel->ext_info; ext_info->name; ++ext_info) { + if (strcmp(attr, ext_info->name)) + continue; + + return ext_info->write(chan->indio_dev, ext_info->private, + chan->channel, buf, len); + } + + return -EINVAL; +} +EXPORT_SYMBOL_GPL(iio_write_channel_ext_info); diff --git a/include/linux/iio/consumer.h b/include/linux/iio/consumer.h index 9a4f336d8b4a..471dece8729a 100644 --- a/include/linux/iio/consumer.h +++ b/include/linux/iio/consumer.h @@ -299,4 +299,10 @@ int iio_read_channel_scale(struct iio_channel *chan, int *val, int iio_convert_raw_to_processed(struct iio_channel *chan, int raw, int *processed, unsigned int scale); +int iio_get_channel_ext_info_count(struct iio_channel *chan); +ssize_t iio_read_channel_ext_info(struct iio_channel *chan, + const char *attr, char *buf); +ssize_t iio_write_channel_ext_info(struct iio_channel *chan, const char *attr, + const char *buf, size_t len); + #endif -- 2.1.4