Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2826540imu; Sun, 23 Dec 2018 08:39:12 -0800 (PST) X-Google-Smtp-Source: ALg8bN4v0w2t/KJYN/mkMmpKSKx2YcuKD8bqcxkKI3uzOf9rhHOOFfNqIFnM5FnNEj/yzYnsCFp9 X-Received: by 2002:a63:5ec6:: with SMTP id s189mr9248815pgb.357.1545583152091; Sun, 23 Dec 2018 08:39:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1545583152; cv=none; d=google.com; s=arc-20160816; b=He6nS9cUoKyx/8dyUB3//xv4CeBbVr1uaHjZfRShmu+Ps64db8uPt6+XTCrWE8YjzF 4YUE6BI6EGR0d7UtdjgGf3fuTewom9LiFhnXf6++0ZF/WGfIC+iK6GaCYR4OZ+ty4rKD 6Fy5dClQmOu2HBZEpk7ba2tsZ7hzBF9u68JcvNOLdIFYKsEsB/L4D1zYK89UOF3beo0i zEVrAP5QECUAkH5YemHp21XqbKZnrtHBpSut+txIWAr/TKJWybmhzCT0IJy9D2GJt9cC AuNqHnJOOepN1/LbX+9E6l3EZXObFWdKf65vCP/kqD3wmuwcGSuj0NlW66cHzjj9/z5T FDxg== 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:date:subject:cc:to:from :dkim-signature; bh=BJl9JvtqFLFxHkxk96iUyl94VYQgxphAIRNyaBqFMK8=; b=FQvVYdY0JBvh5Iqjd4hxvZGzYnrIq9ECCahbRrPiBduSfxztJFaisECxsaNBxgITQo wwlYsyKZ0zzrT/fmpIpzKzUN37/p8PNjUWCZhUjHtiQSQbm9EJoOWQd3gd26FgBD/7iZ TWISBINEwPBQ9vXWWFzX/H8t2w7gAxNNc0zBHQB1sziDWv4kBj5LVLvW7QJR4JR5QHtP IyszG6h+uhknnGkj8YKW/g8n7VdMs2ZrIODK/YMIX0bY3qKmOWVLbBKb52MT7w5eU6DD jsBCJAM+Own/KbK5SwmuW/SFJNeFY/1K0N03AcTOtKYbkAPWOboVDFxqWK+UiK4GAtCz YGVA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=F+eGxTGy; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h3si11045815pgl.468.2018.12.23.08.38.56; Sun, 23 Dec 2018 08:39:12 -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=@gmail.com header.s=20161025 header.b=F+eGxTGy; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725856AbeLWE6Y (ORCPT + 99 others); Sat, 22 Dec 2018 23:58:24 -0500 Received: from mail-it1-f196.google.com ([209.85.166.196]:39436 "EHLO mail-it1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725267AbeLWE6X (ORCPT ); Sat, 22 Dec 2018 23:58:23 -0500 Received: by mail-it1-f196.google.com with SMTP id a6so11936428itl.4; Sat, 22 Dec 2018 20:58:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BJl9JvtqFLFxHkxk96iUyl94VYQgxphAIRNyaBqFMK8=; b=F+eGxTGyi9pFc+XPnyWe37XRKfKBjZ8DZcz/oQXbL+mvtW4LyywBn2nCjiU6wq+7cC 2Xz51Y1aW2H73+ey3lvrFX4CfEtuT4SJKmnWptxU0Xi0vtFVB0KFY/n9pqkqCpEAk4RY lgC1iRYlIL+zjZShfMTvWR3br2h3coeO5orJ7zECSlLkySAkIlLgwvu7ANJWo0U9NLsO veFTUwglelhIy+z1B2L0StgWJ2ePYcSG5VGyHuqBQyGRrEkgh4nYzcbmVd4ArOtRD7PK 1qw47i+l6Pj/80NzdbUc43Zu2BuPXDd4YlW+vZWGCQb6fW7bmBDmuYantkFxSoSg7eoL 5IaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BJl9JvtqFLFxHkxk96iUyl94VYQgxphAIRNyaBqFMK8=; b=ZvqdxqEQW8N9TMXUi0IhcfH/sbxV24nVVITbrGKGXwo6pcJ0bw0Yb0yMa6rCKksku5 e6b4HCvMR+2jyr0pXHEkpEY315ZQqfVNNAqgIcMbbvuUDN3V9wSyxTYw71wIP/XCqxvZ GZKt4ye5BhCEZyoDZiTXz23cTfjqD+pTtMAwaM1Y4XkDncfh5ZY7L9vTn8btggCqk14h 6vIbxfF5wcjh2grlpRJGTl8Vde0zOQG6FDyu+1DAaVzdsUyxVwcss+ss2iuBE4CQ+Yfe dbkDLEkth7+hSmzDySpkuArPQxaymm99mIxSh7HHRRrrSEQMJj9+CKa8yZywxq/nNIPF Vn7A== X-Gm-Message-State: AA+aEWYgGKEedhhQ0/m318Fqxg6MijqtCMuHjEStfW5astgcjysLUYKe 2kOK+Ov34FJxTVQ87pb3idU= X-Received: by 2002:a02:8244:: with SMTP id q4mr5615297jag.43.1545541102709; Sat, 22 Dec 2018 20:58:22 -0800 (PST) Received: from r2700x.localdomain (c-75-70-96-103.hsd1.co.comcast.net. [75.70.96.103]) by smtp.gmail.com with ESMTPSA id 15sm8435378itv.11.2018.12.22.20.58.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 22 Dec 2018 20:58:22 -0800 (PST) From: Jeremy Fertic To: Jonathan Cameron 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, Jeremy Fertic Subject: [PATCH v2 1/4] staging: iio: adt7316: fix dac_bits assignment Date: Sat, 22 Dec 2018 21:57:40 -0700 Message-Id: <20181223045743.10716-2-jeremyfertic@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181223045743.10716-1-jeremyfertic@gmail.com> References: <20181223045743.10716-1-jeremyfertic@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The value of dac_bits is used in adt7316_show_DAC() and adt7316_store_DAC(), and it should be either 8, 10, or 12 bits depending on the device in use. The driver currently only assigns a value to dac_bits in adt7316_store_da_high_resolution(). The purpose of the dac high resolution option is not to change dac resolution for normal operation. Instead, it is specific to an optional feature where one or two of the four dacs can be set to output voltage proportional to temperature. If the user chooses to set dac a and/or dac b to output voltage proportional to temperature, the da_high_resolution attribute can optionally be enabled to use 10 bit resolution rather than the default 8 bits. This is only available on the 10 and 12 bit dac devices. If the user attempts to read or write dacs a or b under these settings, the driver's current behaviour is to return an error. Dacs c and d continue to operate normally under these conditions. With the above in mind, remove the dac_bits assignments from this function since the value of dac_bits as used in the driver is not dependent on this dac high resolution option. Since the dac_bits assignments discussed above are currently the only ones in this driver, the default value of dac_bits is 0. This results in incorrect calculations when the dacs are read or written in adt7316_show_DAC() and adt7316_store_DAC(). To correct this, assign a value to dac_bits in adt7316_probe() to ensure correct operation as soon as the device is registered and available to userspace. Fixes: 35f6b6b86ede ("staging: iio: new ADT7316/7/8 and ADT7516/7/9 driver") Signed-off-by: Jeremy Fertic --- drivers/staging/iio/addac/adt7316.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/staging/iio/addac/adt7316.c b/drivers/staging/iio/addac/adt7316.c index 9db49aa186bb..e17c1cb12c94 100644 --- a/drivers/staging/iio/addac/adt7316.c +++ b/drivers/staging/iio/addac/adt7316.c @@ -652,17 +652,10 @@ static ssize_t adt7316_store_da_high_resolution(struct device *dev, u8 config3; int ret; - chip->dac_bits = 8; - - if (buf[0] == '1') { + if (buf[0] == '1') config3 = chip->config3 | ADT7316_DA_HIGH_RESOLUTION; - if (chip->id == ID_ADT7316 || chip->id == ID_ADT7516) - chip->dac_bits = 12; - else if (chip->id == ID_ADT7317 || chip->id == ID_ADT7517) - chip->dac_bits = 10; - } else { + else config3 = chip->config3 & (~ADT7316_DA_HIGH_RESOLUTION); - } ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, config3); if (ret) @@ -2145,6 +2138,13 @@ int adt7316_probe(struct device *dev, struct adt7316_bus *bus, else return -ENODEV; + if (chip->id == ID_ADT7316 || chip->id == ID_ADT7516) + chip->dac_bits = 12; + else if (chip->id == ID_ADT7317 || chip->id == ID_ADT7517) + chip->dac_bits = 10; + else + chip->dac_bits = 8; + chip->ldac_pin = devm_gpiod_get_optional(dev, "adi,ldac", GPIOD_OUT_LOW); if (IS_ERR(chip->ldac_pin)) { ret = PTR_ERR(chip->ldac_pin); -- 2.19.1