From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B077F47CC61 for ; Wed, 3 Jun 2026 18:49:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780512576; cv=none; b=AY2cQnrkhdpVf+UgXhXQby09TizUBmzB0AIf9IoH5fP68jnnkvbL97E7REGNBJg/bfRVyy/ycZ7Us01Zo2N6W6ahEDVMcreF30iAcflJxUl0S+nR04wvNL/8n81QFokL847BzR1vXYnMmCGKvDxZYVyzP7Gr0LL1kQl5fwlDgz0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780512576; c=relaxed/simple; bh=jqPYoYhLKYYlSYtUJdzENTM/X/PaYeN8NKoJ7tNg6Wc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=p7eP27Qws3m057aYx9V5zN5kHUF9KJtHnffYQ8c38IUVeA/aM2j6PCfiBXrbDMx28vJr+/UjOLKVbYqfiC7GEJ3yDSJuXEAcxrBzcINq/bCMFer22idHf0qbbfJZ6S+rIzRFYZODcA/eugP9hs15CKfl8aRGOUcZwSyoLKRF6Cc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Yzy3Q5S7; arc=none smtp.client-ip=209.85.214.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Yzy3Q5S7" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-2c0bd02d97eso48683575ad.2 for ; Wed, 03 Jun 2026 11:49:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780512575; x=1781117375; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wkXrBYxTI0izj6VrJvaEKI7ARZ6dKBgJhCCnnbAo+Vg=; b=Yzy3Q5S7xRpSvgKbXL2m//3ISfmDZzQyuEqhDXZ7zCKdMyYQ/UtTQcyDF/uwjBGc8p VrQsOY34uncrrVojK7OWMQ0ePx6vWaer2+WMDU7ElW1lgiNqyQpkZJvKy/pRpNgg6a32 Rz/4SWDqlo03Jofz51ZGCE79J4Iae3JyhHoaV9JAi0AgFTVsTAndAmOLe+e3Vx1l5zIh CyzIf0LR4xy5UE/ju+SHrv0W8R89G0zXYGAYx7SKJM31sX0yNz8KCna0Xn/CFJgTPXhm 5k68CCWnyWBB1rDZdMWIL4gJJVThOaIH/RNiABsxGY0Tsskp3KItHNdB9EyR9uAr3Cob cWZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780512575; x=1781117375; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=wkXrBYxTI0izj6VrJvaEKI7ARZ6dKBgJhCCnnbAo+Vg=; b=c+QaqRxcmkuSNEwFSHR34Gi9rBMe6HZPFYQGoMaMIBWQyIhyqwoMSSJP2moxtGmaQP /aNI+nr8WgGWLopa/pztB8+87dEZENDUSiEbQ18i5duLq3vEhJNdMuG19ds4evSYdk3R F05tbOWxDFb7xL8wkYLJQSkqLJo8NZbrw5mQ2zu+zinRNuqF1MWJ9xpTFr3t8oWP4JnK hclgDTLeMwRI0ZZ2WoPfZPtSEKEFMTbxHsbuRZaIeKT2stXAQ71ZsSf9WE6DOAmsEP/M dKsiqmFG3wkjd/z1keg9luvBIpvdMcG9Muk9w1Dn777RjTJyjOAE0GPmRRH/PAnZU0ep EBww== X-Forwarded-Encrypted: i=1; AFNElJ8x1krJl1QJ4XJoDPaMnZOBKYrsPVBfe88lXtiHZ+y6XBKQztLqme9047g0cHxz5MMYv29CbXVTlZEp/58=@vger.kernel.org X-Gm-Message-State: AOJu0YwSuAXMTUyhcMSdoKLLKER4JU3bCf2ae8vx5iATiawKqZnvA8bT 0I0SdMWC+IxXXK6eYZ8zQiFzvydODViItNHf3G6b3udPPs6QOTGbfOac X-Gm-Gg: Acq92OGsLizwkRRuDm9l/X+PQtbaXkRTP9+PI7XbPCPiMNxrSUd+qOVmMgTKg4yqkp2 G16YovOTLXOOzAZAHqPzvb1iklNxkJpfqi4fGqOoR22t8/YG7NK6F9hqAXzXippUwjC7i6MbdPN wuzgoP2SFQZk7Bky/zlpnLiQ5C/sJaQk/ra69OtEGk7BTLKBt1i+MSEsu3oqa5MZ0LU/u7IsgHS abX1DXVfCKSEQ3Ton5ZV4qu2zDZbf72EPLWkojx/QluqoAFC5IKZUMGQ1Sx0es63ZzihUaxMDwl XDiRklKiNLUph1h7xYS8u/kHvM2vYMB5oqDiJebeLPr145BAciBOT3/HphqNYlrfeUw9IDjLj65 LxxZHXbXV9YjUSXo38d1fbItG3lQCgO2AuPuELxR1ppIGWkmLxeR2Mz7husxQqs5rQJAZ0khxf7 BEu7C+XD9dqyYNgGnqbkPTa90/wBgDBCHfJ8hk1ZY9AxY+uS41gkTWvIdzwp0ZA4qDaazErzTGw SfeIQ+1exgRgKK9/mttERo4HCoHINSixh9wpUGOee9QxbKYdtYKJA== X-Received: by 2002:a17:902:e5cf:b0:2b9:6458:1a2c with SMTP id d9443c01a7336-2c163a49fa1mr51737065ad.13.1780512574915; Wed, 03 Jun 2026 11:49:34 -0700 (PDT) Received: from lord-daniel-VivoBook-ASUSLaptop-K3502ZA-S3502ZA.. ([2409:40c1:4015:6e6f:ee79:7998:9a6f:65e3]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c164f6d59csm32139675ad.4.2026.06.03.11.49.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2026 11:49:34 -0700 (PDT) From: Piyush Patle To: linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: jic23@kernel.org, ak@it-klinger.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, andy@kernel.org, nuno.sa@analog.com, dlechner@baylibre.com Subject: [PATCH v11 05/11] iio: adc: hx711: move scale computation to per-device storage Date: Thu, 4 Jun 2026 00:18:53 +0530 Message-ID: <20260603184859.89693-6-piyushpatle228@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260603184859.89693-1-piyushpatle228@gmail.com> References: <20260603184859.89693-1-piyushpatle228@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The gain-to-scale table is global today, so probe-time scale updates for one device overwrite the values used by any earlier device instance. Fix this by making the gain table const and storing the computed scale values per device in hx711_data. No functional change for single-sensor configurations. Signed-off-by: Piyush Patle Reviewed-by: Andy Shevchenko --- drivers/iio/adc/hx711.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/drivers/iio/adc/hx711.c b/drivers/iio/adc/hx711.c index 1db8b68a8f64..86d2a70dd3de 100644 --- a/drivers/iio/adc/hx711.c +++ b/drivers/iio/adc/hx711.c @@ -28,22 +28,20 @@ struct hx711_gain_to_scale { int gain; int gain_pulse; - int scale; int channel; }; /* * .scale depends on AVDD which in turn is known as soon as the regulator - * is available - * therefore we set .scale in hx711_probe() + * is available; it is stored per device in hx711_data.gain_scale[] * * channel A in documentation is channel 0 in source code * channel B in documentation is channel 1 in source code */ -static struct hx711_gain_to_scale hx711_gain_to_scale[HX711_GAIN_MAX] = { - { 128, 1, 0, 0 }, - { 32, 2, 0, 1 }, - { 64, 3, 0, 0 } +static const struct hx711_gain_to_scale hx711_gain_to_scale[HX711_GAIN_MAX] = { + { 128, 1, 0 }, + { 32, 2, 1 }, + { 64, 3, 0 }, }; static int hx711_get_gain_to_pulse(int gain) @@ -56,22 +54,22 @@ static int hx711_get_gain_to_pulse(int gain) return 1; } -static int hx711_get_gain_to_scale(int gain) +static int hx711_get_gain_to_scale(const int *gain_scale, int gain) { int i; for (i = 0; i < HX711_GAIN_MAX; i++) if (hx711_gain_to_scale[i].gain == gain) - return hx711_gain_to_scale[i].scale; + return gain_scale[i]; return 0; } -static int hx711_get_scale_to_gain(int scale) +static int hx711_get_scale_to_gain(const int *gain_scale, int scale) { int i; for (i = 0; i < HX711_GAIN_MAX; i++) - if (hx711_gain_to_scale[i].scale == scale) + if (gain_scale[i] == scale) return hx711_gain_to_scale[i].gain; return -EINVAL; } @@ -82,6 +80,7 @@ struct hx711_data { struct gpio_desc *gpiod_dout; int gain_set; /* gain set on device */ int gain_chan_a; /* gain for channel A */ + int gain_scale[HX711_GAIN_MAX]; struct mutex lock; /* * triggered buffer @@ -290,7 +289,8 @@ static int hx711_read_raw(struct iio_dev *indio_dev, *val = 0; mutex_lock(&hx711_data->lock); - *val2 = hx711_get_gain_to_scale(hx711_data->gain_set); + *val2 = hx711_get_gain_to_scale(hx711_data->gain_scale, + hx711_data->gain_set); mutex_unlock(&hx711_data->lock); @@ -321,7 +321,7 @@ static int hx711_write_raw(struct iio_dev *indio_dev, mutex_lock(&hx711_data->lock); - gain = hx711_get_scale_to_gain(val2); + gain = hx711_get_scale_to_gain(hx711_data->gain_scale, val2); if (gain < 0) { mutex_unlock(&hx711_data->lock); return gain; @@ -386,6 +386,7 @@ static ssize_t hx711_scale_available_show(struct device *dev, struct device_attribute *attr, char *buf) { + struct hx711_data *hx711_data = iio_priv(dev_to_iio_dev(dev)); struct iio_dev_attr *iio_attr = to_iio_dev_attr(attr); int channel = iio_attr->address; int i, len = 0; @@ -393,7 +394,7 @@ static ssize_t hx711_scale_available_show(struct device *dev, for (i = 0; i < HX711_GAIN_MAX; i++) if (hx711_gain_to_scale[i].channel == channel) len += sprintf(buf + len, "0.%09d ", - hx711_gain_to_scale[i].scale); + hx711_data->gain_scale[i]); len += sprintf(buf + len, "\n"); @@ -511,7 +512,7 @@ static int hx711_probe(struct platform_device *pdev) ret *= 100; for (i = 0; i < HX711_GAIN_MAX; i++) - hx711_gain_to_scale[i].scale = + hx711_data->gain_scale[i] = ret / hx711_gain_to_scale[i].gain / 1678; hx711_data->gain_set = 128; -- 2.43.0