From patchwork Mon Apr 7 08:52:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Angelo Dureghello X-Patchwork-Id: 14040011 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (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 57B292288D6 for ; Mon, 7 Apr 2025 08:53:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744016011; cv=none; b=uEE307jVkkJPrJ/rp032BDS0AfsTDV4YMl/RMZ4jUIWurz1ZacbJXt2pnH9Cg4JPmCchkvj1IIK9bO00QKodNrt4D1ApKeGcVnlloUF2dmtcjFEgngeIDDkRo8B9n0QjdqVOpqEHoyl8ouYJ40YjuvWwQ7wdqSf9Ok0KDlljZXo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744016011; c=relaxed/simple; bh=pCpjDjmBZOzK40k+vljZr2BliJA0xp91AOXjRWTRx0Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ApksgnY2aKII2i/4pQ3r+Crp78Y2PAl3H8uYCeN1QAMaWZ47K12q2QzXKY33AJZ+ruNIvd4q1c+Rro2DbgOidgxd+iubqAD0CCoFKsq9BfJhPYBcKBNvIqvpdcspdAs9euTBr0L2f6gDtoioGixTE3+slB3WrCF5VmD844gYWv4= 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=yIFdg0gr; arc=none smtp.client-ip=209.85.128.42 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="yIFdg0gr" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-43cf0d787eeso44900605e9.3 for ; Mon, 07 Apr 2025 01:53:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1744016006; x=1744620806; 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=fOf9H7BQRbk9vcOFRZPDyvrAxaPKr+t8x7+lT2OYigQ=; b=yIFdg0grHJGVGw0+gsygFH0k/IVKY8xSqACiOs45DwJXts5N0quuuSVZpk8bS+hI6I P+i/odY97IRb7kIkW1FyqcaNgJk4x4v4Ycka+hZxYLElJTKnBaHhD9D8l5hwPpTosR/h S/a0iGwyFF7coiDzu8YKpb0qcKf7TnSsstiXdT0yS6bGu91FdzINefnkRIFC0VjkyQ79 ZWh1PdcaSQ43k7964WsXTud/yyl0FWHDzLiZ5drtD8l+R4+hrYaUV2OEpjC4cxvYFsyP Ihc+mW1+DXck3Q3hTtutXkIV/iwuE6+yusS6GvquJHCbJPoVrAh1q3egT6ojvT3E13QK jm8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744016006; x=1744620806; 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=fOf9H7BQRbk9vcOFRZPDyvrAxaPKr+t8x7+lT2OYigQ=; b=fJ6X9uGE4ezRrlyqe5WLNHYt21AmIKcUkaZYuzq1VQer3O9SMky7cxTJn6Q9iPkXhv tPmtsOYW+sgRK9Gw/VTBkfYgbPG8CaurAgeGLmKRajMnWym5YTghbHyAWg9hxzl6mAAo W2u+LJj5yJMdTkiPvVhNO5+Hrf2B6RgNjvF5NSsFfN3qum5kl1Be5e79CLIDT2+uaviJ OmzsoJpL7BlqFk2TmdzHHJmjEe6TXjdzlBBbtk0H9+Qo61b3/SjNsnXbmeIYp4yeiGd4 btoWZ+N41/jhjk3A5t+eaTGfTVJDaMQT+FjcfSkoM4lT0vG5x3CdzcYDvimGtHj/MOdh q8fw== X-Gm-Message-State: AOJu0YyEwZsFM+N+pJBhI0PGSYs/X6AuCnzlz8mYin4mZNLjbQzFz6VD htXgKZHEyjMOCXfxE4Rv5wywxnkdFY1Q9/q3sZcMJ8WEnpUQV0nrgkKNYAX+lH6Wt9dEWNsWfsJ y X-Gm-Gg: ASbGncvS4rzXzOnshbqnmm+xvK+A9e/a6bozAa+oiN6EezstP+5HG3onIu0460Aoav2 UwUXlgkWCH+WeJgePeTwsryMt1NUVF2KyXS9ZlUUOvrGjYO0yyMUjHatO1KbkIo4o76ndTLAFVo 7iZiCkc2bsqwTQ5cyO50Eg1oVX0r10CdJQfH1XxnEwZS6//Zbw95MeJ5jmwh6jUSRmtFI6/aHiZ mSS9UEP0BEIzppetsqJRtJI6CjndedEbRqz9DoTp0CWOmGCl1fqyXsvS+7AGe286zqMiHeZm9Tp QG5N2kMcJkNDWiJJpQGU7K72fk4v3AID+LOvBK55Zt+xrwulXq7b2IG3lwCyUWVBm1e2OQsrgPJ xEMLf2VmQIyK9pvQ1ptwEjg== X-Google-Smtp-Source: AGHT+IEESbUJjv5zNbby1nRneFXpbSe5k56jX92f688Vnu++FT+Kfoz76Ak446pwm5EA80vwmYPa0g== X-Received: by 2002:a05:600c:1819:b0:43c:f895:cb4e with SMTP id 5b1f17b1804b1-43ed0c6b9famr79797225e9.17.1744016006024; Mon, 07 Apr 2025 01:53:26 -0700 (PDT) Received: from [192.168.0.2] (host-87-15-70-119.retail.telecomitalia.it. [87.15.70.119]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec3174cf0sm126966995e9.0.2025.04.07.01.53.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:53:25 -0700 (PDT) From: Angelo Dureghello X-Google-Original-From: Angelo Dureghello Date: Mon, 07 Apr 2025 10:52:03 +0200 Subject: [PATCH v3 1/5] iio: dac: adi-axi-dac: add cntrl chan check Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250407-wip-bl-ad3552r-fixes-v3-1-61874065b60f@baylibre.com> References: <20250407-wip-bl-ad3552r-fixes-v3-0-61874065b60f@baylibre.com> In-Reply-To: <20250407-wip-bl-ad3552r-fixes-v3-0-61874065b60f@baylibre.com> To: =?utf-8?q?Nuno_S=C3=A1?= , Jonathan Cameron , Lars-Peter Clausen , Jonathan Corbet , Olivier Moysan , Michael Hennerich Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Angelo Dureghello X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3048; i=adureghello@baylibre.com; h=from:subject:message-id; bh=LEhJ7d3UZmGONv0UbtL1XfLYWtYo9rliWEIHzqon6QA=; b=owGbwMvMwCXGf3bn1e/btlsznlZLYkj/PMnG9U/8FZZrZ1Y86Vm0d8aLM0XaJgz2gVcWMub12 bOofmdX7yhlYRDjYpAVU2SpS4wwCb0dKqW8gHE2zBxWJpAhDFycAjCRa4sYGdZZ8RndWTNjdst5 H46K6Dl7Hu/8oCFaJ7hZ4rHxZlsmsUZGhi2PJJKTOWKnC34/tfRBvHBAdSRHTcYGOz7pLYtDVY7 5sQEA X-Developer-Key: i=adureghello@baylibre.com; a=openpgp; fpr=703CDFAD8B573EB00850E38366D1CB9419AF3953 From: Angelo Dureghello Add validity check on CNTRL_X channels (valid as 0 to 15). Signed-off-by: Angelo Dureghello Reviewed-by: Nuno Sá --- drivers/iio/dac/adi-axi-dac.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/iio/dac/adi-axi-dac.c b/drivers/iio/dac/adi-axi-dac.c index 892d770aec69c4259de777058801c9ab33c79923..f86acb98b0cffb09bf4d4626f932bf1edc911e2b 100644 --- a/drivers/iio/dac/adi-axi-dac.c +++ b/drivers/iio/dac/adi-axi-dac.c @@ -84,6 +84,7 @@ #define AXI_DAC_CHAN_CNTRL_7_REG(c) (0x0418 + (c) * 0x40) #define AXI_DAC_CHAN_CNTRL_7_DATA_SEL GENMASK(3, 0) +#define AXI_DAC_CHAN_CNTRL_MAX 15 #define AXI_DAC_RD_ADDR(x) (BIT(7) | (x)) /* 360 degrees in rad */ @@ -186,6 +187,9 @@ static int __axi_dac_frequency_get(struct axi_dac_state *st, unsigned int chan, u32 reg, raw; int ret; + if (chan > AXI_DAC_CHAN_CNTRL_MAX) + return -EINVAL; + if (!st->dac_clk) { dev_err(st->dev, "Sampling rate is 0...\n"); return -EINVAL; @@ -230,6 +234,9 @@ static int axi_dac_scale_get(struct axi_dac_state *st, int ret, vals[2]; u32 reg, raw; + if (chan->channel > AXI_DAC_CHAN_CNTRL_MAX) + return -EINVAL; + if (tone_2) reg = AXI_DAC_CHAN_CNTRL_3_REG(chan->channel); else @@ -264,6 +271,9 @@ static int axi_dac_phase_get(struct axi_dac_state *st, u32 reg, raw, phase; int ret, vals[2]; + if (chan->channel > AXI_DAC_CHAN_CNTRL_MAX) + return -EINVAL; + if (tone_2) reg = AXI_DAC_CHAN_CNTRL_4_REG(chan->channel); else @@ -291,6 +301,9 @@ static int __axi_dac_frequency_set(struct axi_dac_state *st, unsigned int chan, u16 raw; int ret; + if (chan > AXI_DAC_CHAN_CNTRL_MAX) + return -EINVAL; + if (!sample_rate || freq > sample_rate / 2) { dev_err(st->dev, "Invalid frequency(%u) dac_clk(%llu)\n", freq, sample_rate); @@ -342,6 +355,9 @@ static int axi_dac_scale_set(struct axi_dac_state *st, u32 raw = 0, reg; int ret; + if (chan->channel > AXI_DAC_CHAN_CNTRL_MAX) + return -EINVAL; + ret = iio_str_to_fixpoint(buf, 100000, &integer, &frac); if (ret) return ret; @@ -385,6 +401,9 @@ static int axi_dac_phase_set(struct axi_dac_state *st, u32 raw, reg; int ret; + if (chan->channel > AXI_DAC_CHAN_CNTRL_MAX) + return -EINVAL; + ret = iio_str_to_fixpoint(buf, 100000, &integer, &frac); if (ret) return ret; @@ -493,6 +512,9 @@ static int axi_dac_data_source_set(struct iio_backend *back, unsigned int chan, { struct axi_dac_state *st = iio_backend_get_priv(back); + if (chan > AXI_DAC_CHAN_CNTRL_MAX) + return -EINVAL; + switch (data) { case IIO_BACKEND_INTERNAL_CONTINUOUS_WAVE: return regmap_update_bits(st->regmap, @@ -521,6 +543,8 @@ static int axi_dac_set_sample_rate(struct iio_backend *back, unsigned int chan, unsigned int freq; int ret, tone; + if (chan > AXI_DAC_CHAN_CNTRL_MAX) + return -EINVAL; if (!sample_rate) return -EINVAL; if (st->reg_config & AXI_DAC_CONFIG_DDS_DISABLE) From patchwork Mon Apr 7 08:52:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Angelo Dureghello X-Patchwork-Id: 14040012 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (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 49F89217F32 for ; Mon, 7 Apr 2025 08:53:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744016012; cv=none; b=UwdjVLClakycH6GTbJd8DyiBcsMVCxfhOhq5yuqbxXy26x3BinmM2yTd86dcfKF4PF0Z4Coi4lD/2+QMXNeIQBZDQSKooS4j9qJbQwBoeXPq1uKJ1QCG6yE5unCkVs78MFJ4S/zeA4F6+W16LUymADC5o2QLU6Qjb4W5UPnWwzY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744016012; c=relaxed/simple; bh=F2Qod7NABbhubiuu+bmx+zE/fhm/Yo5sMggxFose+iE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aEqhBLuI8mt36Dw9LZGdCbXTbdsKdKL0CCVZDWRtCRwvME0jCgUfClHruHmttd9kCiO/1/kobdFZNFPpq1iVRFuS8Ax6WxsHNh10bguvzIpN9HjreIQ0y0rgP7d7p1hhnoNTxD4Ijq8Q6DJTzF7dJ09Z3TiWgwpjgXc1u39Z3VU= 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=2geaPF+y; arc=none smtp.client-ip=209.85.128.44 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="2geaPF+y" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-43cfe63c592so39009895e9.2 for ; Mon, 07 Apr 2025 01:53:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1744016008; x=1744620808; 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=ShsE3ZcbHwYaWyOB5JwD08uVlCnOZ4Y4zX0gXgP+EjU=; b=2geaPF+yGXDZstuPr3nx2VOxC/kJKOPfc3bBTu36efPt3ZC/DeG6v/oxer8SCRbCjO qpfIh8oE22SEA7nmy3zI2TPdCUof9K4sAj3O+vKYHUK46/eYaDGIMNWAR4aEAwSz67yH hFeEWkbKI85FWhJB23DpGonSjHLHmkpKO+solIg+vBmDGzchhHOyW4Y58DiQ4sHyDWgG dg1fJ1pnxoxhdt96qXJTmzM+iGuFqCOVInd+6m2zw6wy3G3VRq598080ZXW6NebbZQWI Jd+/MqukXCzH8D4CTbVuc6oJeMpyAfeQGrpp9Hlmm9wJ1CD6tgsJdpCkPb3aNz4pyZQ0 MUPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744016008; x=1744620808; 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=ShsE3ZcbHwYaWyOB5JwD08uVlCnOZ4Y4zX0gXgP+EjU=; b=bVRetlp7hy3ni7H7JexLrO5qyagko6TBMOZT+AOJld4FW/g1uvD8GXuP50csEQ2kS6 Xn7C15zxvKRudugcGsioTNE3qFGEDwIwwyb+bLzfrtnrYdUK+lPzlE5jxXFNgqsf+UfM PVsGXKeay0b+9wExKrv0Z8HSK39xGVaJin4IoVs1YSP5cU/Q58NMvH/Z9wwhlCsWHQVf DLZzQjGM/hoJa6TB+6B9q+KavusKOrrqkZ8wzExVKlI2HE8cs1xYX/cG8xLrehSFZWQl qFSNSpjK83ckTLhF4vsTg1MQCm5uNrgoOi6hKH5llu37EGlVl0YAG2hOCrT2BViV0hD5 Bkmw== X-Gm-Message-State: AOJu0YwBYpZi3T4ovMJTJyHTRF6DrWGE88RLJFrfYOGXGFK+gcG/4gFR c/qyqHyAhusU/5lhIJGspyoz9jFy5ih/99YjuNHNFdY9126UJGMMUDQzKtY8nQAdwA+IltunpyO 3 X-Gm-Gg: ASbGncsBGYcwusE4T4OmLARst9Pyx132Umxsfr0zU5bWKMbzmUex95kKd8ea8OXQ7tK vY5D3Jdznb+LDwEdf3NpM9wDFZmpoQW4Zjznq5LEKpKoPuReB0weJ3qRRQvpw0todT/cSLqtO4X hkNC7j0k4cL0HLqTsCaIKNFy6yZwrn9Ljbw70wtkcBPLGeA1+uPQYe8C1Bfr4jRGY9aKXkZnqpj up2+YEbnXGVebuJxxPT2xxzxm+PtaxK47DF/4yRon/dzR7CgPlkdD8mGSWrGLV8uX8a8xuKb5DN o8UqUsI1w6s/Dr+iB8m4L0/ubCwfqTC9HVOTP6/nUNCUjGGhjwFEHovg4kf/yO7F8oTxrGFQ93a qWOnHRIynCjBJzwUHrUmnKQ== X-Google-Smtp-Source: AGHT+IGoWMikHiILCzQyxiICmyrDcYbMbBE2+CmSWIHKyocBHZuGsTfBPMzzPfYegK5uRlhusxUWRA== X-Received: by 2002:a5d:5f4d:0:b0:391:47d8:de25 with SMTP id ffacd0b85a97d-39d0de67a0bmr10291358f8f.41.1744016008061; Mon, 07 Apr 2025 01:53:28 -0700 (PDT) Received: from [192.168.0.2] (host-87-15-70-119.retail.telecomitalia.it. [87.15.70.119]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec3174cf0sm126966995e9.0.2025.04.07.01.53.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:53:26 -0700 (PDT) From: Angelo Dureghello X-Google-Original-From: Angelo Dureghello Date: Mon, 07 Apr 2025 10:52:04 +0200 Subject: [PATCH v3 2/5] docs: iio: add documentation for ad3552r driver Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250407-wip-bl-ad3552r-fixes-v3-2-61874065b60f@baylibre.com> References: <20250407-wip-bl-ad3552r-fixes-v3-0-61874065b60f@baylibre.com> In-Reply-To: <20250407-wip-bl-ad3552r-fixes-v3-0-61874065b60f@baylibre.com> To: =?utf-8?q?Nuno_S=C3=A1?= , Jonathan Cameron , Lars-Peter Clausen , Jonathan Corbet , Olivier Moysan , Michael Hennerich Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Angelo Dureghello X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4191; i=adureghello@baylibre.com; h=from:subject:message-id; bh=K6IzTR+F1J2B1DTGHtf/OPY+ArUlb20kadSjMscdtUE=; b=owGbwMvMwCXGf3bn1e/btlsznlZLYkj/PMmGaUNurFfh9PrpW37czjvWpuGTdPnVhJqgiW062 64pOTGEdZSyMIhxMciKKbLUJUaYhN4OlVJewDgbZg4rE8gQBi5OAZgIMxsjw/nW1/eLhLYsZJq+ T6ptd7TwbYOgvKmHfbXtLqhsdr3wU4CRoeWLU/0dvc4rq5jPSjU5sj98dD/BLqgw9LNyouZhOz1 5RgA= X-Developer-Key: i=adureghello@baylibre.com; a=openpgp; fpr=703CDFAD8B573EB00850E38366D1CB9419AF3953 From: Angelo Dureghello Add documentation for ad3552r driver, needed to describe the high-speed driver debugfs attributes and shows how the user may use them. Signed-off-by: Angelo Dureghello --- Documentation/iio/ad3552r.rst | 72 +++++++++++++++++++++++++++++++++++++++++++ Documentation/iio/index.rst | 1 + MAINTAINERS | 1 + 3 files changed, 74 insertions(+) diff --git a/Documentation/iio/ad3552r.rst b/Documentation/iio/ad3552r.rst new file mode 100644 index 0000000000000000000000000000000000000000..2af24cfe886f1f4c1b86ac679fd19b83635b6771 --- /dev/null +++ b/Documentation/iio/ad3552r.rst @@ -0,0 +1,72 @@ +.. SPDX-License-Identifier: GPL-2.0-only + +============== +AD3552R driver +============== + +Device driver for Analog Devices Inc. AD35XXR series of DACs. The module name +is ``ad3552r``. +With the same module name, two different driver variants are available, the +``generic spi`` variant, to be used with any classic SPI controllers, and the +``hs`` (high speed) variant, for an ADI ``axi-dac`` (IP core) based controller +that allows to reach the maximum sample rate supported from the DACs, using the +DMA transfer and all the SPI lines available (D/QDSPI).. +The high speed driver variant is intended to be used with the ``adi-axi-dac`` +backend support enabled, that is enabled by default when the driver is selected. + +Supported devices +================= + +* `AD3541R `_ +* `AD3542R `_ +* `AD3551R `_ +* `AD3552R `_ + +Wiring connections +================== + +Generic SPI +----------- +Use the classic SPI S_CLK/CS/SDO/SDI connection. + +High speed (using axi-dac backend) +---------------------------------- + +:: + + .-----------------. .-------. + | |--- D/QSPI -----| | + | DAC IP CORE |--- SPI S_CLK --| DAC | + | |--- SPI CS -----| | + | |--- LDAC -------| | + | |--- RESET ------| | + |_________________| |_______| + + +High speed features +=================== + +Device attributes +----------------- + +The following table shows the ad35xxr related device debug files, found in the +specific device debug folder path ``/sys/kernel/debug/iio/iio:deviceX``. + ++----------------------+-------------------------------------------------------+ +| Debugfs device files | Description | ++----------------------+-------------------------------------------------------+ +| data_source | The used data source, | +| | as ``iio-buffer`` or ``backend-ramp-generator``. | ++----------------------+-------------------------------------------------------+ + +Usage examples +-------------- + +. code-block:: bash + root:/sys/bus/iio/devices/iio:device0# cat data_source + iio-buffer + root:/sys/bus/iio/devices/iio:device0# echo -n backend-ramp-generator > data_source + root:/sys/bus/iio/devices/iio:device0# cat data_source + backend-ramp-generator + + diff --git a/Documentation/iio/index.rst b/Documentation/iio/index.rst index bbb2edce8272e7483acca500d1a757bbcc11c1e0..2d6afc5a8ed54a90cd8d5723f0dc5212b8593d16 100644 --- a/Documentation/iio/index.rst +++ b/Documentation/iio/index.rst @@ -19,6 +19,7 @@ Industrial I/O Kernel Drivers .. toctree:: :maxdepth: 1 + ad3552r ad4000 ad4030 ad4695 diff --git a/MAINTAINERS b/MAINTAINERS index 57eaab00f6cb53df52a4799eb2c1afbbd1e77a1e..52bc56a9ee22c66b90555681c4757ea4399adae1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1295,6 +1295,7 @@ L: linux-iio@vger.kernel.org S: Supported W: https://ez.analog.com/linux-software-drivers F: Documentation/devicetree/bindings/iio/dac/adi,ad3552r.yaml +F: Documentation/iio/ad3552r.rst F: drivers/iio/dac/ad3552r.c ANALOG DEVICES INC AD4000 DRIVER From patchwork Mon Apr 7 08:52:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Angelo Dureghello X-Patchwork-Id: 14040013 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (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 6FE6F22A4E8 for ; Mon, 7 Apr 2025 08:53:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744016014; cv=none; b=kz2gXa5SCrXSr6vGYj0CPPWyj97tbCz/vFkDQuEvFmV/gja996pCkXKJLXT++b5Q3tfJ2FH+fBWfyuAEp3Wf1/L8JKyRwrdfuD/v6Ednm+hpcyyKOuTV1vK7ezmWtl4/qo0myAcQ2MZhrjdV74heTiziDHPtPGCd/UfPqZw4XOI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744016014; c=relaxed/simple; bh=hWSr+N4q8jPBwyhE+M9punDDVddf1n2Qdd8iVHO9YtM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=N0JnpfGCGXE57QPjYB1Ae5UoJj6K1IPC0cb4DJ+M7BQRcJAD2rMkDc9eEjeHy2t5MfotnkyIZm/m6pqBecMm9cdIJmExsAJPjQgNZP0o+bU+D9z+e7pGwV17HCugfOVN9asnwR9PlOTjSAxapAhgBAkgQvNQHwd9sgPO4h2zIDA= 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=2O4wOAlN; arc=none smtp.client-ip=209.85.128.43 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="2O4wOAlN" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-43cfe574976so27408515e9.1 for ; Mon, 07 Apr 2025 01:53:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1744016010; x=1744620810; 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=Hl8ec5RDehNYBKLIScFWmbMlzzx1NzVQIVCz8eQlZvo=; b=2O4wOAlNGCiq2nxlgwd1CsF5NbTgt9kPZZifV12aJtl2XZUF+QioxxQ+Rf/DOFDyFS h4ztn60U8xR2AGkAh3vbptL/yOExaF6AZ9hAEAsuL+rfRmmw7c+qoKUlXkWjVpvavVvw gXTjMWWj8rZ3ndrDLSl4NC0pFNwq4Pu8Sz7TB5KzILykjkEGnueY7EpwwjrT43vtUZth nddioDKEqUIWaQcyK4hm3cMeMjss1CLkBxNKeKNiGxOHWwhhP9+PUCQVSJueukcsfdIx CrdRghWvZ+GIy3M24jC4sI2T1/FBKEVcMb6SBH95XvcrxaZGKKzoRlyEQNYS7Z53l8+o dk1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744016010; x=1744620810; 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=Hl8ec5RDehNYBKLIScFWmbMlzzx1NzVQIVCz8eQlZvo=; b=wNlCrZg1gIIQTOwiheViY6LKzW++IiC8PhYnyRtR1QVuCmxQBnEJf2uGu4E2P18lcS fwAbBIaH9BxRnavbk6fuqRZfuVIEuXHDzfKpyxoRbG9o8usHWan1GChrRKdFT8Pwa9jj PPmC7ZPIa8eTC3meDmFslewSAgCr4FYUXcBnn3ouMInSo3Odu3lhB8ULI37SUaAolqUl QCwpo8eKKaHdeKA3yNfe947wA8E+z7Nod68JFkcNJNCxjKxoZgni8eiD4BeJF8oRNqkB lmZVH/NumcRe+EwBcgTiNs74cfyaPs6TIePdyBRAE0Q2n135EjpRvjxiWmVNWhYnVikd tLyw== X-Gm-Message-State: AOJu0YwkniXzRwdTDJl2hHugKfBJSp28T2h1FpiK7w6TVNzPIqt/XOob Aunta4OYx0wlngXPaW/fh+Y/fsQEqsviMdVcygEA/KCRwNpemSmjnAq/H+Ij1lNs6dZDkdzeWAY 6 X-Gm-Gg: ASbGncsuryyrhUl0XEBxVLbZ8hL8yIKqauE1xqcEZ5SX70uJHIN6g/ruSx0+c18dYOp 46OKZcFPwUIfz46MbvTA3zIKsKhmElhzUxoLdShjwJHv4HUPiEFDj3h/lObcuhypfQoJF2y08wp 5u2IeLXTPRMMb265aV2BDdOZ2qtLX8jNfcmvNFQqRVj5Yazv8Op2gw+sNkVchurMiXBht1x8pS+ pdy9chiVzHPfCAdXXyCGaGc8ktONIzQu8Ad8rbghcYO3sH59bg5iQbSORCLlUBDP9GY01qegfLw oWzyyTSO8kVHThrAsKh3De9UL44IJd9R9pJ3zN4oSqSnpp5KwA6pfTr1JEOnqfkfzrZRv/opg3A T/A6x+dh3nckB78nvgdHF+Q== X-Google-Smtp-Source: AGHT+IEoRKYzi4XTLVyzGQCHVUJlc2/nLNfGyDANP2bSxKBD7Syi4BAXA2v3/anNoWltCaKQJP3DQQ== X-Received: by 2002:a05:600c:4712:b0:43b:ca39:6c75 with SMTP id 5b1f17b1804b1-43ecf8cfb3cmr114706865e9.16.1744016010047; Mon, 07 Apr 2025 01:53:30 -0700 (PDT) Received: from [192.168.0.2] (host-87-15-70-119.retail.telecomitalia.it. [87.15.70.119]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec3174cf0sm126966995e9.0.2025.04.07.01.53.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:53:29 -0700 (PDT) From: Angelo Dureghello X-Google-Original-From: Angelo Dureghello Date: Mon, 07 Apr 2025 10:52:05 +0200 Subject: [PATCH v3 3/5] iio: backend: add support for data source get Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250407-wip-bl-ad3552r-fixes-v3-3-61874065b60f@baylibre.com> References: <20250407-wip-bl-ad3552r-fixes-v3-0-61874065b60f@baylibre.com> In-Reply-To: <20250407-wip-bl-ad3552r-fixes-v3-0-61874065b60f@baylibre.com> To: =?utf-8?q?Nuno_S=C3=A1?= , Jonathan Cameron , Lars-Peter Clausen , Jonathan Corbet , Olivier Moysan , Michael Hennerich Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Angelo Dureghello X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3489; i=adureghello@baylibre.com; h=from:subject:message-id; bh=/X5T/C4urb1TZY56QZlmQtSfqpUWNyuJBZpY7qU/VIg=; b=owGbwMvMwCXGf3bn1e/btlsznlZLYkj/PMkmoczqgCDDtUeWqZsvtzIYMG2xXml75fUX/nNJO ZOfKHl86ihlYRDjYpAVU2SpS4wwCb0dKqW8gHE2zBxWJpAhDFycAjCRt5WMDJ/DNovujT/9T1X0 zI4NNbbCwVH/cuz26P+b4342dC2zzASG/7GWJQxyt2Z0iukHG93h/PaibU8lT4s6k0LLV7es6ER RDgA= X-Developer-Key: i=adureghello@baylibre.com; a=openpgp; fpr=703CDFAD8B573EB00850E38366D1CB9419AF3953 From: Angelo Dureghello Add backend support for getting the data source used. The ad3552r HDL implements an internal ramp generator, so adding the getter to allow data source get/set by debugfs. Signed-off-by: Angelo Dureghello Reviewed-by: Nuno Sá --- drivers/iio/industrialio-backend.c | 28 ++++++++++++++++++++++++++++ include/linux/iio/backend.h | 5 +++++ 2 files changed, 33 insertions(+) diff --git a/drivers/iio/industrialio-backend.c b/drivers/iio/industrialio-backend.c index a43c8d1bb3d0f4dda4277cac94b0ea9232c071e4..c1eb9ef9db08aec8437d0d00cf77914ad6611b72 100644 --- a/drivers/iio/industrialio-backend.c +++ b/drivers/iio/industrialio-backend.c @@ -380,6 +380,34 @@ int iio_backend_data_source_set(struct iio_backend *back, unsigned int chan, } EXPORT_SYMBOL_NS_GPL(iio_backend_data_source_set, "IIO_BACKEND"); +/** + * iio_backend_data_source_get - Get current data source + * @back: Backend device + * @chan: Channel number + * @data: Pointer to receive the current source value + * + * A given backend may have different sources to stream/sync data. This allows + * to know what source is in use. + * + * RETURNS: + * 0 on success, negative error number on failure. + */ +int iio_backend_data_source_get(struct iio_backend *back, unsigned int chan, + enum iio_backend_data_source *data) +{ + int ret; + + ret = iio_backend_op_call(back, data_source_get, chan, data); + if (ret) + return ret; + + if (*data >= IIO_BACKEND_DATA_SOURCE_MAX) + return -EINVAL; + + return 0; +} +EXPORT_SYMBOL_NS_GPL(iio_backend_data_source_get, "IIO_BACKEND"); + /** * iio_backend_set_sampling_freq - Set channel sampling rate * @back: Backend device diff --git a/include/linux/iio/backend.h b/include/linux/iio/backend.h index e45b7dfbec35c094942a3034fc6057a7960b9772..e59d909cb65924b4872cadd4b7e5e894c13c189f 100644 --- a/include/linux/iio/backend.h +++ b/include/linux/iio/backend.h @@ -84,6 +84,7 @@ enum iio_backend_interface_type { * @chan_disable: Disable one channel. * @data_format_set: Configure the data format for a specific channel. * @data_source_set: Configure the data source for a specific channel. + * @data_source_get: Data source getter for a specific channel. * @set_sample_rate: Configure the sampling rate for a specific channel. * @test_pattern_set: Configure a test pattern. * @chan_status: Get the channel status. @@ -115,6 +116,8 @@ struct iio_backend_ops { const struct iio_backend_data_fmt *data); int (*data_source_set)(struct iio_backend *back, unsigned int chan, enum iio_backend_data_source data); + int (*data_source_get)(struct iio_backend *back, unsigned int chan, + enum iio_backend_data_source *data); int (*set_sample_rate)(struct iio_backend *back, unsigned int chan, u64 sample_rate_hz); int (*test_pattern_set)(struct iio_backend *back, @@ -176,6 +179,8 @@ int iio_backend_data_format_set(struct iio_backend *back, unsigned int chan, const struct iio_backend_data_fmt *data); int iio_backend_data_source_set(struct iio_backend *back, unsigned int chan, enum iio_backend_data_source data); +int iio_backend_data_source_get(struct iio_backend *back, unsigned int chan, + enum iio_backend_data_source *data); int iio_backend_set_sampling_freq(struct iio_backend *back, unsigned int chan, u64 sample_rate_hz); int iio_backend_test_pattern_set(struct iio_backend *back, From patchwork Mon Apr 7 08:52:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Angelo Dureghello X-Patchwork-Id: 14040014 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (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 B76B522A7FA for ; Mon, 7 Apr 2025 08:53:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744016015; cv=none; b=LZcbD3UVtP3CH4DfO01z1chFCJBrMro6Be/98AWJR5iNuBPJZ7yWBOQMl/LentBISVITQOKseH0wxei5SkIzJATVuuBeJ7I2XiR/kGyAyhr6Nlh9lezf/QNYGSpDNRrenPgeY8J1hDN3qdePIfOpJrOg2f61/zukxC5pkc+R63E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744016015; c=relaxed/simple; bh=OCoJU5I3KSv266Dud9GYmsHSuvkY/G/QdJ0ymA0kyLA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tGspOrmfDJyW18YByViytOOXCK/dE59ThZw7VIJ27cczWAP8Q2p/+S9+AUPLoOaW+a+SHLzUqBLGLQwNFbWeuJw+pjQqhAI31qwuG4hqiQ59mgtb8rmLHX/I+E78flRYWAgpeL8ZhQq4WLhcsdpJt2+Trti6cv3/kfZcZzsWVKE= 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=t5dQ9luL; arc=none smtp.client-ip=209.85.128.47 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="t5dQ9luL" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-43ea40a6e98so35752915e9.1 for ; Mon, 07 Apr 2025 01:53:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1744016011; x=1744620811; 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=oHYg6gWg3qo6Q8O/SnNRE8XUeJskhJduG/oZ7vBh458=; b=t5dQ9luLTW3NiNFEajHqSP6F/uTWMdjppO953hKmrDzyfqQyV0R8jbZUON7RbNjhmP CQOnptnH4i994yFfHtp7tG7CrbyxvQM6jRP9fXUJaPfqrFqLoLfraNKrFXfnDJNBGqvG LnrU7SJba//rAmy33++2StIbPRX1vSmcUERrwbcm9YIbMsHOEtVI9MWTJJtTi3sLbor3 LycKL42fdx5KQ6s5iZfAkYurqZK5MeUBFVqD1HiFv9pyyVPI+2fY8fbOIXu4sjIfEVc1 Ug54yUG3uLAPQOoDeGIgHcxWsv6keNTEglecCizqXQRbSiL78EflpsHTFPp8t5w7HIZl 7l2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744016011; x=1744620811; 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=oHYg6gWg3qo6Q8O/SnNRE8XUeJskhJduG/oZ7vBh458=; b=qysuweVktj+5+L+YIqu6oa0yp3pupsfM0eyiwY3fdUO8tZ5hZdlfaZI0Q8x4Jh+2fa bgxiypwlK2m3uGRD+Ius6+xzpnHSsKAyzlLbeQ1y9JTNMUelgywDRKfy9KIBGaH+gShw tppYmFtZwSxRzV2XWVQhnbDd67WWqdWeENUIwTk2b4ueCTp6yifJyj5SIO8EjdtuOsyR zzbLJ9pHTPk92PheNZVucVPrbqvWF0AHogeZftgvIZEd1B5a+y9WI4/2Yr1Q7gCxq+pO liB0VEK8gThD9n6mQmjp/pGVnlkBBtoD82oEMf+2Hliu0/Nekf2NJ1FWxQDAyVeIWuJC QNbA== X-Gm-Message-State: AOJu0Yx1hHKhMt0EQZT7V3iatbn5Td/v7zd/+XPgo+sPpRZKf+BocO1t 3HfoBCh/PDAZWUOyzuqvZ8LUuuUtSa+iZjZ7Z9bc/0j/dXhFL9Yue/fjNt+utKeC+ricwkpcj/s s X-Gm-Gg: ASbGncufnBfcMd3oR0nPZZXTZ8H00Zz02ypxjusVZLtWSejY4j3wSP0clywgs9TmzIg wSHdSzo4SrLsX0LzxNTgdZpm0QKYoLs4UnjgGgJpbaAyqocSifn+HeySsgns8h0XJJlXq1nBxPR G9h/foFbmbEX+yT5Q4gTVTe4e8ku+DsbnPKHDqZmAD71TQhK7Ntfz98H1WZ+2uzjdRj05gHy9VC 4KM1pwsM20btTKgwQEI3B4dBh0LdDwBRqIi6wEiyFlSIjMm1z13WVBhQCkgEx3+i2UFELP6O5EV jfmw6aTbkMUx/4GPgpvOfFnhSM3zEPygMaLAkt0MTYXfEKyYTIFCMCrcZ2WIOUW9f5Zcf4TkaFV u4Y1QNWV3jkz1ymkZwkDCow== X-Google-Smtp-Source: AGHT+IG3UNqwKSmnEghN1Yf0vzRJslD7xevndIQG/1hxBxCx6zKFOX6soLxXbaPP6oJYqCIRrGEM3Q== X-Received: by 2002:a05:600c:46d5:b0:43d:fa:1f9a with SMTP id 5b1f17b1804b1-43ee077feeamr71808175e9.30.1744016011319; Mon, 07 Apr 2025 01:53:31 -0700 (PDT) Received: from [192.168.0.2] (host-87-15-70-119.retail.telecomitalia.it. [87.15.70.119]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec3174cf0sm126966995e9.0.2025.04.07.01.53.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:53:30 -0700 (PDT) From: Angelo Dureghello X-Google-Original-From: Angelo Dureghello Date: Mon, 07 Apr 2025 10:52:06 +0200 Subject: [PATCH v3 4/5] iio: dac: adi-axi-dac: add data source get Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250407-wip-bl-ad3552r-fixes-v3-4-61874065b60f@baylibre.com> References: <20250407-wip-bl-ad3552r-fixes-v3-0-61874065b60f@baylibre.com> In-Reply-To: <20250407-wip-bl-ad3552r-fixes-v3-0-61874065b60f@baylibre.com> To: =?utf-8?q?Nuno_S=C3=A1?= , Jonathan Cameron , Lars-Peter Clausen , Jonathan Corbet , Olivier Moysan , Michael Hennerich Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Angelo Dureghello X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1784; i=adureghello@baylibre.com; h=from:subject:message-id; bh=DrKX9r5j3TjlenOHNRW1uPlJC2BhLVb8vPawrBK+mKo=; b=owGbwMvMwCXGf3bn1e/btlsznlZLYkj/PMnGKK638KhKL68Wi2vYhOdn96hf/lEkv9XvtNbUg GKxhdW7OkpZGMS4GGTFFFnqEiNMQm+HSikvYJwNM4eVCWQIAxenAExkLjfDP+0cvQ85O3L7A+d7 nxKVPSDi+nt9CH+dUWmdwJrwVwE6FxkZZmz4um3a9phZBnpPjsjm22XXMi4OdJRfEta42ti/5GY NMwA= X-Developer-Key: i=adureghello@baylibre.com; a=openpgp; fpr=703CDFAD8B573EB00850E38366D1CB9419AF3953 From: Angelo Dureghello Add data source getter. Signed-off-by: Angelo Dureghello Reviewed-by: Nuno Sá --- drivers/iio/dac/adi-axi-dac.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/drivers/iio/dac/adi-axi-dac.c b/drivers/iio/dac/adi-axi-dac.c index f86acb98b0cffb09bf4d4626f932bf1edc911e2b..8ed5ad1fa24cef649056bc5f4ca80abbf28b9323 100644 --- a/drivers/iio/dac/adi-axi-dac.c +++ b/drivers/iio/dac/adi-axi-dac.c @@ -536,6 +536,35 @@ static int axi_dac_data_source_set(struct iio_backend *back, unsigned int chan, } } +static int axi_dac_data_source_get(struct iio_backend *back, unsigned int chan, + enum iio_backend_data_source *data) +{ + struct axi_dac_state *st = iio_backend_get_priv(back); + int ret; + u32 val; + + if (chan > AXI_DAC_CHAN_CNTRL_MAX) + return -EINVAL; + + ret = regmap_read(st->regmap, AXI_DAC_CHAN_CNTRL_7_REG(chan), &val); + if (ret) + return ret; + + switch (val) { + case AXI_DAC_DATA_INTERNAL_TONE: + *data = IIO_BACKEND_INTERNAL_CONTINUOUS_WAVE; + return 0; + case AXI_DAC_DATA_DMA: + *data = IIO_BACKEND_EXTERNAL; + return 0; + case AXI_DAC_DATA_INTERNAL_RAMP_16BIT: + *data = IIO_BACKEND_INTERNAL_RAMP_16BIT; + return 0; + default: + return -EIO; + } +} + static int axi_dac_set_sample_rate(struct iio_backend *back, unsigned int chan, u64 sample_rate) { @@ -818,6 +847,7 @@ static const struct iio_backend_ops axi_ad3552r_ops = { .request_buffer = axi_dac_request_buffer, .free_buffer = axi_dac_free_buffer, .data_source_set = axi_dac_data_source_set, + .data_source_get = axi_dac_data_source_get, .ddr_enable = axi_dac_ddr_enable, .ddr_disable = axi_dac_ddr_disable, .data_stream_enable = axi_dac_data_stream_enable, From patchwork Mon Apr 7 08:52:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Angelo Dureghello X-Patchwork-Id: 14040015 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.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 9C9B422A81A for ; Mon, 7 Apr 2025 08:53:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744016017; cv=none; b=TYYH2W+ba63z13erH3XWt/7Nm2kUHIHfDqv/ZUYklbVWTJ7KvU7vvtDgZhQxGynoWh/rhSV4liWpqDI5RR3QZQ3GlE+7J5JXB2L1lLk5fBuFVg9v8qrLNrcbeWnG+oEAj+/3NFcFaaMK3Vs+5q2vwkLpK4jKoMLzifLGA7noojw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744016017; c=relaxed/simple; bh=6MNPW5rrCGsNlWsIK2Wq8JZEQeMCM5nkbAYK09UhOio=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZwqibMb4TkuTiGWzuLEBL9nV1QeoLB3VI2/CvJPbNGtw2Lf7+OmLZuU6ENZ+1LZTQreBUSi2rnPOd6wrOTWju1IBc4U+BcBqgPHeyLJOOwA7Owfcmh/A/4VZe59wmOdz/m+AeadWq/oImQ3RzZCRvWBAcwmtrCuzNGhEWjLMA4c= 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=USC9vDAd; arc=none smtp.client-ip=209.85.128.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="USC9vDAd" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-43cf257158fso27596815e9.2 for ; Mon, 07 Apr 2025 01:53:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1744016012; x=1744620812; 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=ojvE6ZCl6dLbOE6EYPUsM9oqTlJu3LxPEQc1vnCPuHU=; b=USC9vDAdFLPYKnE9W5UU6HB1tv8qs/jmUUBhbUx9q2A180CdSbDeR5O5xqi4m2rE5p kNLveN7bw370a0r9edT8dfudNjzJ+S77dZyfozEoXmWrfG+a+5SCO/4sH/EhgfAIumx5 Vajry7AcWz6CA1U6TG7JJ73CxyStfYZil4cDCDydXscZqE37MYieFbckEC5EOroOShTX qbRNN/e/VNFEZ5Uv8aCXW/NNVZXe+adMFbpxGKBegmSFGXW8JtYqnl+EAgG8RkERu+us rBy7Kc9hhqJpaCcT8rWyaoUtE1Sch7AVkzG0KA5YbLNYwZLILxBP9aTGlv1evqTe+O0n r3/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744016012; x=1744620812; 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=ojvE6ZCl6dLbOE6EYPUsM9oqTlJu3LxPEQc1vnCPuHU=; b=m4nnIKze/poehjJjDntocY0wdIW2Kb599kak0Q4C2TbVtsT46W5VLdozegy/Xgb9+H S9ABOcBnq/xFBix4K1cCb2HOwPq3wXsZXpTliO0W0mGORHw0WV+tMUAvb6n14ema6hoi VY4W+GPWyfvncDLvMY0S5O1qpOP49UCfx0bvG65finRfjkrIpt6FbARyorbvIpiaJkp5 4jMETWnj2lmL71mOAhwG/IJUwrKV9a74kgw0DIUuMKtoOxU235FMYY+b9ZgS4Kca+GTY fcSQqyvCwQFJtgdK89BsznaUKAWkL31gj3l5+WEtsTnEWCkG9HC8n+/4TbuvWOoWnP4B ynWQ== X-Gm-Message-State: AOJu0YygsuNJX949Fb0VHEVFlNwYJ5zP7RFOs1csT8fu8Fys/ihVUYl6 TcItUcFbpZyQhJpGaLxC12YgvouCftnltJHJB2y53gaYNe5NSSlhENE0IPRNNCu80Ov5EzWE9BX p X-Gm-Gg: ASbGncttrbVNq3+qpekwCvo+QKblgT13N6wQOM1b8neIDaGjGdckAhlfcePouO8LkPS oriDomKpZXaggiKPlqtxfU0g5/RCeu8kOlRi07EMIcRILDvEMFD9c+ec7qRmt4xbB/Uu3sTMgTM 5xkt+KLyevOY8s8Tgs/N1UkrBC4yJy9i+kCfTDTQ++C9ouICADT1s16hMR9isiqh7bovjtpt2G5 UHs2wg+l5EhpHMP7chxxd7/dLKqAmHeVEJub4W2SSiDE5M0ppIRf1rQm4Cj4Yz2PtJx7MURYVjL wjNg6Oy38EeuUz4TGyzZUdQ7bZScJaEfzaZf6ssQtaDdBFE/oDzyztmlcK08rvUVgDnsTL6j43x TxjAgxlo9VMiex+r0nALL3A== X-Google-Smtp-Source: AGHT+IHXnI5obqfnDBfnmntpuGohXNyfCrhIkcIEEy62VoAPWUc/7IHAHiJ1xPm8CUemUjAtsBJ8cQ== X-Received: by 2002:a05:600c:3505:b0:43d:cc9:b0a3 with SMTP id 5b1f17b1804b1-43ecf9fed8fmr75791135e9.22.1744016012605; Mon, 07 Apr 2025 01:53:32 -0700 (PDT) Received: from [192.168.0.2] (host-87-15-70-119.retail.telecomitalia.it. [87.15.70.119]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec3174cf0sm126966995e9.0.2025.04.07.01.53.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:53:32 -0700 (PDT) From: Angelo Dureghello X-Google-Original-From: Angelo Dureghello Date: Mon, 07 Apr 2025 10:52:07 +0200 Subject: [PATCH v3 5/5] iio: dac: ad3552r-hs: add support for internal ramp Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250407-wip-bl-ad3552r-fixes-v3-5-61874065b60f@baylibre.com> References: <20250407-wip-bl-ad3552r-fixes-v3-0-61874065b60f@baylibre.com> In-Reply-To: <20250407-wip-bl-ad3552r-fixes-v3-0-61874065b60f@baylibre.com> To: =?utf-8?q?Nuno_S=C3=A1?= , Jonathan Cameron , Lars-Peter Clausen , Jonathan Corbet , Olivier Moysan , Michael Hennerich Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Angelo Dureghello X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5557; i=adureghello@baylibre.com; h=from:subject:message-id; bh=JNHqVEoeHIkqaYfOFdlgyU6mu8jM8HeInE2c4jX+SP0=; b=owGbwMvMwCXGf3bn1e/btlsznlZLYkj/PMnGQvrUyjKLz1++Gqy3e3rJ/0HAk5/qXVHBlRsfK ZvZy9YxdJSyMIhxMciKKbLUJUaYhN4OlVJewDgbZg4rE8gQBi5OAZjIJkaG/0WyC4q1npWcXHmu Qz+65sSZn9Hsh281cxW8ZsvgOvdSrY7hf8o806VJV7UnZy34E27i9t2m01TizRtGu52Fcy1KP1t M5gEA X-Developer-Key: i=adureghello@baylibre.com; a=openpgp; fpr=703CDFAD8B573EB00850E38366D1CB9419AF3953 From: Angelo Dureghello The ad3552r can be feeded from the HDL controller by an internally generated 16bit ramp, useful for debug pourposes. Add debugfs a file to enable or disable it. Signed-off-by: Angelo Dureghello --- drivers/iio/dac/ad3552r-hs.c | 124 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 118 insertions(+), 6 deletions(-) diff --git a/drivers/iio/dac/ad3552r-hs.c b/drivers/iio/dac/ad3552r-hs.c index 37397e188f225a8099745ec03f7c604da76960b1..3dcbda23c732f5f5e655bde31c5dab4960554bfc 100644 --- a/drivers/iio/dac/ad3552r-hs.c +++ b/drivers/iio/dac/ad3552r-hs.c @@ -7,6 +7,7 @@ */ #include +#include #include #include #include @@ -54,8 +55,13 @@ struct ad3552r_hs_state { struct ad3552r_hs_platform_data *data; /* INTERFACE_CONFIG_D register cache, in DDR we cannot read values. */ u32 config_d; + /* Protects backend I/O operations from concurrent accesses. */ + struct mutex lock; }; +static const char dbgfs_src_iio_buffer[] = "iio-buffer"; +static const char dbgfs_src_backend_ramp_gen[] = "backend-ramp-generator"; + static int ad3552r_hs_reg_read(struct ad3552r_hs_state *st, u32 reg, u32 *val, size_t xfer_size) { @@ -65,6 +71,18 @@ static int ad3552r_hs_reg_read(struct ad3552r_hs_state *st, u32 reg, u32 *val, return st->data->bus_reg_read(st->back, reg, val, xfer_size); } +static int ad3552r_hs_set_data_source(struct ad3552r_hs_state *st, + enum iio_backend_data_source type) +{ + int ret; + + ret = iio_backend_data_source_set(st->back, 0, type); + if (ret) + return ret; + + return iio_backend_data_source_set(st->back, 1, type); +} + static int ad3552r_hs_update_reg_bits(struct ad3552r_hs_state *st, u32 reg, u32 mask, u32 val, size_t xfer_size) { @@ -483,6 +501,76 @@ static int ad3552r_hs_reg_access(struct iio_dev *indio_dev, unsigned int reg, return st->data->bus_reg_write(st->back, reg, writeval, 1); } +static ssize_t ad3552r_hs_show_data_source(struct file *f, char __user *userbuf, + size_t count, loff_t *ppos) +{ + struct ad3552r_hs_state *st = file_inode(f)->i_private; + enum iio_backend_data_source type; + int ret; + + guard(mutex)(&st->lock); + + ret = iio_backend_data_source_get(st->back, 0, &type); + if (ret) + return ret; + + switch (type) { + case IIO_BACKEND_INTERNAL_RAMP_16BIT: + return simple_read_from_buffer(userbuf, count, ppos, + dbgfs_src_backend_ramp_gen, + strlen(dbgfs_src_backend_ramp_gen)); + case IIO_BACKEND_EXTERNAL: + return simple_read_from_buffer(userbuf, count, ppos, + dbgfs_src_iio_buffer, strlen(dbgfs_src_iio_buffer)); + default: + return -EINVAL; + } +} + +static ssize_t ad3552r_hs_write_data_source(struct file *f, + const char __user *userbuf, + size_t count, loff_t *ppos) +{ + struct ad3552r_hs_state *st = file_inode(f)->i_private; + char buf[64]; + int ret, len; + + guard(mutex)(&st->lock); + + ret = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, userbuf, + count); + if (ret < 0) + return ret; + + len = strlen(dbgfs_src_iio_buffer); + if (count == len && !strncmp(buf, dbgfs_src_iio_buffer, len)) { + ret = ad3552r_hs_set_data_source(st, IIO_BACKEND_EXTERNAL); + if (ret) + return ret; + goto exit_ok; + } + + len = strlen(dbgfs_src_backend_ramp_gen); + if (count == len && !strncmp(buf, dbgfs_src_backend_ramp_gen, len)) { + ret = ad3552r_hs_set_data_source(st, + IIO_BACKEND_INTERNAL_RAMP_16BIT); + if (ret) + return ret; + goto exit_ok; + } + + return -EINVAL; + +exit_ok: + return count; +} + +static const struct file_operations ad3552r_hs_data_source_fops = { + .owner = THIS_MODULE, + .write = ad3552r_hs_write_data_source, + .read = ad3552r_hs_show_data_source, +}; + static int ad3552r_hs_setup(struct ad3552r_hs_state *st) { u16 id; @@ -550,11 +638,7 @@ static int ad3552r_hs_setup(struct ad3552r_hs_state *st) if (ret) return ret; - ret = iio_backend_data_source_set(st->back, 0, IIO_BACKEND_EXTERNAL); - if (ret) - return ret; - - ret = iio_backend_data_source_set(st->back, 1, IIO_BACKEND_EXTERNAL); + ret = ad3552r_hs_set_data_source(st, IIO_BACKEND_EXTERNAL); if (ret) return ret; @@ -661,6 +745,24 @@ static const struct iio_info ad3552r_hs_info = { .debugfs_reg_access = &ad3552r_hs_reg_access, }; +static void ad3552r_hs_debugfs_init(struct iio_dev *indio_dev) +{ + struct ad3552r_hs_state *st = iio_priv(indio_dev); + struct dentry *d = iio_get_debugfs_dentry(indio_dev); + + if (!IS_ENABLED(CONFIG_DEBUG_FS)) + return; + + d = iio_get_debugfs_dentry(indio_dev); + if (!d) { + dev_warn(st->dev, "can't set debugfs in driver dir\n"); + return; + } + + debugfs_create_file("data_source", 0600, d, st, + &ad3552r_hs_data_source_fops); +} + static int ad3552r_hs_probe(struct platform_device *pdev) { struct ad3552r_hs_state *st; @@ -705,7 +807,17 @@ static int ad3552r_hs_probe(struct platform_device *pdev) if (ret) return ret; - return devm_iio_device_register(&pdev->dev, indio_dev); + ret = devm_iio_device_register(&pdev->dev, indio_dev); + if (ret) + return ret; + + ret = devm_mutex_init(&pdev->dev, &st->lock); + if (ret) + return ret; + + ad3552r_hs_debugfs_init(indio_dev); + + return ret; } static const struct of_device_id ad3552r_hs_of_id[] = {