From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754095AbdARQfh (ORCPT ); Wed, 18 Jan 2017 11:35:37 -0500 Received: from mail-db5eur01on0106.outbound.protection.outlook.com ([104.47.2.106]:29472 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753528AbdARQes (ORCPT ); Wed, 18 Jan 2017 11:34:48 -0500 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 , Jonathan Corbet , Andrew Morton , , , , Subject: [PATCH v8 04/12] iio: inkern: api for manipulating ext_info of iio channels Date: Wed, 18 Jan 2017 16:57:07 +0100 Message-ID: <1484755035-25927-5-git-send-email-peda@axentia.se> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1484755035-25927-1-git-send-email-peda@axentia.se> References: <1484755035-25927-1-git-send-email-peda@axentia.se> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [217.210.101.82] X-ClientProxiedBy: HE1PR0801CA0032.eurprd08.prod.outlook.com (10.167.184.42) To VI1PR0202MB2558.eurprd02.prod.outlook.com (10.173.79.137) X-MS-Office365-Filtering-Correlation-Id: 393e7d0e-7861-4fc6-3396-08d43fbada39 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:VI1PR0202MB2558; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0202MB2558;3:W5Hd5FNEIyot/MM/DksT5r7LXL31UP4wZn30L6eelNuvgPlXHSzsSMre522j8i9B4zd+E2fN38cypaTfyajLFuO+uK49Y846r5XU3vgGD+cvdzPZ34pHnbozd6JtZtluMnBwZtQglTTQ5ktaL497A1Z8Tv+zMav3BROIjhLu53+8fwA91ZbkPwVX8WmqRnkXJIcTyj+VutkatLhymRAK2XKHWnXn69gQ9DXjvf8TU7wRECdIMwNVcJuuGG6moedGreyHGXSWkuFM5yfXEXdQkQ== X-Microsoft-Exchange-Diagnostics: 1;VI1PR0202MB2558;25:RRg3UINDOngBTsvSIkyx4kdGP9R8aYkI+9wqc1JXl1k7gunkRB4OLXKiUyWoS7Q6wcbCwUagDHj/w5mAo1sAlFDOuf5yoMYBFGJ2aRwfbuy/8AK76aXFZkIg6JMH6p3wsQcHbcamoLslMj20JhgV+vwb6g8CDaO7f8/IvlWJa0oOuUXqZQ8mnc2vPgHoK8SwJ2cWEIA+kfQT+fWKsHG/QAeHag8OXd7u6T3+3GvA1jA7QTph0lam79yQYSf2KlOMruTj2CCImoVbqSbDduxk+5YJBsc4+nFRhDXuvZf1ZuBi/BmnGboe+te4iDSFYMhDHF5KDWKZhhLauXzs+WyY9GGvQXv40WLWisIYbjkobzu50QrTNjp2KqEahEYRC3G/2OSUDIUHjvtxokmvs300y8/zAPrnOvIIEX8BOqxeacPaXuW5gm77C5bQo/TIVSTXBOyiGe40OC0Ra1YpqXOY8jWABaX/cQwfA5yEyFKb5Dc3yOJ72ltA2axA5fJVW8ucPMbx5dj+uoHxMNhK+vwMT7JmFBNe+CroSEbGBNTtRBDr60tZZz0bcBHOZWUMqRhfXG2aSoVEgmAPQr8i0o5hExJWIMKbE9AmsAyZRw6z7vdsQaEXbcQQaiC4dECjdBrwXOIBOpqGmeCZ/iMBmzPKuY0soNtXN7R7Rn4afajo0ehTq19eSsbMu64sFHf85NUyFRFkmDAD9dh+jgw1E6/X7KwvnELhMM0AcfbQ+lsMN05VhlzkBgVL7FwwyOY9LP1/Tz/V75eFeUGQZJUc30eEQA== X-Microsoft-Exchange-Diagnostics: 1;VI1PR0202MB2558;31:49sYM50cnj++EQotaXbMvoW4pYYfc6/LPqdaz48Lbt0kDGgmwmVCzCbhoGDsYjjmai+y2hLX8BfIptMPMoTVLuH0t5OLdDtlBbn8w6FfW1bG348nT+w70m3NMI0dtS281YYVGRRo5gexEH6NJ7x1pjJs/7BbVFjBrCBy78Ob/Fw5shEQ/z1VNjKrrxelAG+EfxQoBnolmiddClPiPedymubWljwgXOnZfyTVu3flChBW42/ccWA9G/hjw85Josxr7K7x4W2rFVtmfY5F7nMZ0Q==;4:K3nvSpshguhsrENQi3Jkb4I4WBXFCY76QONyFhAAVn7gRkGbI5o1+CBb0X4iFjUnOK7OZQQPogr33ZSkgKyjUD3/a2tydW6Ll5HMZpG/gmWmN+FdXFHmtbyzEGCBy5GfRyf0YVqSmg8LATJtEZ8k4N98WxWSuxhbJc/V8OIgVXRcA6itPuYi0iHkwAibiSA7CF5zpDAuX3RQA3KqN2KCBN59A1ecmUiKHSAQg2HjtzDsVmo8JnGeVEccj0wqiJ1Eg5D3O4TrIpB55s2sMQvTr2G4+Wi05t64ewQ1EB1V1dlDjQal7YlzmYkDClG4VcHf8Em3d5cIPvkwnE2AQYdeFDE6SUzCwvwwwdbftxKtHRZEZardPBQsUYU4ys/cn1+vJzD5cU7eyuyvwdDR9BZ2nNYybegFR9vACQ4W+BdYFo8EHuAJmUOibfv05HyPnDXTeBF7kpIiFDEJrov8VwPmh4SPwbCxH/MBoD4h3VbKXMo81F4PDwqAr+Scvra5dIhGwQrpycCa+QNlxAzqNNgW4nU+gLXqCxvLMKyfIeH2vZ+OXlHfZ+ZManEMdAUE78aMIeoDM42jwQkb7oI7kUapQ/A9iLf3gHZpsOwnz3oW29SSvS3pnjWOSVcwWNZye4y5 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6041248)(2016111802025)(20161123555025)(20161123564025)(20161123562025)(20161123560025)(6072148)(6043046);SRVR:VI1PR0202MB2558;BCL:0;PCL:0;RULEID:;SRVR:VI1PR0202MB2558; X-Forefront-PRVS: 01917B1794 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6069001)(7916002)(39830400002)(39450400003)(39410400002)(189002)(199003)(3846002)(38730400001)(6512007)(5660300001)(50466002)(101416001)(47776003)(48376002)(54906002)(97736004)(76176999)(53936002)(189998001)(50986999)(305945005)(7416002)(4326007)(74482002)(106356001)(2950100002)(6666003)(86362001)(6116002)(81166006)(6916009)(68736007)(5003940100001)(36756003)(7736002)(2906002)(575784001)(25786008)(8666007)(42186005)(2351001)(81156014)(33646002)(6486002)(110136003)(6506006)(66066001)(92566002)(105586002)(50226002)(8676002)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR0202MB2558;H:localhost.localdomain;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;VI1PR0202MB2558;23:6ropIJxsQOhAWM5KXPnlfmJg8AHA+55lcToScrE?= =?us-ascii?Q?xzEjzxvrC91OFD4jEbHS+KNdX192odbaFwSxQfwFkWjRX0aWK67X6NcP5Gtf?= =?us-ascii?Q?I5HcomvtLjvnvzW/Q+VOMcjpchH4OjgVKaSXJ/s6OoEp3E0KcRoefhV4U1aw?= =?us-ascii?Q?HsB/QBQN9VeL0Bz4Vi0VbyaGysLYJRkbvCLrWFhjkxvao89myR0kVM6pgLRO?= =?us-ascii?Q?NyxE40c6vwhu9t7SJUMsJeX0kRF5NFzkTV4i083FbhX8rQIjeiVHgA6JX4YQ?= =?us-ascii?Q?9HcoWhbuQNvGT1qTQSS2TdFWZGrDLhwAf3PfqRWnozaCgWcusd+mcJ1fV7Nq?= =?us-ascii?Q?j4LT2Kz9kNVZ+i0wHbcqOMkcF4QuQWPOoSzWcVr2B7zHOUSRvDGQl2AX5Njq?= =?us-ascii?Q?fBvwHGCtsGMLTYnbl8eyoYAEdbk5tD8D/2Jk76+No2n2cxHiGYXydIWfcW56?= =?us-ascii?Q?bQRZuc96lEXKMGtvDXK4oyRRNmwlO24GMsdy6yoWR+2mCM2/oWmyxnDEyWRK?= =?us-ascii?Q?USTywLpxapnJQ3rem+jK4PzbJXS6dxRoVLXKrk9FZDKgSuM2GmHLkAHx+rtu?= =?us-ascii?Q?QCaaS+DlMmYodvFaXjJz/Jds80otkfTFV2scZXIV6g9k8IfgLpGxXznAC0kM?= =?us-ascii?Q?x62Lf337/N5x9rdsnsc1/5LFFB+OLcT3jy9v1Elyg1DBeHiIEjQsc7Dq/elL?= =?us-ascii?Q?93S5SAZMu8w/yY26cnDriQek3Huj22A5nSBpToMPl3xKje4uAwixIbpU8X5V?= =?us-ascii?Q?N9MO9HOjFEfmICfXXvI/z7oXspdkBdk8P94nQW7LsT8cI5wakZK4VMwOxAJ6?= =?us-ascii?Q?igFkX/dB0wk4kafY2onZQ6SEdFARrkmePqcVqDOtsS9UbklZwWuSBvk0VRj5?= =?us-ascii?Q?tY/nDyPGpFf/0k1y7E9KJuhktC+Tey5JSd9VEMjLYjTCVze2+cHkuSlCyf2P?= =?us-ascii?Q?50x3dOcd45hPqN+/yeJenVpVwSAG5ET/m3Ari1/C1CdX1p0/FJqlXdky5oJ5?= =?us-ascii?Q?Mt1+RrQFogHvyyBAxOvf4e5scK3I6hObvGnDocm9MY+uLRusNvEC4SteTuK8?= =?us-ascii?Q?zQb0KGFGfe29JcK/yiq1zoKRKd2srFgIuc3IVXC5gTVat896MMlD7wmz4EX2?= =?us-ascii?Q?w1ZS3W2TYAKZPYzBFozesrDWbJJYgeSdHZBdAyM8msb17wHo/wG2bHbwED8I?= =?us-ascii?Q?N+IS5TqSgo4kbt91d79MmJIyDkiJyHUkTpuN1+AbAk43XUdGVzrSXJCeU3NX?= =?us-ascii?Q?S1Nlks6Riyu7yhYONddDZTaS0qno++iqfIiEFX++M25Fmd3dy1arugTRH2/a?= =?us-ascii?Q?uv6MTeTvQdIXRyIt5LlMGc2M=3D?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR0202MB2558;6:r3xDeRgob4DfRySq1zbm7SYJhzEoZL85+aWnL0IICk0FXcznbomfI1SQEwFx+c4mOUD1SMlOPlYbdxKMnP3APV/qjSFH+LfwOzxwe7Ttnzvywd/mswoMnQDWy5cFzMHWjDSHpOlmqTWmsp0WpCMMG405ptGsSL+FQEDaE8uM0O89wuHkKGm24DkP/WtPWaTR3VxlBWQAq0vPlVWFanP+I3YbWtPF+QNjPwq0SaAPImNNMvekqoaR5WcWKmHgiz6GRXpUxPOO+A0luAVuUwfho2VK1yqx6JrJTXn5C3CwHUOaTF7S0rSUICyESCQbInaed0b5SGWfoTYJRV/s9o9kC9n/eVT3/6XFkkVIDsmKwmiyG060aTVGqMgFgJdbFK7RuZoYaR8Ky14hiNWPL1qVzPINtvql4eu0QXVvVC3hQCzdCN8h593IdOGE0DoMlWED;5:j0MGN8Se+af5WU3lTe520fSbTqlqmzIUsLak9yROmcpo8iM4EA9Ryjiyr+wiysfTzp1DZzCcd8biPztOggCQ/RJGuwUbCOf4M4s8HR4rDyENSlTp0O3AKlfBC04Yw9h9liLA6blUFj4xuW1L9BJ5mg==;24:thZpted3jbuupMR3fHE+R4t7ujhsh6HA8oibcSIVj4bpH3suyPGuSmjchylszD69FzwMDzZ9J331wcPtOzV3tmxKxXtanx034UrfnNKY72M= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR0202MB2558;7:ZVTOJqhJD3lYygowxPQKJNn6BLXVVCLH4dkc+/Wb6oYZ25lYbk53K2iccsg3NQGlyJsO2QBjI8QCZS2yH5bwXq9xVOl7WmK6+KyOBUwBLYXohr6ffhla0RoEdQyL2ZHdmii0dtrjaJYOMFgMg2KDs5xsNTB4/FJi9xe16EMVbOXWlaLPJ5Yz0GYQn+pm4/dfZa7qRutaAS0yTfLLA09BvAN1zcNjtHh09WXghUNXK44OPIafX80giL1x//HpWpwRnPBMjdNzDXCatzJW/dJ0pt3zzdnuWS2EggW73/L9iM4I8zGTHGBs6ZjXs6QsD5ML6B9EbIkFBqxC1XMsL6U0X8CyuwbJAzsuLCJ9jZFdHpruDpDboDvWdWuJnErRM3wd0ll8WB2xYmZmdJ12ka9i+nm2Dp5IcG+/gbj2cwFPPYnl/iAm8jA9ubp2pxunhmKmf0OBRyaFB8hmkomRg/Hm7Q== X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2017 15:58:30.6616 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0202MB2558 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. Acked-by: Jonathan Cameron Signed-off-by: Peter Rosin --- drivers/iio/inkern.c | 60 ++++++++++++++++++++++++++++++++++++++++++++ include/linux/iio/consumer.h | 37 +++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c index b0f4630a163f..4848b8129e6c 100644 --- a/drivers/iio/inkern.c +++ b/drivers/iio/inkern.c @@ -863,3 +863,63 @@ int iio_write_channel_raw(struct iio_channel *chan, int val) return ret; } EXPORT_SYMBOL_GPL(iio_write_channel_raw); + +unsigned 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); + +static const struct iio_chan_spec_ext_info *iio_lookup_ext_info( + const struct iio_channel *chan, + const char *attr) +{ + const struct iio_chan_spec_ext_info *ext_info; + + if (!chan->channel->ext_info) + return NULL; + + for (ext_info = chan->channel->ext_info; ext_info->name; ++ext_info) { + if (!strcmp(attr, ext_info->name)) + return ext_info; + } + + return NULL; +} + +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; + + ext_info = iio_lookup_ext_info(chan, attr); + if (!ext_info) + return -EINVAL; + + return ext_info->read(chan->indio_dev, ext_info->private, + chan->channel, buf); +} +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; + + ext_info = iio_lookup_ext_info(chan, attr); + if (!ext_info) + return -EINVAL; + + return ext_info->write(chan->indio_dev, ext_info->private, + chan->channel, buf, len); +} +EXPORT_SYMBOL_GPL(iio_write_channel_ext_info); diff --git a/include/linux/iio/consumer.h b/include/linux/iio/consumer.h index 47eeec3218b5..5e347a9805fd 100644 --- a/include/linux/iio/consumer.h +++ b/include/linux/iio/consumer.h @@ -312,4 +312,41 @@ 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); +/** + * iio_get_channel_ext_info_count() - get number of ext_info attributes + * connected to the channel. + * @chan: The channel being queried + * + * Returns the number of ext_info attributes + */ +unsigned int iio_get_channel_ext_info_count(struct iio_channel *chan); + +/** + * iio_read_channel_ext_info() - read ext_info attribute from a given channel + * @chan: The channel being queried. + * @attr: The ext_info attribute to read. + * @buf: Where to store the attribute value. Assumed to hold + * at least PAGE_SIZE bytes. + * + * Returns the number of bytes written to buf (perhaps w/o zero termination; + * it need not even be a string), or an error code. + */ +ssize_t iio_read_channel_ext_info(struct iio_channel *chan, + const char *attr, char *buf); + +/** + * iio_write_channel_ext_info() - write ext_info attribute from a given channel + * @chan: The channel being queried. + * @attr: The ext_info attribute to read. + * @buf: The new attribute value. Strings needs to be zero- + * terminated, but the terminator should not be included + * in the below len. + * @len: The size of the new attribute value. + * + * Returns the number of accepted bytes, which should be the same as len. + * An error code can also be returned. + */ +ssize_t iio_write_channel_ext_info(struct iio_channel *chan, const char *attr, + const char *buf, size_t len); + #endif -- 2.1.4