From nobody Sat Jul 25 01:25:38 2026 Received: from mx0b-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 8FFD13C0A10; Tue, 21 Jul 2026 08:47:57 +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=1784623679; cv=none; b=m7Y4Y35lov9VeBBwvEC8M5+sjvXeDs4h0EEVHE5cegUkR5N86zxnlRN0yxcoly5eZ5vVNwDvWPdAbFAhuyd1ezUaPO4WmFRRk3hEYXNYKhvwIrjaSocqHzz4uzqhmoCNIAgCXrE7kKTO8JorO7uHjANRvnaEfWQV0KDbYnkTKqU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784623679; c=relaxed/simple; bh=4mkqsIBlczwtHK84gd3q0sgpjtVI2lt33oJBD+ufPfk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=Q/G0hwDaeZJ3ge4xjBs8Pbmf0BPKL/+eQ4pw/bZgquN78HQg8kNC9xBPpPhu81I4sT5m8JS+DaOkkocRvREZ0uu5YWxZYFZwk5awgp6sDn8xXvqsYlV9OBDt4zhWcf1ZsqqIkojkNQ5GeRrfHNM8z3Dk96H56LLisZLTb7KMkrs= 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=Spn3HB4i; 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="Spn3HB4i" Received: from pps.filterd (m0375855.ppops.net [127.0.0.1]) by mx0b-00128a01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66L50H552894564; Tue, 21 Jul 2026 04:47:46 -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=+j7GN EWzPyyvCfRoedFmG/pFrMYPvAcBFk7xpfcI3Yg=; b=Spn3HB4iJ4lPFR+Vw10Hl aCbL4a7D1jsFKXivqVc7hUtOuwUm7RuN5QAOnIp7VHdo+gUFdSuarhj0uazBe+Tf Hcga3Rlt7r1jEOLk2liXBEn8Op9lRbGQL3cs1KO5jT0Gbe6nx9jaZpER7Jj5WgmB 8oY5JqSaR92BIGSISEHPsyi3HVIuTuR9B+O8CZ+nRzhdPyErIb4ubx4OMO3Je3tY tSy2xo1fU2jBi53lDBlnpg6+tIMN+ck/Hw8hb8vtFlAhGwE5ODfX7NM1bStk6/LB VIa0lTEXyGq0QpeH4Snk/cRLFNySb4FHqNBv9mEu8nUbsNrndbROt6coLIltEIYn A== Received: from nwd2mta4.analog.com ([137.71.173.58]) by mx0b-00128a01.pphosted.com (PPS) with ESMTPS id 4fgqte8exw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 21 Jul 2026 04:47:46 -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 66L8liDh000812 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 21 Jul 2026 04:47:45 -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; Tue, 21 Jul 2026 04:47:44 -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; Tue, 21 Jul 2026 04:47:44 -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; Tue, 21 Jul 2026 04:47:44 -0400 Received: from 10.33.20.150 ([10.66.6.191]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 66L8lNHV015326; Tue, 21 Jul 2026 04:47:35 -0400 From: Kim Seer Paller Date: Tue, 21 Jul 2026 16:47:10 +0800 Subject: [PATCH v2 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: <20260721-iio-ad5710r-upstream-v2-1-324949dc72da@analog.com> References: <20260721-iio-ad5710r-upstream-v2-0-324949dc72da@analog.com> In-Reply-To: <20260721-iio-ad5710r-upstream-v2-0-324949dc72da@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=1784623644; l=2032; i=kimseer.paller@analog.com; s=20250213; h=from:subject:message-id; bh=4mkqsIBlczwtHK84gd3q0sgpjtVI2lt33oJBD+ufPfk=; b=IwjhfXWaEEgzasVtB6t9mBU4Rq2W9f3HDY1f6nUwKOtHnLnfoQZym5P6rQwCPSJ0Vr5AVch6M Dtxnd7oVPDyD+v/yhNEcqK26doLHUx0OSINVn3XpeGNHX2FHIMDnMdM 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: AW1haW4tMjYwNzIxMDA5MiBTYWx0ZWRfX7kdi7kDX7d1n Ia/ZjhH7YKpvSJhkO2dBcyddR6FKhkECrwDP9RrCqzfC/pWg+wBMP+InL4P65YQZ5xPxceoRWcg FrgXSSEHjG5Aplwej5fmjX4f9Yyl7Zb1a/Zl6zwSQQ4GcqqG5R6Udi3HGdOfM5JzaeRrLLJ+JzA 0NssyrbVVWlCFOQnKmpNg5F26CgWXGzT8GH38St6070PYskt0mvoqRTcUsySmh+tJoNImPQwJ8U K8ffrzsj8bM0DGUp6KMCJFBmLgVTnb5XHRDhzoTa16FMzJOZtQYCOkd/Il25gGW2fZxxLTFuEii pczZhN7ZdVsMPTOJUjdzgTByL1wm/qwkwCcwIslfIezY0cXmJtKv1P9ZEGGExkhxZkGXnHO2S+5 gSHOYaHm8PIBSfWcwz9xMYMr6Llp72LOi5+kVQVpAEdl+A4uVRmtg6h61behbpHrnQ7chuAH6YW NLuE/i0qtVED5eXr1dQ== X-Proofpoint-GUID: qzXcjmWSUzdP9d5Uc0aLfuRf_8e1Cq-f X-Authority-Analysis: v=2.4 cv=Ed/4hvmC c=1 sm=1 tr=0 ts=6a5f3232 cx=c_pps a=3WNzaoukacrqR9RwcOSAdA==:117 a=3WNzaoukacrqR9RwcOSAdA==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=0sLvza09kfJOxVLZPwjg:22 a=N--XFCr6TIEc_64PeIT2:22 a=gAnH3GRIAAAA:8 a=VwQbUJbxAAAA:8 a=50yiy_OdUqj7sOdj0TsA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: qzXcjmWSUzdP9d5Uc0aLfuRf_8e1Cq-f X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIxMDA5MiBTYWx0ZWRfXzUKbZhRQdPtZ AUkXds1NNi1+IT0tfrp6GmsDyACVZHw/UI8H7PP5RipIs4zzMb2hqbuCq44WGNZ6FZLe6J/IEfa 5Z+04lOw5rVv37nrf+lLOHLrLrHfYOA7Kubr0DmqVNGYl59qZvnm X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-20_06,2026-07-20_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 impostorscore=0 lowpriorityscore=0 priorityscore=1501 phishscore=0 clxscore=1015 spamscore=0 bulkscore=0 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607210092 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 5cc2e82c4997..ed3dd189c108 100644 --- a/Documentation/ABI/testing/sysfs-bus-iio +++ b/Documentation/ABI/testing/sysfs-bus-iio @@ -759,6 +759,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: @@ -771,6 +773,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, @@ -799,6 +802,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 Jul 25 01:25:38 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 39F403BFAE2; Tue, 21 Jul 2026 08:47:55 +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=1784623676; cv=none; b=IqcFmkALg3g4n183wOgjWSrThh31tCQIaU3TmALnn3APn4z72JHiIdx0HlRSat1MtG8V7rkTFIWVij35QtTJBgfRmL1sgJa2Qzr2DtKDgBkgtI/PXnywOd/ZTyJ4Yrs4drbSsDmVGwMPzxhQ3AoDm+HIAGnZ4uuSt/G3WTCSNPM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784623676; c=relaxed/simple; bh=R01Bt7pkF+YHSW2KmhLTLhZRGlUKWU7KjMYL5LLq9jk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=qnROW6lfEclevmLQqSsUwLRRwWc4iuY9qV+Ix+dshY0haVpXF/oI+yw/v0kxRlqpdRaak51JxpCefXwH1fOXf/WD3T/S5kOK5IFE7MU2W4rOmY/DxaVtUNnBdlz5p3rHDK74d15IrrSK248WV7zSJAx7bXpLUhBvyBc9Y+IwdhA= 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=KoC9Vd28; 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="KoC9Vd28" 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 66L58Dmg3311030; Tue, 21 Jul 2026 04:47:50 -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=uglN/ GTa9fNvRh1JQZeVPJwgpHvHYB6EHkEjSIlR0So=; b=KoC9Vd28xB+Jo9qrp+g9o 4HI+7o+c5j6ixN02/+R4eH3KQdeiH94RlpS7T4LJi3QcksEXb2YyzplCVB+5SmvT TZsD9wFxEpu5HC5JWhG43R5f+TK2XQWI1+M3OdGmDC7rBd1HSBcl0+Fu0qOVTeNh 810ivcJ4gzGnntk78JRDjk8RIaT4U2GL2I55rXmzRktcz1FRReNzu5pY6FLTTms6 e4dQ78vny83tIBMHrjLiV+buQ23XEyKnE/RdX0WbwJOtDYUY4OSomVtIDEHHgc1d +blb+L4pNtnOVDBMU0kfPx8Y0GMoHemf3QbCdJojxBU3oLleKdOyMdYuP7HPO/Xr A== Received: from nwd2mta4.analog.com ([137.71.173.58]) by mx0a-00128a01.pphosted.com (PPS) with ESMTPS id 4fg3ay30yb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 21 Jul 2026 04:47:50 -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 66L8lnx5000827 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 21 Jul 2026 04:47:49 -0400 Received: from ASHBMBX9.ad.analog.com (10.64.17.10) 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; Tue, 21 Jul 2026 04:47:49 -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; Tue, 21 Jul 2026 04:47:48 -0400 Received: from 10.33.20.150 ([10.66.6.191]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 66L8lNHW015326; Tue, 21 Jul 2026 04:47:40 -0400 From: Kim Seer Paller Date: Tue, 21 Jul 2026 16:47:11 +0800 Subject: [PATCH v2 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: <20260721-iio-ad5710r-upstream-v2-2-324949dc72da@analog.com> References: <20260721-iio-ad5710r-upstream-v2-0-324949dc72da@analog.com> In-Reply-To: <20260721-iio-ad5710r-upstream-v2-0-324949dc72da@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=1784623644; l=5198; i=kimseer.paller@analog.com; s=20250213; h=from:subject:message-id; bh=R01Bt7pkF+YHSW2KmhLTLhZRGlUKWU7KjMYL5LLq9jk=; b=ESp1bb2UT64Anvoj1AgImV6JdxVZh9Id1dlk54/62nYKco+3779dJNOboX8Kmxhi3QZ31HEp5 d5kt/MxHTA0AhHt7cTU19GV2LS5lmi2ekfc4HeKtaRRYGn65H2dlogQ 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: AW1haW4tMjYwNzIxMDA5MiBTYWx0ZWRfX5TqLEscMM5sU /yIyMGiI+BniyhC0xreup9D5q8YzA92Qrxa4mPr+YwqEl7665TW9eCOXWIZXo5HnHLMXEGghq1O eOkxSmhoZeiYq6ex0bLGNGvg4t2fxgzJqNTvSH8cV7Tm8HJmW+eHxvRoiNsJsd2n+GPL2IjDTR0 JJnFYYEmHJiLIgaa7hMOMgvp8G6byT7GxQk1EK4dqraob3ah9CD93fud+oVIKtnqYFd/typK5GM QHylTDNpHikCwlunjb5qaH7yUxBvbCS+6PthoBmzKNqq0Z8PO5mMxxd3QOzhIliOKHJv55UUnRc sytBPpCyyr7DnM3ZZf3qtTb+TIIvordm0ixcD/EthWRfva8T+J7FOCmhlVUTc+7bKnwIRkZqXMS Ri2WzVzA4dkCPp/MwhOf+m6+edPqGdggFAFDN73qyR2FrZq1bgGnaAW0Y0iEy2uBfocYpe7RuWr ZxCg0KmSsq47oM8hRDA== X-Authority-Analysis: v=2.4 cv=evjvCIpX c=1 sm=1 tr=0 ts=6a5f3236 cx=c_pps a=3WNzaoukacrqR9RwcOSAdA==:117 a=3WNzaoukacrqR9RwcOSAdA==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA: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: aDbJ04p4Z-6_Ik1UUEu7Ejx5zPZ5Y6kI X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIxMDA5MiBTYWx0ZWRfX7G+ieqEW0W4/ Fq8rGMVaeEq6S+06iFC7h/hQHhBZOR1LP3FZvpMZbJZRTIMRMgVDNY+gzX35fjy1ynxhemmQ9d2 Djfg9KxZUPVT6aV0z9Vfe6CM+uoK/ISk3zh2bsow9aIKFdrZnya+ X-Proofpoint-ORIG-GUID: aDbJ04p4Z-6_Ik1UUEu7Ejx5zPZ5Y6kI X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-20_06,2026-07-20_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 lowpriorityscore=0 suspectscore=0 clxscore=1015 malwarescore=0 adultscore=0 priorityscore=1501 bulkscore=0 spamscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607210092 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..17c1bf009242 --- /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 2xVREF) or a current + 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 2Vref. If the property is not prese= nt, + 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 + items: + 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 7077ed7c9efe..f207125383f5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1444,6 +1444,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 Jul 25 01:25:38 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 6BE443C10AB; Tue, 21 Jul 2026 08:47:59 +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=1784623680; cv=none; b=CsIZcgfa0XwzbPViHAKCF7SFSv19kWjAvXygxGdhtMnwx6z2lDq88Xjg43cXyeo0MJIvjM7/9TuAbo1+Asc8HKWCU2qlL4cYW8ht5xLilfHSit7RdIeN8bH5WA++Y0ckNSDXos9R5fmoeepL8xbTrAFP+G5Fq+kRdgyKtENWk1s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784623680; c=relaxed/simple; bh=PSVXgdaCKCbSMwMAgkyPs7aaJFNx8djUNn3PeZDMQ2g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=Y7R10MC7Kae0ycn9MLDf+vD6Nqrb584o2Vmf0u2/xs19254rLxgShqSg1iL1hBoo+R+kznARh+gOLnR0wW4j9WWwIDJGyDg7CV4fb9gkGKsUWDP5bP0ZKNfTDS8ggAuCaukK4UxT5etqW4r+hhaR5f/zjxGAJT9Dwl/8Mwz2eVE= 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=1fY4c5Tr; 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="1fY4c5Tr" 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 66L4kCbY3311034; Tue, 21 Jul 2026 04:47: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=mueth oLOSSXH3ZJlqMBAmZcwmLPN1O5d+Sman2BpiD4=; b=1fY4c5TrY0PVcagibA71d gwiyCem9NGpzpmBKyddgBE3ijFr9jFAo1OqO6TSITXzzjSqzHuNPOrMqyHTrlCNy yG3KxNBAav9Z0xNMRaF1awbODHEsXR5Rr6wfMWcPFZYObIew8jom9smsQbQ7FGW3 C0Es3NVl9+qXXoajhuT8iYdNbrBEinsRzUjGFafQVbFnYqIRe0moTIuIG5jeNdf+ a1yRp5+gEJdngFE4M74onyBGsMaWsP9EBSnOHGDetDpDlWFz+BpG0itZN7QzZU/e 6/MKSwDOYkJUK4vVhkLjYP7BE/Q8labOl9qqzZIGR+Bm+v8fT8ckP5ZAjtWnwcIp Q== Received: from nwd2mta4.analog.com ([137.71.173.58]) by mx0a-00128a01.pphosted.com (PPS) with ESMTPS id 4fg3ay30ym-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 21 Jul 2026 04:47:54 -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 66L8lrTS000839 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 21 Jul 2026 04:47:53 -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; Tue, 21 Jul 2026 04:47:53 -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; Tue, 21 Jul 2026 04:47:53 -0400 Received: from 10.33.20.150 ([10.66.6.191]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 66L8lNHX015326; Tue, 21 Jul 2026 04:47:45 -0400 From: Kim Seer Paller Date: Tue, 21 Jul 2026 16:47:12 +0800 Subject: [PATCH v2 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: <20260721-iio-ad5710r-upstream-v2-3-324949dc72da@analog.com> References: <20260721-iio-ad5710r-upstream-v2-0-324949dc72da@analog.com> In-Reply-To: <20260721-iio-ad5710r-upstream-v2-0-324949dc72da@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=1784623644; l=4255; i=kimseer.paller@analog.com; s=20250213; h=from:subject:message-id; bh=PSVXgdaCKCbSMwMAgkyPs7aaJFNx8djUNn3PeZDMQ2g=; b=vafdqJ/ySVrp76AvZExTpFjnnJcg6lNzanQRa132EPX9wzO7APw1YHPnCLrMrGYq0oU/xbJrN 17MWtj/wyPHC6ZMQXjVPzDPVlfzDsg5SwBbYN6Xp5+dgGPRroPTd8DJ 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: AW1haW4tMjYwNzIxMDA5MiBTYWx0ZWRfX4fQexL7mQ2mV lSQUJj1aReEf1TqIFbM8J0aW7/8m5QkyA1IelITsxO7cDYccAuauYd5CWdvKGBO4BNMVfnkJVl1 UO1AOR8fmm/vZQ9AspI9GPH1oAiJ5PaSMQFJJ+M/DW2SQcbJZZ/1sg0xPqYU7rGXpy/eqb9eNu1 QE74bSyLKNw0fHX8JQqIfwQY91eSpON2mKXrmILXMmXBrjUUiMAcTqRVBMlAnfVk04Xg3zjkfwf onifUfjTPjZBFzs/6p0d24qBGJpB0UTQIV8Lz+k5X4bKXr6kNojfC79PwyhHk1zGznDbULLfLOx /jaRcDsQU3Ek0iBm272YQS7jGwEZPJNOul5Sxwi1GcnANclIHWB/gp5rljYGOdDBJ/MQDZsR2wj eaAvkbhucZW8DBo+7SpazzsLPJlJKPvNub+U+FqSDtuzIHVY+SyOE4fROkMvHIgZZ58iTzWOcGv oZr1D1Zgp8My4OnelQQ== X-Authority-Analysis: v=2.4 cv=evjvCIpX c=1 sm=1 tr=0 ts=6a5f323a cx=c_pps a=3WNzaoukacrqR9RwcOSAdA==:117 a=3WNzaoukacrqR9RwcOSAdA==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=0sLvza09kfJOxVLZPwjg:22 a=uXIjobp8t2wMuQ0fPvqm:22 a=gAnH3GRIAAAA:8 a=2yRuljZf9PWinY4dLS0A:9 a=QEXdDO2ut3YA:10 X-Proofpoint-GUID: -keWj8oZxk_kPQ7m8OIiloYwEtwHVSLq X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIxMDA5MiBTYWx0ZWRfXzops7XGdJ62q /3maNdolKu04ZO+jprhKvsDiqZup/stevv2y7GNwRkeqwg4lKMaF83X3ueN2SCUWie0Alb6HBUE B5sDvp3bwd9863ix8QNaIVA4jQYZmbYla9QSQVJoxzEi5FK7C80d X-Proofpoint-ORIG-GUID: -keWj8oZxk_kPQ7m8OIiloYwEtwHVSLq X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-20_06,2026-07-20_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 lowpriorityscore=0 suspectscore=0 clxscore=1015 malwarescore=0 adultscore=0 priorityscore=1501 bulkscore=0 spamscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607210092 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..97483534f8c3 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 > (1 << st->chip_info->resolution) - 1) 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 Jul 25 01:25:38 2026 Received: from mx0b-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 5E1693BB669; Tue, 21 Jul 2026 08:48: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=1784623687; cv=none; b=peGvM2IBFcgAfi8RUGXu5lg2wF0dZpPSyxB2SckxrJun/H45r3dNSQMi/NMW0OSBB9YEzwNJ5V6Vd0K0nrS1JXw8ALYjcGKSjrvVqh7kJYTxPQMMp9MsHc15wRryyHSjSE9U/2AXbSkCyq8M2rwN9D0ei/l25Cn9kGPRVaDhhTk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784623687; c=relaxed/simple; bh=dkUmuD6DbTKwav/4H/vLU8vWh2iC69Zjl+FgVj88Quk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=WooHavqvAKLkTwKhzpwE5QuF/oJoh25D+3sDcg6L6cQ21rb0o40PxeaPYjiQD35YxK/XtKPEdB7x+Za/W+A2p+pmn+oZKV8eUI/9T5gj11dPiQeeKhTneUHDUzlLACvLZtQC1YlkfvrPEMa3PA+EezDNdbZS7SuHh4jjgBROZMU= 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=W1sAntlF; 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="W1sAntlF" Received: from pps.filterd (m0375855.ppops.net [127.0.0.1]) by mx0b-00128a01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66L8PGPT2893101; Tue, 21 Jul 2026 04:48: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=MCcvm 93HLPGm1Yz28Gg2AUv33X1VNfHsvHquTL+MVAQ=; b=W1sAntlFYIIrijONgP4lL aWwrpXp0gnK+tVCnqVt3EMa84SYm1D5m4fjjA3KJGq4LKGSPN7ahmO7Y0wvzQXmn fli/QYK89/BtLvUa5Hxr/JyA9x0KfW1vAIIuBk4Xoh3wL/+Rzr5eODBlHEV79f7Z ngUtQn2bbTqBot2yey94IJOO0hcJgRS+qKj8JJ3bEo8OdtZV8bapt5sq+6YurPY/ Ie3AJxf3hLb/s5BWswXAykQTw/an9U6B5/pKdUS74LM8C2X5s076t61Diwb6R0q9 nh+qO9X1u4+3Azi3qjYU8zJgw8aKzOvvlT+RVGb+lyIcVXkjKn6NrsviHLSOcskP Q== Received: from nwd2mta4.analog.com ([137.71.173.58]) by mx0b-00128a01.pphosted.com (PPS) with ESMTPS id 4fgqte8eyp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 21 Jul 2026 04:47:59 -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 66L8lu00000844 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 21 Jul 2026 04:47:56 -0400 Received: from ASHBCASHYB4.ad.analog.com (10.64.17.132) 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; Tue, 21 Jul 2026 04:47:56 -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; Tue, 21 Jul 2026 04:47:56 -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; Tue, 21 Jul 2026 04:47:56 -0400 Received: from 10.33.20.150 ([10.66.6.191]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 66L8lNHY015326; Tue, 21 Jul 2026 04:47:49 -0400 From: Kim Seer Paller Date: Tue, 21 Jul 2026 16:47:13 +0800 Subject: [PATCH v2 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: <20260721-iio-ad5710r-upstream-v2-4-324949dc72da@analog.com> References: <20260721-iio-ad5710r-upstream-v2-0-324949dc72da@analog.com> In-Reply-To: <20260721-iio-ad5710r-upstream-v2-0-324949dc72da@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=1784623644; l=16613; i=kimseer.paller@analog.com; s=20250213; h=from:subject:message-id; bh=dkUmuD6DbTKwav/4H/vLU8vWh2iC69Zjl+FgVj88Quk=; b=gv2rZi+FZtkQhKxxmHaquWMHped9mhEeij2S0Xq8/99NJ6QY0pXJle6nbXUyxTVgl1mQ6StaH zlO8psNolWDDlVaRFomMEfdhk8ECkL4eZDJffBomTYktksvHFjNqLHD 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: AW1haW4tMjYwNzIxMDA5MiBTYWx0ZWRfX03RhvD+6hWIV dGN/mRhO0zCWe6SrYaigBNswFCFuKPZrOCHncJvRG65m5BIhQ/BbBdvaLFuBY8sIk98r5+1eVqZ NrezpHwzaVlJHbHadRE7uwAUNfcc/5AieAf3rSAj+CWOqcG5+IFpGYAb1J45cXOE13RWN69fo/l HYSzQEYVYn3zTluVjY70ZiB6kNzJWM3wvpH0j7/YU/b4Bxv1VIglyB9ZhCBm2bwfYdbicc4VcUY eVlIdLUiO9U2PpiY5BMDHX3Yppqz0oWoSUsvLuTM1UT1Cwd2e9bAZPP4xhskqvltZg/t8tmVN61 S8ddqer0EV+vpCB6Uy8S4Ypdlp7IJoXhwD700xSU+iYJ9IXLcAvuEbPOUj3drz1bw7NnSm/cJby Hm/6BISx1WKe3aqOmNX86LfyJLhYlCnmoM7MXNBjLhYLe0QfAcGly79tokgItlztRt9+67Bn8+W uuCFCSawoboI+pZXTHA== X-Proofpoint-GUID: mDOj447Cu8N-I3VktG8wXdVdJJ4oCWv3 X-Authority-Analysis: v=2.4 cv=Ed/4hvmC c=1 sm=1 tr=0 ts=6a5f323f cx=c_pps a=3WNzaoukacrqR9RwcOSAdA==:117 a=3WNzaoukacrqR9RwcOSAdA==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=0sLvza09kfJOxVLZPwjg:22 a=N--XFCr6TIEc_64PeIT2:22 a=gAnH3GRIAAAA:8 a=Eck9mY1fl7aFfPOCSlIA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: mDOj447Cu8N-I3VktG8wXdVdJJ4oCWv3 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIxMDA5MiBTYWx0ZWRfX+grRYaocets7 pFWukktMhnNEK10ZPfx3qLzHGLlCe1ubbR24xDne4CU6qEnAXKPB0NMe9bVsMbZJcI0hEAyiqwW +5TDu20Z6TdlXY6zwMcOMgOQWur6lZv3k4vpdn/ScZTRxfu52qUh X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-20_06,2026-07-20_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 impostorscore=0 lowpriorityscore=0 priorityscore=1501 phishscore=0 clxscore=1015 spamscore=0 bulkscore=0 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607210092 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 | 278 ++++++++++++++++++++++++++++++++++++++++++= +--- 2 files changed, 265 insertions(+), 14 deletions(-) diff --git a/drivers/iio/dac/Kconfig b/drivers/iio/dac/Kconfig index d6d560c09e25..e9f388f8fac3 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 97483534f8c3..935b3a832d8e 100644 --- a/drivers/iio/dac/ad3530r.c +++ b/drivers/iio/dac/ad3530r.c @@ -3,6 +3,7 @@ * 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/AD5711R 8-channel, 16-/12-bit Configurable IDAC/VDAC Driver * * Copyright 2025 Analog Devices Inc. */ @@ -27,6 +28,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 +42,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,15 +67,18 @@ #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 #define AD3530R_CH_PER_BANK 8 #define AD3531R_MAX_CHANNELS 4 #define AD3532R_MAX_CHANNELS 16 +#define AD5710R_NUM_CHANNELS 8 =20 enum ad3530r_mode { AD3530R_NORMAL_OP, @@ -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 { @@ -107,6 +116,8 @@ struct ad3530r_state { struct mutex lock; struct ad3530r_chan chan[AD3532R_MAX_CHANNELS]; const struct ad3530r_chip_info *chip_info; + const struct iio_chan_spec *channels; + unsigned int num_channels; struct gpio_desc *ldac_gpio; int vref_mV; /* @@ -152,6 +163,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 +210,26 @@ 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); + unsigned int val; + int ret; + + ret =3D regmap_read(st->regmap, AD5710R_CHN_VMODE_EN, &val); + if (ret) + return ret; + + return !(val & AD5710R_CHN_VMODE_EN_BIT(chan->channel)); +} + +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 +313,54 @@ static ssize_t ad3532r_set_dac_powerdown(struct iio_de= v *indio_dev, return len; } =20 +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_offset, ch_in_reg, reg, mode, mask; + int ret; + + reg_offset =3D chan->channel / AD3530R_CH_PER_REG; + ch_in_reg =3D chan->channel % AD3530R_CH_PER_REG; + reg =3D AD3530R_OUTPUT_OPERATING_MODE_0 + reg_offset; + mask =3D AD3530R_OP_MODE_CHAN_MSK(ch_in_reg); + + ret =3D regmap_read(st->regmap, reg, &mode); + if (ret) + return ret; + + return sysfs_emit(buf, "%d\n", !!(mode & mask)); +} + +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_offset, ch_in_reg, reg, mask, val; + bool powerdown; + int ret; + + ret =3D kstrtobool(buf, &powerdown); + if (ret) + return ret; + + reg_offset =3D chan->channel / AD3530R_CH_PER_REG; + ch_in_reg =3D chan->channel % AD3530R_CH_PER_REG; + reg =3D AD3530R_OUTPUT_OPERATING_MODE_0 + reg_offset; + mask =3D AD3530R_OP_MODE_CHAN_MSK(ch_in_reg); + val =3D field_prep(mask, powerdown); + + ret =3D regmap_update_bits(st->regmap, reg, mask, val); + if (ret) + return ret; + + return len; +} + static int ad3530r_trigger_sw_ldac_reg(unsigned int channel) { return AD3530R_SW_LDAC_TRIG_A; @@ -343,7 +427,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 +506,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 +565,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 +631,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 +652,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 +670,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 +688,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 +706,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 +724,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 +742,124 @@ 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 ad3530r_state *st) +{ + struct device *dev =3D regmap_get_device(st->regmap); + struct iio_chan_spec *channels; + int ret, num_chan; + int i =3D 0; + u32 reg; + + num_chan =3D device_get_child_node_count(dev); + if (!num_chan) + return dev_err_probe(dev, -ENODEV, "No channels configured\n"); + + channels =3D devm_kcalloc(dev, num_chan, sizeof(*channels), GFP_KERNEL); + if (!channels) + return -ENOMEM; + + device_for_each_child_node_scoped(dev, child) { + unsigned int reg_offset, ch_in_reg, 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 AD5710R_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++; + + reg_offset =3D reg / AD3530R_CH_PER_REG; + ch_in_reg =3D reg % AD3530R_CH_PER_REG; + mode_reg =3D AD3530R_OUTPUT_OPERATING_MODE_0 + reg_offset; + mode_mask =3D AD3530R_OP_MODE_CHAN_MSK(ch_in_reg); + + /* 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); + } + + st->channels =3D channels; + st->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, @@ -707,19 +943,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(st); + 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; + st->channels =3D chip_info->channels; + st->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)) @@ -784,8 +1030,8 @@ static int ad3530r_probe(struct spi_device *spi) 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; + indio_dev->channels =3D st->channels; + indio_dev->num_channels =3D st->num_channels; =20 return devm_iio_device_register(&spi->dev, indio_dev); } @@ -797,6 +1043,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 +1056,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