From nobody Sat Sep 26 06:16:47 2026 Received: from mx0a-00128a01.pphosted.com (mx0a-00128a01.pphosted.com [148.163.135.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4FD233EAC71; Fri, 4 Sep 2026 08:36:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.135.77 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788510972; cv=none; b=SalSiwtTgJ//KjX2V1wDT4wGyoWG3O+nxmquYjQ1AJKsTVEtu0NH5HeKVzcFy+NuhHy8c6EP9tqsNkV0vBin84m1QLCEopP91uPIGHtN0XC5CvY8ROi813UoMiBNw8ZMItwegBJ62+OeFKKVG+FoaPMnkYp9htrr+BXiwAIoN20= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788510972; c=relaxed/simple; bh=SqvRGnn+IhUEoK2N6AByTvHIxzmZJCKr0fzFRMHv+Bc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=Il8IuNGqUPMZtLBBjdIwXWmJdCIWELVwtiaK9TJm66dLql1ZKe8rsS+Xm7LHwi1CYVsPYmWM5+TqEhRrF2QVpRgjFcjVB29O1cuqB8ddFc28fOxiZj7EBbc/kU2dyoP9nfl0Rz9hI5PWm9NBcRFG0Pc78MNsBa3iK7uyJw9XtBk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=analog.com; spf=pass smtp.mailfrom=analog.com; dkim=pass (2048-bit key) header.d=analog.com header.i=@analog.com header.b=rqzP5ew4; arc=none smtp.client-ip=148.163.135.77 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=analog.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=analog.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=analog.com header.i=@analog.com header.b="rqzP5ew4" Received: from pps.filterd (m0167089.ppops.net [127.0.0.1]) by mx0a-00128a01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68464slu3147526; Fri, 4 Sep 2026 04:36:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=analog.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=DKIM; bh=ZH2tN kf9nle0iSvyskoHPhsLVSlLZkHFzRnKUGDufQw=; b=rqzP5ew4aPuhCc5CusEV2 UJpKht7oLp9pPM98CZQ/vxAGlJrrFjppJTHZsKFIq5L1znp+RDQDvndIwOmfJWmi VYGr98rBSjlKGzQc/4pyYrXgQZzdcQRvVVkn7poSLc8cV6l2+o9ETVV9Jr/p3uJ+ 9P/PG3rH44eM+fRs5Olb32TxGCXlZ1OSXDxSzj+lPJfzy8i+mFCotnx14g+wKdmL fOon6B3/iYo2dY10PoDLqbv8DWDh7nDaJ1jeOHb+mfFZQ6kMBh6aniC4zqd0OC0/ jfvtC81CrQrT2t73lEVGcvuaA6JUUNRUhMrZSJwgn017eFvshgE7aV56YR5xmYdC g== Received: from nwd2mta4.analog.com ([137.71.173.58]) by mx0a-00128a01.pphosted.com (PPS) with ESMTPS id 4gfqgxrw7y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 04 Sep 2026 04:36:06 -0400 (EDT) Received: from ASHBMBX9.ad.analog.com (ASHBMBX9.ad.analog.com [10.64.17.10]) by nwd2mta4.analog.com (8.14.7/8.14.7) with ESMTP id 6848a43D007206 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 4 Sep 2026 04:36:04 -0400 Received: from ASHBMBX9.ad.analog.com (10.64.17.10) by ASHBMBX9.ad.analog.com (10.64.17.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.37; Fri, 4 Sep 2026 04:36:04 -0400 Received: from zeus.spd.analog.com (10.66.68.11) by ashbmbx9.ad.analog.com (10.64.17.10) with Microsoft SMTP Server id 15.2.1748.37 via Frontend Transport; Fri, 4 Sep 2026 04:36:04 -0400 Received: from 10.98.41.145 ([10.66.6.191]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 6848Zjj3026621; Fri, 4 Sep 2026 04:35:57 -0400 From: Kim Seer Paller Date: Fri, 4 Sep 2026 16:35:24 +0800 Subject: [PATCH v5 1/4] iio: ABI: Add DAC current powerdown attributes and 15kohm_to_gnd mode 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: <20260904-iio-ad5710r-upstream-v5-1-76f985b7d0ee@analog.com> References: <20260904-iio-ad5710r-upstream-v5-0-76f985b7d0ee@analog.com> In-Reply-To: <20260904-iio-ad5710r-upstream-v5-0-76f985b7d0ee@analog.com> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Michael Hennerich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Philipp Zabel CC: , , , , Kim Seer Paller X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1788510945; l=2032; i=kimseer.paller@analog.com; s=20250213; h=from:subject:message-id; bh=SqvRGnn+IhUEoK2N6AByTvHIxzmZJCKr0fzFRMHv+Bc=; b=zb0mpxHUGQWp7xS57CSyISZCsOqxq7Ab3CWTvEJDRHzrXCTOHg14VEpQ9/d+F8W01n+Z7J1QR V+R8qEJSMCiDJttipXS3qpxtu2QUVHBxcAQUSoSrwOm8N5aJWLLNarK X-Developer-Key: i=kimseer.paller@analog.com; a=ed25519; pk=SPXIwGLg4GFKUNfuAavY+YhSDsx+Q+NwGLceiKwm8Ac= X-ADIRuleOP-NewSCL: Rule Triggered X-Authority-Analysis: v=2.4 cv=cKzQdFeN c=1 sm=1 tr=0 ts=6a9a82f6 cx=c_pps a=3WNzaoukacrqR9RwcOSAdA==:117 a=3WNzaoukacrqR9RwcOSAdA==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=VkNPw1HP01LnGYTKEx00:22 a=0sLvza09kfJOxVLZPwjg:22 a=Z0pTeXoby7EwIRygza74:22 a=gAnH3GRIAAAA:8 a=VwQbUJbxAAAA:8 a=50yiy_OdUqj7sOdj0TsA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDA3OCBTYWx0ZWRfX+nkqIGKZFsbd SUZXKomJIzU6okndIQx55XYnn50GqvxH64q13aMp0b9yTZC+KwiXb4lwG1LybHbS/2ev9hrPwWb Q6Fj+JjD8eaIO1PAOSckpcJQLW56gFWXkMslnFWDBLtQ2JiggBnm X-Proofpoint-ORIG-GUID: RTpQW_ZEahZrbzqWzT1q3mpxwEK7Tq1D X-Proofpoint-GUID: RTpQW_ZEahZrbzqWzT1q3mpxwEK7Tq1D X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDA3OCBTYWx0ZWRfX7huVBlOIno24 m/4NG/ZOAEqZNbcLgfHVZe6ehYWdM8rm0/bLqs26rCNccPU2FAhz+ZaeALt564HWY5DH4XdWU2S 6thdXKvI9eCvElec+9uUE8JrF63iT023OK4UDvvf0Xfo36WVUdH+qS9w1x5WnFORxVgh3U79nFG 0K1Hb1AwlFAlaXnDLI2j23I3SBlIbL8O/f2/W1AR+DGZnY3uge1pJI1Ysul+wdZap46YK9wBzGX 9AZ2jI+hrpXVJfz0GffSHpd8UebASBX8MCrT6WPjO5kc8EV7NV6Hwxsb2TTX2wt1AZfVmb4S57M pSGwxOus0q4p05Y7xKGv95Pjxg8Abxeywc7gOyQVWl7Vhw5MwbWH5g+kFW/sfiYc+wf1BQ5Xtfo 3vy3KgwhWr1Po46OFln53x53k8B/WV7NvBinS10GKhzHnV65aDw4tknnD7RlXTka0oUytXG2eIu ktXXe4Y1NFFelHsCRyA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_02,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 clxscore=1015 suspectscore=0 adultscore=0 impostorscore=0 malwarescore=0 priorityscore=1501 lowpriorityscore=0 bulkscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040078 Document the out_currentY_powerdown and out_currentY_powerdown_mode attributes for current-output DAC channels, and add the 15kohm_to_gnd powerdown mode. Signed-off-by: Kim Seer Paller Reviewed-by: Andy Shevchenko --- Documentation/ABI/testing/sysfs-bus-iio | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/te= sting/sysfs-bus-iio index a4f5595722ad..a0f9aada5c62 100644 --- a/Documentation/ABI/testing/sysfs-bus-iio +++ b/Documentation/ABI/testing/sysfs-bus-iio @@ -762,6 +762,8 @@ What: /sys/bus/iio/devices/iio:deviceX/out_voltageY_po= werdown_mode What: /sys/bus/iio/devices/iio:deviceX/out_voltage_powerdown_mode What: /sys/bus/iio/devices/iio:deviceX/out_altvoltageY_powerdown_mode What: /sys/bus/iio/devices/iio:deviceX/out_altvoltage_powerdown_mode +What: /sys/bus/iio/devices/iio:deviceX/out_currentY_powerdown_mode +What: /sys/bus/iio/devices/iio:deviceX/out_current_powerdown_mode KernelVersion: 2.6.38 Contact: linux-iio@vger.kernel.org Description: @@ -774,6 +776,7 @@ Description: 6kohm_to_gnd: connected to ground via a 6kOhm resistor, 7.7kohm_to_gnd: connected to ground via a 7.7kOhm resistor, 10kohm_to_gnd: connected to ground via a 10kOhm resistor, + 15kohm_to_gnd: connected to ground via a 15kOhm resistor, 16kohm_to_gnd: connected to ground via a 16kOhm resistor, 20kohm_to_gnd: connected to ground via a 20kOhm resistor, 32kohm_to_gnd: connected to ground via a 32kOhm resistor, @@ -802,6 +805,8 @@ What: /sys/bus/iio/devices/iio:deviceX/out_voltageY_po= werdown What: /sys/bus/iio/devices/iio:deviceX/out_voltage_powerdown What: /sys/bus/iio/devices/iio:deviceX/out_altvoltageY_powerdown What: /sys/bus/iio/devices/iio:deviceX/out_altvoltage_powerdown +What: /sys/bus/iio/devices/iio:deviceX/out_currentY_powerdown +What: /sys/bus/iio/devices/iio:deviceX/out_current_powerdown KernelVersion: 2.6.38 Contact: linux-iio@vger.kernel.org Description: --=20 2.34.1 From nobody Sat Sep 26 06:16:47 2026 Received: from mx0a-00128a01.pphosted.com (mx0a-00128a01.pphosted.com [148.163.135.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3A17A3F5BD4; Fri, 4 Sep 2026 08:36:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.135.77 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788510979; cv=none; b=UK5RzaSinE/OiuKXYFq2LL2vNys9MDMCKgLJkhiCoeXUUCMcKF76HhQ/nKhh1A9wfRaZNTpI81Znv4LuAYMdGG2tHAm4J4YlndUVvwZiuYpjvpdkkvV5aAXwjudbONF0MR8JIN2lYrKF5Mga1CFf45XxFiuxEqtoxITazVj3jtU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788510979; c=relaxed/simple; bh=TvPidjlBaIkYJsn84IgxPnTGakN0d+6vVn3HXZbCFIw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=gozulENR+j2kq1DRWPG2IVBR+lGTNusQKVazwY84JiADMllsSdeYiUVNN3orijr2lLX1ZEBRF6JIga9uku8msPAwOVuDFzosIbvyFkoXCcOA/ui6L4dT2IeUlPNM79eRGRuYNhL4gDnK745hcYfCI1WVuUt4PhI53UrmuP+x+vQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=analog.com; spf=pass smtp.mailfrom=analog.com; dkim=pass (2048-bit key) header.d=analog.com header.i=@analog.com header.b=B9TH3Z5p; arc=none smtp.client-ip=148.163.135.77 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=analog.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=analog.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=analog.com header.i=@analog.com header.b="B9TH3Z5p" Received: from pps.filterd (m0167088.ppops.net [127.0.0.1]) by mx0a-00128a01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68463h823811518; Fri, 4 Sep 2026 04:36:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=analog.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=DKIM; bh=Gy07X EuBY+cJCxSsMUxYGLoBwkoQyj0bvHApEBgrY38=; b=B9TH3Z5p1v3JF42NPqVFO +WvnMkmGTl9NSNSBLz9o/fwz35RgH3hBhmtMmA17VkfeMSw69T4dM7G3UIQt5n1D 6cwWe52HUpekunuuPWTYn2uTeUC2LSQV5qGuyKhcGLiMyzvNjIyKyyfaD0uL5FeX 5FX4AJ53frccVWCntWVScGs1oLfLsxEPPM+VQpGu3VFvoAR0DTrKNtHK68h2/zIb Pr/0gtlMNXMG/0g8ylE8r7Ttyf/zXe6J/pjphGnHv9CUexIO/TNCo0bulHTlzeN7 SbAhnRAIF9WTIWlpGlL+LU8X0kVA5PKb59WMbX+q46VMoZKhP+whZjSerabR5ENk w== Received: from nwd2mta4.analog.com ([137.71.173.58]) by mx0a-00128a01.pphosted.com (PPS) with ESMTPS id 4gffk4tva6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 04 Sep 2026 04:36:11 -0400 (EDT) Received: from ASHBMBX9.ad.analog.com (ASHBMBX9.ad.analog.com [10.64.17.10]) by nwd2mta4.analog.com (8.14.7/8.14.7) with ESMTP id 6848aAEM007238 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 4 Sep 2026 04:36:10 -0400 Received: from ASHBCASHYB4.ad.analog.com (10.64.17.132) by ASHBMBX9.ad.analog.com (10.64.17.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.37; Fri, 4 Sep 2026 04:36:10 -0400 Received: from ASHBMBX8.ad.analog.com (10.64.17.5) by ASHBCASHYB4.ad.analog.com (10.64.17.132) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.37; Fri, 4 Sep 2026 04:36:10 -0400 Received: from zeus.spd.analog.com (10.66.68.11) by ashbmbx8.ad.analog.com (10.64.17.5) with Microsoft SMTP Server id 15.2.1748.37 via Frontend Transport; Fri, 4 Sep 2026 04:36:10 -0400 Received: from 10.98.41.145 ([10.66.6.191]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 6848Zjj4026621; Fri, 4 Sep 2026 04:36:02 -0400 From: Kim Seer Paller Date: Fri, 4 Sep 2026 16:35:25 +0800 Subject: [PATCH v5 2/4] dt-bindings: iio: dac: add adi,ad5710r.yaml 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: <20260904-iio-ad5710r-upstream-v5-2-76f985b7d0ee@analog.com> References: <20260904-iio-ad5710r-upstream-v5-0-76f985b7d0ee@analog.com> In-Reply-To: <20260904-iio-ad5710r-upstream-v5-0-76f985b7d0ee@analog.com> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , "Andy Shevchenko" , Michael Hennerich , Rob Herring , "Krzysztof Kozlowski" , Conor Dooley , "Philipp Zabel" CC: , , , , Kim Seer Paller X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1788510945; l=5283; i=kimseer.paller@analog.com; s=20250213; h=from:subject:message-id; bh=TvPidjlBaIkYJsn84IgxPnTGakN0d+6vVn3HXZbCFIw=; b=3odpBgg32R9le8Gw+7Z5NZvXqnVWI/cPh2Ev2AaswewoWsJUQuP7sw3Qhnlspk3L0pHq/Ca+l GIypXJh02NMDdcPxfYenpMsOgdSZM9RO7ZdO3h+slqn0cMfUut2I7F5 X-Developer-Key: i=kimseer.paller@analog.com; a=ed25519; pk=SPXIwGLg4GFKUNfuAavY+YhSDsx+Q+NwGLceiKwm8Ac= X-ADIRuleOP-NewSCL: Rule Triggered X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDA3OCBTYWx0ZWRfX1jXC7zH35F7u 2En1NC7RW104SbkIS02u4x7caJBGWaMp2tSAuunzZyN4b08GuFhtso/9ulRO6GHA0FsYBB/Dpcp BOCVgwP0Ph76arAFXgc3pf+p13vj72St6rNBnmrY0EnSQ5Foe0AiIqUh0fAftFhgEoJVBzBSd8y EeLSzz2ud9TI39g88QVcgY7/N2+2F1FqL2kLB5ym2DXRJWHyUGaC2M2ftPBg5rzk+NWhW17S/Q3 qgp1OjHFv6lz4xOvYUOAVsYexIcz0+R0oMmUfeKpQVgs+EwpOZNTUHFQ5CmgD+I3FxfBYfSMoB2 T0/T/lnMR6QQEVsJSFCCZ592opK8HYE6euRSQAFmoVIbZIlMoFPArqcUNZRjjW7iOX8mbEZLQDs gn3MZf3FVO0sFJGJTRF6v2QKGeYwXbfRlRrLYQOsOXL+seDkgxXjDdu3NfPEaNknJt0dkA7JPUC kTc5uiOKW76xZlZnADA== X-Authority-Analysis: v=2.4 cv=QI1YgALL c=1 sm=1 tr=0 ts=6a9a82fb cx=c_pps a=3WNzaoukacrqR9RwcOSAdA==:117 a=3WNzaoukacrqR9RwcOSAdA==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=VkNPw1HP01LnGYTKEx00:22 a=0sLvza09kfJOxVLZPwjg:22 a=uXIjobp8t2wMuQ0fPvqm:22 a=gEfo2CItAAAA:8 a=gAnH3GRIAAAA:8 a=VwQbUJbxAAAA:8 a=UDoUUgFuJgqny170jhoA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=sptkURWiP4Gy88Gu7hUp:22 X-Proofpoint-GUID: xWBlLkJyfGVHyIBcPBnpkybubzQA1mpF X-Proofpoint-ORIG-GUID: xWBlLkJyfGVHyIBcPBnpkybubzQA1mpF X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDA3OCBTYWx0ZWRfXw5r8IR3LESyU nr7Im9qBma4QnqtBM0BjIJd7Sep16FQLzu2pBSMCleu8abUlAn58IxVTNSR0uWAngDDGj1eC6je DBwhNPZSxu80GZXpLqpsuxTot2c5ytgbjUsvWLi3lczyiy9JBImo X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_02,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 lowpriorityscore=0 phishscore=0 malwarescore=0 priorityscore=1501 suspectscore=0 impostorscore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040078 Add device tree bindings for the Analog Devices AD5710R/AD5711R 8-channel 12-/16-bit Configurable IDAC/VDAC. Signed-off-by: Kim Seer Paller Reviewed-by: Andy Shevchenko Reviewed-by: Conor Dooley --- .../devicetree/bindings/iio/dac/adi,ad5710r.yaml | 145 +++++++++++++++++= ++++ MAINTAINERS | 1 + 2 files changed, 146 insertions(+) diff --git a/Documentation/devicetree/bindings/iio/dac/adi,ad5710r.yaml b/D= ocumentation/devicetree/bindings/iio/dac/adi,ad5710r.yaml new file mode 100644 index 000000000000..cdcc3da4f4ea --- /dev/null +++ b/Documentation/devicetree/bindings/iio/dac/adi,ad5710r.yaml @@ -0,0 +1,145 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/iio/dac/adi,ad5710r.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Analog Devices AD5710R/AD5711R 8-channel 12-/16-bit Configurable ID= AC/VDAC + +maintainers: + - Kim Seer Paller + +description: | + The AD5710R (16-bit) and AD5711R (12-bit) are 8-channel, low-power, + configurable current/voltage output digital-to-analog converters (DACs) = with + an on-chip 2.5V, 3ppm/=C2=B0C reference. Each channel can be independent= ly + configured as a voltage output (0V to VREF or 0V to 2 x VREF) or a curre= nt + output (0mA to 50mA). These devices operate from a single 2.7V to 5.5V + supply and are guaranteed monotonic by design. + + Datasheet can be found here: + https://www.analog.com/media/en/technical-documentation/data-sheets/ad57= 11r-ad5710r.pdf + +properties: + compatible: + enum: + - adi,ad5710r + - adi,ad5711r + + reg: + maxItems: 1 + + spi-max-frequency: + maximum: 20000000 + + '#address-cells': + const: 1 + + '#size-cells': + const: 0 + + vdd-supply: + description: Power Supply Input. + + iovdd-supply: + description: Digital Power Supply Input. + + io-channels: + description: + ADC channel used to monitor internal die temperature, output voltage= s, and + current of a selected channel via the MUXOUT pin. + maxItems: 1 + + ref-supply: + description: + Reference Input/Output. The voltage at the REF pin sets the full-sca= le + range of all channels. If not provided the internal reference is use= d and + also provided on the VREF pin. + + reset-gpios: + description: + Active low signal that is falling edge sensitive. When it is deasser= ted, + the digital core initialization is performed and all DAC registers e= xcept + the Interface Configuration A register are reset to their default va= lues. + maxItems: 1 + + ldac-gpios: + description: + LDAC pin to be used as a hardware trigger to update the DAC channels= . If + not present, the DAC channels are updated by Software LDAC. + maxItems: 1 + + adi,range-double: + description: + Configure the output range for all channels. If the property is pres= ent, + the output will range from 0V to 2 x Vref. If the property is not pr= esent, + the output will range from 0V to Vref. + type: boolean + +patternProperties: + "^channel@[0-7]$": + $ref: /schemas/iio/dac/dac.yaml# + type: object + description: + Represents the external channels which are connected to the DAC. + + properties: + reg: + description: Channel number + minimum: 0 + maximum: 7 + + adi,ch-func: + description: + Channel output type. The values are defined in + . Use + CH_FUNC_VOLTAGE_OUTPUT (1) for voltage output or + CH_FUNC_CURRENT_OUTPUT (2) for current output. + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [1, 2] + + required: + - reg + - adi,ch-func + + unevaluatedProperties: false + +required: + - compatible + - reg + - vdd-supply + - iovdd-supply + +allOf: + - $ref: /schemas/spi/spi-peripheral-props.yaml# + +unevaluatedProperties: false + +examples: + - | + #include + + spi { + #address-cells =3D <1>; + #size-cells =3D <0>; + dac@0 { + compatible =3D "adi,ad5710r"; + reg =3D <0>; + spi-max-frequency =3D <1000000>; + vdd-supply =3D <&vdd>; + iovdd-supply =3D <&iovdd>; + #address-cells =3D <1>; + #size-cells =3D <0>; + + channel@0 { + reg =3D <0>; + adi,ch-func =3D ; + }; + + channel@1 { + reg =3D <1>; + adi,ch-func =3D ; + }; + }; + }; +... diff --git a/MAINTAINERS b/MAINTAINERS index 48dcb8b10743..edb5a5b871d2 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1468,6 +1468,7 @@ L: linux-iio@vger.kernel.org S: Supported W: https://ez.analog.com/linux-software-drivers F: Documentation/devicetree/bindings/iio/dac/adi,ad3530r.yaml +F: Documentation/devicetree/bindings/iio/dac/adi,ad5710r.yaml F: drivers/iio/dac/ad3530r.c =20 ANALOG DEVICES INC AD3552R DRIVER --=20 2.34.1 From nobody Sat Sep 26 06:16:47 2026 Received: from mx0a-00128a01.pphosted.com (mx0a-00128a01.pphosted.com [148.163.135.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 78A1342E8E7; Fri, 4 Sep 2026 08:36:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.135.77 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788510991; cv=none; b=ttzEetXFAjTVW0/qRuz4UcbFFAHTjyIZsBqhAinvQKqBKFUsFnGm/h6BHSq0o5jGSrq8iYHT1Mw4rsKqav8fmiV1HvRNKYreFltRVLP7N4KF77fa6g4XHrfJW7J9SPg+HcNo/cY+mwwF7OszHy4QKK4F7Cfbl1Hi1VKu7pv4eB8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788510991; c=relaxed/simple; bh=hzuQ5h0FD07vRSnFP7UKTPWjz3kVmAUmeGq0sVUqxnA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=jiyaTs4P9fj4kZwRB8+ZoYvzryW+fr+BFD3eIRW4aq0hSMZwGF437EihHw/jCQ1XkALilTFwxCTu4mJqOcavoTrm7s1ADnZiwmYzLCmPS0SRghBYUm9eVLMai2BbPdwnpxw8OwpqtZ61HlFVd5qcSw8X9kzCDGBQXVNMAu99MlI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=analog.com; spf=pass smtp.mailfrom=analog.com; dkim=pass (2048-bit key) header.d=analog.com header.i=@analog.com header.b=qGQzxOez; arc=none smtp.client-ip=148.163.135.77 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=analog.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=analog.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=analog.com header.i=@analog.com header.b="qGQzxOez" Received: from pps.filterd (m0167089.ppops.net [127.0.0.1]) by mx0a-00128a01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68464sZY3147523; Fri, 4 Sep 2026 04:36:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=analog.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=DKIM; bh=lV8KG UAgGwq9FBjWtGP9+0kwib5vayvyXPLi3c/oeXM=; b=qGQzxOezYYGnShpXM9LRK rZ0eMkEEBhCH5weGJiQFUtF3F7qtOKxNuvnbW10YSViFA2vMYJgqG1VO88D33OuA fQOq3RGXaJuUF9K0EN6SBR8WR5GxAPtiB0dPDxuixdts/qDzHmPcRE0fYp4reBIX 1qJ4zAfC6MNg8fJ7RbByucTNJGcUvbHZjMJbWPntMz0sk9bioUJQ9w2rFCIjTwH+ w0Y9pyZ30kLasRLgkrUWWvkzwERgP8wtzYb2ZsvIfw6nQc6JE6mhjFBpGrX1Yry1 Ipjm/jpYnWdvXjWodgfnF2oi+7Z9tffZwTOT/JgncnYtu09/pk4m8Fvy7yvKA76A g== Received: from nwd2mta4.analog.com ([137.71.173.58]) by mx0a-00128a01.pphosted.com (PPS) with ESMTPS id 4gfqgxrwa3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 04 Sep 2026 04:36:23 -0400 (EDT) Received: from ASHBMBX9.ad.analog.com (ASHBMBX9.ad.analog.com [10.64.17.10]) by nwd2mta4.analog.com (8.14.7/8.14.7) with ESMTP id 6848aMxa007316 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 4 Sep 2026 04:36:22 -0400 Received: from ASHBCASHYB4.ad.analog.com (10.64.17.132) by ASHBMBX9.ad.analog.com (10.64.17.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.37; Fri, 4 Sep 2026 04:36:22 -0400 Received: from ASHBMBX9.ad.analog.com (10.64.17.10) by ASHBCASHYB4.ad.analog.com (10.64.17.132) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.37; Fri, 4 Sep 2026 04:36:22 -0400 Received: from zeus.spd.analog.com (10.66.68.11) by ashbmbx9.ad.analog.com (10.64.17.10) with Microsoft SMTP Server id 15.2.1748.37 via Frontend Transport; Fri, 4 Sep 2026 04:36:22 -0400 Received: from 10.98.41.145 ([10.66.6.191]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 6848Zjj5026621; Fri, 4 Sep 2026 04:36:08 -0400 From: Kim Seer Paller Date: Fri, 4 Sep 2026 16:35:26 +0800 Subject: [PATCH v5 3/4] iio: dac: ad3530r: parameterize DAC resolution 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: <20260904-iio-ad5710r-upstream-v5-3-76f985b7d0ee@analog.com> References: <20260904-iio-ad5710r-upstream-v5-0-76f985b7d0ee@analog.com> In-Reply-To: <20260904-iio-ad5710r-upstream-v5-0-76f985b7d0ee@analog.com> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , "Andy Shevchenko" , Michael Hennerich , Rob Herring , "Krzysztof Kozlowski" , Conor Dooley , "Philipp Zabel" CC: , , , , Kim Seer Paller X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1788510945; l=4356; i=kimseer.paller@analog.com; s=20250213; h=from:subject:message-id; bh=hzuQ5h0FD07vRSnFP7UKTPWjz3kVmAUmeGq0sVUqxnA=; b=00hTDOiX3E/jBFH11/4Q3xJXJawpdBcZNOQFRnB6LJchc/RNmjDRb+8DOexM+k4my0WtjsOwl svqN9pBfJWIATp33IORkptEWLCZvqQOKcN4oJygKv09qTkH56foGuvz X-Developer-Key: i=kimseer.paller@analog.com; a=ed25519; pk=SPXIwGLg4GFKUNfuAavY+YhSDsx+Q+NwGLceiKwm8Ac= X-ADIRuleOP-NewSCL: Rule Triggered X-Authority-Analysis: v=2.4 cv=cKzQdFeN c=1 sm=1 tr=0 ts=6a9a8307 cx=c_pps a=3WNzaoukacrqR9RwcOSAdA==:117 a=3WNzaoukacrqR9RwcOSAdA==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=VkNPw1HP01LnGYTKEx00:22 a=0sLvza09kfJOxVLZPwjg:22 a=Z0pTeXoby7EwIRygza74:22 a=gAnH3GRIAAAA:8 a=8ya4BvJESguHEMcuTIsA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDA3OCBTYWx0ZWRfX6bmPyoc+J52h kJ5eHBy0ie/NHS+AHZe5PtjEkW1BzxmGdfIuI9oR5fQvikxJy9NpwX6IPWNN4ZF51+hNS1hKCwN 6DkqQAU4TwSq45M9bNMMgRinQ7mAD1TwCzuvP7sziVdoyBhzSz87 X-Proofpoint-ORIG-GUID: rlEHrtlmmIW1XXh_n-aZwIomFqvZRM0N X-Proofpoint-GUID: rlEHrtlmmIW1XXh_n-aZwIomFqvZRM0N X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDA3OCBTYWx0ZWRfX3aG9lYfr+Tk2 GABafzkPlol7yEwZm2jCOiKqioE29OhbMkztkA/b5Po++e+FWkT+MqT6UjpKnCy4ATR4OpwAJyj MIqt5yQRDNvcsMvl7U+GBwP9yeoJ676Zde2pHF6NlL9SC8xEu+H839joOY7xOYwURnnzwxAANHD CiJ0k98DjaQu2ML/LH1lqhHYsZONPS9Yc6XDrcNNClVYUw6+C7kyV91V2Nd7U/BB5bsXIworTSO MwU6OqeVQT5eq7R875x7Y0vdkae0n5USasAfsZEe9B4MDoOimtPjWm7M0h0AgWhLKhCYk4gO0pK iPA+8VJ2347inVz52GVASIFp5Xfsufm3R8hvSTGYsIBuAinOzGxORdha08W6vdusctN5KP4LUYy 45RDOen5D9/34b15jBlPaggfKjbq/u24pgEsqcMoEmlmgREXKt0tY8MScVWuB0xSxCgDMO6niJc KfdvyNY7JGs+fxHCaEQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_02,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 clxscore=1015 suspectscore=0 adultscore=0 impostorscore=0 malwarescore=0 priorityscore=1501 lowpriorityscore=0 bulkscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040078 In preparation for adding the AD5710R/AD5711R, which support selectable 12-/16-bit resolution, add a per-chip resolution field and use it in the raw read/write and scale paths instead of assuming 16 bits. Drop AD3530R_REG_VAL_MASK and AD3530R_DAC_MAX_VAL, which hardcoded the 16-bit width and are now unused. Signed-off-by: Kim Seer Paller Reviewed-by: Andy Shevchenko --- drivers/iio/dac/ad3530r.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/iio/dac/ad3530r.c b/drivers/iio/dac/ad3530r.c index 06b7f280f61b..3056593a5ca0 100644 --- a/drivers/iio/dac/ad3530r.c +++ b/drivers/iio/dac/ad3530r.c @@ -61,14 +61,12 @@ #define AD3530R_SLD_TRIG_A BIT(7) #define AD3530R_OUTPUT_CONTROL_RANGE BIT(2) #define AD3530R_REFERENCE_CONTROL_SEL BIT(0) -#define AD3530R_REG_VAL_MASK GENMASK(15, 0) #define AD3530R_OP_MODE_CHAN_MSK(chan) (GENMASK(1, 0) << 2 * (chan)) =20 #define AD3530R_SW_RESET (BIT(7) | BIT(0)) #define AD3530R_INTERNAL_VREF_mV 2500 #define AD3530R_LDAC_PULSE_US 100 =20 -#define AD3530R_DAC_MAX_VAL GENMASK(15, 0) #define AD3530R_CH_PER_REG 4 #define AD3530R_CH_PER_BANK 8 #define AD3531R_MAX_CHANNELS 4 @@ -99,6 +97,7 @@ struct ad3530r_chip_info { unsigned int num_channels; unsigned int num_banks; unsigned int num_op_mode_regs; + unsigned int resolution; bool internal_ref_support; }; =20 @@ -310,7 +309,7 @@ static int ad3530r_dac_write(struct ad3530r_state *st, = unsigned int chan, int ret; =20 guard(mutex)(&st->lock); - st->buf =3D cpu_to_be16(val); + st->buf =3D cpu_to_be16(val << (16 - st->chip_info->resolution)); =20 ret =3D regmap_bulk_write(st->regmap, st->chip_info->input_ch_reg(chan), &st->buf, sizeof(st->buf)); @@ -340,12 +339,12 @@ static int ad3530r_read_raw(struct iio_dev *indio_dev, if (ret) return ret; =20 - *val =3D FIELD_GET(AD3530R_REG_VAL_MASK, be16_to_cpu(st->buf)); + *val =3D be16_to_cpu(st->buf) >> (16 - st->chip_info->resolution); =20 return IIO_VAL_INT; case IIO_CHAN_INFO_SCALE: *val =3D st->vref_mV; - *val2 =3D 16; + *val2 =3D st->chip_info->resolution; =20 return IIO_VAL_FRACTIONAL_LOG2; default: @@ -361,7 +360,7 @@ static int ad3530r_write_raw(struct iio_dev *indio_dev, =20 switch (info) { case IIO_CHAN_INFO_RAW: - if (val < 0 || val > AD3530R_DAC_MAX_VAL) + if (val < 0 || val > GENMASK(st->chip_info->resolution - 1, 0)) return -EINVAL; =20 return ad3530r_dac_write(st, chan->channel, val); @@ -525,6 +524,7 @@ static const struct regmap_config ad3532r_regmap_config= =3D { =20 static const struct ad3530r_chip_info ad3530_chip =3D { .name =3D "ad3530", + .resolution =3D 16, .channels =3D ad3530r_channels, .regmap_config =3D &ad3530r_regmap_config, .num_channels =3D ARRAY_SIZE(ad3530r_channels), @@ -541,6 +541,7 @@ static const struct ad3530r_chip_info ad3530_chip =3D { =20 static const struct ad3530r_chip_info ad3530r_chip =3D { .name =3D "ad3530r", + .resolution =3D 16, .channels =3D ad3530r_channels, .regmap_config =3D &ad3530r_regmap_config, .num_channels =3D ARRAY_SIZE(ad3530r_channels), @@ -557,6 +558,7 @@ static const struct ad3530r_chip_info ad3530r_chip =3D { =20 static const struct ad3530r_chip_info ad3531_chip =3D { .name =3D "ad3531", + .resolution =3D 16, .channels =3D ad3531r_channels, .regmap_config =3D &ad3530r_regmap_config, .num_channels =3D ARRAY_SIZE(ad3531r_channels), @@ -573,6 +575,7 @@ static const struct ad3530r_chip_info ad3531_chip =3D { =20 static const struct ad3530r_chip_info ad3531r_chip =3D { .name =3D "ad3531r", + .resolution =3D 16, .channels =3D ad3531r_channels, .regmap_config =3D &ad3530r_regmap_config, .num_channels =3D ARRAY_SIZE(ad3531r_channels), @@ -589,6 +592,7 @@ static const struct ad3530r_chip_info ad3531r_chip =3D { =20 static const struct ad3530r_chip_info ad3532_chip =3D { .name =3D "ad3532", + .resolution =3D 16, .channels =3D ad3532r_channels, .regmap_config =3D &ad3532r_regmap_config, .num_channels =3D ARRAY_SIZE(ad3532r_channels), @@ -605,6 +609,7 @@ static const struct ad3530r_chip_info ad3532_chip =3D { =20 static const struct ad3530r_chip_info ad3532r_chip =3D { .name =3D "ad3532r", + .resolution =3D 16, .channels =3D ad3532r_channels, .regmap_config =3D &ad3532r_regmap_config, .num_channels =3D ARRAY_SIZE(ad3532r_channels), --=20 2.34.1 From nobody Sat Sep 26 06:16:47 2026 Received: from mx0a-00128a01.pphosted.com (mx0a-00128a01.pphosted.com [148.163.135.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9F5743EB81E; Fri, 4 Sep 2026 08:36:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.135.77 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788510994; cv=none; b=CbSd7ib1ml1JCu0otwCNwHvZyyYWz2YjlEsEVHJsLP1Wta0XTpYDI4UVCNKy69Tg9qLSdlpoGgNM0VkFS6zvAhXkceqm6Z0EiZIbukxigwUQPey+0bhEV3dxl9WJQSE11YvJY7Pliuv8vM1rPibrEkwcMEQHtOcdYrewsMA2zsE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788510994; c=relaxed/simple; bh=EIXJE2NpK1oYgvQmpDKtRp9zN5RP48GL7gJRL9X7M5E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=K8f8niJ5MZ6tKKNGl7sZCp1onqFe+DiCYqeJPliqht6qgYnmRHoJkyW25FHwwMOn2z5TBczSI/EaXlhrSwLAsrRc7mmOvNZBDuTZUKNM3iZ6H1QnzdMpfUXEVtnbCt7Ev0iHHsqIR2q7/6Etp7YGh8iGN4JC0C+Omv2mbOL6w0A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=analog.com; spf=pass smtp.mailfrom=analog.com; dkim=pass (2048-bit key) header.d=analog.com header.i=@analog.com header.b=KuMh5KWG; arc=none smtp.client-ip=148.163.135.77 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=analog.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=analog.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=analog.com header.i=@analog.com header.b="KuMh5KWG" Received: from pps.filterd (m0167088.ppops.net [127.0.0.1]) by mx0a-00128a01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68463h8A3811518; Fri, 4 Sep 2026 04:36:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=analog.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=DKIM; bh=xjRaX VFV2aRa2nR1VKHTXo9DJsVwlmwXDVwr3L9lZMs=; b=KuMh5KWGHIQYV8F0BWlOo 7d7khgv/lkjTo//mBlvGM1BBdAV3uZ3scIhRi0X79ZxJtiNG5U8krvRSZxLgXxAn Ed2D9AS/eMI9Q60YLO9cyli+WibCtobBCbMz+DGtkqdjv6IKc8o5Drm+0TvkM9G0 yXa6wRmGbgHv2Jsj1VO8qUS8aOR/4ZPun5K5fv1aCq35Tm1NnmGRhGKSItRavME1 ARE3vp0hGSs98Vxmkakm6Ue4ktyD3fWMhoZUhJyDuD1M4oNdFkRk/g2geWbBm3SX eNs/unyJfF3N28UH219OxQFLAmdYSsgIo1vTmo7JjW7M0ohlP9OKJ0vUo9bEBNv2 Q== Received: from nwd2mta4.analog.com ([137.71.173.58]) by mx0a-00128a01.pphosted.com (PPS) with ESMTPS id 4gffk4tvbu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 04 Sep 2026 04:36:25 -0400 (EDT) Received: from ASHBMBX8.ad.analog.com (ASHBMBX8.ad.analog.com [10.64.17.5]) by nwd2mta4.analog.com (8.14.7/8.14.7) with ESMTP id 6848aO5S007333 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 4 Sep 2026 04:36:24 -0400 Received: from ASHBCASHYB5.ad.analog.com (10.64.17.133) by ASHBMBX8.ad.analog.com (10.64.17.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.37; Fri, 4 Sep 2026 04:36:24 -0400 Received: from ASHBMBX9.ad.analog.com (10.64.17.10) by ASHBCASHYB5.ad.analog.com (10.64.17.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.37; Fri, 4 Sep 2026 04:36:22 -0400 Received: from zeus.spd.analog.com (10.66.68.11) by ashbmbx9.ad.analog.com (10.64.17.10) with Microsoft SMTP Server id 15.2.1748.37 via Frontend Transport; Fri, 4 Sep 2026 04:36:22 -0400 Received: from 10.98.41.145 ([10.66.6.191]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 6848Zjj6026621; Fri, 4 Sep 2026 04:36:13 -0400 From: Kim Seer Paller Date: Fri, 4 Sep 2026 16:35:27 +0800 Subject: [PATCH v5 4/4] iio: dac: ad3530r: add support for AD5710R/AD5711R 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: <20260904-iio-ad5710r-upstream-v5-4-76f985b7d0ee@analog.com> References: <20260904-iio-ad5710r-upstream-v5-0-76f985b7d0ee@analog.com> In-Reply-To: <20260904-iio-ad5710r-upstream-v5-0-76f985b7d0ee@analog.com> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , "Andy Shevchenko" , Michael Hennerich , Rob Herring , "Krzysztof Kozlowski" , Conor Dooley , "Philipp Zabel" CC: , , , , Kim Seer Paller X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1788510945; l=16571; i=kimseer.paller@analog.com; s=20250213; h=from:subject:message-id; bh=EIXJE2NpK1oYgvQmpDKtRp9zN5RP48GL7gJRL9X7M5E=; b=Vslt9R7+0JIoM+kmd8aHSnmo/zl1CyHV64dU4pqiETqKihOHdcAiwjn18W1F3SjOCc+nDntaT C2Ud9pBvs60D9JJtlIm3pZ7J9Neg6cmLq6sCjvZmEEisstiqO0O2Nif X-Developer-Key: i=kimseer.paller@analog.com; a=ed25519; pk=SPXIwGLg4GFKUNfuAavY+YhSDsx+Q+NwGLceiKwm8Ac= X-ADIRuleOP-NewSCL: Rule Triggered X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA0MDA3OCBTYWx0ZWRfX30GIBAp5wRmZ Z1iYd4a4UDxNojSVPlaY754iQKp46i8O8hHKhc0SUX8hUXOQoivwJEg3comMOqh1LJFxXn3vpOM 3jamCMhVDTM9Aa938GxTOGmN3lRfdhWzXz4G4fp9wxqDoSJnD+Vg1xxEqmHe3ApHNTeoEZ/k0MO Q6vQkn29KcceuhanMJ+0QbfcETzTROV70F58d7eJr5QO/efFgjhwdKz77ue1nzNifuX4eHjMPH5 TEQEZ2ht4p3pSlu0taR/3BXsSdlFhZ9TVn1dByNrZA9kLhtD3s7bRG0yt9QBX4gMiRNiBg2QNg3 pfaOwRp50D9BUKma0zU5q/y3koC4TPrMWkmsf+cui8oTOCn02vFHjDMh6YCSekDBB52p3G+kK+3 dPhodut3Jp2ezchocA5g1oFvasjfQm1ei/ngsCrc0AEEBxz1vS7omBk918qW6mXOGBx9gsyiMYh ydAp6xhnmDxYhqgCeCg== X-Authority-Analysis: v=2.4 cv=QI1YgALL c=1 sm=1 tr=0 ts=6a9a8309 cx=c_pps a=3WNzaoukacrqR9RwcOSAdA==:117 a=3WNzaoukacrqR9RwcOSAdA==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=VkNPw1HP01LnGYTKEx00:22 a=0sLvza09kfJOxVLZPwjg:22 a=uXIjobp8t2wMuQ0fPvqm:22 a=gAnH3GRIAAAA:8 a=SeBP3F2555sMZNY9xWQA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-GUID: kZ34r-UdBtmot8Dt40I6nPASoC-o5Q-P X-Proofpoint-ORIG-GUID: kZ34r-UdBtmot8Dt40I6nPASoC-o5Q-P X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA0MDA3OCBTYWx0ZWRfXzDMUdKOOBnbH nYwoFzR26KQP8pMKSrBF9+TjIzdeFOjsqAjKviYalIAHr1eQSH2CjIjdlZYlzMG3tPOOG7iihl6 Au03GNbM6ekew8jf9aNN2cug8cyHsc6RpI2iN12k22QICgnmDXnL X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-04_02,2026-09-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 lowpriorityscore=0 phishscore=0 malwarescore=0 priorityscore=1501 suspectscore=0 impostorscore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609040078 Add support for the AD5710R/AD5711R, 8-channel 16-/12-bit configurable IDAC/VDAC parts. They share the AD3530R register map and access model, so fold them into this driver. Each channel is configured as voltage or current output from its DT channel@N node via adi,ch-func, building the iio_chan_spec dynamically. Voltage channels enable VMODE_EN and report the reference-derived scale, current channels report the 50 mA internal Iref scale. The powerdown mode is read-only and derived from the channel's configured type. Signed-off-by: Kim Seer Paller Reviewed-by: Andy Shevchenko --- drivers/iio/dac/Kconfig | 1 + drivers/iio/dac/ad3530r.c | 283 ++++++++++++++++++++++++++++++++++++++++++= +--- 2 files changed, 267 insertions(+), 17 deletions(-) diff --git a/drivers/iio/dac/Kconfig b/drivers/iio/dac/Kconfig index 3b3c77d8b3e1..f108d5bac572 100644 --- a/drivers/iio/dac/Kconfig +++ b/drivers/iio/dac/Kconfig @@ -16,6 +16,7 @@ config AD3530R - AD3530/AD3530R (8-channel) - AD3531/AD3531R (4-channel) - AD3532/AD3532R (16-channel) + - AD5710R/AD5711R (8-channel configurable IDAC/VDAC) =20 To compile this driver as a module, choose M here: the module will be called ad3530r. diff --git a/drivers/iio/dac/ad3530r.c b/drivers/iio/dac/ad3530r.c index 3056593a5ca0..7648aa4da25a 100644 --- a/drivers/iio/dac/ad3530r.c +++ b/drivers/iio/dac/ad3530r.c @@ -3,8 +3,10 @@ * AD3530R/AD3530 8-channel, 16-bit Voltage Output DAC Driver * AD3531R/AD3531 4-channel, 16-bit Voltage Output DAC Driver * AD3532R/AD3532 16-channel, 16-bit Voltage Output DAC Driver + * AD5710R 8-channel, 16-bit Configurable IDAC/VDAC Driver + * AD5711R 8-channel, 12-bit Configurable IDAC/VDAC Driver * - * Copyright 2025 Analog Devices Inc. + * Copyright 2025-2026 Analog Devices Inc. */ =20 #include @@ -27,6 +29,8 @@ #include #include =20 +#include + #define AD3530R_INTERFACE_CONFIG_A 0x00 #define AD3530R_OUTPUT_OPERATING_MODE_0 0x20 #define AD3530R_OUTPUT_OPERATING_MODE_1 0x21 @@ -39,6 +43,8 @@ #define AD3531R_SW_LDAC_TRIG_A 0xDD #define AD3531R_INPUT_CH 0xE3 =20 +#define AD5710R_CHN_VMODE_EN 0xFF + /* AD3532R/AD3532 bank 0 registers (channels 0-7) */ #define AD3532R_INTERFACE_CONFIG_A_0 0x1000 #define AD3532R_OUTPUT_OPERATING_MODE_0 0x1020 @@ -62,9 +68,11 @@ #define AD3530R_OUTPUT_CONTROL_RANGE BIT(2) #define AD3530R_REFERENCE_CONTROL_SEL BIT(0) #define AD3530R_OP_MODE_CHAN_MSK(chan) (GENMASK(1, 0) << 2 * (chan)) +#define AD5710R_CHN_VMODE_EN_BIT(chan) BIT(chan) =20 #define AD3530R_SW_RESET (BIT(7) | BIT(0)) #define AD3530R_INTERNAL_VREF_mV 2500 +#define AD5710R_INTERNAL_IREF_mA 50 #define AD3530R_LDAC_PULSE_US 100 =20 #define AD3530R_CH_PER_REG 4 @@ -99,6 +107,7 @@ struct ad3530r_chip_info { unsigned int num_op_mode_regs; unsigned int resolution; bool internal_ref_support; + bool configurable_ch_func; }; =20 struct ad3530r_state { @@ -194,6 +203,23 @@ static const struct iio_enum ad3532r_powerdown_mode_en= um =3D { .set =3D ad3530r_set_powerdown_mode, }; =20 +static ssize_t ad5710r_read_powerdown_mode(struct iio_dev *indio_dev, + uintptr_t private, + const struct iio_chan_spec *chan, + char *buf) +{ + struct ad3530r_state *st =3D iio_priv(indio_dev); + int ret; + + /* Voltage output pulls to 15kohm_to_gnd, current goes three_state. */ + ret =3D regmap_test_bits(st->regmap, AD5710R_CHN_VMODE_EN, + AD5710R_CHN_VMODE_EN_BIT(chan->channel)); + if (ret < 0) + return ret; + + return sysfs_emit(buf, "%s\n", ret ? "15kohm_to_gnd" : "three_state"); +} + static ssize_t ad3530r_get_dac_powerdown(struct iio_dev *indio_dev, uintptr_t private, const struct iio_chan_spec *chan, @@ -277,6 +303,61 @@ static ssize_t ad3532r_set_dac_powerdown(struct iio_de= v *indio_dev, return len; } =20 +static void ad5710r_get_op_mode_reg(unsigned int channel, unsigned int *re= g, + unsigned int *mask) +{ + unsigned int local_ch, reg_in_bank, ch_in_reg; + + local_ch =3D channel % AD3530R_CH_PER_BANK; + reg_in_bank =3D local_ch / AD3530R_CH_PER_REG; + ch_in_reg =3D local_ch % AD3530R_CH_PER_REG; + + *reg =3D AD3530R_OUTPUT_OPERATING_MODE_0 + reg_in_bank; + *mask =3D AD3530R_OP_MODE_CHAN_MSK(ch_in_reg); +} + +static ssize_t ad5710r_get_dac_powerdown(struct iio_dev *indio_dev, + uintptr_t private, + const struct iio_chan_spec *chan, + char *buf) +{ + struct ad3530r_state *st =3D iio_priv(indio_dev); + unsigned int reg, mask; + int ret; + + ad5710r_get_op_mode_reg(chan->channel, ®, &mask); + + ret =3D regmap_test_bits(st->regmap, reg, field_prep(mask, 1)); + if (ret < 0) + return ret; + + return sysfs_emit(buf, "%d\n", ret); +} + +static ssize_t ad5710r_set_dac_powerdown(struct iio_dev *indio_dev, + uintptr_t private, + const struct iio_chan_spec *chan, + const char *buf, size_t len) +{ + struct ad3530r_state *st =3D iio_priv(indio_dev); + unsigned int reg, mask; + bool powerdown; + int ret; + + ret =3D kstrtobool(buf, &powerdown); + if (ret) + return ret; + + ad5710r_get_op_mode_reg(chan->channel, ®, &mask); + + ret =3D regmap_update_bits(st->regmap, reg, mask, + field_prep(mask, powerdown)); + if (ret) + return ret; + + return len; +} + static int ad3530r_trigger_sw_ldac_reg(unsigned int channel) { return AD3530R_SW_LDAC_TRIG_A; @@ -343,7 +424,10 @@ static int ad3530r_read_raw(struct iio_dev *indio_dev, =20 return IIO_VAL_INT; case IIO_CHAN_INFO_SCALE: - *val =3D st->vref_mV; + if (chan->type =3D=3D IIO_CURRENT) + *val =3D AD5710R_INTERNAL_IREF_mA; + else + *val =3D st->vref_mV; *val2 =3D st->chip_info->resolution; =20 return IIO_VAL_FRACTIONAL_LOG2; @@ -419,6 +503,21 @@ static const struct iio_chan_spec_ext_info ad3532r_ext= _info[] =3D { { } }; =20 +static const struct iio_chan_spec_ext_info ad5710r_ext_info[] =3D { + { + .name =3D "powerdown", + .shared =3D IIO_SEPARATE, + .read =3D ad5710r_get_dac_powerdown, + .write =3D ad5710r_set_dac_powerdown, + }, + { + .name =3D "powerdown_mode", + .shared =3D IIO_SEPARATE, + .read =3D ad5710r_read_powerdown_mode, + }, + { } +}; + #define AD3530R_CHAN(_chan, _ext_info) \ { \ .type =3D IIO_VOLTAGE, \ @@ -467,6 +566,17 @@ static const struct iio_chan_spec ad3532r_channels[] = =3D { AD3530R_CHAN(15, ad3532r_ext_info), }; =20 +static const struct iio_chan_spec ad5710r_channels[] =3D { + AD3530R_CHAN(0, ad5710r_ext_info), + AD3530R_CHAN(1, ad5710r_ext_info), + AD3530R_CHAN(2, ad5710r_ext_info), + AD3530R_CHAN(3, ad5710r_ext_info), + AD3530R_CHAN(4, ad5710r_ext_info), + AD3530R_CHAN(5, ad5710r_ext_info), + AD3530R_CHAN(6, ad5710r_ext_info), + AD3530R_CHAN(7, ad5710r_ext_info), +}; + static const unsigned int ad3530r_if_config[] =3D { AD3530R_INTERFACE_CONFIG_A, }; @@ -522,6 +632,12 @@ static const struct regmap_config ad3532r_regmap_confi= g =3D { .max_register =3D AD3532R_MAX_REG_ADDR, }; =20 +static const struct regmap_config ad5710r_regmap_config =3D { + .reg_bits =3D 16, + .val_bits =3D 8, + .max_register =3D AD5710R_CHN_VMODE_EN, +}; + static const struct ad3530r_chip_info ad3530_chip =3D { .name =3D "ad3530", .resolution =3D 16, @@ -537,6 +653,7 @@ static const struct ad3530r_chip_info ad3530_chip =3D { .num_banks =3D ARRAY_SIZE(ad3530r_if_config), .num_op_mode_regs =3D ARRAY_SIZE(ad3530r_op_mode), .internal_ref_support =3D false, + .configurable_ch_func =3D false, }; =20 static const struct ad3530r_chip_info ad3530r_chip =3D { @@ -554,6 +671,7 @@ static const struct ad3530r_chip_info ad3530r_chip =3D { .num_banks =3D ARRAY_SIZE(ad3530r_if_config), .num_op_mode_regs =3D ARRAY_SIZE(ad3530r_op_mode), .internal_ref_support =3D true, + .configurable_ch_func =3D false, }; =20 static const struct ad3530r_chip_info ad3531_chip =3D { @@ -571,6 +689,7 @@ static const struct ad3530r_chip_info ad3531_chip =3D { .num_banks =3D ARRAY_SIZE(ad3530r_if_config), .num_op_mode_regs =3D ARRAY_SIZE(ad3531r_op_mode), .internal_ref_support =3D false, + .configurable_ch_func =3D false, }; =20 static const struct ad3530r_chip_info ad3531r_chip =3D { @@ -588,6 +707,7 @@ static const struct ad3530r_chip_info ad3531r_chip =3D { .num_banks =3D ARRAY_SIZE(ad3530r_if_config), .num_op_mode_regs =3D ARRAY_SIZE(ad3531r_op_mode), .internal_ref_support =3D true, + .configurable_ch_func =3D false, }; =20 static const struct ad3530r_chip_info ad3532_chip =3D { @@ -605,6 +725,7 @@ static const struct ad3530r_chip_info ad3532_chip =3D { .num_banks =3D ARRAY_SIZE(ad3532r_if_config), .num_op_mode_regs =3D ARRAY_SIZE(ad3532r_op_mode), .internal_ref_support =3D false, + .configurable_ch_func =3D false, }; =20 static const struct ad3530r_chip_info ad3532r_chip =3D { @@ -622,8 +743,123 @@ static const struct ad3530r_chip_info ad3532r_chip = =3D { .num_banks =3D ARRAY_SIZE(ad3532r_if_config), .num_op_mode_regs =3D ARRAY_SIZE(ad3532r_op_mode), .internal_ref_support =3D true, + .configurable_ch_func =3D false, }; =20 +static const struct ad3530r_chip_info ad5710r_chip =3D { + .name =3D "ad5710r", + .resolution =3D 16, + .regmap_config =3D &ad5710r_regmap_config, + .num_channels =3D ARRAY_SIZE(ad5710r_channels), + .sw_ldac_trig_reg =3D ad3530r_trigger_sw_ldac_reg, + .input_ch_reg =3D ad3530r_input_ch_reg, + .interface_config_a =3D ad3530r_if_config, + .output_control =3D ad3530r_out_ctrl, + .reference_control =3D ad3530r_ref_ctrl, + .op_mode =3D ad3530r_op_mode, + .num_banks =3D ARRAY_SIZE(ad3530r_if_config), + .num_op_mode_regs =3D ARRAY_SIZE(ad3530r_op_mode), + .internal_ref_support =3D true, + .configurable_ch_func =3D true, +}; + +static const struct ad3530r_chip_info ad5711r_chip =3D { + .name =3D "ad5711r", + .resolution =3D 12, + .regmap_config =3D &ad5710r_regmap_config, + .num_channels =3D ARRAY_SIZE(ad5710r_channels), + .sw_ldac_trig_reg =3D ad3530r_trigger_sw_ldac_reg, + .input_ch_reg =3D ad3530r_input_ch_reg, + .interface_config_a =3D ad3530r_if_config, + .output_control =3D ad3530r_out_ctrl, + .reference_control =3D ad3530r_ref_ctrl, + .op_mode =3D ad3530r_op_mode, + .num_banks =3D ARRAY_SIZE(ad3530r_if_config), + .num_op_mode_regs =3D ARRAY_SIZE(ad3530r_op_mode), + .internal_ref_support =3D true, + .configurable_ch_func =3D true, +}; + +static int ad3530r_parse_channel_cfg(struct iio_dev *indio_dev) +{ + struct ad3530r_state *st =3D iio_priv(indio_dev); + struct device *dev =3D regmap_get_device(st->regmap); + struct iio_chan_spec *channels; + unsigned int num_chan, i; + int ret; + + num_chan =3D device_get_child_node_count(dev); + if (!num_chan) + return dev_err_probe(dev, -ENOENT, "No channels configured\n"); + + channels =3D devm_kcalloc(dev, num_chan, sizeof(*channels), GFP_KERNEL); + if (!channels) + return -ENOMEM; + + i =3D 0; + device_for_each_child_node_scoped(dev, child) { + unsigned int mode_reg, mode_mask, ch_func; + enum iio_chan_type chan_type; + u32 reg; + + ret =3D fwnode_property_read_u32(child, "reg", ®); + if (ret) + return dev_err_probe(dev, ret, + "Failed to read reg property of %pfwP\n", + child); + + if (reg >=3D st->chip_info->num_channels) + return dev_err_probe(dev, -ECHRNG, + "reg out of range in %pfwP\n", + child); + + ret =3D fwnode_property_read_u32(child, "adi,ch-func", &ch_func); + if (ret) + return dev_err_probe(dev, ret, + "Missing adi,ch-func property for %pfwP\n", + child); + + switch (ch_func) { + case CH_FUNC_VOLTAGE_OUTPUT: + ret =3D regmap_set_bits(st->regmap, AD5710R_CHN_VMODE_EN, + AD5710R_CHN_VMODE_EN_BIT(reg)); + if (ret) + return dev_err_probe(dev, ret, + "Failed to set voltage output for %pfwP\n", + child); + + chan_type =3D IIO_VOLTAGE; + break; + case CH_FUNC_CURRENT_OUTPUT: + chan_type =3D IIO_CURRENT; + break; + default: + return dev_err_probe(dev, -EINVAL, + "Invalid adi,ch-func %u for %pfwP\n", + ch_func, child); + } + + channels[i] =3D ad5710r_channels[reg]; + channels[i].type =3D chan_type; + i++; + + ad5710r_get_op_mode_reg(reg, &mode_reg, &mode_mask); + + /* Enable the channel in normal operation mode */ + ret =3D regmap_update_bits(st->regmap, mode_reg, mode_mask, + field_prep(mode_mask, AD3530R_NORMAL_OP)); + if (ret) + return dev_err_probe(dev, ret, + "Failed to set normal operating mode for %pfwP\n", + child); + } + + indio_dev->channels =3D channels; + indio_dev->num_channels =3D num_chan; + + return 0; +} + static int ad3530r_set_reg_bank_bits(const struct ad3530r_state *st, const unsigned int *regs, unsigned int num_regs, @@ -656,8 +892,9 @@ static int ad3530r_write_reg_banks(const struct ad3530r= _state *st, return 0; } =20 -static int ad3530r_setup(struct ad3530r_state *st, int external_vref_uV) +static int ad3530r_setup(struct iio_dev *indio_dev, int external_vref_uV) { + struct ad3530r_state *st =3D iio_priv(indio_dev); const struct ad3530r_chip_info *chip_info =3D st->chip_info; struct device *dev =3D regmap_get_device(st->regmap); struct gpio_desc *reset_gpio; @@ -707,19 +944,29 @@ static int ad3530r_setup(struct ad3530r_state *st, in= t external_vref_uV) st->vref_mV =3D range_multiplier * AD3530R_INTERNAL_VREF_mV; } =20 - /* Set normal operating mode for all channels */ - val =3D FIELD_PREP(AD3530R_OP_MODE_CHAN_MSK(0), AD3530R_NORMAL_OP) | - FIELD_PREP(AD3530R_OP_MODE_CHAN_MSK(1), AD3530R_NORMAL_OP) | - FIELD_PREP(AD3530R_OP_MODE_CHAN_MSK(2), AD3530R_NORMAL_OP) | - FIELD_PREP(AD3530R_OP_MODE_CHAN_MSK(3), AD3530R_NORMAL_OP); + if (chip_info->configurable_ch_func) { + /* Channels and their operating mode are configured from DT */ + ret =3D ad3530r_parse_channel_cfg(indio_dev); + if (ret) + return ret; + } else { + /* Set normal operating mode for all channels */ + val =3D FIELD_PREP(AD3530R_OP_MODE_CHAN_MSK(0), AD3530R_NORMAL_OP) | + FIELD_PREP(AD3530R_OP_MODE_CHAN_MSK(1), AD3530R_NORMAL_OP) | + FIELD_PREP(AD3530R_OP_MODE_CHAN_MSK(2), AD3530R_NORMAL_OP) | + FIELD_PREP(AD3530R_OP_MODE_CHAN_MSK(3), AD3530R_NORMAL_OP); =20 - ret =3D ad3530r_write_reg_banks(st, st->chip_info->op_mode, - st->chip_info->num_op_mode_regs, val); - if (ret) - return ret; + ret =3D ad3530r_write_reg_banks(st, chip_info->op_mode, + chip_info->num_op_mode_regs, val); + if (ret) + return ret; =20 - for (unsigned int i =3D 0; i < st->chip_info->num_channels; i++) - st->chan[i].powerdown_mode =3D AD3530R_POWERDOWN_32K; + for (unsigned int i =3D 0; i < chip_info->num_channels; i++) + st->chan[i].powerdown_mode =3D AD3530R_POWERDOWN_32K; + + indio_dev->channels =3D chip_info->channels; + indio_dev->num_channels =3D chip_info->num_channels; + } =20 st->ldac_gpio =3D devm_gpiod_get_optional(dev, "ldac", GPIOD_OUT_LOW); if (IS_ERR(st->ldac_gpio)) @@ -777,15 +1024,13 @@ static int ad3530r_probe(struct spi_device *spi) if (!st->chip_info->internal_ref_support && external_vref_uV =3D=3D 0) return -ENODEV; =20 - ret =3D ad3530r_setup(st, external_vref_uV); + ret =3D ad3530r_setup(indio_dev, external_vref_uV); if (ret) return ret; =20 indio_dev->name =3D st->chip_info->name; indio_dev->info =3D &ad3530r_info; indio_dev->modes =3D INDIO_DIRECT_MODE; - indio_dev->channels =3D st->chip_info->channels; - indio_dev->num_channels =3D st->chip_info->num_channels; =20 return devm_iio_device_register(&spi->dev, indio_dev); } @@ -797,6 +1042,8 @@ static const struct spi_device_id ad3530r_id[] =3D { { .name =3D "ad3531r", .driver_data =3D (kernel_ulong_t)&ad3531r_chip }, { .name =3D "ad3532", .driver_data =3D (kernel_ulong_t)&ad3532_chip }, { .name =3D "ad3532r", .driver_data =3D (kernel_ulong_t)&ad3532r_chip }, + { .name =3D "ad5710r", .driver_data =3D (kernel_ulong_t)&ad5710r_chip }, + { .name =3D "ad5711r", .driver_data =3D (kernel_ulong_t)&ad5711r_chip }, { } }; MODULE_DEVICE_TABLE(spi, ad3530r_id); @@ -808,6 +1055,8 @@ static const struct of_device_id ad3530r_of_match[] = =3D { { .compatible =3D "adi,ad3531r", .data =3D &ad3531r_chip }, { .compatible =3D "adi,ad3532", .data =3D &ad3532_chip }, { .compatible =3D "adi,ad3532r", .data =3D &ad3532r_chip }, + { .compatible =3D "adi,ad5710r", .data =3D &ad5710r_chip }, + { .compatible =3D "adi,ad5711r", .data =3D &ad5711r_chip }, { } }; MODULE_DEVICE_TABLE(of, ad3530r_of_match); --=20 2.34.1