From nobody Sat Sep 26 22:02:22 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 9F3E64C6D; Sat, 29 Aug 2026 06:00:00 +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=1787983202; cv=none; b=uc4kuYDmlvNQsr6Yg+zCVSfex7cGhg2NdsR8C8gHqc/Ic4/ZT6Ql+jnnxvlkPI8cd3luVgsfVyFQqGuH3dH6s0iUNgax5SX47gbYHUgYr3vlYB9S9fQXEtI2jY6nO16UNvOubP4nIcR7X6oas6+X69czmm3C3E1hztG556Z3dEM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787983202; c=relaxed/simple; bh=SqvRGnn+IhUEoK2N6AByTvHIxzmZJCKr0fzFRMHv+Bc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=Me3WiMyXKO7xeve6zSSTDQc06Fk9nA1oRXX+ZGB+16gip2MjAFRovau+5X58sMPWXPIwfx6/Ec2kiXgvqKeAYTCLLOv39hM3Tf6tR90swngzXQ7/NnDge8inyxPZod9seqf/g9MO9TNxiB8/tOxfV2a+0XUelVgOHbypSwdCAgQ= 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=GEw0cOII; 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="GEw0cOII" 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 67T5A0o53384988; Sat, 29 Aug 2026 01:59:55 -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=GEw0cOIIyE4pkTdIBPfml z3s6JPBndIJ/z5ibh72+piWDapDNMmt11lBwgYk7QVlqgzUqwwrl5+Aw5fdbJwHE +t56tEbda4OF2BImr/PZWr1+Zo8yRaWwXS9xxNTfqXoFwCCVIAQSBXc+CgGjagMd Ejo5uS/Q4kMYayxlfYKQqhfIguNYj0yaLl9iP/AV6HNJXwdgQIc6HMMlGCS8Rep+ 3Rs+hQ6zwY8H2TFriOH/K+zaUhER8dpb/AZKqkktW70qfXnkwQinUcrn3OSJlagE jOtZ9lRhWcpwrnKi7+U6gTaEptydCbKmcKQ3qJtyN/B9AIFVkScShqTrK7OjxxRR w== Received: from nwd2mta4.analog.com ([137.71.173.58]) by mx0a-00128a01.pphosted.com (PPS) with ESMTPS id 4gbqmh8cm8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 29 Aug 2026 01:59:55 -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 67T5xs8V035559 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 29 Aug 2026 01:59:54 -0400 Received: from ASHBMBX8.ad.analog.com (10.64.17.5) 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; Sat, 29 Aug 2026 01:59:54 -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; Sat, 29 Aug 2026 01:59:54 -0400 Received: from [10.0.2.15] ([10.66.6.193]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 67T5xYjA027223; Sat, 29 Aug 2026 01:59:47 -0400 From: Kim Seer Paller Date: Sat, 29 Aug 2026 13:59:20 +0800 Subject: [PATCH v4 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: <20260829-iio-ad5710r-upstream-v4-1-8af3121c7d21@analog.com> References: <20260829-iio-ad5710r-upstream-v4-0-8af3121c7d21@analog.com> In-Reply-To: <20260829-iio-ad5710r-upstream-v4-0-8af3121c7d21@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=1787983175; l=2032; i=kimseer.paller@analog.com; s=20250213; h=from:subject:message-id; bh=SqvRGnn+IhUEoK2N6AByTvHIxzmZJCKr0fzFRMHv+Bc=; b=UJPPB/8fV5RQC/NsAkiMkp7q8qzUGFk5K61i1bcR5okTbdffS1B6pz17inMYCpXyB69RcMmHg AbcttMJ2Us1A1bNwrGlxF7r4PB4a0Z6QFp5LoX0kaZNlBaVfM/qZfdQ 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=Yf+NIQRf c=1 sm=1 tr=0 ts=6a92755b cx=c_pps a=3WNzaoukacrqR9RwcOSAdA==:117 a=3WNzaoukacrqR9RwcOSAdA==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA: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-GUID: pJoadH5ZPhiwxLdbctPTeFAPwN6NAWrK X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI5MDA0OSBTYWx0ZWRfXz8XTh7RhmWvX vQnhQ3KYWCjgm5qMkDtu22TY1PnVhDPZJ7Fy1WnsUFGo9ZkSRjBm7ZROwDc6HKsIPvLOmk/RwkN 0Jk8FHXF7TTUKwzlpaPkmdBT82k0aQOL4zr57ZYnIOXYwUlCCpy2nSrD/ziSX5D2X3xh2Pk+b1O OAAwyjyOHAl4pzcQm1muXhEZRLZkhjhSmAK+CqZBwp3Pf3nKOdzrDHGTYI3UjdhvZVWbyjrPlLC AXgJx5OYKiyhZ8Hgsw9ChzpawZRI4sQK3WP3YBAVkdFLIeB2L5LnkXUrHQHCqq0VWfsOW3YlzBZ MKuySr3Muob0PsiwEFNxNsVBruu8kIulTO5VD2rLFgYFyna9oXpMwsIt39jYc0/n4ikzk+ymzgi 4RhVZjRCiyB13+nXFE5LtJxfsfS8XRZi/C5aSJ0YrPSnjU/TzMauDhOe5yIQpyO2AH7e6SOFu+d AS/pagRvJMM2IMU4IHA== X-Proofpoint-Spam-Info: AW1haW4tMjYwODI5MDA0OSBTYWx0ZWRfX3ZUg30O5Kdn5 mm3Cz83EqM+4AtsZqdG8baqPb6GE+KXylZHM85rqMzul23ogSH4dotzUIPVlWTxC4zdqCzenI1Z HTCe2NwyoorJ6g1JYA9SDGRoNyVX/BHG/nEXG6+ia58ckgeOkGVV X-Proofpoint-ORIG-GUID: pJoadH5ZPhiwxLdbctPTeFAPwN6NAWrK 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-08-29_02,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 bulkscore=0 impostorscore=0 phishscore=0 spamscore=0 adultscore=0 lowpriorityscore=0 malwarescore=0 priorityscore=1501 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608290049 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 --- 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 22:02:22 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 8D86E3644BE; Sat, 29 Aug 2026 06:00:05 +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=1787983207; cv=none; b=knmnZShQIR7l8WKW5apcS/zgP5WuW71JQ5LLEKwaLDbG2oekTWFfdP200Xtu3yWMiqL/IoWHTQY1Ho5mlEEFX8PK4Z70fzBGdMX1IX4MBGZkTrwroior6VrQ0OJXFRUOvqXCIjgewkFDT4PnqQVplzUpNZmEZGOLPMq6UgJI+1E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787983207; c=relaxed/simple; bh=o0n+H99rNdGQZezq3ImTz2Sm5yP6JM9yLDjgy4EyCAY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=eHhzhH/B/p4y4eBx40Fngq2zOW6IucKA9pUt9EPhsTqBkkcbtxF0w+P3oFNXaheTQVhfmvrTS4Y9geWiW0rrzzsx/zql8LwIM7xWprFnutqs69IspCuHIGNUj712W8s0CAXLDXUrbI/3J7zAZOXL/J4DsIuAam2Q4eotvE3Bido= 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=yubmwdli; 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="yubmwdli" 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 67T5ABNp3386055; Sat, 29 Aug 2026 02:00:00 -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=w3s1t q7Pw/Y5mEh8LkB855CO618voyktV3ZfblAQzp4=; b=yubmwdliE1QBJTTmvcV+a gfX8pi8G12etZlTMh5k8G4mjXz1lxSKyAjZ2rtVhVZh4c2W8yk1CRiADSrGt9Z6G /cpcBYQP+nucBp/BEq3d8taa45zYPLjzYOjrHToVDiWkQXe5pHNGrn76nkWvnb/F HJIp3aVLySb8zVngQ3Z2EsnkmBMzbuNKl7AsJ5ZD0PRSOQ+twnCzw8gPbOLlAJOb lMxjSWdiUsh4dYiQ4qfgKfa0P5whxNHSRGTCqYkzpwg6fjwNMwnulutOe252S0/u GARv/HQUM4abTRhgi3x4nz4pnd27XWBKK618eRjcywYemO43JNk2iQ3HWorv7+gC w== Received: from nwd2mta4.analog.com ([137.71.173.58]) by mx0a-00128a01.pphosted.com (PPS) with ESMTPS id 4gbqmh8cmd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 29 Aug 2026 02:00:00 -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 67T5xweN035570 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 29 Aug 2026 01:59:58 -0400 Received: from ASHBMBX8.ad.analog.com (10.64.17.5) 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; Sat, 29 Aug 2026 01:59:58 -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; Sat, 29 Aug 2026 01:59:58 -0400 Received: from [10.0.2.15] ([10.66.6.193]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 67T5xYjB027223; Sat, 29 Aug 2026 01:59:51 -0400 From: Kim Seer Paller Date: Sat, 29 Aug 2026 13:59:21 +0800 Subject: [PATCH v4 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: <20260829-iio-ad5710r-upstream-v4-2-8af3121c7d21@analog.com> References: <20260829-iio-ad5710r-upstream-v4-0-8af3121c7d21@analog.com> In-Reply-To: <20260829-iio-ad5710r-upstream-v4-0-8af3121c7d21@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=1787983175; l=5185; i=kimseer.paller@analog.com; s=20250213; h=from:subject:message-id; bh=o0n+H99rNdGQZezq3ImTz2Sm5yP6JM9yLDjgy4EyCAY=; b=PanQMhl3eOS7fG0zTZpHBBQDhcsEOyIytcfDSwqL4qsDAYLzo2Pq9gj7yw4REN/BuzPeqOpgJ OhzAY6+z+vnDDZuvaWM9unRpb0yll+4M/4NWZE1bdPRvZbDcCUYRMng 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=Yf+NIQRf c=1 sm=1 tr=0 ts=6a927560 cx=c_pps a=3WNzaoukacrqR9RwcOSAdA==:117 a=3WNzaoukacrqR9RwcOSAdA==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=0sLvza09kfJOxVLZPwjg:22 a=Z0pTeXoby7EwIRygza74: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: R9LMKR56MPdSDhb_6w1U1TUcokJthZ3r X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI5MDA0OSBTYWx0ZWRfXw7Mfrk4ucOJv 5DvQ67TOvsnxqk2ep/DMnlHK9kzspwS6Syiwl6KNB5E/sk9H3cGqayFob17CGhVSjvygRB1anGz 2K+hWArDDKnXSYb3Ha8XtgLgy2YvXWJMIykzC3McXE+/IjVvqJhTdh3CZptRJaGU+1G3WPSpGlS tlUHXLFw6/E/3+eavQR4M6LwIXYxNxeMf3nhawP/Ww8c0XyZrhx6f3pD0q+2BhijqKOOr4VfCLC 4O6n0utDTd1ALDIxfdlQJZYUDpK7uizWKn6DLu7gs1+AMzDTSbar4W5NALmRpuH2A3vo6e9HXYt FJB/2ksxysJMEq1VncxSxrvt2nkdE1Gu2aKTCoKnl12c08rKMNQIJJvwkJx8NXX9pmKqD6R4YPE Xxfn3M3NIhDFDL9vKXUy7Po2PKKjcoH3zhgapXSKOkGu9AcpHquin/hJf+A4XwOTRGjFA1jxVnL ZR+M1sSFpgHaTlPShSg== X-Proofpoint-Spam-Info: AW1haW4tMjYwODI5MDA0OSBTYWx0ZWRfXy0ISqavxTh09 jT102bkD6YcqZ3pw+zVERJKVFTeWz5rbQ3oJomjL+ycP5Ye5aLpo8g77qpeCN/1MBOsGt+cK0k8 POjVrpgT3PZDe5bjyPrKspy17g0NhSxZ6AbEOM4ZKbTEoKhQq+U4 X-Proofpoint-ORIG-GUID: R9LMKR56MPdSDhb_6w1U1TUcokJthZ3r 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-08-29_02,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 bulkscore=0 impostorscore=0 phishscore=0 spamscore=0 adultscore=0 lowpriorityscore=0 malwarescore=0 priorityscore=1501 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608290049 Add device tree bindings for the Analog Devices AD5710R/AD5711R 8-channel 12-/16-bit Configurable IDAC/VDAC. Signed-off-by: Kim Seer Paller --- .../devicetree/bindings/iio/dac/adi,ad5710r.yaml | 143 +++++++++++++++++= ++++ MAINTAINERS | 1 + 2 files changed, 144 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..259866ca87cf --- /dev/null +++ b/Documentation/devicetree/bindings/iio/dac/adi,ad5710r.yaml @@ -0,0 +1,143 @@ +# 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. Use CH_FUNC_VOLTAGE_OUTPUT for voltage + output or CH_FUNC_CURRENT_OUTPUT 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 3f5e7b2f524d..ec0f3812199c 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 22:02:22 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 541EE35F19D; Sat, 29 Aug 2026 06:00:11 +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=1787983212; cv=none; b=OzLCS5T/fI4L9xr7mfQ5/eeWsmX7o1b4z0zn2UxCRFdYim9gsAIDTjs5eN9vE1yCMSTgNTVRvJhbeixJ9Q7o9R1lPBs3rOxCpLkxMLjtLFtVIE2Jscgugok8y/tDdAsYxa7x2afU9jV5ifL80VEAkQjade48qqy4Obh0sW+gyAo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787983212; c=relaxed/simple; bh=hzuQ5h0FD07vRSnFP7UKTPWjz3kVmAUmeGq0sVUqxnA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=deLj+jRBRLe5obbUoWe8oGTX63mrkF811+qv+t9frXVsOCnDl9nde9LUYIMcoJj5QTgArtI11la14+A5vcVEVar6Sc3W3ivLfIrLtldCgx/99nkTzvXefniMnLYQ2HMtXqKB7FmT+Ugt6G6pGuMMY8/qv3r2ZF1gBgDt/wYI5K0= 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=A8t6+Wy8; 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="A8t6+Wy8" 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 67T5PQ7G4078657; Sat, 29 Aug 2026 02:00:05 -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=A8t6+Wy85Rexv8y37Pr5x wElh8Mp9fQS+qwYYvk/RA3csIBgKj6o4WFLGPm6rrV8fLRsLxZ6k1YONTHZih7Yq FpQVFDOVMmfFNCxsiWMDXP7Z7d3AY799BtGAlH7Dl7QVtagLx1VI5ckSMHGoeR/T s8z9uCTHlEijZr1HzDrTxowe9AY0O3jGdG4T0SkiFrT3/0xUgXI6gFR0U8xpK/UT uxzfyzyhc81LwAR5axv/0eZXDwoOFwCkojsw2DQXNQl/T8eJO2adj6BDOfLNbnW7 OhfLmq5/GfE9seC8nxDR4GdNhhmJOHp6h+WHMAA+SH0NjXx5qXdUrDfPA+J4qai6 w== Received: from nwd2mta4.analog.com ([137.71.173.58]) by mx0a-00128a01.pphosted.com (PPS) with ESMTPS id 4gbs90r3qr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 29 Aug 2026 02:00:04 -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 67T603Qj035613 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 29 Aug 2026 02:00:03 -0400 Received: from ASHBCASHYB5.ad.analog.com (10.64.17.133) 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; Sat, 29 Aug 2026 02:00:03 -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; Sat, 29 Aug 2026 02:00:03 -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; Sat, 29 Aug 2026 02:00:03 -0400 Received: from [10.0.2.15] ([10.66.6.193]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 67T5xYjC027223; Sat, 29 Aug 2026 01:59:56 -0400 From: Kim Seer Paller Date: Sat, 29 Aug 2026 13:59:22 +0800 Subject: [PATCH v4 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: <20260829-iio-ad5710r-upstream-v4-3-8af3121c7d21@analog.com> References: <20260829-iio-ad5710r-upstream-v4-0-8af3121c7d21@analog.com> In-Reply-To: <20260829-iio-ad5710r-upstream-v4-0-8af3121c7d21@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=1787983175; l=4356; i=kimseer.paller@analog.com; s=20250213; h=from:subject:message-id; bh=hzuQ5h0FD07vRSnFP7UKTPWjz3kVmAUmeGq0sVUqxnA=; b=A1/7C67ZoDntWYZM/cDC7DF74OYLriToWc5438VlYm4A6no3wHP0T0sXj5vpqjNElVUKEOmT6 EOorE9MOck6Ar6E/yGjLom0asTTDcpkbTUgDLFsR23o9cM2+jYeEdBx X-Developer-Key: i=kimseer.paller@analog.com; a=ed25519; pk=SPXIwGLg4GFKUNfuAavY+YhSDsx+Q+NwGLceiKwm8Ac= X-ADIRuleOP-NewSCL: Rule Triggered X-Proofpoint-Spam-Info: AW1haW4tMjYwODI5MDA0OSBTYWx0ZWRfX8RzIm6OTBhSk scT1gAMcabNuvke76ABnDMrOaEH4e6toSok6Cmgnmv7R0G9kalkqtGe2O46AU8dUG2/ql1r6qcU N4dSMNthdxpgunqZsIW3ymXikfpHVWcRAGbvw+xM+59iadXJSHb4 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI5MDA0OSBTYWx0ZWRfX0lw1Cap5ICzk lmIl8xv41c7rPklIMP7ZIDIwH5ii8zkyMCJEsp+wSrbJiMoBnVJEU8yz+T9QR4GyvqK/E2R4vyS aQJre8NJryTv3iZbjCHWRTiHHrk1R5ZBdz8hwqGgDvysNgoirLVGDd+dO7O5RdpI2Kduu5GL8k5 0Cg6Q+oDt6tp/rehRMt30A/MV7LQ9C149lfTSmEj7DM0LY0pXHEUM345QfnD96MrpKPaXaBAuGx 9Hv28eLAFDkIzaZGLUFyUJuQdzV72FoDc8uHvZIGWkc3gt/76bVczQjalC49mh51SunuX32wpy9 58Bdj8NSUgRHyhxpzaFgmQheNBIwAq3KKdWPYSFTvdFKIG6zZFxiRa0JUDf/J231NRbdAXS/bBv mnnb947fvpb5WKEToArUVxYs12xRts+asBkPNf+zKbK0ocfEHWg36m1mgrZMKyWBrfdypxEgxhG 19GpIHi4EO3tvqpQV3A== X-Proofpoint-GUID: 1QmTq7ci8g538Z0jwti7uNaCAIsEg5be X-Proofpoint-ORIG-GUID: 1QmTq7ci8g538Z0jwti7uNaCAIsEg5be X-Authority-Analysis: v=2.4 cv=c9Cbhx9l c=1 sm=1 tr=0 ts=6a927564 cx=c_pps a=3WNzaoukacrqR9RwcOSAdA==:117 a=3WNzaoukacrqR9RwcOSAdA==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=0sLvza09kfJOxVLZPwjg:22 a=uXIjobp8t2wMuQ0fPvqm:22 a=gAnH3GRIAAAA:8 a=8ya4BvJESguHEMcuTIsA:9 a=QEXdDO2ut3YA:10 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-08-29_02,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 priorityscore=1501 impostorscore=0 malwarescore=0 phishscore=0 lowpriorityscore=0 clxscore=1015 bulkscore=0 adultscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608290049 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 --- 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 22:02:22 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 0FED0369217; Sat, 29 Aug 2026 06:00:14 +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=1787983216; cv=none; b=J/5bV3o0FcDgh7qQFfKRzL95361v0cyMoAuvgLaeGQQ5UkQlZDshZoj9uPAGRbdUNKE3E2Shuc+QfPOhWpBuzSXLB5fa+CBbvvJoM4nJav8HKpPkhwHhBuYAsMrr4FRsud8bUqhLfrfavQfZGHZo7NakdUAvB1SrRq4Mx6fyEiA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787983216; c=relaxed/simple; bh=EkJu4+1AbVwQUoTA2kZf5SwTtQM6RefQJHOVQo5eU9U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=DJLeReNG8pKRtSdjGWx51fLTfoDH4nKslP/++/PNvNM0x08lqkdZ7pEk2wzoUXj6bMty7w9CZhJit+8sPjp/2ckFqYY9JOyKWRwLTWNHjjA/hePpN6FC3ohCytsHqTYL1YhFBHNdarmxYMZGyNRj3qHOD3aCvmqvS1TbzHZcEuU= 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=mHXD9i98; 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="mHXD9i98" 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 67T59jHC3384295; Sat, 29 Aug 2026 02:00:09 -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=mCx+y wisCRz24Tvpb//VsNT8ICT6d/ElVfL13yEsH1Q=; b=mHXD9i98pnFJWBLYvuOHu /yGZSvKoapqbwABWtMIsVL8Jb5N18Xg92d15fNKWkIP77KktjqNWcGEwbZm4J9rB KQQ6EROjZaBpEgVh55+i6+7W6timBHV1zXHUbk7tQ7QgBRqKbTxVPAiVctxxWRql tNYw4WadPAdwKzOb0iTww8WSKlZemvh2WOoC7oHeF9c1ZB25rICNZmDw47dBFIPa 5DBwECaowiU1r6n9UZ17A0/GyXUflqsc/krnsDa86sLrYMexaB9ijC8TA8yDLCqI U/0zf41JZ13pJ88gt6gEncNBxyj4hFZZP+8FAHirWhvpR9pcHh/nIWTlppAKfGm/ A== Received: from nwd2mta4.analog.com ([137.71.173.58]) by mx0a-00128a01.pphosted.com (PPS) with ESMTPS id 4gbqmh8cn4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 29 Aug 2026 02:00:09 -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 67T608ia035695 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 29 Aug 2026 02:00:08 -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; Sat, 29 Aug 2026 02:00:08 -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; Sat, 29 Aug 2026 02:00:08 -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; Sat, 29 Aug 2026 02:00:07 -0400 Received: from [10.0.2.15] ([10.66.6.193]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 67T5xYjD027223; Sat, 29 Aug 2026 02:00:01 -0400 From: Kim Seer Paller Date: Sat, 29 Aug 2026 13:59:23 +0800 Subject: [PATCH v4 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: <20260829-iio-ad5710r-upstream-v4-4-8af3121c7d21@analog.com> References: <20260829-iio-ad5710r-upstream-v4-0-8af3121c7d21@analog.com> In-Reply-To: <20260829-iio-ad5710r-upstream-v4-0-8af3121c7d21@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=1787983175; l=16923; i=kimseer.paller@analog.com; s=20250213; h=from:subject:message-id; bh=EkJu4+1AbVwQUoTA2kZf5SwTtQM6RefQJHOVQo5eU9U=; b=SBRCr6gfVZ77g0JeSKAzSDv3VmRc+qGrLn7Vv4m1GYIjfLkvDPrMQnjtvQundh/e4DWFfd4BM 1s9hDPqjTzyDmCgcD1w8Xu+9WvOpoANybU0Qd6UNoczwBDXmPdMYxgk 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=Yf+NIQRf c=1 sm=1 tr=0 ts=6a927569 cx=c_pps a=3WNzaoukacrqR9RwcOSAdA==:117 a=3WNzaoukacrqR9RwcOSAdA==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=0sLvza09kfJOxVLZPwjg:22 a=Z0pTeXoby7EwIRygza74:22 a=gAnH3GRIAAAA:8 a=SeBP3F2555sMZNY9xWQA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-GUID: 0ErSXfjxZ9SEXhHrQSHWEnsJ0cPGxUrC X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI5MDA0OSBTYWx0ZWRfX1hZ/oMMPPzQ2 302/r1YAU+z84O5dqzp1Ctta9ImzjMHheZj6TrkJ7ZvrqMhuVg6Ez9BYcgF6OLaAmzy+lriTy4X sAcGxzZxLDy+p2AV0t79ZXz5rDkWz1i7lvLqNpcVp8As2KTTTLInlhFDZZ9ZTnB0K4iOyS9BoS0 3pOhbl6bOxVOQmLtOeBHYHM/nt5HEU2xu1xsFU9AYtUA1KZ51aAn/S6FsMx0eNUH23o1qc1ftLS oM4ECwOffP4o4FB/2mITTkNhkHavgGgaPh8TQg2PB0VP2Z6GPD5byeH01sOwyt5CDVkMp3DzUbE 24Wc9TRFzL42zYA1gq+jhZkNSPqUGXbfNuDu0GLEhi1++5SQAUGafV7YzrUxGVnvFwdk/Eq7t97 DXZxaibyBmakQGNRtnLnfRwvL2G91FeKHX0rw7Yqb01ZtfaPgXEpyWWjbFdWpQdbTiM4l1QuT2p U3T4dZ8TWW/l5BirD7g== X-Proofpoint-Spam-Info: AW1haW4tMjYwODI5MDA0OSBTYWx0ZWRfX1LpxufZyDO2W qMNOnz7g1KFWXfOcaAmu1h4YXMimvO5FSmrn+P+hn9TgP0ohJbsIhLVdsHxHfFVL8j5eoqkAeXO BCLip0mmQcXl4UIYOra/bhx69U/MaFkcTziu97ebQHo0BKDrj0Kb X-Proofpoint-ORIG-GUID: 0ErSXfjxZ9SEXhHrQSHWEnsJ0cPGxUrC 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-08-29_02,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 bulkscore=0 impostorscore=0 phishscore=0 spamscore=0 adultscore=0 lowpriorityscore=0 malwarescore=0 priorityscore=1501 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608290049 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 --- drivers/iio/dac/Kconfig | 1 + drivers/iio/dac/ad3530r.c | 289 ++++++++++++++++++++++++++++++++++++++++++= +--- 2 files changed, 274 insertions(+), 16 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..dd8d5547fd16 100644 --- a/drivers/iio/dac/ad3530r.c +++ b/drivers/iio/dac/ad3530r.c @@ -3,6 +3,8 @@ * 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. */ @@ -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 channel_configurable; }; =20 struct ad3530r_state { @@ -152,6 +161,11 @@ static const char * const ad3532r_powerdown_modes[] = =3D { "three_state", }; =20 +static const char * const ad5710r_powerdown_modes[] =3D { + "15kohm_to_gnd", + "three_state", +}; + static int ad3530r_get_powerdown_mode(struct iio_dev *indio_dev, const struct iio_chan_spec *chan) { @@ -194,6 +208,30 @@ static const struct iio_enum ad3532r_powerdown_mode_en= um =3D { .set =3D ad3530r_set_powerdown_mode, }; =20 +static int ad5710r_get_powerdown_mode(struct iio_dev *indio_dev, + const struct iio_chan_spec *chan) +{ + struct ad3530r_state *st =3D iio_priv(indio_dev); + int ret; + + ret =3D regmap_test_bits(st->regmap, AD5710R_CHN_VMODE_EN, + AD5710R_CHN_VMODE_EN_BIT(chan->channel)); + if (ret < 0) + return ret; + + /* + * Negate the returned value as 0 represents three_state (mode 1), + * and 1 represents 15kohm_to_gnd (mode 0). + */ + return !ret; +} + +static const struct iio_enum ad5710r_powerdown_mode_enum =3D { + .items =3D ad5710r_powerdown_modes, + .num_items =3D ARRAY_SIZE(ad5710r_powerdown_modes), + .get =3D ad5710r_get_powerdown_mode, +}; + static ssize_t ad3530r_get_dac_powerdown(struct iio_dev *indio_dev, uintptr_t private, const struct iio_chan_spec *chan, @@ -277,6 +315,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 +436,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 +515,17 @@ 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, + }, + IIO_ENUM("powerdown_mode", IIO_SEPARATE, &ad5710r_powerdown_mode_enum), + { } +}; + #define AD3530R_CHAN(_chan, _ext_info) \ { \ .type =3D IIO_VOLTAGE, \ @@ -467,6 +574,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 +640,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 +661,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, + .channel_configurable =3D false, }; =20 static const struct ad3530r_chip_info ad3530r_chip =3D { @@ -554,6 +679,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, + .channel_configurable =3D false, }; =20 static const struct ad3530r_chip_info ad3531_chip =3D { @@ -571,6 +697,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, + .channel_configurable =3D false, }; =20 static const struct ad3530r_chip_info ad3531r_chip =3D { @@ -588,6 +715,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, + .channel_configurable =3D false, }; =20 static const struct ad3530r_chip_info ad3532_chip =3D { @@ -605,6 +733,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, + .channel_configurable =3D false, }; =20 static const struct ad3530r_chip_info ad3532r_chip =3D { @@ -622,8 +751,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, + .channel_configurable =3D false, +}; + +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, + .channel_configurable =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, + .channel_configurable =3D true, }; =20 +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; + u32 reg; + + 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; + + 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, -EINVAL, + "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 +900,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 +952,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->channel_configurable) { + /* 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); + + ret =3D ad3530r_write_reg_banks(st, chip_info->op_mode, + chip_info->num_op_mode_regs, val); + if (ret) + return ret; =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; + for (unsigned int i =3D 0; i < chip_info->num_channels; i++) + st->chan[i].powerdown_mode =3D AD3530R_POWERDOWN_32K; =20 - for (unsigned int i =3D 0; i < st->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 +1032,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 +1050,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 +1063,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