From patchwork Thu Feb 14 16:41:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Beniamin Bia X-Patchwork-Id: 10813195 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D328413A4 for ; Thu, 14 Feb 2019 16:42:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BFB6D2EB2A for ; Thu, 14 Feb 2019 16:42:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B22A12EB34; Thu, 14 Feb 2019 16:42:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BEE632EB2A for ; Thu, 14 Feb 2019 16:42:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2407050AbfBNQmD (ORCPT ); Thu, 14 Feb 2019 11:42:03 -0500 Received: from mail-eopbgr810074.outbound.protection.outlook.com ([40.107.81.74]:58507 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2405240AbfBNQmC (ORCPT ); Thu, 14 Feb 2019 11:42:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=analog.onmicrosoft.com; s=selector1-analog-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/CL8zDF+DXfN5u5jbjCAi0AzKnyyaHC8Vwpmmj/u83Q=; b=BJxdunS6XdC9FQ8tn4+4kHLnO7rih8QY1T1/CgephyPoprD0gWh0kt9cm5Spe+deKYXI8qxj9+MH6WT+D/k76WMS7ky6PKerVjnhOvFMgd2eRTFy80BFWQrh4IwsKP+2lzMR1FLsUchYMFa6cijyXqt4xNCiDlMpzQQ43QOhAdA= Received: from DM5PR03CA0046.namprd03.prod.outlook.com (2603:10b6:4:3b::35) by DM5PR03MB3066.namprd03.prod.outlook.com (2603:10b6:4:3c::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1622.16; Thu, 14 Feb 2019 16:41:58 +0000 Received: from SN1NAM02FT035.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e44::204) by DM5PR03CA0046.outlook.office365.com (2603:10b6:4:3b::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1622.16 via Frontend Transport; Thu, 14 Feb 2019 16:41:58 +0000 Authentication-Results: spf=pass (sender IP is 137.71.25.55) smtp.mailfrom=analog.com; gmx.de; dkim=none (message not signed) header.d=none;gmx.de; dmarc=bestguesspass action=none header.from=analog.com; Received-SPF: Pass (protection.outlook.com: domain of analog.com designates 137.71.25.55 as permitted sender) receiver=protection.outlook.com; client-ip=137.71.25.55; helo=nwd2mta1.analog.com; Received: from nwd2mta1.analog.com (137.71.25.55) by SN1NAM02FT035.mail.protection.outlook.com (10.152.72.145) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.1580.10 via Frontend Transport; Thu, 14 Feb 2019 16:41:57 +0000 Received: from NWD2HUBCAS7.ad.analog.com (nwd2hubcas7.ad.analog.com [10.64.69.107]) by nwd2mta1.analog.com (8.13.8/8.13.8) with ESMTP id x1EGfuXm021586 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=OK); Thu, 14 Feb 2019 08:41:56 -0800 Received: from ben-Latitude-E6540.analog.com (10.50.1.129) by NWD2HUBCAS7.ad.analog.com (10.64.69.107) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 11:41:56 -0500 From: Beniamin Bia To: CC: , , , , , , , , , Beniamin Bia Subject: [PATCH v2 1/2] staging: iio: frequency: ad9834: Move frequency to standard iio types Date: Thu, 14 Feb 2019 18:41:29 +0200 Message-ID: <20190214164130.30085-1-beniamin.bia@analog.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 X-ADIRoutedOnPrem: True X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:137.71.25.55;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(136003)(376002)(346002)(39860400002)(396003)(2980300002)(3190300001)(189003)(199004)(336012)(2351001)(305945005)(426003)(356004)(246002)(7636002)(44832011)(186003)(48376002)(77096007)(26005)(6666004)(8676002)(476003)(126002)(116002)(2616005)(53416004)(50466002)(106466001)(486006)(50226002)(4326008)(51416003)(36756003)(8936002)(478600001)(1076003)(107886003)(72206003)(106002)(16586007)(316002)(2906002)(54906003)(86362001)(6916009)(7696005)(47776003)(14444005);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR03MB3066;H:nwd2mta1.analog.com;FPR:;SPF:Pass;LANG:en;PTR:nwd2mail10.analog.com;MX:1;A:1; X-Microsoft-Exchange-Diagnostics: 1;SN1NAM02FT035;1:wk2VNnbVYY+IMtWc+sKhwMgSWjryHdo1na+cpTFXLmhfu2A/Tq9cqSw2/dfctj38+6SVZM/3vEanFAB0VZSkIu/ij6P8zTYpgUHhFGdSMdyO3fmzii1OwwVmNAWdeO7s4t3Aq/z7iNb4GiVyMmy3yw== X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 12a9ac41-363f-4827-fde8-08d6929b5626 X-Microsoft-Antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600110)(711020)(4605077)(4608076)(4709027)(2017052603328)(7153060);SRVR:DM5PR03MB3066; X-MS-TrafficTypeDiagnostic: DM5PR03MB3066: X-Microsoft-Exchange-Diagnostics: 1;DM5PR03MB3066;20:v1KwUmgdDfaoU3udN8pIbAypjcICRTwpFq7xwLUOyfOVantcurFm7M4zJloqSjuMgO9LgffmyaB/ZFYQ0kDEM01lAmHd/sXGmSdL8nGqsgZK7Ra8Q8SRdlhcAmo5JLYqMmlyirF3NlIx+4X9cp86LgWWyW4y3kZxTYxbfpTvDOvL2foJKP2ndbGibMa4S/VzqLjhti8j+6yjatFAjbNqWwMrLbaSdXz1ekZTgwkvA9kEZjJ0aoIj8Rz3hgDXPIsoyqHTsvV6dsvcuheP3YFkVdwxBKtSxUqT9CN3ZE08oFEGL6kPBYOQao2eZrGjeTcdj2i+sxl0bFiIWDv2GhF31yu43PfM+iV/vUEMGMknpyGQbYrhvfL+IWeIJBTZxDfmDAXBPEvyroRIUXwbPPVBQtVDNdwh8+Xxa8TeDX/AbpyC1r4Uru8ZADudRDbBLcxHgUu9tL3t5uaefeLqu4tT17MfmKCFUGm17Ovz268t2PbsoZlBUk74fN9BtnBgpweT X-Microsoft-Antispam-PRVS: X-Forefront-PRVS: 09480768F8 X-Microsoft-Exchange-Diagnostics: 1;DM5PR03MB3066;23:LQOKs+BbKTVhltoW9iMXy+l3AkCTX8XQLpsbxGrNanJUAMJjyB4jJ1MmtJAGPAqIDrq0RlXLq2HV2ADU3Kik+uikJedwbVStsXDQrX88zmBqVBCB37TcUnoOXcfT6bjgmeOr9YSnDQwY+sn3FKpzjzbGq48flBXwmt51zAMZbhWsRuBjcf8hOntBxfq27jbnyUwRQusXZbseXwF9lSqoDAyKtTNUtEBI2LFSJSxOwtZMR+ctvoSoPdABUJrlwFUHIw1itUwBD4Qk99e7kMi/GJPnYEKx1f7YQrH5QCmMSs0v3+q03nxb39zhD8PnpfRft6t9XiPWWs3xbVUc5flSB7F1lNfZb2L4mZ5SCVHxYGwAnbgF3bhw73sD6HSpf/2e7/Nyh0xzM0xuVo1en1XgfYs7DMCkZ3Vvf7cOnacv4zGmioUeQe6xMH3is6N5C/bC9dg4Cqe7aqy3R+lg5y3rubFM3uhF/tZ++ZN7Z69AaU9hPYAOp/COciCBJCvIuIzOlgNLhKKp8Poig2TqiU89PVMrw75+lfTt/iuGrbDI9QGu//9LfwPAxmYzmHA3++YhTkE27IzfcEplw2NAvTpgKEh6jw+kdw9iyxXhskQGhnOS4qB/NdFkJKxfuM/Rh5KaxbSuTweZJ1cPSv0xTBiP8Rn0FLZH6KCEpbEjOCT1xM/KY4Xi9ebAwKzcWC5h5e/lSqy+l4sCDAKolv64clXHXETOJ9NNDAapfMg/dLEGx14eYCOnEEqdKaTUZECOHwogYkCfMAOP6jRvC0HCcDOVvjYaHS3CJIr19CZrg8wAmR7P7rQ542dwJSFinzg8MNwAoe80qLJkIovg7Obp5T4c4lHXD3JFywYSGBZYhT70sCxbeA7MHVk4GaxRhNiLsXL9fm0u2rUkGZWceOQKkMKajjbU5FdE84fjfYgNBI/Kkk0/NnYbwgbxCA2pzcQRqqYn+NnvL5MSLPfiG3tpXyLJI11pxmoU1LcTcDp8WCksq7nDgPmCl/tLR8QJXABv/bhy8CbwuEAtYKGfU4q3jnVEjM4G1S70PK7NfQgU1A6J2/i6vs5FyjDny/KAyFpG1Q+wOI27eaAcdEXGruOhy8nZaw== X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: v+9OodkYsEqXFdmn4V7Ck/znrIjNd1VspKjuBNIRCcj2aIKEdfGZ0i2F3auL49HEZiPVqQMpDpdh5pDvrxh3qQVuoOYsd5GklHPJOdxZ/ZNwuCL4evT1eol/ehG4AcY+yaqP7wjVWyzl+Uki/XUNMlA0mnymoDInBYPAkueKsALCc+iUSp1xHX2o0u+WfTG95bIG7nFoi2UxgfE6frVx/4S1/HDxdFa2PaAbGfFrVD1fzKDo0PWkd4TOr/nxgaOE7JqQSuRWptHgrH8mzqo3GcH7s3zLQcQlso/lI2zj+WkxSv5TvLSwd++gmg8So46uGRCwszMmHlX9Tf6mV1P9C1pD+mtA3jYTLFGsxkgF2nd5ik+F27UPY40CnOLcLAtrIu2tJ4yBJKU6lGIGnznZmXruoPsIyPdllz5CdyXQ/BA= X-OriginatorOrg: analog.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Feb 2019 16:41:57.6421 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 12a9ac41-363f-4827-fde8-08d6929b5626 X-MS-Exchange-CrossTenant-Id: eaa689b4-8f87-40e0-9c6f-7228de4d754a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=eaa689b4-8f87-40e0-9c6f-7228de4d754a;Ip=[137.71.25.55];Helo=[nwd2mta1.analog.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR03MB3066 Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Frequency attribute is added with a standard type from iio framework instead of custom attribute. This is a small step towards removing any unnecessary custom attribute. Ad9834 will diverge from ad9833 in the future, that is why we have two identical arrays for ad9834 and 9833. Signed-off-by: Beniamin Bia --- Changes in v2: -the personal email address was replaced by the work email -separate define for frequency channel -address field from channel specification was removed -frequency variables were replaced by an array -specified in comment why we have differente chan_spec for ad9834 and ad9833 -enum used for write_frequency function drivers/staging/iio/frequency/ad9834.c | 110 ++++++++++++++++++++----- 1 file changed, 91 insertions(+), 19 deletions(-) diff --git a/drivers/staging/iio/frequency/ad9834.c b/drivers/staging/iio/frequency/ad9834.c index f036f75d1f22..561617046c20 100644 --- a/drivers/staging/iio/frequency/ad9834.c +++ b/drivers/staging/iio/frequency/ad9834.c @@ -81,6 +81,8 @@ struct ad9834_state { struct spi_message freq_msg; struct mutex lock; /* protect sensor state */ + unsigned long frequency[2]; + /* * DMA (thus cache coherency maintenance) requires the * transfer buffers to live in their own cache lines. @@ -89,6 +91,11 @@ struct ad9834_state { __be16 freq_data[2]; }; +enum ad9834_ch_addr { + AD9834_CHANNEL_ADDRESS0, + AD9834_CHANNEL_ADDRESS1, +}; + /** * ad9834_supported_device_ids: */ @@ -100,6 +107,24 @@ enum ad9834_supported_device_ids { ID_AD9838, }; +#define AD9833_CHANNEL(chan) { \ + .type = IIO_ALTVOLTAGE, \ + .indexed = 1, \ + .output = 1, \ + .channel = (chan), \ + .info_mask_separate = BIT(IIO_CHAN_INFO_FREQUENCY) \ +} + +static const struct iio_chan_spec ad9833_channels[] = { + AD9833_CHANNEL(0), + AD9833_CHANNEL(1), +}; + +static const struct iio_chan_spec ad9834_channels[] = { + AD9833_CHANNEL(0), + AD9833_CHANNEL(1), +}; + static unsigned int ad9834_calc_freqreg(unsigned long mclk, unsigned long fout) { unsigned long long freqreg = (u64)fout * (u64)BIT(AD9834_FREQ_BITS); @@ -109,10 +134,12 @@ static unsigned int ad9834_calc_freqreg(unsigned long mclk, unsigned long fout) } static int ad9834_write_frequency(struct ad9834_state *st, - unsigned long addr, unsigned long fout) + enum ad9834_ch_addr addr, + unsigned long fout) { unsigned long clk_freq; unsigned long regval; + int ret; clk_freq = clk_get_rate(st->mclk); @@ -121,13 +148,27 @@ static int ad9834_write_frequency(struct ad9834_state *st, regval = ad9834_calc_freqreg(clk_freq, fout); - st->freq_data[0] = cpu_to_be16(addr | (regval & - RES_MASK(AD9834_FREQ_BITS / 2))); - st->freq_data[1] = cpu_to_be16(addr | ((regval >> - (AD9834_FREQ_BITS / 2)) & - RES_MASK(AD9834_FREQ_BITS / 2))); + if (addr == AD9834_CHANNEL_ADDRESS0) { + st->freq_data[0] = cpu_to_be16(AD9834_REG_FREQ0 | (regval & + RES_MASK(AD9834_FREQ_BITS / 2))); + st->freq_data[1] = cpu_to_be16(AD9834_REG_FREQ0 | ((regval >> + (AD9834_FREQ_BITS / 2)) & + RES_MASK(AD9834_FREQ_BITS / 2))); + } else { + st->freq_data[0] = cpu_to_be16(AD9834_REG_FREQ1 | (regval & + RES_MASK(AD9834_FREQ_BITS / 2))); + st->freq_data[1] = cpu_to_be16(AD9834_REG_FREQ1 | ((regval >> + (AD9834_FREQ_BITS / 2)) & + RES_MASK(AD9834_FREQ_BITS / 2))); + } + + ret = spi_sync(st->spi, &st->freq_msg); + if (ret) + return ret; + + st->frequency[(int)addr] = fout; - return spi_sync(st->spi, &st->freq_msg); + return 0; } static int ad9834_write_phase(struct ad9834_state *st, @@ -140,6 +181,39 @@ static int ad9834_write_phase(struct ad9834_state *st, return spi_sync(st->spi, &st->msg); } +static int ad9834_read_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, + int *val, int *val2, long mask) +{ + struct ad9834_state *st = iio_priv(indio_dev); + + switch (mask) { + case IIO_CHAN_INFO_FREQUENCY: + *val = st->frequency[chan->channel]; + return IIO_VAL_INT; + } + + return -EINVAL; +} + +static int ad9834_write_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, + int val, int val2, long mask) +{ + struct ad9834_state *st = iio_priv(indio_dev); + + switch (mask) { + case IIO_CHAN_INFO_FREQUENCY: + return ad9834_write_frequency(st, + (enum ad9834_ch_addr)chan->channel, + val); + default: + return -EINVAL; + } + + return 0; +} + static ssize_t ad9834_write(struct device *dev, struct device_attribute *attr, const char *buf, @@ -157,10 +231,6 @@ static ssize_t ad9834_write(struct device *dev, mutex_lock(&st->lock); switch ((u32)this_attr->address) { - case AD9834_REG_FREQ0: - case AD9834_REG_FREQ1: - ret = ad9834_write_frequency(st, this_attr->address, val); - break; case AD9834_REG_PHASE0: case AD9834_REG_PHASE1: ret = ad9834_write_phase(st, this_attr->address, val); @@ -323,8 +393,6 @@ static IIO_DEVICE_ATTR(out_altvoltage0_out1_wavetype_available, 0444, * see dds.h for further information */ -static IIO_DEV_ATTR_FREQ(0, 0, 0200, NULL, ad9834_write, AD9834_REG_FREQ0); -static IIO_DEV_ATTR_FREQ(0, 1, 0200, NULL, ad9834_write, AD9834_REG_FREQ1); static IIO_DEV_ATTR_FREQSYMBOL(0, 0200, NULL, ad9834_write, AD9834_FSEL); static IIO_CONST_ATTR_FREQ_SCALE(0, "1"); /* 1Hz */ @@ -342,8 +410,6 @@ static IIO_DEV_ATTR_OUT_WAVETYPE(0, 0, ad9834_store_wavetype, 0); static IIO_DEV_ATTR_OUT_WAVETYPE(0, 1, ad9834_store_wavetype, 1); static struct attribute *ad9834_attributes[] = { - &iio_dev_attr_out_altvoltage0_frequency0.dev_attr.attr, - &iio_dev_attr_out_altvoltage0_frequency1.dev_attr.attr, &iio_const_attr_out_altvoltage0_frequency_scale.dev_attr.attr, &iio_dev_attr_out_altvoltage0_phase0.dev_attr.attr, &iio_dev_attr_out_altvoltage0_phase1.dev_attr.attr, @@ -361,8 +427,6 @@ static struct attribute *ad9834_attributes[] = { }; static struct attribute *ad9833_attributes[] = { - &iio_dev_attr_out_altvoltage0_frequency0.dev_attr.attr, - &iio_dev_attr_out_altvoltage0_frequency1.dev_attr.attr, &iio_const_attr_out_altvoltage0_frequency_scale.dev_attr.attr, &iio_dev_attr_out_altvoltage0_phase0.dev_attr.attr, &iio_dev_attr_out_altvoltage0_phase1.dev_attr.attr, @@ -384,11 +448,15 @@ static const struct attribute_group ad9833_attribute_group = { }; static const struct iio_info ad9834_info = { + .write_raw = &ad9834_write_raw, + .read_raw = &ad9834_read_raw, .attrs = &ad9834_attribute_group, .driver_module = THIS_MODULE, }; static const struct iio_info ad9833_info = { + .write_raw = &ad9834_write_raw, + .read_raw = &ad9834_read_raw, .attrs = &ad9833_attribute_group, .driver_module = THIS_MODULE, }; @@ -435,9 +503,13 @@ static int ad9834_probe(struct spi_device *spi) switch (st->devid) { case ID_AD9833: case ID_AD9837: + indio_dev->channels = ad9833_channels; + indio_dev->num_channels = ARRAY_SIZE(ad9833_channels); indio_dev->info = &ad9833_info; break; default: + indio_dev->channels = ad9834_channels; + indio_dev->num_channels = ARRAY_SIZE(ad9834_channels); indio_dev->info = &ad9834_info; break; } @@ -474,11 +546,11 @@ static int ad9834_probe(struct spi_device *spi) goto error_clock_unprepare; } - ret = ad9834_write_frequency(st, AD9834_REG_FREQ0, 1000000); + ret = ad9834_write_frequency(st, AD9834_CHANNEL_ADDRESS0, 1000000); if (ret) goto error_clock_unprepare; - ret = ad9834_write_frequency(st, AD9834_REG_FREQ1, 5000000); + ret = ad9834_write_frequency(st, AD9834_CHANNEL_ADDRESS1, 5000000); if (ret) goto error_clock_unprepare; From patchwork Thu Feb 14 16:41:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Beniamin Bia X-Patchwork-Id: 10813197 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5EB1913B4 for ; Thu, 14 Feb 2019 16:42:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4C2CA2EB2E for ; Thu, 14 Feb 2019 16:42:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4071C2EB3F; Thu, 14 Feb 2019 16:42:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A02CF2EB2E for ; Thu, 14 Feb 2019 16:42:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727393AbfBNQmk (ORCPT ); Thu, 14 Feb 2019 11:42:40 -0500 Received: from mail-eopbgr730052.outbound.protection.outlook.com ([40.107.73.52]:54899 "EHLO NAM05-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2391003AbfBNQmj (ORCPT ); Thu, 14 Feb 2019 11:42:39 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=analog.onmicrosoft.com; s=selector1-analog-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NkpgmJ7AOd4kaONzecoLxjhjDuUHwCBz95Nqa0+NfHA=; b=UGv0uxmXyPZ89eeGikhXdgdxt8YhOwSmzoiMSqIHRfSWvv0cByUERCKM3vijN9HKxFb+cP7PraqBBWlz43LyfS5fXZ73DFWnL72Ro5Kx1mV/imhEW/qiazgBXrgDqs4sU10WN9+ZBEV2QVJHkRtoy2prPSBbFCewxvNq3FAd4ik= Received: from MWHPR03CA0028.namprd03.prod.outlook.com (2603:10b6:301:3b::17) by BN7PR03MB3748.namprd03.prod.outlook.com (2603:10b6:408:23::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1622.16; Thu, 14 Feb 2019 16:42:34 +0000 Received: from BL2NAM02FT017.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e46::205) by MWHPR03CA0028.outlook.office365.com (2603:10b6:301:3b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1622.16 via Frontend Transport; Thu, 14 Feb 2019 16:42:34 +0000 Authentication-Results: spf=pass (sender IP is 137.71.25.57) smtp.mailfrom=analog.com; gmx.de; dkim=none (message not signed) header.d=none;gmx.de; dmarc=bestguesspass action=none header.from=analog.com; Received-SPF: Pass (protection.outlook.com: domain of analog.com designates 137.71.25.57 as permitted sender) receiver=protection.outlook.com; client-ip=137.71.25.57; helo=nwd2mta2.analog.com; Received: from nwd2mta2.analog.com (137.71.25.57) by BL2NAM02FT017.mail.protection.outlook.com (10.152.77.174) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.1580.10 via Frontend Transport; Thu, 14 Feb 2019 16:42:30 +0000 Received: from NWD2HUBCAS7.ad.analog.com (nwd2hubcas7.ad.analog.com [10.64.69.107]) by nwd2mta2.analog.com (8.13.8/8.13.8) with ESMTP id x1EGgTle017053 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=OK); Thu, 14 Feb 2019 08:42:29 -0800 Received: from ben-Latitude-E6540.analog.com (10.50.1.129) by NWD2HUBCAS7.ad.analog.com (10.64.69.107) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 11:42:29 -0500 From: Beniamin Bia To: CC: , , , , , , , , , Beniamin Bia Subject: [PATCH v2 2/2] staging: iio: frequency: ad9834: Move phase and scale to standard iio attribute Date: Thu, 14 Feb 2019 18:41:30 +0200 Message-ID: <20190214164130.30085-2-beniamin.bia@analog.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190214164130.30085-1-beniamin.bia@analog.com> References: <20190214164130.30085-1-beniamin.bia@analog.com> MIME-Version: 1.0 X-ADIRoutedOnPrem: True X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:137.71.25.57;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(346002)(376002)(396003)(136003)(39860400002)(2980300002)(3190300001)(199004)(189003)(186003)(106466001)(478600001)(106002)(54906003)(336012)(4326008)(2351001)(50466002)(14444005)(53416004)(86362001)(356004)(6666004)(26005)(77096007)(2616005)(446003)(476003)(486006)(2906002)(116002)(126002)(426003)(44832011)(11346002)(76176011)(48376002)(36756003)(107886003)(1076003)(8936002)(51416003)(7696005)(246002)(6916009)(316002)(50226002)(16586007)(72206003)(8676002)(305945005)(7636002)(47776003);DIR:OUT;SFP:1101;SCL:1;SRVR:BN7PR03MB3748;H:nwd2mta2.analog.com;FPR:;SPF:Pass;LANG:en;PTR:nwd2mail11.analog.com;A:1;MX:1; X-Microsoft-Exchange-Diagnostics: 1;BL2NAM02FT017;1:/c/sCwQVcKGIaIDKt5C5nurICfkryHOeUofu1Xyy5M2xdUdGd7sC5Z4+kaNwWWFlCMU3Vtbn3MLuqukbMe0/RwU8X8emqNwoW8wnWgxBHiKPgPpgmr3AGOA6lQMKb2N45UcGY6+TnodoNFUuZ7g7+A== X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5a7c4d05-b46f-494f-faf0-08d6929b6b1d X-Microsoft-Antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600110)(711020)(4605077)(4608076)(4709027)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060);SRVR:BN7PR03MB3748; X-MS-TrafficTypeDiagnostic: BN7PR03MB3748: X-Microsoft-Exchange-Diagnostics: 1;BN7PR03MB3748;20:wGZs9Yyg1vtrOM6lkGQbYZk3qAy69anXCmKPDnWp1bUA4NbnBxxGFzq4pCqqJe1lgAdhQs8wkIhirHm/DUgvnOs6a7OUEMq8ZKZpRrJpaIWh/W/WU04GSWPNqjK+GsmIPuTfMxL9Lwh+ZjwXgLVsy1/41T6Vq5dsq7u+f3l5kVyqPnW7a7ZzZdz4E4CRNowAzj9+RQ84Ph4FJMDZm2o7kgkJc9T0cHzzKLCyzj6LnN6cB3KnE9/xnLswdH2oqsFo15+sRcW0lHFv0x91NSjzLIxC+vlgg8lHTfIMqvB3Dk9p+rLzLWJPbb75QAL3/tfqkTDXmu1SyZHwveY36eOrIa6ByTgYJqBRUK5T0BG2H2PHqNkWZq97siIlN3cxzqgmsfjbOri7rx6SkoERnhz3+zYXLzoaIK33MDT9g4KMuGaNJzzs3cgWdPO1JHJomp8nldHTT1Akl5PP0IfILogD8jOJhUqu1QiJ3jAKY0RU2Ojae8w1u3m+pCNkBcd7vwTr X-Microsoft-Antispam-PRVS: X-Forefront-PRVS: 09480768F8 X-Microsoft-Exchange-Diagnostics: 1;BN7PR03MB3748;23:wCHCnB2bYh85AfgEwGbxIaV+8LOM7AT+8ydLbMMKEZPoHMYQS3eQizFjFsfXV5zzoo021P7vGXzkEp3Zh1nagrZnNmiKAO24DzkYh/2G1DIN6eqI0BJJP1uOQr7BGOxqN+9Q9+uEqZPBAQJ/gUZ9a+EIwRz+jn/KqP3SbKPtj8Bu+Ez9kD2cKZ2j8TcqrPpp/wkIGkS+6QzLFj3Q9rZZPwSzfsIBwjFG8Ji2ztFXCJJGm3gfwwG72h6UwLzA41/kNVnPlWfJYKCEgXNvy4HVdkCdGm2nfJNEpzLEDgRWrHzDVLwx6KYPwl1XBJfJNB250euD881VAlhl5t20bf/NQgq9SPJ2IVqc7MgIHwo7HpG8XgXRky4up4Q2Swp2mcK1aeeaCNqJlsWIPj0akTcV1dE1ImHQDcgKvQE7MfyEteRaQ/URdvArBXugzZZ3tPsYsC9AFIhM8P0H0SQoC5nhttYaiQ0N3FELa19rKJvIliLmWDwdAHurQhzjJjpF8sXVzR3W+bJcKsg2t4X4QRebz7KWAi0G8fVj9VqQdDt4HGvo2QfF211OlT/rW+G2WqMWXDy1ixGKvXZRyeLNLNk4g6zp44sPMu3FVdE7KuBGSVeR0i3MpTkiAIqOU7GhR4bACirm++Z1SkCX0m/391qeiAfvSfoOBYloTsLXWJIwM+bNTMaUGhHCBCfgAura/6L4RZD3+2z1RGyveTHa1uizHdXQRwE9ErkPzjTEpiIupr0PFGFksEWIFQrr8wAOi/RC5hVrPj8aRQzRo4W55WDhUGXWvJ3AfpgYnXt+OSsujLMIdK1atTDE685dckeGbDwQpIIl5vp/IIHjYmdwU4+N9pYSJl95UHQVz3ZkuR9tem6Sfd8B6N/hyHGqvafghjt07aylWunI6+A/hJf/uwEA/CWPnn/3DvBVhJc506Mc9rKZ0joz9jvNDIVkzE48Rayu9VR9zkTEKMXJHKI7qAYh4IwPHCNEBiQWrSyMNjMFWnwkkbjUyaLkJ+zs4mCU95lr+sCmG0tE2gcu97Eoi2+y1sYFubcjJ+1tYJFwnDBke8vlshK/e3of+cl1RoG6CHb5vkCCRqcR3M0Sd+fD5Xyhd3rFU7rKZUEnm8D46nC5Q6c5pl0dXzidpBcL/aVF4S1r X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: HrQtPd0gKEtWGw6KbV7+ylyWG6lve8Y3mpa8r4Cpnhoe3JXXDWbYl8Y5EhTmy4z6Nz/d86M9oG4CBYsJSmfv7rjj7pH64IFHUZ6y0Zu4vBWlq/wdahMqk8NIcxNFTq8wVzSMbaxR1y0Lt889GRW+3OE7zvX9sraoyGovbcsNSSXPKNoAr/I8lEMWu4FriqBAcyg2qvUpmsXI2/+zSpz9veg9dTJ9bMOR8Raq1beKeDjuxnyot9yACH4c2bkYcXnHmOzg5h+WwUnf1axoI3E9lN6GmlJSFTuaye4kGunkvDPja/WZ5Io+eLRHYhhS0kEUJd19raNyDBqgw7V4TzMx4r1Fm3XeBMaPXjRzSQoJSX3JqRqV14M1I0APSAeT0nEcb7hxYKqPdsF1jfsk61j4F0kzUd1Luibw1Hrxh57kpNU= X-OriginatorOrg: analog.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Feb 2019 16:42:30.1270 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5a7c4d05-b46f-494f-faf0-08d6929b6b1d X-MS-Exchange-CrossTenant-Id: eaa689b4-8f87-40e0-9c6f-7228de4d754a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=eaa689b4-8f87-40e0-9c6f-7228de4d754a;Ip=[137.71.25.57];Helo=[nwd2mta2.analog.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PR03MB3748 Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The custom phase and scale attributes were moved to standard iio types. Signed-off-by: Beniamin Bia --- Changes in v2: -the personal email address was replaced by the work email -separate define for every phase channel -enum used for write_phase functions -phase variables were replaced by an array drivers/staging/iio/frequency/ad9834.c | 53 ++++++++++++++++---------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/drivers/staging/iio/frequency/ad9834.c b/drivers/staging/iio/frequency/ad9834.c index 561617046c20..4366b6121154 100644 --- a/drivers/staging/iio/frequency/ad9834.c +++ b/drivers/staging/iio/frequency/ad9834.c @@ -82,6 +82,7 @@ struct ad9834_state { struct mutex lock; /* protect sensor state */ unsigned long frequency[2]; + unsigned long phase[2]; /* * DMA (thus cache coherency maintenance) requires the @@ -113,6 +114,8 @@ enum ad9834_supported_device_ids { .output = 1, \ .channel = (chan), \ .info_mask_separate = BIT(IIO_CHAN_INFO_FREQUENCY) \ + | BIT(IIO_CHAN_INFO_PHASE),\ + .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \ } static const struct iio_chan_spec ad9833_channels[] = { @@ -172,13 +175,26 @@ static int ad9834_write_frequency(struct ad9834_state *st, } static int ad9834_write_phase(struct ad9834_state *st, - unsigned long addr, unsigned long phase) + enum ad9834_ch_addr addr, + unsigned long phase) { + int ret; + if (phase > BIT(AD9834_PHASE_BITS)) return -EINVAL; - st->data = cpu_to_be16(addr | phase); - return spi_sync(st->spi, &st->msg); + if (addr == AD9834_CHANNEL_ADDRESS0) + st->data = cpu_to_be16(AD9834_REG_PHASE0 | phase); + else + st->data = cpu_to_be16(AD9834_REG_PHASE1 | phase); + + ret = spi_sync(st->spi, &st->msg); + if (ret) + return ret; + + st->phase[(int)addr] = phase; + + return 0; } static int ad9834_read_raw(struct iio_dev *indio_dev, @@ -191,6 +207,13 @@ static int ad9834_read_raw(struct iio_dev *indio_dev, case IIO_CHAN_INFO_FREQUENCY: *val = st->frequency[chan->channel]; return IIO_VAL_INT; + case IIO_CHAN_INFO_PHASE: + *val = st->phase[chan->channel]; + return IIO_VAL_INT; + case IIO_CHAN_INFO_SCALE: + /*1 hz */ + *val = 1; + return IIO_VAL_INT; } return -EINVAL; @@ -207,6 +230,10 @@ static int ad9834_write_raw(struct iio_dev *indio_dev, return ad9834_write_frequency(st, (enum ad9834_ch_addr)chan->channel, val); + case IIO_CHAN_INFO_PHASE: + return ad9834_write_phase(st, + (enum ad9834_ch_addr)chan->channel, + val); default: return -EINVAL; } @@ -231,10 +258,6 @@ static ssize_t ad9834_write(struct device *dev, mutex_lock(&st->lock); switch ((u32)this_attr->address) { - case AD9834_REG_PHASE0: - case AD9834_REG_PHASE1: - ret = ad9834_write_phase(st, this_attr->address, val); - break; case AD9834_OPBITEN: if (st->control & AD9834_MODE) { ret = -EINVAL; /* AD9843 reserved mode */ @@ -394,12 +417,8 @@ static IIO_DEVICE_ATTR(out_altvoltage0_out1_wavetype_available, 0444, */ static IIO_DEV_ATTR_FREQSYMBOL(0, 0200, NULL, ad9834_write, AD9834_FSEL); -static IIO_CONST_ATTR_FREQ_SCALE(0, "1"); /* 1Hz */ -static IIO_DEV_ATTR_PHASE(0, 0, 0200, NULL, ad9834_write, AD9834_REG_PHASE0); -static IIO_DEV_ATTR_PHASE(0, 1, 0200, NULL, ad9834_write, AD9834_REG_PHASE1); static IIO_DEV_ATTR_PHASESYMBOL(0, 0200, NULL, ad9834_write, AD9834_PSEL); -static IIO_CONST_ATTR_PHASE_SCALE(0, "0.0015339808"); /* 2PI/2^12 rad*/ static IIO_DEV_ATTR_PINCONTROL_EN(0, 0200, NULL, ad9834_write, AD9834_PIN_SW); @@ -410,10 +429,6 @@ static IIO_DEV_ATTR_OUT_WAVETYPE(0, 0, ad9834_store_wavetype, 0); static IIO_DEV_ATTR_OUT_WAVETYPE(0, 1, ad9834_store_wavetype, 1); static struct attribute *ad9834_attributes[] = { - &iio_const_attr_out_altvoltage0_frequency_scale.dev_attr.attr, - &iio_dev_attr_out_altvoltage0_phase0.dev_attr.attr, - &iio_dev_attr_out_altvoltage0_phase1.dev_attr.attr, - &iio_const_attr_out_altvoltage0_phase_scale.dev_attr.attr, &iio_dev_attr_out_altvoltage0_pincontrol_en.dev_attr.attr, &iio_dev_attr_out_altvoltage0_frequencysymbol.dev_attr.attr, &iio_dev_attr_out_altvoltage0_phasesymbol.dev_attr.attr, @@ -427,10 +442,6 @@ static struct attribute *ad9834_attributes[] = { }; static struct attribute *ad9833_attributes[] = { - &iio_const_attr_out_altvoltage0_frequency_scale.dev_attr.attr, - &iio_dev_attr_out_altvoltage0_phase0.dev_attr.attr, - &iio_dev_attr_out_altvoltage0_phase1.dev_attr.attr, - &iio_const_attr_out_altvoltage0_phase_scale.dev_attr.attr, &iio_dev_attr_out_altvoltage0_frequencysymbol.dev_attr.attr, &iio_dev_attr_out_altvoltage0_phasesymbol.dev_attr.attr, &iio_dev_attr_out_altvoltage0_out_enable.dev_attr.attr, @@ -554,11 +565,11 @@ static int ad9834_probe(struct spi_device *spi) if (ret) goto error_clock_unprepare; - ret = ad9834_write_phase(st, AD9834_REG_PHASE0, 512); + ret = ad9834_write_phase(st, AD9834_CHANNEL_ADDRESS0, 512); if (ret) goto error_clock_unprepare; - ret = ad9834_write_phase(st, AD9834_REG_PHASE1, 1024); + ret = ad9834_write_phase(st, AD9834_CHANNEL_ADDRESS1, 1024); if (ret) goto error_clock_unprepare;