From patchwork Fri Mar 23 14:26:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rodrigo Siqueira X-Patchwork-Id: 10304795 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 44D2860386 for ; Fri, 23 Mar 2018 14:26:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 343F828D84 for ; Fri, 23 Mar 2018 14:26:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2801128DE3; Fri, 23 Mar 2018 14:26:34 +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=-6.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, 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 A393628D84 for ; Fri, 23 Mar 2018 14:26:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751677AbeCWO0c (ORCPT ); Fri, 23 Mar 2018 10:26:32 -0400 Received: from mail-qt0-f196.google.com ([209.85.216.196]:44683 "EHLO mail-qt0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751471AbeCWO0c (ORCPT ); Fri, 23 Mar 2018 10:26:32 -0400 Received: by mail-qt0-f196.google.com with SMTP id j26so12686349qtl.11; Fri, 23 Mar 2018 07:26:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=FxlGKd0I+MAFDDNtQQazX7o6Imp3m6ztzM50G5Xq874=; b=WJFnbsWyc0KPixVCSl4eTjB1DCya6R4fi9nxy4DAl5Pyt6DAnL14eKbOdgnanjw3qk vSvy3NIHsVwhjtwgjcU47W9jgXjF56MH+TxQyUerer3pFP+agA5N4hLYeL1jPBf9rrGW rKQNFAylLkj8UsfQfr1TR2yxVg1AWGdG2gm4Yilr93QI05krWkM4PvCpbVqPBcOwidMt oyOtJB3g5KlolNe7MzQyXytv8U32oqhZdL++YnFE98NXIxyHmhsr64sMpnHbrgvptCit ltAlRzgk5glBRT2lrCDr4ohDS49QIoSHziUoEp/KZtr23mO49y8CZL5NJNKvi9yl12ny O0dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=FxlGKd0I+MAFDDNtQQazX7o6Imp3m6ztzM50G5Xq874=; b=pPjZKNJVu12JUVALOwh+M+fUHYEseVfFHepZlR4h1x4nIWW/IXR+WBsYfYR4qwhpb7 xTyKhZdSH1lqAhMuZsO92K/jA6gUcjPadUIEBYvg497NhFKsC7Eq48IKCWRDauUBoc69 d4xo5XT9ueReCJx8hucQPrl53vfEnnMDDCz2NL6oR8dg02vB2zfEsSR1nxK9JrD3LKca lQA1YudvZ+BV+H7qLX5TxivHTQfvVo8j/CUjfo2E6teU8vBxfNgHkI++thcGbjUv/oE+ kCCvISB01X2/LVER6ct6mpDDlEiC1OFi0l7Vz/OsoK1zXgFuKhu5c8NvGZrIFFhjUJg+ yTdw== X-Gm-Message-State: AElRT7HTx7wU8oWZFSfPifcpdQizY2fCUs6Tq/tf21rWqozRKMsamzCC u15BQqwmKQLAm92RPz8HCVU= X-Google-Smtp-Source: AG47ELukgZUgHp68GrTSNaE3rDrsFTM6+No2QqmSzvKVAiGpX4+lXuJtjHLah9EPzXwuikvpdKaYGA== X-Received: by 10.200.39.67 with SMTP id h3mr29073238qth.115.1521815189818; Fri, 23 Mar 2018 07:26:29 -0700 (PDT) Received: from smtp.gmail.com ([143.107.45.1]) by smtp.gmail.com with ESMTPSA id f13sm1580604qtj.6.2018.03.23.07.26.26 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 23 Mar 2018 07:26:29 -0700 (PDT) Date: Fri, 23 Mar 2018 11:26:25 -0300 From: Rodrigo Siqueira To: John Syne , Jonathan Cameron , Hartmut Knaack , Lars-Peter Clausen , Peter Meerwald-Stadler , Greg Kroah-Hartman , linux-iio@vger.kernel.org, devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Barry Song <21cnbao@gmail.com> Cc: daniel.baluta@nxp.com, linux-iio@vger.kernel.org, devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 4/8] staging:iio:ade7854: Rework SPI write function Message-ID: <23ef49f070426f277ea6883c68c2de94978210f1.1521813782.git.rodrigosiqueiramelo@gmail.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20180223 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 write operation using SPI has a many code duplications (similar to I2C) and four different interfaces per data size. This patch introduces a single function that centralizes the main task related to SPI. Signed-off-by: Rodrigo Siqueira --- Changes in v3: - Remove the use of defines that not improve the readability - Replace variable name "bytes" for "bits" drivers/staging/iio/meter/ade7854-spi.c | 108 ++++++++++++-------------------- 1 file changed, 41 insertions(+), 67 deletions(-) diff --git a/drivers/staging/iio/meter/ade7854-spi.c b/drivers/staging/iio/meter/ade7854-spi.c index 4419b8f06197..9c5c16c4d6e0 100644 --- a/drivers/staging/iio/meter/ade7854-spi.c +++ b/drivers/staging/iio/meter/ade7854-spi.c @@ -15,9 +15,10 @@ #include #include "ade7854.h" -static int ade7854_spi_write_reg_8(struct device *dev, - u16 reg_address, - u8 val) +static int ade7854_spi_write_reg(struct device *dev, + u16 reg_address, + u32 val, + int bits) { int ret; struct iio_dev *indio_dev = dev_to_iio_dev(dev); @@ -32,93 +33,66 @@ static int ade7854_spi_write_reg_8(struct device *dev, st->tx[0] = ADE7854_WRITE_REG; st->tx[1] = (reg_address >> 8) & 0xFF; st->tx[2] = reg_address & 0xFF; - st->tx[3] = val & 0xFF; + switch (bits) { + case 8: + st->tx[3] = val & 0xFF; + break; + case 16: + xfer.len = 5; + st->tx[3] = (val >> 8) & 0xFF; + st->tx[4] = val & 0xFF; + break; + case 24: + xfer.len = 6; + st->tx[3] = (val >> 16) & 0xFF; + st->tx[4] = (val >> 8) & 0xFF; + st->tx[5] = val & 0xFF; + break; + case 32: + xfer.len = 7; + st->tx[3] = (val >> 24) & 0xFF; + st->tx[4] = (val >> 16) & 0xFF; + st->tx[5] = (val >> 8) & 0xFF; + st->tx[6] = val & 0xFF; + break; + default: + ret = -EINVAL; + goto unlock; + } ret = spi_sync_transfer(st->spi, &xfer, 1); +unlock: mutex_unlock(&st->buf_lock); return ret; } +static int ade7854_spi_write_reg_8(struct device *dev, + u16 reg_address, + u8 val) +{ + return ade7854_spi_write_reg(dev, reg_address, val, 8); +} + static int ade7854_spi_write_reg_16(struct device *dev, u16 reg_address, u16 val) { - int ret; - struct iio_dev *indio_dev = dev_to_iio_dev(dev); - struct ade7854_state *st = iio_priv(indio_dev); - struct spi_transfer xfer = { - .tx_buf = st->tx, - .bits_per_word = 8, - .len = 5, - }; - - mutex_lock(&st->buf_lock); - st->tx[0] = ADE7854_WRITE_REG; - st->tx[1] = (reg_address >> 8) & 0xFF; - st->tx[2] = reg_address & 0xFF; - st->tx[3] = (val >> 8) & 0xFF; - st->tx[4] = val & 0xFF; - - ret = spi_sync_transfer(st->spi, &xfer, 1); - mutex_unlock(&st->buf_lock); - - return ret; + return ade7854_spi_write_reg(dev, reg_address, val, 16); } static int ade7854_spi_write_reg_24(struct device *dev, u16 reg_address, u32 val) { - int ret; - struct iio_dev *indio_dev = dev_to_iio_dev(dev); - struct ade7854_state *st = iio_priv(indio_dev); - struct spi_transfer xfer = { - .tx_buf = st->tx, - .bits_per_word = 8, - .len = 6, - }; - - mutex_lock(&st->buf_lock); - st->tx[0] = ADE7854_WRITE_REG; - st->tx[1] = (reg_address >> 8) & 0xFF; - st->tx[2] = reg_address & 0xFF; - st->tx[3] = (val >> 16) & 0xFF; - st->tx[4] = (val >> 8) & 0xFF; - st->tx[5] = val & 0xFF; - - ret = spi_sync_transfer(st->spi, &xfer, 1); - mutex_unlock(&st->buf_lock); - - return ret; + return ade7854_spi_write_reg(dev, reg_address, val, 24); } static int ade7854_spi_write_reg_32(struct device *dev, u16 reg_address, u32 val) { - int ret; - struct iio_dev *indio_dev = dev_to_iio_dev(dev); - struct ade7854_state *st = iio_priv(indio_dev); - struct spi_transfer xfer = { - .tx_buf = st->tx, - .bits_per_word = 8, - .len = 7, - }; - - mutex_lock(&st->buf_lock); - st->tx[0] = ADE7854_WRITE_REG; - st->tx[1] = (reg_address >> 8) & 0xFF; - st->tx[2] = reg_address & 0xFF; - st->tx[3] = (val >> 24) & 0xFF; - st->tx[4] = (val >> 16) & 0xFF; - st->tx[5] = (val >> 8) & 0xFF; - st->tx[6] = val & 0xFF; - - ret = spi_sync_transfer(st->spi, &xfer, 1); - mutex_unlock(&st->buf_lock); - - return ret; + return ade7854_spi_write_reg(dev, reg_address, val, 32); } static int ade7854_spi_read_reg_8(struct device *dev,