From patchwork Tue May 22 14:18:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jean-Baptiste Maneyrol X-Patchwork-Id: 10418719 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id F120D60224 for ; Tue, 22 May 2018 14:18:57 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DE15D28C78 for ; Tue, 22 May 2018 14:18:57 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D256228C7A; Tue, 22 May 2018 14:18:57 +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.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID 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 1BB6D28C78 for ; Tue, 22 May 2018 14:18:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751415AbeEVOSz (ORCPT ); Tue, 22 May 2018 10:18:55 -0400 Received: from mail-bl2nam02on0064.outbound.protection.outlook.com ([104.47.38.64]:15920 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751294AbeEVOSv (ORCPT ); Tue, 22 May 2018 10:18:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=invensense.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uYPEt3ptLOmiS5Kio0cK14xfu0MEJ+OeySufpTMlLmA=; b=sJJCvQHeV58MoBaiRxxXsB5+nQKkxll6qoZ0rN/ug1CYinSJZfLi1lrx5HGpESNJFkgDLaRvnnyLxy32BFUSshUc2TW/Ns2WV+j2Z6vJkg+Ol230ilPUlC/EEcOeu4MJuvOkS9EKRHX45fSefRJWjYF167QK2qSOAt4FULR+DG4= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=JManeyrol@invensense.com; Received: from frgnb-12nlpn2.invcorp.invensense.com (2a01:e35:87fd:c140:d9b1:749c:d974:2408) by DM5PR1201MB0187.namprd12.prod.outlook.com (2603:10b6:4:56::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.776.11; Tue, 22 May 2018 14:18:48 +0000 From: Jean-Baptiste Maneyrol To: linux-iio@vger.kernel.org Cc: Jean-Baptiste Maneyrol Subject: [PATCH v2 2/5] iio: imu: inv_mpu6050: switch to use sample rate divider Date: Tue, 22 May 2018 16:18:19 +0200 Message-Id: <20180522141822.11598-2-jmaneyrol@invensense.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180522141822.11598-1-jmaneyrol@invensense.com> References: <20180522141822.11598-1-jmaneyrol@invensense.com> MIME-Version: 1.0 X-Originating-IP: [2a01:e35:87fd:c140:d9b1:749c:d974:2408] X-ClientProxiedBy: LNXP265CA0069.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:5d::33) To DM5PR1201MB0187.namprd12.prod.outlook.com (2603:10b6:4:56::11) X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:DM5PR1201MB0187; X-Microsoft-Exchange-Diagnostics: 1; DM5PR1201MB0187; 3:NcH5ho+PeLYngz6rYIU2DovR+2yTe+mQ3Dz084DMQClsOLVhDOj9VZ+XSAYDIG7d6a98tH/pGo5/YAI4sBg/5yW2rIBgdCyB9f2ZuZLX6n9KOGC3dVb4IysCT347q2kIha4qOWzkFlAmtFOBj44XGOt+jwazPZlKS1yH0yzpErxLqX388mm2NTHBFHZqBw7y6EnGU1Ha2LFqx+taqX/EbXwoKREs+K7xWyKqXgkfIZuOWbtJQOc0nV1dK5UOtQsN; 25:exM1E9/oSIflYzBDKkQQbhRSg5rCUzlZrclv5oHnNSu3Gj/dmzCuk5czxiNSVGBGC3V4I3yaTFvf4iwjq6zFhaW9k0jLcGWni/Yy/+r7nZKehruXMgVB3umJM6L8l2jOXZqOyQGB7ybNI0G7KxrlvSQMzveoya3H59SCpVaDvftaD4cIDm9T5TlPIMMBNPhQTe1I9L+/tPKUtdPbsTScefeg05DwBoHF0NNsOE9MNOYRaH6X/1YaXl7C1AYy4InbznQrcZ/6TiguWlJOT4BHlUisPub5g8tfguBGSIftDcFveEOEus2RzYtRTjB588YiP69PiuT9OCE5BzKBoY8y5A==; 31:OPXmBl/uRipSIq8/etjU1rBtAgA5Vo2zvjbNQ+4XcZnRp3QR4q9zOEjukhpoWiN8gGRkHxUDWxjjSFXJcj5Lt2YNV/F426bdm1a11pHQvQ8j9LSC32HEzGkUd5YBVsJe8wDwj/TKQAIoRqzB7UxbybhyL887aBF2AKSPqvdzNm2lNcEdjTPVWXDlWwKD8k3l1raJcoYbqKnkJ3xKO7XDv101M8nGEZ+ZtZ1PJGOAss0= X-MS-TrafficTypeDiagnostic: DM5PR1201MB0187: X-Microsoft-Exchange-Diagnostics: 1; DM5PR1201MB0187; 20:C0sEqHO8t2DN6EPPNCwEg/bE0/6ByplzI25d8xhIqHFvQ9an7pftkABk8wL+ffHxbKFB5SnJPiuDVWIfvGTYJ+mRMV1I8FWQ2n+vaY7EtN4ZzErp06PoBDW3/X4vukQT5lEISO0BJppKo2viqzcmXMlp+emAU1UaG4vESmk9ZmI11jqeT7sSTRhGOmxyiPQgJIP31fkm/wf2KsMECMeJcdq3yGdQ78NtnXxPvlJBbtYCac/EPCdsatQcAGR/V65s3dxvVT2LZZrfUX2AeV3MX3RB5WDBY6mOd84bT1spRbd8k7Si8PG4sgz+WVjwCcwfa1RZ0a2NqzdAE2ZO4qAetefdhWn5Mx8j9D2jgsSum3mGcWDVAGik6Y30bTTuFYJFck9/ADwglpIAqdWxh5cZkerehSfICOPvXractiBpxKb7vAvpY/3gIkiPq6eus2k/HFwN/ORM1OiCN4jqUOHsgUxgFilSZmfIVEV/5iyZhHiaZ0ksI6tOr5/VRGPPF1TF; 4:qDe3kgJKmov8hZHjkRpUbARcM5kM37KTgMeUSz69O1x+2/hYTHGU21845QjfNBnNbq3TE9Sk9vfPiF6T+64zkfVdr6rL4knIwx/u30fgz255d5Xn1rX9i8YbBQrlTq94LIxEqRCRuM+GBdmdrWATuQRTe6OV7hgnLT6wBEvLYknUZDz+kdldcN2xOgMC0Fk9sItdF46+Lv2rAuDHDdqd+pvYFLybmGUoPXFWxn0uoZfKJ7jfJ7jQLEzTOmLIr6puN7r0aUWK7CXx1G36XKXGMEvxdW/IxqOQOQrxEvb0UAABKPwemU8pTksmwhX9WCFh X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(257004950022427); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3231254)(944501410)(52105095)(3002001)(149027)(150027)(6041310)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:DM5PR1201MB0187; BCL:0; PCL:0; RULEID:; SRVR:DM5PR1201MB0187; X-Forefront-PRVS: 0680FADD48 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39380400002)(396003)(376002)(366004)(39850400004)(346002)(199004)(189003)(50226002)(8676002)(52396003)(81156014)(6116002)(5660300001)(107886003)(36756003)(316002)(80792005)(97736004)(7736002)(4326008)(52116002)(1076002)(8936002)(305945005)(81166006)(7696005)(6486002)(53936002)(51416003)(186003)(476003)(2616005)(59450400001)(50466002)(11346002)(48376002)(2361001)(16526019)(46003)(478600001)(106356001)(16586007)(386003)(68736007)(446003)(86362001)(2351001)(486006)(76176011)(6666003)(6916009)(72206003)(105586002)(2906002)(25786009)(47776003); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR1201MB0187; H:frgnb-12nlpn2.invcorp.invensense.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: invensense.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR1201MB0187; 23:BHbNeXpCUbOhR0yJI5ZslRDv/EvJBfoUei+AAhP?= =?us-ascii?Q?nUrEoxA8326gvlGE5SDWv0IzSZOcfprked7z6FQs36j/rw7dI3aawkjvUb+j?= =?us-ascii?Q?1HoGJYdv83FLF+EhHQ3EB+ge4N4KvF4ejAMcs0eqwG7dMbhHtcVXfziWXIWJ?= =?us-ascii?Q?lO9i3jE517HGvoXMAlxOo+ExvtHWdN+q06Kc2Qo2fmmggfgHFQ8HtNA/gcPC?= =?us-ascii?Q?X2OqtYMPs+3ipImRuCxWkreudrAQyoYRNU9iaZ0W3q5wbw+t4xgmuWmTJjMn?= =?us-ascii?Q?zknz25VWvt6JUIiT9ppLBRNaYNoj0VNCNvc+5R8+WNy2RJ9SF25qASurCLC1?= =?us-ascii?Q?8mD4yiAnIJ3/ZwZgkyG0/1z0k1xkRtXhk2P1xXdGTfM+4annsX1ygEvRutxs?= =?us-ascii?Q?MPvdaKxHlMya75cOu/Z/ZOfxA+SI6MKskbSYmFJ7382tvVdpBJ4nz3A7j8Li?= =?us-ascii?Q?1HjM5cr4aCC6Nept4zbSxbVgt4utO/BWlGoxtCoPxHk7yJPqNgZPrpMIwzzm?= =?us-ascii?Q?Nlbtf0DRMh8KB9R2hI3X9iY4gunolunreIp60qUI3M41aKm7nP0EVXGZ6UfX?= =?us-ascii?Q?sbDGCjr5V+TA0gxxfHWdisGh+bAJXGTgunFOe4WakUEd1hnm09GrhlqhTcrX?= =?us-ascii?Q?S+sDgpU/OM/xfcukxNdt6JzzwSA6nqYzqpt3N2hXAUSMBv9fYMsJfAaRUdDH?= =?us-ascii?Q?PpbTOT5Fq2zGvAaw5+S6M+2SKeIt2JdQIIZLsuaTXzJ14ESK67wF/1JzzAw/?= =?us-ascii?Q?d6iHDn1cwjoGlWAJ4WhXDyxgvFIs16IH76VPSp2ABgEMR+qrYzt7OdnV3KlE?= =?us-ascii?Q?JfGj1ceP/shMdBvueEvlPQ9ZNKirmCu3wqqQJBoaqQ2lKVL9xOtZy/HR+k0T?= =?us-ascii?Q?uEbFF3ogF1dKoo8A3oHvrl3McLtLoXwpVQgN2zFdsrwRHwDrT1ck40kTTl3j?= =?us-ascii?Q?H/ODHsQTRaEZysrYQTa2v29XvuZ9pfsi3b5dkEBDXmefSQCpiiF9S/R2GkC4?= =?us-ascii?Q?1ww70zeSATXxGMWsPRWdSQt3w+QlTyrjCrSCScA4KsJAYxMMfp+xJmmHp2EU?= =?us-ascii?Q?6AjLq219HwXJwGuRx5m1eQj88R68L9lmfHIZ/1p2vfdwlPTr3KoHLcxvAts/?= =?us-ascii?Q?whK2wTbpMIctnJjNxDZFf33drSNjPhQJOuGDFj9sMNRp7pPLednmuOGuVtaE?= =?us-ascii?Q?373Usz9Tt3eRGu8CcZWsWpcQAzRtZygspaueoQn2y8CYi5OX0l1zdwekCSt5?= =?us-ascii?Q?zw5wxsGE4c04WJeNo8mVo/WDmByCMu6p5RBBKU+rW?= X-Microsoft-Antispam-Message-Info: rF3Xi+qM7UYfMHpIfWNgKdjuRsQz0SXIMacqt+DFthiCv1yhGDyFoMTJiPoW/yckTjHVojZjxNY50tSQH0W0OuNqCff13IUBTOJujhrnpmN0VdXk+o2bc7d5fCpLSzy6Rz5qmOY5Ch3Q7t3OWUQoJTdbM/KpuAWYY+4ywW7tf5lkz5WGvlCZ0w3asZpIFC6B X-Microsoft-Exchange-Diagnostics: 1; DM5PR1201MB0187; 6:MdaMTRoqgj2efAJQ0OFXcWYixN3rfcmY+U0GUI4vr511Uey2UqfSxhbCqedDAnRzOVK2kzSy15FI43T4crlmpdts81nHnw7ozBs1V09YNmjd20TAkOKGCnGHN8/BWBncKp2dexQlpTXMCkYiMaGjTJsQl73S6umTQpZNzTObyRf8IdVugRkl4ep7QIQwr8OISMovnhvH7WoVes9wW93zcRhP6RaekxrZQSECeYM1aAszyiAouc9DN5R3mmB6hdfcpoxSBotn3nrgXZbEMtQoK3WpDrs1CyV8UentJ19rZe1H9iiIFc+J0qQdPzLPK0mWUBYqn5xb+mkbKb5H+fArWfI6LyazSWclMT0+xKCY8uJIYy3pS0Tkqy80sW1RnF9zxvxycLq7XXvznIiCGG+asP3Pk+qhIBmYRFnh+rV20UwRP69Mv4Pz0dhL9UmNlqK8wLLxDNLbt7AjNZWoDcanZg==; 5:w4m0oFQfNZn+zDI9SoQS4M/TYRaiE54hQa3WwzHwyE3+6udk7MCSa5w5kQyyMpMOq0BvrXoH3pS04GuOMOOZqKisjCkSwnnvPkPrl6GDlId4caP2jENrCTCBlkSZ7mmanEUzOztL5eYnKXwJ2TDnO8ZbzdAFenTJfVccJ/JRSYE=; 24:HZf1gilXp01Z8g/R1m4h2eq/nMY4GcYiXmMjcRMMHXZGrYtHh8qiSHXsT+g6HoMB1A7WCBF+qQziQGTrd7s/be4j8pnRXWbyhj2MFPzUdxk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR1201MB0187; 7:+xUdtnXWs10ZrJ6tPv0RMniFkudGtGESH2NEnKmn7CEOhytlP+JX7rTQI22svbDOnuhU5bmwCU3Vh7NFksoWgy1aD9BE585G6ddEJBxOboczI3x8oClFhtyUxJrL5x2hV4yJJkp45M4uy3Ot4bkR/wVfgpeofsqPrVD306W+rR1efsV6ICmA/AVO+NkCBpMRcT/9mM24IDcINmS8mXnIOjlMSOY+ItdIv4d+41VLohu/MSes8p+YE61wP+f43W8q; 20:9tIY+Rjzjb/7fwqTWx7wkpIo0UuihHskdnpq7DshlqdueUocV8YmAi4aUxnv4/efOUy1MCfiCczxINEfafn/heVTQIWPH+pcYb8mz3rucNDsWN1GKkmaoK/mxaZ6Q8e2iqtIphad/hqS8COtW4BEMkmYN2azP+Lir5/b/0jBuYE= X-MS-Office365-Filtering-Correlation-Id: c858a6f9-8a0d-4abb-8a3e-08d5bfeef00c X-OriginatorOrg: invensense.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 May 2018 14:18:48.6706 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c858a6f9-8a0d-4abb-8a3e-08d5bfeef00c X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 462b3b3b-e42b-47ea-801a-f1581aac892d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR1201MB0187 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 Instead of storing fifo rate in Hz, store the chip internal sample rate divider. This will be more useful for timestamping. There are both equivalent. Signed-off-by: Jean-Baptiste Maneyrol --- drivers/iio/imu/inv_mpu6050/inv_mpu_core.c | 18 +++++++++++------- drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h | 16 +++++++++++++--- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c index 1e7e750294fc..2c3e666aa970 100644 --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c @@ -82,7 +82,7 @@ static const struct inv_mpu6050_reg_map reg_set_6050 = { static const struct inv_mpu6050_chip_config chip_config_6050 = { .fsr = INV_MPU6050_FSR_2000DPS, .lpf = INV_MPU6050_FILTER_20HZ, - .fifo_rate = INV_MPU6050_INIT_FIFO_RATE, + .divider = INV_MPU6050_FIFO_RATE_TO_DIVIDER(INV_MPU6050_INIT_FIFO_RATE), .gyro_fifo_enable = false, .accl_fifo_enable = false, .accl_fs = INV_MPU6050_FS_02G, @@ -278,7 +278,7 @@ static int inv_mpu6050_init_config(struct iio_dev *indio_dev) if (result) goto error_power_off; - d = INV_MPU6050_ONE_K_HZ / INV_MPU6050_INIT_FIFO_RATE - 1; + d = INV_MPU6050_FIFO_RATE_TO_DIVIDER(INV_MPU6050_INIT_FIFO_RATE); result = regmap_write(st->map, st->reg->sample_rate_div, d); if (result) goto error_power_off; @@ -628,7 +628,7 @@ static ssize_t inv_mpu6050_fifo_rate_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { - s32 fifo_rate; + int fifo_rate; u8 d; int result; struct iio_dev *indio_dev = dev_to_iio_dev(dev); @@ -644,8 +644,13 @@ inv_mpu6050_fifo_rate_store(struct device *dev, struct device_attribute *attr, if (result) return result; + /* compute the chip sample rate divider */ + d = INV_MPU6050_FIFO_RATE_TO_DIVIDER(fifo_rate); + /* compute back the fifo rate to handle truncation cases */ + fifo_rate = INV_MPU6050_DIVIDER_TO_FIFO_RATE(d); + mutex_lock(&st->lock); - if (fifo_rate == st->chip_config.fifo_rate) { + if (d == st->chip_config.divider) { result = 0; goto fifo_rate_fail_unlock; } @@ -653,11 +658,10 @@ inv_mpu6050_fifo_rate_store(struct device *dev, struct device_attribute *attr, if (result) goto fifo_rate_fail_unlock; - d = INV_MPU6050_ONE_K_HZ / fifo_rate - 1; result = regmap_write(st->map, st->reg->sample_rate_div, d); if (result) goto fifo_rate_fail_power_off; - st->chip_config.fifo_rate = fifo_rate; + st->chip_config.divider = d; result = inv_mpu6050_set_lpf(st, fifo_rate); if (result) @@ -685,7 +689,7 @@ inv_fifo_rate_show(struct device *dev, struct device_attribute *attr, unsigned fifo_rate; mutex_lock(&st->lock); - fifo_rate = st->chip_config.fifo_rate; + fifo_rate = INV_MPU6050_DIVIDER_TO_FIFO_RATE(st->chip_config.divider); mutex_unlock(&st->lock); return scnprintf(buf, PAGE_SIZE, "%u\n", fifo_rate); diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h index a92ddd45586c..a1130b9a420c 100644 --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h @@ -86,7 +86,7 @@ enum inv_devices { * @accl_fs: accel full scale range. * @accl_fifo_enable: enable accel data output * @gyro_fifo_enable: enable gyro data output - * @fifo_rate: FIFO update rate. + * @divider: chip sample rate divider (sample rate divider - 1) */ struct inv_mpu6050_chip_config { unsigned int fsr:2; @@ -94,7 +94,7 @@ struct inv_mpu6050_chip_config { unsigned int accl_fs:2; unsigned int accl_fifo_enable:1; unsigned int gyro_fifo_enable:1; - u16 fifo_rate; + u8 divider; u8 user_ctrl; }; @@ -228,7 +228,17 @@ struct inv_mpu6050_state { #define INV_MPU6050_INIT_FIFO_RATE 50 #define INV_MPU6050_MAX_FIFO_RATE 1000 #define INV_MPU6050_MIN_FIFO_RATE 4 -#define INV_MPU6050_ONE_K_HZ 1000 + +/* chip internal frequency: 1KHz */ +#define INV_MPU6050_INTERNAL_FREQ_HZ 1000 +/* return the frequency divider (chip sample rate divider + 1) */ +#define INV_MPU6050_FREQ_DIVIDER(st) \ + ((st)->chip_config.divider + 1) +/* chip sample rate divider to fifo rate */ +#define INV_MPU6050_FIFO_RATE_TO_DIVIDER(fifo_rate) \ + ((INV_MPU6050_INTERNAL_FREQ_HZ / (fifo_rate)) - 1) +#define INV_MPU6050_DIVIDER_TO_FIFO_RATE(divider) \ + (INV_MPU6050_INTERNAL_FREQ_HZ / ((divider) + 1)) #define INV_MPU6050_REG_WHOAMI 117