From nobody Mon Oct 6 04:59:33 2025 Received: from mail-ot1-f52.google.com (mail-ot1-f52.google.com [209.85.210.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5C9A6241116 for ; Thu, 24 Jul 2025 23:26:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753399563; cv=none; b=BJRhpXh7T8Q6DeEGGEsFJ5hwtCBEPDooN8XgCy2qpZLk+3psJxo4lIxkFhtcqWSPv4IXY/vrh4lUrK76k9CXuWYIzN7QgxO5/ohRIZqiWazpVVncOxT5xsybR1VQkKnDJwDjDWkxvxA61NIa/LoSdR3YrtZnxxyhMj+RF767x4o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753399563; c=relaxed/simple; bh=jipKWVKsFdr1qA0HSPJ1BXNrgw852G9el3ImjeG3Zvw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WaGFssJwkEiSlZH4Ny2tggxwH6IWkOP35/ZzdfBCRsIFLm9uLzPKOvswoRGMIHOz5DAPmaI4O8318eDejFcDHzDCidAPTmHkHof+WzkHWFtuOIILZYlVakV1Y85R/6te3QxHdCLGFnxEex2HCWLePH80Vj2dKDRphnMhI94KcqI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=fnQHRPB1; arc=none smtp.client-ip=209.85.210.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="fnQHRPB1" Received: by mail-ot1-f52.google.com with SMTP id 46e09a7af769-73e9f2d8f41so656706a34.3 for ; Thu, 24 Jul 2025 16:26:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1753399560; x=1754004360; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=UL8ywrHdQaP6cce4vRzyQj8i/xvC4Qu5NnfytH11y+o=; b=fnQHRPB1jQxYnPIsHY0Twc/bCVYlVTIwZh4aHV8kNQAw0l38a88PjXZvykKTv4ScEs +6DsI0BWy04jCQsoHAuZHXHNpFvZztn1rLWN9GOH5rC5ufXbtebbgANQPJK0Yn0ndiwq D0UvLhNWUuUWfLbAe/UYrKvUDt3RJL4MGlc3wLVGQAbCPZIKx/fI7xifb1SLCEFqcSJv iSCauq5A6GEXGGeED9rYzpDsOR/VrzYMQOhHaJ2bVBCZ47aaP7YUspbChMuO2LuTaCgv wlTqSJHLtBvKP0NmCuupLMlhKbcJVQOfc4uFtGVUCq2666jLMMOrFZzOibaqRbZRGmNz 8DbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753399560; x=1754004360; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UL8ywrHdQaP6cce4vRzyQj8i/xvC4Qu5NnfytH11y+o=; b=t/p4HbxHFskh4muy3KzisIc68acRyd9xE4+mNWQdyygM+Xj4xOefBKEMnlNTuI+vLq LkVVsQ+zAx48BCyrbJJEizIKiGHrU+jrIR2sPc5CgrQYvF6qZgeAgi3Mz3WWF3p4fEd/ a/9MQWaFKIZyiJFpOxyS0OgaGtXazrOq0wO3TSDZmFlqdvx0O5du3erIt0ok0icCESN1 sFwjV1dABxGTc0qfsa86FTUnjNr5UtHdVv6BXSQfD+bsCtp6sF53FmmITNhsh9OaL/86 3TH1aYnpOogHlrJaaUr1vtpKWBultFOwShBZBtVs/VTF1FXgU3WFQUjnEN31MRbRFVnh vWcg== X-Forwarded-Encrypted: i=1; AJvYcCXFZSuT8s+TDGKkMY7YDgf79sn8lduUNLQ+FTZlb5+D7IdfJUMssqhQRS/VqvMUo2Eh6NMJSsVhmt2Y3Xk=@vger.kernel.org X-Gm-Message-State: AOJu0YzhYNIqiRmuOpMXbk9L9DJCMF83rzTXkhuoQwZc6DsG8z6mXkIt SsoUHiwMtF4NgPGvrbu0UOMGMrm/E6V5wyna4216JNW5UhiJrfOnX8xkJZaP6trabJjUebu/AxE 8Yzi6 X-Gm-Gg: ASbGncsecNhvWfgXdQC8Q5gi3ECQWbIHy05sGBg+zpZYlGgbqFU0GVFTPcvAK0cfFF6 /AidP/FEjnNx64QnZEd9okXZkV2PIeALEDbqzxLlm/DNpgmUWenFy5cSmYfz+LKXiX7geSdJJHe u1Jm983H+hwWMbuKLcCoKCL7mNPSnfYnPWtIVrA/71Le4usF+F7xsANMkzzyToXKlu92NxdWWkK HhrjNEirvfduXpbpK4ZjW5YuelpbwiLl67KnFf5wvnrhlc2cRe71Ak+/sVni6C1mH6l/KVHMLs7 GAubH5m5L2+p9e9hX/ChEnRyaRPikrmNuC6ioMByhaPQeogoBIOeVTQqLt9Zr5Fl4aXo2XecaJF ugI2qN+Qq0Mg0dwtdPlcUAR1n/Q== X-Google-Smtp-Source: AGHT+IGGUztpINgxauLinjEHg8fWM3hH79nzL0EeC15g+wopz3h896e5+JgVovrtaCBIPOpgTRXUzg== X-Received: by 2002:a05:6808:50a3:b0:40a:52e5:37df with SMTP id 5614622812f47-426ce78017emr5698186b6e.39.1753399560375; Thu, 24 Jul 2025 16:26:00 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:1d00:337f:e3bf:e9d2:b3]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-306e3971332sm689626fac.0.2025.07.24.16.25.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Jul 2025 16:25:59 -0700 (PDT) From: David Lechner Date: Thu, 24 Jul 2025 18:25:22 -0500 Subject: [PATCH 1/4] dt-bindings: iio: adc: adi,ad7124: fix clocks properties 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: <20250724-iio-adc-ad7124-proper-clock-support-v1-1-88f35db2fcaf@baylibre.com> References: <20250724-iio-adc-ad7124-proper-clock-support-v1-0-88f35db2fcaf@baylibre.com> In-Reply-To: <20250724-iio-adc-ad7124-proper-clock-support-v1-0-88f35db2fcaf@baylibre.com> To: Michael Hennerich , Jonathan Cameron , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, David Lechner X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3099; i=dlechner@baylibre.com; h=from:subject:message-id; bh=jipKWVKsFdr1qA0HSPJ1BXNrgw852G9el3ImjeG3Zvw=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBogsDrFQDENobZmWQK6a+NGqu+QL4N715ystTEB RPr8RaRE9eJATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCaILA6wAKCRDCzCAB/wGP wKxRB/41H2jgneOzpdOFI36J/f77O6Dw2Ec9weJ9vDvG/JXo/8XLIk4jD/j5dl2bFOTTSbSCAJJ 7dLjPEjJdBhNUOcBOcVL0pP7FS85zHC8GdOBJ0flD9OBpONj9YKj+YqaFuAibM54pJ/RvoIkCvr 9hkIOn+tMvPyCmn8DAfoX/6Pffvefv0zlFp0s5Ux/5w2gOowJzPgDAi4Ls60bnijG91C2tF78CD iK0peTLAjKvzt1ocXF/uGHsx1Nuvh/5ZU0jRgbQ3EgYbK8lrv3huFRrRxFTZ1277F8pzROTfqJ5 EkluqRgq+YuWcCa732U1tKsC2JDZ5fx3Lbaf66BQfXppfx72 X-Developer-Key: i=dlechner@baylibre.com; a=openpgp; fpr=8A73D82A6A1F509907F373881F8AF88C82F77C03 Use correct clocks properties for the AD7124 family of ADCs. These ADCs have an internal clock along with an optional external clock that can be connected to the CLK pin. This pin can be wired up 3 ways: 1. Not connected - the internal clock is used. 2. Connected to an external clock (input) - the external clock is used. 3. Connected to the CLK pin on another ADC (output) - the internal clock is used on one and the other is configured for an external clock. The new bindings describe these 3 cases by picking one of the following: 1. Omit both clocks and #clock-cells properties. 2. Include only the clocks property with a phandle to the external clock. 3. Include only the #clock-cells property on the ADC providing the output. The clock-names property is now deprecated and should not be used. The MCLK signal that it refers to is an internal counter in the ADC and therefore does not make sense as a devicetree property as it can't be connected to anything external to the ADC. Since there is only one possible external clock, the clock-names property is not needed anyway. Based on the implementation of the Linux driver, it looks like the "mclk" clock was basically being used as a control to select the power mode of the ADC, which is not something that should be done in the devicetree. Signed-off-by: David Lechner Reviewed-by: Rob Herring (Arm) --- .../devicetree/bindings/iio/adc/adi,ad7124.yaml | 21 ++++++++++++++++-= ---- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7124.yaml b/Do= cumentation/devicetree/bindings/iio/adc/adi,ad7124.yaml index 7146a654ae382bac7410ba525dfc98662f0f674a..c4b5e29730d6df58d0c29ed6dc2= 0d250a9af67e6 100644 --- a/Documentation/devicetree/bindings/iio/adc/adi,ad7124.yaml +++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7124.yaml @@ -27,12 +27,21 @@ properties: =20 clocks: maxItems: 1 - description: phandle to the master clock (mclk) + description: Optional external clock connected to the CLK pin. =20 clock-names: + deprecated: true + description: + MCLK is an internal counter in the ADC. Do not use this property. items: - const: mclk =20 + '#clock-cells': + description: + The CLK pin can be used as an output. When that is the case, include + this property. + const: 0 + interrupts: description: IRQ line for the ADC maxItems: 1 @@ -66,10 +75,14 @@ properties: required: - compatible - reg - - clocks - - clock-names - interrupts =20 +# Can't have both clock input and output at the same time. +not: + required: + - '#clock-cells' + - clocks + patternProperties: "^channel@([0-9]|1[0-5])$": $ref: adc.yaml @@ -135,8 +148,6 @@ examples: interrupt-parent =3D <&gpio>; rdy-gpios =3D <&gpio 25 GPIO_ACTIVE_LOW>; refin1-supply =3D <&adc_vref>; - clocks =3D <&ad7124_mclk>; - clock-names =3D "mclk"; =20 #address-cells =3D <1>; #size-cells =3D <0>; --=20 2.43.0 From nobody Mon Oct 6 04:59:33 2025 Received: from mail-oa1-f49.google.com (mail-oa1-f49.google.com [209.85.160.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 38D67241696 for ; Thu, 24 Jul 2025 23:26:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753399565; cv=none; b=X41aRmOPhdH1wZ5acKfFyYhDChkb0gv+CIWqNsS7Gghdz5YtO35cGzsI7d4bFBv7vw/h306w+vnIlel0NxY4dYQrws1YdhQ7bz/tayOQuj+AjwACKQ51FGbTSfBjnkKw4edvuroRCxy35OvlJeptVSE71QA3ljqe37QXULgfdQs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753399565; c=relaxed/simple; bh=dL2PSwFlohMjte/0MXtPjUXionCzDJupDvIGkJBlwK8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mWg6XnCpQ9oB/vCQnhG++yvUnvhYXNwLKn6fjDQC1kHq++4sjxwikjWtM5gbFgXlcIem36MNfYD4uzkxd/pYto9Rr9By/1d13lfiLcHfrVPcy48BoEDxLedsro++dl9m8ErSMg6aTsDgy1FPOWSuSH2p2lLr2G++g9yQxUz9XM4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=iyv4YIxR; arc=none smtp.client-ip=209.85.160.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="iyv4YIxR" Received: by mail-oa1-f49.google.com with SMTP id 586e51a60fabf-306db05b292so498804fac.1 for ; Thu, 24 Jul 2025 16:26:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1753399561; x=1754004361; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=KeKHbbTRbkREiyUQUHW3LJ0gzMYahsTWwJDV1ry44cA=; b=iyv4YIxRAS4ln2n3tH0FN/Z98V/M7ur1o14sA9eI4hQ4TdPCPIl/Jw0fbWCeSzafWx CfKsuZfqUDgoJ5fJK6LWsdTy6g9rOpVpivtU1P1XMQLBkrK20HCOw74n3R/NOFFRLQXe PZ/2l7kN+8lp8oSpV0/In/PwziXoiQ8QYpiuKEfFatzRJrq+Kjpiwq8je7ykZzNhji6c DX9iH9WIJY3uu9mzQw7zDthkee6T4ORdiNn7bpe9zxYrMhXm5XzvLWBZoVDhbN2nBDsj KItd8fmjGH5WSbB+i0eXnlxAKqzNqKk/1/zS5KLQYArVDmighoy/gVXlvX+UvYIuuL6i cUKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753399561; x=1754004361; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KeKHbbTRbkREiyUQUHW3LJ0gzMYahsTWwJDV1ry44cA=; b=iqCPnm6Nuco1AGgJ+s+xfRTGlnj5egJj+3wptZhTgQxopvqe4DkRVgqHrlDCKlpZKl d4AVCM6kBSSRjlo8oIMd06HRmFVl/5qp2WzfGXJT0Vq6G7GmplkKK5wEtcAXZKzUOLq7 KWOofRHBuUssoLAakt7emtMQFABM7OwyLy+fgtg6EsQ0p4bGoBC3uD7ZQ5vqzQIZBA1D 9PyyU5JxCyeRyC3QIsEnANb4PDbXiQgmNXXky6uANarntfHoef94bZJfNFMlmt0o2xU5 yqcaIHr9X8XxIeObeRPa+m5UYe/aABO2E1gMzVLNsi6MT8/ujyDYz/7lCS3cZrpCZHHD 08Dg== X-Forwarded-Encrypted: i=1; AJvYcCX3NrsjPbSOeUs193l+nlTBqqPMED9fabxawJVdDqSMayTMbuSRlStuSSOBsAEYbS1l+7UN/p253YdCryo=@vger.kernel.org X-Gm-Message-State: AOJu0YzP6sCqW9tevosk8aMmSVTs1DMRk9QD5EcK73UqoqE049mZadf8 c9MeMxU7ipaPwrTcLLhOiOw0LCaQ4/EruT567luzz9pRfrDV4SY6BHPX/BcMVXK0pC0= X-Gm-Gg: ASbGncvvpsFrPjBbytrJg7TISL3Sv0cc+KKM16dnNyJqxluILo0z1eQU+pfHtyEq/OL vU7vrdcvLwqisMi62ZB7dhoCEV/KyinxPbKFQmHe89Fu49l87TWYs60tuQp10Fsftdhtp0hlBcF s6+JTEZ2E9eZThdyBRFaafi/arAwvqqR4NVvgm+4m8pzl09hxoGPOorx+SStBnGtHgbJ2TUoOwJ o4/N8cYMwKrKfOM3b2a7v1V3OgyVvzLD1Q1cdy99dBdaVtfg9haNhHj7fDvqt4aOQCN83msAvRH d/deZ6ZcJeeK0s2n8BtQVdmlWqbVwrRnQks/JSERmulY86Fmv5HvsEXRQb6xls2xlAq4/7IS7Uo FZOM1wxmCxRFbmntIEMtjOLz3Rw== X-Google-Smtp-Source: AGHT+IGQrI5um8n+0JkcZXB2b0zbweZ5nlNx1XY8MFeNT5SIYqpju8IAvichyXi7+QEtARAFQIZnwg== X-Received: by 2002:a05:6870:a712:b0:2c1:bc87:9bc0 with SMTP id 586e51a60fabf-306c6facfb5mr5934201fac.15.1753399561216; Thu, 24 Jul 2025 16:26:01 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:1d00:337f:e3bf:e9d2:b3]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-306e3971332sm689626fac.0.2025.07.24.16.26.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Jul 2025 16:26:00 -0700 (PDT) From: David Lechner Date: Thu, 24 Jul 2025 18:25:23 -0500 Subject: [PATCH 2/4] iio: adc: ad7124: do not require mclk 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: <20250724-iio-adc-ad7124-proper-clock-support-v1-2-88f35db2fcaf@baylibre.com> References: <20250724-iio-adc-ad7124-proper-clock-support-v1-0-88f35db2fcaf@baylibre.com> In-Reply-To: <20250724-iio-adc-ad7124-proper-clock-support-v1-0-88f35db2fcaf@baylibre.com> To: Michael Hennerich , Jonathan Cameron , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, David Lechner X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4299; i=dlechner@baylibre.com; h=from:subject:message-id; bh=dL2PSwFlohMjte/0MXtPjUXionCzDJupDvIGkJBlwK8=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBogsDy4SoQeoOS7NnvFMFXpRdK2BmluaOODtBco Xy3K+fKiD6JATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCaILA8gAKCRDCzCAB/wGP wFznB/9yEt3eAkwnrFqny2nq2ETRVdI4p3bnMMQt3f3QrIzSZCumGS1D03+77M/bUppwuMrdQWh /uO6TAziTIp4jmVQgcfTkhVtDU/5yVs7qZXi/2b3vzyBnvWBrqylyds/c7QfUoExZX/haKvInVl elpxiM3dLH8/bEVRGu2r4Sp2Wws0jvt6U3DCcspEQzchr19xFVbDhvarzgyJeBiX75D1q1xlokO r9fzvFUeBMuWlFh9Hj1dWdP8T8QXVtFv5sOK2i/nXwnaniVr2rKCci0ka8/Kkh2fW1p7ypBq0/l 86V9C9yRQdcs74vUogXxaIbs4CiInTHdW8jXcJGHVKBa7Vfw X-Developer-Key: i=dlechner@baylibre.com; a=openpgp; fpr=8A73D82A6A1F509907F373881F8AF88C82F77C03 Make the "mclk" clock optional in the ad7124 driver. The MCLK is an internal counter on the ADC, so it is not something that should be coming from the devicetree. However, existing users may be using this to essentially select the power mode of the ADC from the devicetree. In order to not break those users, we have to keep the existing "mclk" handling, but now it is optional. Now, when the "mclk" clock is omitted from the devicetree, the driver will default to the full power mode. Support for an external clock and dynamic power mode switching can be added later if needed. Signed-off-by: David Lechner --- drivers/iio/adc/ad7124.c | 61 ++++++++++++++++++++++++++++++++++----------= ---- 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/drivers/iio/adc/ad7124.c b/drivers/iio/adc/ad7124.c index 9808df2e92424283a86e9c105492c7447d071e44..f587574e8a24040540a470e13fe= d412ec9c81971 100644 --- a/drivers/iio/adc/ad7124.c +++ b/drivers/iio/adc/ad7124.c @@ -174,7 +174,6 @@ struct ad7124_state { struct ad_sigma_delta sd; struct ad7124_channel *channels; struct regulator *vref[4]; - struct clk *mclk; unsigned int adc_control; unsigned int num_channels; struct mutex cfgs_lock; /* lock for configs access */ @@ -254,7 +253,9 @@ static void ad7124_set_channel_odr(struct ad7124_state = *st, unsigned int channel { unsigned int fclk, odr_sel_bits; =20 - fclk =3D clk_get_rate(st->mclk); + fclk =3D ad7124_master_clk_freq_hz[FIELD_GET( + AD7124_ADC_CONTROL_POWER_MODE, st->adc_control)]; + /* * FS[10:0] =3D fCLK / (fADC x 32) where: * fADC is the output data rate @@ -1111,21 +1112,49 @@ static int ad7124_parse_channel_config(struct iio_d= ev *indio_dev, static int ad7124_setup(struct ad7124_state *st) { struct device *dev =3D &st->sd.spi->dev; - unsigned int fclk, power_mode; + unsigned int power_mode; + struct clk *mclk; int i, ret; =20 - fclk =3D clk_get_rate(st->mclk); - if (!fclk) - return dev_err_probe(dev, -EINVAL, "Failed to get mclk rate\n"); + /* + * Always use full power mode for max performance. If needed, the driver + * could be adapted to use a dynamic power mode based on the requested + * output data rate. + */ + power_mode =3D AD7124_ADC_CONTROL_POWER_MODE_FULL; =20 - /* The power mode changes the master clock frequency */ - power_mode =3D ad7124_find_closest_match(ad7124_master_clk_freq_hz, - ARRAY_SIZE(ad7124_master_clk_freq_hz), - fclk); - if (fclk !=3D ad7124_master_clk_freq_hz[power_mode]) { - ret =3D clk_set_rate(st->mclk, fclk); - if (ret) - return dev_err_probe(dev, ret, "Failed to set mclk rate\n"); + /* + * HACK: This "mclk" business is needed for backwards compatibility with + * old devicetrees that specified a fake clock named "mclk" to select + * the power mode. + */ + mclk =3D devm_clk_get_optional_enabled(dev, "mclk"); + if (IS_ERR(mclk)) + return dev_err_probe(dev, PTR_ERR(mclk), "Failed to get mclk\n"); + + if (mclk) { + unsigned long mclk_hz; + + mclk_hz =3D clk_get_rate(mclk); + if (!mclk_hz) + return dev_err_probe(dev, -EINVAL, "Failed to get mclk rate\n"); + + /* + * This logic is a bit backwards, which is why it is considered + * a hack and is only here for backwards compatibility. The + * driver should be able to set the power mode as it sees fit + * and the f_clk/mclk rate should be dynamic accordingly. But + * here, we are selecting a fixed power mode based on the given + * "mclk" rate. + */ + power_mode =3D ad7124_find_closest_match(ad7124_master_clk_freq_hz, + ARRAY_SIZE(ad7124_master_clk_freq_hz), mclk_hz); + + if (mclk_hz !=3D ad7124_master_clk_freq_hz[power_mode]) { + ret =3D clk_set_rate(mclk, mclk_hz); + if (ret) + return dev_err_probe(dev, ret, "Failed to set mclk rate\n"); + } } =20 /* Set the power mode */ @@ -1303,10 +1332,6 @@ static int ad7124_probe(struct spi_device *spi) return dev_err_probe(dev, ret, "Failed to register disable handler for = regulator #%d\n", i); } =20 - st->mclk =3D devm_clk_get_enabled(&spi->dev, "mclk"); - if (IS_ERR(st->mclk)) - return dev_err_probe(dev, PTR_ERR(st->mclk), "Failed to get mclk\n"); - ret =3D ad7124_soft_reset(st); if (ret < 0) return ret; --=20 2.43.0 From nobody Mon Oct 6 04:59:33 2025 Received: from mail-ot1-f53.google.com (mail-ot1-f53.google.com [209.85.210.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 05671241C8C for ; Thu, 24 Jul 2025 23:26:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753399564; cv=none; b=ggOhIEWXZ1OADNlJHxZug5Nz+OJ6NBtwuRma8k2W5wD/5EMXvZX+1K7rCuCdwFXcNj7s+4Mpt42LaRsPSsSMGPj5bCUutuPbwp3GxSki0E/18ngtRYym+jWvCXVHQnMbL9kW7lB9ovPj6SPRfaE9RJ7F0hvmGc++60c4q3I1m/M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753399564; c=relaxed/simple; bh=fmzrk3rncQ2eQJPl7/ykSHqygcx2eIUuyWJF71tkk88=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CwGiyhBMw3txoyqSyld/rhYUS3uonA8ee0U5/otYQ8X5RS9plc7R/oEkWIkjYMCOZQVCNM8k3XeTkVA5jBL04etbOQTFv5Q0dAOax+pSNc7Ss4YHgODQYM48AeVDDZNiPi/CeW13OxuFTNEE/oK0ze25AEf0Mg27V9zm3gEMNbk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=TZSTRtdQ; arc=none smtp.client-ip=209.85.210.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="TZSTRtdQ" Received: by mail-ot1-f53.google.com with SMTP id 46e09a7af769-73e58d51060so367228a34.0 for ; Thu, 24 Jul 2025 16:26:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1753399562; x=1754004362; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=xlq3slX2bsUlFc85XSNMVLB7rlXT9FRFe+4IGTFjGSM=; b=TZSTRtdQKFHFSJoUdjKep2Xy1DFakfvjK0C8VCYAeJUqCLJLHX0023CnANwrRx/4BQ wDTAqzUGAKBRGropeOFzCoPgu/wpwX2Pk6V2aiYM01VIiB3kREMvufdfFHp5PN7Lx2v1 ICjtWiN1AJLAM2qNbD+0HKW+aAllgTDuS4mT7RJHSwHPb8LYLh4xW3H0Ebs1KTRq3He5 Yq493ZmY3NO8c3E8SpfdLv/4icPtohqyBOoMXhFpZSXflmulTL7tZvFRTeHkDf3gCw0W 1Hizejj6shyG8hjknzFQiSM0RCatmm54K6T+4eY8zmXaHi9F1jkBkURuuggW4UgModX8 c4GA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753399562; x=1754004362; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xlq3slX2bsUlFc85XSNMVLB7rlXT9FRFe+4IGTFjGSM=; b=nyZ2pBl9BgLKT1z8Cna5bmEllry077a0jZgQvkTrxPz5hcV5cMlOBMQO0mwMLVxd80 sCbmLVUaBDvZWe2UpuBDNL1AMQ7o2jrgbcPWNY6ocEA4XJl6F/RlD/y7TgTHg2tfJccu wSRLBvQetMR6lvPEysKHdhyjWgno3CRfa1zjeOpBA7spg6Bxc71A+4alUJ8UJaGIks0V el2bOzAXNBCxPLQd9MHUQIpTiLyRUdpxVZEPftQFDPulZBcbLnk5irLFdnawDKCpinnA 9e14fFOx2/2KBH1bFkrv9DKHz88aYubbACCksF8AXSBnaJ7+6zORv0jBwBfTXCv3I8nW +Q3g== X-Forwarded-Encrypted: i=1; AJvYcCUdrvIU+nkxYsY/OcwilN5R+09zALd2otk49+Ne7arN5SSiNVEFpSO1/YLZelfsTZgpie2oHg8/6P2f3Js=@vger.kernel.org X-Gm-Message-State: AOJu0YxH449N2J32OnDRw9VcksHZjFIfyWqiEj2JbzGt/H7Z+Xv/rAOV JpQ7Ku68uE/V1Zo7oDXpToSMKflKPZuNSUpZA0TIchuunmQ/hi+n5ylKWlSmwUvsudA= X-Gm-Gg: ASbGncvZ9A75ti4XI2B0EFL8rB0J7abiDwxtCQb7rRA5bGQup+X5VJhKJlWt65XUQ9a S5KA8dLzrBvhqoEQocrpezqYJhGvHls3Kll2f8/aSVEgwJQyO+hzsmj71sdfV9kNtcCulU8x9Mk K5bzzRZT3PUYU3YgcWcPPntk15/vhrL4PhvoAs4JYhi9xkyiTzHyazjTuvAYchL4RqIEjQkp6Hb vnDsWdveYKzQRZeKNCyfFEq5jiM0Y8Jg0CXpoW77aSM2TVYlmil4vUp7DhKFLQmt4yJfPPLm/LE DTXaitu58c+McVvBdCVfYzBvn5h0USC3j5xatoP/I9HilToYW+CxfBR1JE/N+FVyFfEI/TnKICt 6uKYdLnlv+uT2jO0GrhKhYGGL5Q== X-Google-Smtp-Source: AGHT+IGXTeHfeTVdmPBOo1aDwZVmbv/cw0ywKYUGitHn1VBq90zI7BwPKf14+Skvya3y6GRy/CD8LA== X-Received: by 2002:a05:6871:e2:b0:2d5:2955:aa6c with SMTP id 586e51a60fabf-306c72cce28mr5986875fac.31.1753399562041; Thu, 24 Jul 2025 16:26:02 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:1d00:337f:e3bf:e9d2:b3]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-306e3971332sm689626fac.0.2025.07.24.16.26.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Jul 2025 16:26:01 -0700 (PDT) From: David Lechner Date: Thu, 24 Jul 2025 18:25:24 -0500 Subject: [PATCH 3/4] iio: adc: ad7124: add external clock support 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: <20250724-iio-adc-ad7124-proper-clock-support-v1-3-88f35db2fcaf@baylibre.com> References: <20250724-iio-adc-ad7124-proper-clock-support-v1-0-88f35db2fcaf@baylibre.com> In-Reply-To: <20250724-iio-adc-ad7124-proper-clock-support-v1-0-88f35db2fcaf@baylibre.com> To: Michael Hennerich , Jonathan Cameron , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, David Lechner X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3341; i=dlechner@baylibre.com; h=from:subject:message-id; bh=fmzrk3rncQ2eQJPl7/ykSHqygcx2eIUuyWJF71tkk88=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBogsD5s1McE7kRUhIIogZWzaUMIjXrjyhzmcgAj +M7x5Yx7F6JATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCaILA+QAKCRDCzCAB/wGP wPVkCACawH5RuJizqdWBRyp6wOto4jBK0NiQjllUY5OLK3zasHiNJXwem8MGPlOgbBwgpkC7vE+ fQKJx3KYe66Y1dzsa40poFOtsAuKTMFt180/U5o+K5mFYrmIxy444hQKs2NRj0hg2EJSfVxBSr8 kEskDVwdm6WDeYef+E6Fw2eePTtA7VTg1rdYs1yeDhGxl9GDPcHmEnYTynSr54Va7Qy5gSQiQXt +xbVWxpg3BeKIBwuPerIwB+sFSvoZpzJh4bJl702OgzM5mPVqbrXTHnhjwR6zFRkv3/rzbtJl/b vnbHxDtn05ZIgnL7ZlkKY5FsNfVtIuQgWDlJ8A+AVAmPnCTC X-Developer-Key: i=dlechner@baylibre.com; a=openpgp; fpr=8A73D82A6A1F509907F373881F8AF88C82F77C03 Add support for an external clock source to the AD7124 ADC driver. Previously, the driver only supported using the internal clock and had bad devicetree bindings that used a fake clock to essentially select the power mode. This is preserved for backwards compatibility. If the clock is not named "mclk", then we know that the devicetree is using the correct bindings and we can configure the chip to use an external clock source rather than internal. Also drop a redundant comment when configuring the register fields instead of adding more. Signed-off-by: David Lechner --- drivers/iio/adc/ad7124.c | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/drivers/iio/adc/ad7124.c b/drivers/iio/adc/ad7124.c index f587574e8a24040540a470e13fed412ec9c81971..b0b03f838eed730347a3afcd759= be7c1a8ab201e 100644 --- a/drivers/iio/adc/ad7124.c +++ b/drivers/iio/adc/ad7124.c @@ -18,6 +18,7 @@ #include #include #include +#include =20 #include #include @@ -44,6 +45,11 @@ #define AD7124_STATUS_POR_FLAG BIT(4) =20 /* AD7124_ADC_CONTROL */ +#define AD7124_ADC_CONTROL_CLK_SEL GENMASK(1, 0) +#define AD7124_ADC_CONTROL_CLK_SEL_INT 0 +#define AD7124_ADC_CONTROL_CLK_SEL_INT_OUT 1 +#define AD7124_ADC_CONTROL_CLK_SEL_EXT 2 +#define AD7124_ADC_CONTROL_CLK_SEL_EXT_DIV4 3 #define AD7124_ADC_CONTROL_MODE GENMASK(5, 2) #define AD7124_ADC_CONTROL_MODE_CONTINUOUS 0 #define AD7124_ADC_CONTROL_MODE_SINGLE 1 @@ -1112,7 +1118,7 @@ static int ad7124_parse_channel_config(struct iio_dev= *indio_dev, static int ad7124_setup(struct ad7124_state *st) { struct device *dev =3D &st->sd.spi->dev; - unsigned int power_mode; + unsigned int power_mode, clk_sel; struct clk *mclk; int i, ret; =20 @@ -1155,9 +1161,41 @@ static int ad7124_setup(struct ad7124_state *st) if (ret) return dev_err_probe(dev, ret, "Failed to set mclk rate\n"); } + + clk_sel =3D AD7124_ADC_CONTROL_CLK_SEL_INT; + } else { + struct clk *clk; + + clk =3D devm_clk_get_optional_enabled(dev, NULL); + if (IS_ERR(clk)) + return dev_err_probe(dev, PTR_ERR(clk), "Failed to get external clock\n= "); + + if (clk) { + unsigned long clk_hz; + + clk_hz =3D clk_get_rate(clk); + if (!clk_hz) + return dev_err_probe(dev, -EINVAL, "Failed to get external clock rate\= n"); + + /* + * The external clock may be 4x the nominal clock rate, + * in which case the ADC needs to be configured to + * divide it by 4. Using MEGA is a bit arbitrary, but + * the expected clock rates are either 614.4 kHz or + * 2.4576 MHz, so this should work. + */ + if (clk_hz > MEGA) + clk_sel =3D AD7124_ADC_CONTROL_CLK_SEL_EXT_DIV4; + else + clk_sel =3D AD7124_ADC_CONTROL_CLK_SEL_EXT; + } else { + clk_sel =3D AD7124_ADC_CONTROL_CLK_SEL_INT; + } } =20 - /* Set the power mode */ + st->adc_control &=3D ~AD7124_ADC_CONTROL_CLK_SEL; + st->adc_control |=3D FIELD_PREP(AD7124_ADC_CONTROL_CLK_SEL, clk_sel); + st->adc_control &=3D ~AD7124_ADC_CONTROL_POWER_MODE; st->adc_control |=3D FIELD_PREP(AD7124_ADC_CONTROL_POWER_MODE, power_mode= ); =20 --=20 2.43.0 From nobody Mon Oct 6 04:59:33 2025 Received: from mail-ot1-f45.google.com (mail-ot1-f45.google.com [209.85.210.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D3DD5242D69 for ; Thu, 24 Jul 2025 23:26:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753399566; cv=none; b=VWuEoGiQ91aJaShA1mP1T7+iWUyDXxv2Zk+mqRgS/1STkAS+K3lIP3MzeQdykFoQIE4Q5NVi2XFmxvxyZVbnNWY7Klk1T4w1sKqnvcyd1rc8AAQqjNOVUKo0frSPgmT/SSHWg30Wn4aryY4YQkD1vtQWuUNjEoxTj0gDZPbKSUc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753399566; c=relaxed/simple; bh=o/2bA0pR6AUw7lXgAjOEpMd1lrma/kJtl7JvrX3ogPY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PxL5Bp5hzbfMTWb9Xlcc4VB6Uyq+SQPMfDVWC4lbh4bzXIr1IdApPqKB1z9ouvWxRRvTHwVEesCnDfqey6sPdNiCFUBSKQBwE8GUzuJ1ByGXJxbcaKjGJPWQlYKRc1angbxAdzT50eO9DI1sjfRu+sbwUqdkGXhC8oWL4mjt9qQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=Ig0Obm3O; arc=none smtp.client-ip=209.85.210.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="Ig0Obm3O" Received: by mail-ot1-f45.google.com with SMTP id 46e09a7af769-72c09f8369cso853125a34.3 for ; Thu, 24 Jul 2025 16:26:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1753399563; x=1754004363; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=vfkMTGv2DjDQzlHRRIM99MWZaRgUgbrBbeXiEEEshC4=; b=Ig0Obm3O1hkL3TKpAlYq4lSiFaqLN0iLrhOQi2UlLxNlx++8460u1/EbkG/6psJjV5 GYf7x0ghla2NoC5XZvRp4hPHAWM450OsOTO4WUJiWxhBAhSeRFRjiXIGKgR4XTUlHAfU tD+QBcYO1lxSfYSlievT034xkVnMWaUxxmotdOS9wtRoi2lcDal5DoaLdxR0yKlEgTnH Dxd3GFjSvyIY7SUWvfGt54vNXGx6cYYfPVgJvaiYU1nG+U58zEGWgStPaOd8LkCXAIAI 73o+188U/0dx+UXkZ5kUYOnyp9qJ+0If4sY9O9PNT5kS9vlVzoee9sVCvlrsHr0CYsbu lFAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753399563; x=1754004363; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vfkMTGv2DjDQzlHRRIM99MWZaRgUgbrBbeXiEEEshC4=; b=nLs/JYUteYaJFJAdivY68p0jNtzmNOdDI60QxqNgVWb9/mRQMYEOUPwYOWXV/1vrib H0bchvejZoWB9m8pSwpHI3fWAL2J/KJNn/z8KKAXz6BtSzkmLp0xSIGL0AfsYkON8EUS jhfSpfXUrYuvqv1WlhrCe55teqcC8x1k9hGYnxmSfH9b0Wgmwp0t5OvkC+nz7JVp7PnJ XvOMXxVOpdnWlLeub/yMTxdP5yA0RrYGz2XuVlsCflEx/DiHbK89OqqfKEg8DKpmIq53 bPBv11U0d1llN4vS9eqqg3plSH6PYwB5wh/xzIlfUc8Nza9rFcxQgXL6/z733NGytE/0 2u+A== X-Forwarded-Encrypted: i=1; AJvYcCWCJOkedpL3+NNxVOfpR93tLXVHvETi/EN1lpdgqDaTqc4DEch6NayR4+gr61t83wNS14Stw/N/sM/N5tA=@vger.kernel.org X-Gm-Message-State: AOJu0YxjHydrV8lFuarNPQhDzyXdJ7QYAiJOXFTxZh69UJvVtXTw4lIH cJrOSqrfMJDnikNtmhJKxFlwpN2868hTFHJMQkKi1k084jJ/ub8ZBiMsrIi7jpT4Ab4= X-Gm-Gg: ASbGnctERkxfatP9YGMEQiqJp5V43RtrDVip/ARfSp5RppJdYMLf3q2v6dr7+CGDAOH 8fKn26fWicN0x+nL3eCvt/TvPhDNHZhjtNFiQl8cnjfHb21X9cjl+HiDOtFOj5a2fqYPCmJMiKd vBWvSaV1W+UQolBw09pROGjRylokyLfVHc98MFMPfva0nlSBKqIddNtC7qla+YPigOfgtV9ei0I +I8sflEtG53tFHBQlso63Dja12Lb330FTBImibXqfdLv7KiWRtgWfu1AwEOAuXo8Cds0zoD7uJQ 6Rpx9xITMs84EuZueV3ic5cU54pO2Qgj57tm3DAwYb25YRfvbeWcxZneKXfTwwBsK9zT/FyGYVt 3FFhJGu1nxnmjqEQ3180zgsJbVw== X-Google-Smtp-Source: AGHT+IEk+oExELM+u1/tsclf9JZXs9QdRNY4IH2N6Oln8OdD08TP9D4SWyvAP2Qs4ISlV4fW2+egnA== X-Received: by 2002:a05:6870:b12:b0:2e8:f5d4:6077 with SMTP id 586e51a60fabf-306c72fea4emr6063414fac.38.1753399562881; Thu, 24 Jul 2025 16:26:02 -0700 (PDT) Received: from [127.0.1.1] ([2600:8803:e7e4:1d00:337f:e3bf:e9d2:b3]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-306e3971332sm689626fac.0.2025.07.24.16.26.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Jul 2025 16:26:02 -0700 (PDT) From: David Lechner Date: Thu, 24 Jul 2025 18:25:25 -0500 Subject: [PATCH 4/4] iio: adc: ad7124: add clock output support 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: <20250724-iio-adc-ad7124-proper-clock-support-v1-4-88f35db2fcaf@baylibre.com> References: <20250724-iio-adc-ad7124-proper-clock-support-v1-0-88f35db2fcaf@baylibre.com> In-Reply-To: <20250724-iio-adc-ad7124-proper-clock-support-v1-0-88f35db2fcaf@baylibre.com> To: Michael Hennerich , Jonathan Cameron , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, David Lechner X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2955; i=dlechner@baylibre.com; h=from:subject:message-id; bh=o/2bA0pR6AUw7lXgAjOEpMd1lrma/kJtl7JvrX3ogPY=; b=owEBbQGS/pANAwAKAcLMIAH/AY/AAcsmYgBogsEA5jFqG17re15CK3Tg3w5rSfJlRDHB+luVe LSNkIdaGSmJATMEAAEKAB0WIQTsGNmeYg6D1pzYaJjCzCAB/wGPwAUCaILBAAAKCRDCzCAB/wGP wEykB/49Gw3B+Sq8vaEMUQKX2HVbfGXwQftiXVBOMZCZKrJdxTIHfXyhhS7JerRmVnviDzXIrTz Zpdvfm8HjDKp4GiTEgxI9b6Wb82VSIZEsqkwqvegTBHDdaCoi9+9X3jiGD9oIoxS2F82M1ATBHq KjXCLSbLeL8XpsbhxOfbwzfURdp7Hm6FCYlpkAFRIEgDmif1bg08XtJkSRJNfI0fHACo/VLrJXg Lpacg9RCuW/VN2gp4xntaHt1AzIpEHS9LCDIc74/thsdER6pa2VWnKDjcpWO9r11oKuYAVJKWTA 5O4xvz1VuTmyJombBrlAqswA33JBRd/BQKIaTwo3WiDvet/B X-Developer-Key: i=dlechner@baylibre.com; a=openpgp; fpr=8A73D82A6A1F509907F373881F8AF88C82F77C03 Add support for the AD7124's internal clock output. If the #clock-cells property is present, turn on the internal clock output during probe. If both the clocks and #clock-names properties are present (not allowed by devicetree bindings), assume that an external clock is being used so that we don't accidentally have two outputs fighting each other. Signed-off-by: David Lechner --- We could make this fancier and only turn on the output on demand of a clock consumer, but then we have to deal with locking of the SPI bus to be able to write to the register. So I opted for the simpler solution of always turning it on during probe. This would only be used for synchronizing with other similar ADCs, so implementing the functions for a more general-purpose clock seems a bit overkill. --- drivers/iio/adc/ad7124.c | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/drivers/iio/adc/ad7124.c b/drivers/iio/adc/ad7124.c index b0b03f838eed730347a3afcd759be7c1a8ab201e..b18229ff037596c6e98e12dc22b= 1552bf13fdc4e 100644 --- a/drivers/iio/adc/ad7124.c +++ b/drivers/iio/adc/ad7124.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -125,10 +126,12 @@ static const unsigned int ad7124_reg_size[] =3D { 3, 3, 3, 3, 3 }; =20 +#define AD7124_INT_CLK_HZ 614400 + static const int ad7124_master_clk_freq_hz[3] =3D { - [AD7124_LOW_POWER] =3D 76800, - [AD7124_MID_POWER] =3D 153600, - [AD7124_FULL_POWER] =3D 614400, + [AD7124_LOW_POWER] =3D AD7124_INT_CLK_HZ / 8, + [AD7124_MID_POWER] =3D AD7124_INT_CLK_HZ / 4, + [AD7124_FULL_POWER] =3D AD7124_INT_CLK_HZ, }; =20 static const char * const ad7124_ref_names[] =3D { @@ -1163,6 +1166,32 @@ static int ad7124_setup(struct ad7124_state *st) } =20 clk_sel =3D AD7124_ADC_CONTROL_CLK_SEL_INT; + } else if (!device_property_present(dev, "clocks") && + device_property_present(dev, "clock-names")) { + struct clk_hw *clk_hw; + char *name; + + name =3D devm_kasprintf(dev, GFP_KERNEL, "%s-clk", + fwnode_get_name(dev_fwnode(dev))); + if (!name) + return -ENOMEM; + + clk_hw =3D devm_clk_hw_register_fixed_rate(dev, name, NULL, 0, + AD7124_INT_CLK_HZ); + if (IS_ERR(clk_hw)) + return dev_err_probe(dev, PTR_ERR(clk_hw), "Failed to register clock pr= ovider\n"); + + ret =3D devm_of_clk_add_hw_provider(dev, of_clk_hw_simple_get, + clk_hw); + if (ret) + return dev_err_probe(dev, ret, "Failed to add clock provider\n"); + + /* + * Treat the clock as always on. This way we don't have to deal + * with someone trying to enable/disable the clock while we are + * reading samples. + */ + clk_sel =3D AD7124_ADC_CONTROL_CLK_SEL_INT_OUT; } else { struct clk *clk; =20 --=20 2.43.0