From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (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 E4B12348C4C for ; Sat, 4 Jul 2026 17:15:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783185338; cv=none; b=u2YflAgWeupOMXj4J2sFUmvNkyCWluj2/VBT+h4rXhEVxT4H8+9f5WyGg4CSEpeZeIpNaxbmBbl5OtzcD9LzOk7bqK11Z4wFtfNRbE6AMIOA8n79X5ZEd33K/v9z/sWtZ8ytcjmaeLxhFGfZxN7VVy9hUHhQtVEtryaONpldpeU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783185338; c=relaxed/simple; bh=NL0+DczK+bX7h5aeTAoVt3cN5b8jI07kISjmFCzG0dY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YMHMOeRQA4UlkhvvMWDqTgGC4ULIvJmaZ1Ake26o9kR385jKuOxaq2CMZjnJ89sHlGgrSCyCDH8aVE62QusB+a36ylSHUv/OvUexW2Gkkp+j8KUppom0mk/r0fDK5ysRxYOcq2EeODPA4jnFNycpElDDHZ8y8sq5zPCzyZ0lX4g= 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=Ka/d2E4n; arc=none smtp.client-ip=209.85.210.175 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="Ka/d2E4n" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-847d1e9db22so1820708b3a.2 for ; Sat, 04 Jul 2026 10:15:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783185336; x=1783790136; 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=JsQaU9uZZtvn5+lIZrSejmQfTd4zI1y5dE5Iy0qO9rc=; b=Ka/d2E4ndWwH8xyqTyI3x5s9987AxA5ijuEEJxZuXre0Yt6r16Xx1prOxtBvYZTYyT E4lUUIPox88dz8qz7VOis23Ulrb0HqHl6S00YSwAxrcvuw6Yv30hMjPTCn1xQ4uQtl6h yWfP+xDkqPC/UFGWXuSnpM935LFKS6c6n23oOTnRY8/Ah0CQIOKwdwFePxAClT7cmC60 vZIFJrOOqy7ezC+7aq9fMuRPP5iUPSAE09kV2ZrcxWouLh32BqqcInkQflFRRqcVd87I 2KhYdO4UA8vvilOIvCk1dnIOIOR/h+H/CKvmiDsfpw7bgbLxIyWiPHpxmjuY95P2rOgT dqQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783185336; x=1783790136; 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=JsQaU9uZZtvn5+lIZrSejmQfTd4zI1y5dE5Iy0qO9rc=; b=qTmMAUImwMWtDKUi9fwcKsQaFA5XC8iaMgbxcfXS8pWwxI5H2iy1vB98ov6IplYVaH AwAxp34zGzEz93eDUXP8c0I8NqrPaGSFikFY3R8BIpgGpyM7LzVH80nqTEQwac7q9ve1 GoGUFSXUSzMWTjA6NtVnFJfrHGLYoRi1DNV/U7p8LDqRn1AMPojIQ+pqPeE6jcYTV21n M25ChqI07kQqAmmAYl98dvyaV/C063PP+KO6+t5/FvGjd2EKAvcwI4Fq0Tf8RpTW0G67 Qxjzl0ykw+9oBisYtoZchwiQqPfFHlxz/TsC36AMbAb/xbDJD3bB0RUm29I1SY9DLgh1 beaQ== X-Forwarded-Encrypted: i=1; AFNElJ9HATLk0lIIIj5IuNi38QnWNMUDcLLmPLX++kOXLlZIw2QMG7f/zr+ZwQxYwyVAFJx9qM2fntSW1YLY518=@vger.kernel.org X-Gm-Message-State: AOJu0YxfxZIbkWbrNMHHEQRHv0svl2NVdNxLk7vTjDwlY2gawGcFl596 pbvUVIHxLwIZiF2RMrPZkCXZudYOVBsEyvBqLJG0QkxHoSxzgxUAVCtc X-Gm-Gg: AfdE7cmHthSUmHR94GTVQGtob9mW7iNR4OcGvc8B0SREUdlf5LAUhMpspj9ZH05vYED Vp3gVOCfT4bHk3EJN9vGdw2RUkH6BU9tFePI+TajfBXiSYqBbv/wP4zSGlizvQ0gfTkTq7Bm9z4 fXFMDvl3WSbcu1V9yuK2XEiCJMi8cSAl1YABVJgqa4ESv6439B7VQ4pHbS1u89NLSJzoCv/Yv3j glovEv4N+8xPccQ4dCjzBmAM1jLmyz9xK/L4wwesaaLLWFHO597kHv26qFkGyjteWGVi24wMN10 OWynVkwO/UmwUs/RZzzaTgjH4GtEyH/3yKAKNN+MY5uoHvS4To0cXPSTWH/e7r+pfOlk2ixMUVZ hKdBvWl2xMmTItqBjO1lZFDDfLuQNjhYHLfb8oYmLyNBH5HbE0iAdJrbog+tyXgjVyFCBttX4+u WKW7qq X-Received: by 2002:a05:6a00:3305:b0:847:902a:57c1 with SMTP id d2e1a72fcca58-847f6f84d6fmr4092931b3a.57.1783185336159; Sat, 04 Jul 2026 10:15:36 -0700 (PDT) Received: from archlinux ([212.192.12.80]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-847f6d498adsm1379101b3a.32.2026.07.04.10.15.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Jul 2026 10:15:35 -0700 (PDT) From: Mikhail Kalashnikov To: Vasily Khoruzhick , Yangtao Li , "Rafael J . Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Philipp Zabel Cc: linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v5 3/5] thermal/drivers/sun8i: get calibration data from two nvmem cells Date: Sun, 5 Jul 2026 01:14:09 +0800 Message-ID: <20260704171411.1413349-4-iuncuim@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260704171411.1413349-1-iuncuim@gmail.com> References: <20260704171411.1413349-1-iuncuim@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 A523 processor has calibration data in two nvmem cells. To be able to add support, the ability to add data from two cells into one array must be added. Signed-off-by: Mikhail Kalashnikov --- drivers/thermal/sun8i_thermal.c | 80 +++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 29 deletions(-) diff --git a/drivers/thermal/sun8i_thermal.c b/drivers/thermal/sun8i_thermal.c index df0c26970..3bdd62aa8 100644 --- a/drivers/thermal/sun8i_thermal.c +++ b/drivers/thermal/sun8i_thermal.c @@ -301,43 +301,65 @@ static int sun50i_h6_ths_calibrate(struct ths_device *tmdev, static int sun8i_ths_calibrate(struct ths_device *tmdev) { - struct nvmem_cell *calcell; + struct nvmem_cell *calcell = NULL; struct device *dev = tmdev->dev; - u16 *caldata; - size_t callen; + struct device_node *np = dev_of_node(dev); + struct property *prop; + const char *cellname; + u8 *caldata = NULL; + size_t callen = 0; int ret = 0; - calcell = nvmem_cell_get(dev, "calibration"); - if (IS_ERR(calcell)) { - if (PTR_ERR(calcell) == -EPROBE_DEFER) - return -EPROBE_DEFER; - /* - * Even if the external calibration data stored in sid is - * not accessible, the THS hardware can still work, although - * the data won't be so accurate. - * - * The default value of calibration register is 0x800 for - * every sensor, and the calibration value is usually 0x7xx - * or 0x8xx, so they won't be away from the default value - * for a lot. - * - * So here we do not return error if the calibration data is - * not available, except the probe needs deferring. - */ - goto out; - } + of_property_for_each_string(np, "nvmem-cell-names", prop, cellname) { + size_t len; + u8 *caldatapart; + + calcell = of_nvmem_cell_get(np, cellname); + if (IS_ERR(calcell)) { + if (PTR_ERR(calcell) == -EPROBE_DEFER) + return -EPROBE_DEFER; + /* + * Even if the external calibration data stored in sid is + * not accessible, the THS hardware can still work, although + * the data won't be so accurate. + * + * The default value of calibration register is 0x800 for + * every sensor, and the calibration value is usually 0x7xx + * or 0x8xx, so they won't be away from the default value + * for a lot. + * + * So here we do not return error if the calibration data is + * not available, except the probe needs deferring. + */ + goto out; + } + + caldatapart = nvmem_cell_read(calcell, &len); + nvmem_cell_put(calcell); + calcell = NULL; + if (IS_ERR(caldatapart)) { + ret = PTR_ERR(caldatapart); + goto out; + } + + caldata = devm_krealloc(dev, caldata, callen + len, GFP_KERNEL); + if (!caldata) { + kfree(caldatapart); + ret = -ENOMEM; + goto out; + } - caldata = nvmem_cell_read(calcell, &callen); - if (IS_ERR(caldata)) { - ret = PTR_ERR(caldata); - goto out; + memcpy(caldata + callen, caldatapart, len); + callen += len; + kfree(caldatapart); } - tmdev->chip->calibrate(tmdev, caldata, callen); + tmdev->chip->calibrate(tmdev, (u16 *)caldata, callen); - kfree(caldata); + devm_kfree(dev, caldata); + caldata = NULL; out: - if (!IS_ERR(calcell)) + if (!IS_ERR_OR_NULL(calcell)) nvmem_cell_put(calcell); return ret; } -- 2.55.0