From nobody Mon Feb 9 19:05:29 2026 Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) (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 AA3B82EDD63 for ; Fri, 10 Oct 2025 11:23:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760095437; cv=none; b=CIuOZWNMsFjpUXWiPoZN4EvF1j/jm5l/Zev9kxKcTTnVFN3GqRjFe7vdlnGgNw3yihnfYldM6pHOF8kEogYiCPIU99vLklu0yhHMlfgJ+l4HFpIpSe7b1wZDOW8jZcKE/AYEgW3iNlXXCg1GFDHQ4eIU1ddVPyBIlykbsD371iI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760095437; c=relaxed/simple; bh=rybSxxhw1JotC0EVvnPnvDxaGD0GBvkGpkXdb1a1CO8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DIv5DUHZIVUDkLg55BTKDydIgrT0p5a4hDMbJFY9RkxXNpzCTBjldWuO655xU8jxspNmfaDiobBfgFDdqwCP/dzGyrTzNAGnea8mW3I/yeoxX/NoNaT6ZjwzU+rSEf0NXpInZ254ycoBW8eaGK7jbVEzxYOu4dr0xdewcjgroc0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fairphone.com; spf=pass smtp.mailfrom=fairphone.com; dkim=pass (2048-bit key) header.d=fairphone.com header.i=@fairphone.com header.b=vlNOeGig; arc=none smtp.client-ip=209.85.218.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fairphone.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fairphone.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fairphone.com header.i=@fairphone.com header.b="vlNOeGig" Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-b00a9989633so283768366b.0 for ; Fri, 10 Oct 2025 04:23:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fairphone.com; s=fair; t=1760095433; x=1760700233; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=JR1QbCUpiXRUCwLKLdHPO8x+lkjmFTnSPPaWi/d3ZRE=; b=vlNOeGigQ4qhYttAwAyDs+DLpQsokD7pjZ1ROsEYA/Yy+w/2LIecSmts+rkyT/1cWH kRLa/UX7Z7JUQRNNN7Ormu7dwXDJlJuCgYSSbfpBWDp7HAdiGkkxV4JMOpYOEb14v49O ethk+l/8dEMnnDQavUIyGMDByCbUy+CSlSFtf/GPqMdTaJpWoS+6TGMa9d/50ZqTxdrN W1/DI9HP6Yr2x3Pv7VS7GpWpwskIAwAxzMsboOFWjPp1xnFUuJEzfGbruxeKGQIsS6Hs K367uW091ssZ2ZwzAI+v7tXkiYXlDvXTA0QynKdOqKdW9qo/S2DqkQTWaUodGq/KZ5gq IUEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760095433; x=1760700233; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JR1QbCUpiXRUCwLKLdHPO8x+lkjmFTnSPPaWi/d3ZRE=; b=U/k7jNUf/yaTeoXHVLHbqVHIuQ1LchQ+l2tfFA6XSEcM72wlO92F5BwSyvc0N9fBEN /n5YRSgeoKHeY6BydsesIWSyqegbNZWbr1ST4WBo5I8r2qB8jPa23Fw751V3FNRlH7IP 2+3y+pmtzoPs55FZ99D/VjLtFKwVe6Rx2XuevehkAbFdtalgpDAzba8okj8XqmQTHwE5 J+m43ZZGYo+ZhY3yGXszN3WAiOarRWxog7ejnKRAeOGn/rPRFdznDWXIa62/fgl4WFlV t0zusa11f3H4fs5+FPoc8SpK02SUqc1Ko+4q0eMgX2hRkxiMh1yTJTqIar/s3E8fdHNd zGPQ== X-Forwarded-Encrypted: i=1; AJvYcCX3vfGLKOxjXNDZAmJcGIp1S9ffgE15KSV9yf6sMfdefSDHQo61dBT8+ZSEbW13aqoG+x1x/70JMD/W1nM=@vger.kernel.org X-Gm-Message-State: AOJu0YxjComRLfOV23bcnsAHwg9JLTeIgx0EXdpSz8i/GxIHk6Hrv5bs CWQRKpPqBRjDRTOoG8vkPdWjaU4LPPx7ZLGdcJo7zYu9YGyW0jm1oVCl1+fulj8A1F0= X-Gm-Gg: ASbGncvV2GkMaNIRybd6rCsVdoPQKaWJ2bXBPsJihvrQnTR7p73GCnXOjOJLUU6/Pw9 y3VmnSohZkaKcTFipXCmSOYcB/JOxdCEjkfMqvILwbQMnyZbQhQy0ew682h8Jeqr4JJt9o+cMEg m+2bXSBlAHFj2V2XB+isES9wXml7b2yHitgTHKPYcvoMWqmBpi6svc1bCB50Kqo8hsAqdcKlZtL wRsae9UtJxV9qVNWS4B2jh7GmYGSBGfRX3k0WmqxERR58gGHqr+J04excljcR7OdmQw2UG96B09 A7vKDTzXEMIYfRi5tprwNtXcpyRAJLTGG02/UEtK6+tkpvgZt4P2H6wU7G/Exmo8Q8y070EjMnq YLO2YQ24S4zJ+1//Sdq6ISgb9Hq+uEJj4S0V2ZgU2+OOWHs8J2pIksnpnv1UjhxvK60iLLpfaKm NQFISQYfi01jY8u24qMfc= X-Google-Smtp-Source: AGHT+IFLrf/4N+O+0nhBGG1lU67A0rcFh0CE0ABq2ryOs2uijVAnZxJ+WemBal4mL43bCWhHez8qkw== X-Received: by 2002:a17:906:794b:b0:b41:8ad3:1b5c with SMTP id a640c23a62f3a-b50bd23ebebmr1530935566b.13.1760095433066; Fri, 10 Oct 2025 04:23:53 -0700 (PDT) Received: from [172.16.240.99] (144-178-202-138.static.ef-service.nl. [144.178.202.138]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b55d900bf8csm209905766b.59.2025.10.10.04.23.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Oct 2025 04:23:52 -0700 (PDT) From: Luca Weiss Date: Fri, 10 Oct 2025 13:22:01 +0200 Subject: [PATCH RFC 3/6] thermal/drivers/generic-adc: Register as IIO device Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251010-bat-temp-adc-v1-3-d51ec895dac6@fairphone.com> References: <20251010-bat-temp-adc-v1-0-d51ec895dac6@fairphone.com> In-Reply-To: <20251010-bat-temp-adc-v1-0-d51ec895dac6@fairphone.com> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Laxman Dewangan , Bjorn Andersson , Konrad Dybcio , Hans de Goede , Jens Reidel , Casey Connolly Cc: ~postmarketos/upstreaming@lists.sr.ht, phone-devel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, Luca Weiss X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1760095429; l=2769; i=luca.weiss@fairphone.com; s=20250611; h=from:subject:message-id; bh=rybSxxhw1JotC0EVvnPnvDxaGD0GBvkGpkXdb1a1CO8=; b=3PsVEzygrJHYdPvkcHsM4cNpPtkZ6H6GZeqjAfQBvgyjpuGjMffNHRlKsNnJiWIsW72DwVl+4 tJVfZBOE+MdB3TU+4/hGB+hucyEo+AFPGN0Ut3L21wrUf4hpyVs05hK X-Developer-Key: i=luca.weiss@fairphone.com; a=ed25519; pk=O1aw+AAust5lEmgrNJ1Bs7PTY0fEsJm+mdkjExA69q8= Register an IIO channel to allow reading the temperature using the IIO interface. Signed-off-by: Luca Weiss --- drivers/thermal/thermal-generic-adc.c | 56 +++++++++++++++++++++++++++++++= ++++ 1 file changed, 56 insertions(+) diff --git a/drivers/thermal/thermal-generic-adc.c b/drivers/thermal/therma= l-generic-adc.c index ee3d0aa31406..14aef682e0fb 100644 --- a/drivers/thermal/thermal-generic-adc.c +++ b/drivers/thermal/thermal-generic-adc.c @@ -7,6 +7,7 @@ * Author: Laxman Dewangan */ #include +#include #include #include #include @@ -23,6 +24,10 @@ struct gadc_thermal_info { int nlookup_table; }; =20 +struct gadc_iio { + struct gadc_thermal_info *gti; +}; + static int gadc_thermal_adc_to_temp(struct gadc_thermal_info *gti, int val) { int temp, temp_hi, temp_lo, adc_hi, adc_lo; @@ -115,10 +120,44 @@ static int gadc_thermal_read_linear_lookup_table(stru= ct device *dev, return 0; } =20 +static int gadc_adc_read_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, + int *val, int *val2, long mask) +{ + struct gadc_iio *data =3D iio_priv(indio_dev); + int iio_val; + int ret; + + switch (mask) { + case IIO_CHAN_INFO_PROCESSED: + ret =3D iio_read_channel_processed(data->gti->channel, &iio_val); + if (ret < 0) + return ret; + + *val =3D gadc_thermal_adc_to_temp(data->gti, iio_val); + return IIO_VAL_INT; + default: + return -EINVAL; + } +} + +static const struct iio_info gadc_adc_info =3D { + .read_raw =3D &gadc_adc_read_raw, +}; + +static const struct iio_chan_spec gadc_adc_channels[] =3D { + { + .type =3D IIO_TEMP, + .info_mask_separate =3D BIT(IIO_CHAN_INFO_PROCESSED), + }, +}; + static int gadc_thermal_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; struct gadc_thermal_info *gti; + struct iio_dev *indio_dev; + struct gadc_iio *data; int ret; =20 if (!dev->of_node) { @@ -153,6 +192,23 @@ static int gadc_thermal_probe(struct platform_device *= pdev) =20 devm_thermal_add_hwmon_sysfs(dev, gti->tz_dev); =20 + indio_dev =3D devm_iio_device_alloc(dev, sizeof(*data)); + if (!indio_dev) + return -ENOMEM; + + data =3D iio_priv(indio_dev); + data->gti =3D gti; + + indio_dev->name =3D pdev->name; + indio_dev->modes =3D INDIO_DIRECT_MODE; + indio_dev->info =3D &gadc_adc_info; + indio_dev->channels =3D gadc_adc_channels; + indio_dev->num_channels =3D ARRAY_SIZE(gadc_adc_channels); + + ret =3D devm_iio_device_register(dev, indio_dev); + if (ret) + return dev_err_probe(dev, ret, "Failed to register IIO device\n"); + return 0; } =20 --=20 2.51.0