Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1922963imu; Sat, 5 Jan 2019 09:58:37 -0800 (PST) X-Google-Smtp-Source: AFSGD/WZ1Oj6FeTVsQKjFHH+HNoMT+8LTvGlMwq+N0M7bPDCn0ppLVK3jsjKxAoBo/OxV3LvRW9Y X-Received: by 2002:a62:8e19:: with SMTP id k25mr56946812pfe.185.1546711116963; Sat, 05 Jan 2019 09:58:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1546711116; cv=none; d=google.com; s=arc-20160816; b=bJKIePWSQajV/5W9Kw/7KAu/0KvNUrkO9sf24P0ohLH1GEDrOUo/3F3p2Z/ki8Z1S+ ML/rFdKdbaYX5NMOly7dBzKvyyuTFDuYzty48/nPzj9mQKnnKSQE0WknU9jSjqE37A2N r1/jx5c5ycgB010Hb9sAQNeGLoPqTUVIrrA7Sx37G5oCgpguS+R7Ksnj60y86rMZ8/CC HZbbZhly0sZd6NBEwDKyvSE7NLs7wMA9HR0hPboh0G3vDql/9uQ4CZsjAeMDQzRlEdhq 4Mfil2tu5K3NqQF82yV+SkJ7HxQfAcZacgC9mb4bw3GpNz4ip9ZNTl3ZclV7IxurN0yu lqUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date :dkim-signature; bh=2JiC9Lp/r1X2UOMLVKAvWc/q1fK76iYOiTyvC16HwHs=; b=EPA/FUDx2NGeEFZOXVH55LzgS8Prd2YN4WyStF+K1N7nMk+Ai3oeUEqv/d2IeCnCiy nfSJBFmovGVuH+RvFjig9+6IgHVou8F9u2OJMoBnmLqERqVdVK2/utdnxqH37YDpUyof 17vRJhIWLUVx4LsR+6Ej79R5luHZhGWE9ajjQAyoprXjfy/n/C4XKOxwa87bygprApzF Tqf1KqwH+Qz4Weooou2Y8j01Dg91Ytox6VxUNJqgxfgttsW0ceyLwkOx26u1OsWSeP5T PIVyNFzkjzefi6S1G6B40IISWSQBMg4LUafGoIjQAgi0ddbXfy90ZtNZS0gvJN77V3/N EMtA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=hHWpS6Nq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 135si19096664pge.572.2019.01.05.09.58.21; Sat, 05 Jan 2019 09:58:36 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=hHWpS6Nq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727073AbfAER5S (ORCPT + 99 others); Sat, 5 Jan 2019 12:57:18 -0500 Received: from mail.kernel.org ([198.145.29.99]:51558 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726441AbfAER5R (ORCPT ); Sat, 5 Jan 2019 12:57:17 -0500 Received: from archlinux (cpc91196-cmbg18-2-0-cust659.5-4.cable.virginm.net [81.96.234.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 6B51A206B7; Sat, 5 Jan 2019 17:57:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1546711037; bh=GZ4Rkh5ZX0K2TlPIydtaiDLNXVssN1alN0ZDZXn4NN0=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=hHWpS6NqOP4T4ParZmdjRBVzEbLiBvMFexcrFy+KtLuFuIKHMyRlU20jClOdR61cd W26UvVGIZ65SzuytfZhti04wB5S/UOq1a6+7/VJFYtYQhcUzPtuMrOUQKaXFSKFtYo 4sKlmURzJiiZWHmPJd9065ZGcGifNE42fhltALcI= Date: Sat, 5 Jan 2019 17:57:12 +0000 From: Jonathan Cameron To: Jeremy Fertic Cc: Lars-Peter Clausen , Michael Hennerich , Hartmut Knaack , Peter Meerwald-Stadler , Greg Kroah-Hartman , linux-iio@vger.kernel.org, devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Shreeya Patel Subject: Re: [PATCH v2 4/4] staging: iio: adt7316: fix the dac write calculation Message-ID: <20190105175712.7e5075e1@archlinux> In-Reply-To: <20181223045743.10716-5-jeremyfertic@gmail.com> References: <20181223045743.10716-1-jeremyfertic@gmail.com> <20181223045743.10716-5-jeremyfertic@gmail.com> X-Mailer: Claws Mail 3.17.3 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, 22 Dec 2018 21:57:43 -0700 Jeremy Fertic wrote: > The lsb calculation is not masking the correct bits from the user input. > Subtract 1 from (1 << offset) to correctly set up the mask to be applied > to user input. > > The lsb register stores its value starting at the bit 7 position. > adt7316_store_DAC() currently assumes the value is at the other end of the > register. Shift the lsb value before storing it in a new variable lsb_reg, > and write this variable to the lsb register. > > Fixes: 35f6b6b86ede ("staging: iio: new ADT7316/7/8 and ADT7516/7/9 driver") > Signed-off-by: Jeremy Fertic Applied to the togreg branch fo iio.git and pushed out as testing for the autobuilders to play with it. I cc'd Shreeya on all of these. It would be helpful if you both cc'd the other one on any future series. Cross review also good given you are both working with this part! thanks, Jonathan > --- > drivers/staging/iio/addac/adt7316.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/drivers/staging/iio/addac/adt7316.c b/drivers/staging/iio/addac/adt7316.c > index d7f3d68e525b..6f7891b567b9 100644 > --- a/drivers/staging/iio/addac/adt7316.c > +++ b/drivers/staging/iio/addac/adt7316.c > @@ -1431,7 +1431,7 @@ static ssize_t adt7316_show_DAC(struct adt7316_chip_info *chip, > static ssize_t adt7316_store_DAC(struct adt7316_chip_info *chip, > int channel, const char *buf, size_t len) > { > - u8 msb, lsb, offset; > + u8 msb, lsb, lsb_reg, offset; > u16 data; > int ret; > > @@ -1449,9 +1449,13 @@ static ssize_t adt7316_store_DAC(struct adt7316_chip_info *chip, > return -EINVAL; > > if (chip->dac_bits > 8) { > - lsb = data & (1 << offset); > + lsb = data & ((1 << offset) - 1); > + if (chip->dac_bits == 12) > + lsb_reg = lsb << ADT7316_DA_12_BIT_LSB_SHIFT; > + else > + lsb_reg = lsb << ADT7316_DA_10_BIT_LSB_SHIFT; > ret = chip->bus.write(chip->bus.client, > - ADT7316_DA_DATA_BASE + channel * 2, lsb); > + ADT7316_DA_DATA_BASE + channel * 2, lsb_reg); > if (ret) > return -EIO; > }