From patchwork Thu Jun 15 15:26:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Herve Codina X-Patchwork-Id: 693015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EF7A9EB64D9 for ; Thu, 15 Jun 2023 15:28:05 +0000 (UTC) Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id 31A1782B; Thu, 15 Jun 2023 17:27:13 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz 31A1782B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1686842883; bh=eIENmWPLFnkPpTqK4cVJA+HKstRFhVoUMD/Vmoy4Qqs=; h=From:To:Cc:Subject:Date:List-Id:List-Archive:List-Help:List-Owner: List-Post:List-Subscribe:List-Unsubscribe:From; b=P+w0lQZV3Fr386x29ZhFioZa8Ly/2bwyTpenLTxCDqO4tEjV8HzYWamArIhimq4HY DdCLV3BgmSLZVK5n/Qs6Q1eoh0xYHwJES2GGs/M6oatrYE8g2TtJoa/awmlCUuy5UX Dkl7nwNC43pWcxtGCBhN6NZ6OpxD7FtzHb4Ok5TA= Received: by alsa1.perex.cz (Postfix, from userid 50401) id 8E36EF80551; Thu, 15 Jun 2023 17:26:48 +0200 (CEST) Received: from mailman-core.alsa-project.org (mailman-core.alsa-project.org [10.254.200.10]) by alsa1.perex.cz (Postfix) with ESMTP id CB289F8025E; Thu, 15 Jun 2023 17:26:47 +0200 (CEST) Received: by alsa1.perex.cz (Postfix, from userid 50401) id 23C10F8025E; Thu, 15 Jun 2023 17:26:43 +0200 (CEST) Received: from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net [IPv6:2001:4b98:dc4:8::229]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id 3E827F80093 for ; Thu, 15 Jun 2023 17:26:37 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz 3E827F80093 Authentication-Results: alsa1.perex.cz; dkim=pass (2048-bit key, unprotected) header.d=bootlin.com header.i=@bootlin.com header.a=rsa-sha256 header.s=gm1 header.b=X0FBgTIY X-GND-Sasl: herve.codina@bootlin.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1686842796; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Qj/wtCssnzRsXRkB9p4GkLgzf97028hBJBtbNDRezNs=; b=X0FBgTIYugL0Vc1TehcH2BhyrN8O8GvBBwdypkOPD5UxR5EPe/j8fbbvxxn3P8EkUklLVS li50qhLXaQKfB1z6taeLxTR3d5BluZ4Fa4Hc8tRq9XoGdEsTRyVVGiRhPPBCNbg4WQ1HOY wtGi7cfK9eOXP7BKokKGs2OYUvGJr0yrPwO2z+aW0zMBXLhyvikLUTXHFMrMJ6DukKG6IM ReYwB3YJjZjaoenT66j3/SO88AbBSjinrIoEvBKkaHp+1HnKvgIrILBCvgbb7IsJNCY8b7 bE74esZdPOJ1ErIsLo+kaAm+iTix4O8szIbN7qUaUfSU6VU2MEXV+4Y1lssxGA== X-GND-Sasl: herve.codina@bootlin.com X-GND-Sasl: herve.codina@bootlin.com X-GND-Sasl: herve.codina@bootlin.com X-GND-Sasl: herve.codina@bootlin.com X-GND-Sasl: herve.codina@bootlin.com X-GND-Sasl: herve.codina@bootlin.com X-GND-Sasl: herve.codina@bootlin.com X-GND-Sasl: herve.codina@bootlin.com X-GND-Sasl: herve.codina@bootlin.com X-GND-Sasl: herve.codina@bootlin.com X-GND-Sasl: herve.codina@bootlin.com X-GND-Sasl: herve.codina@bootlin.com X-GND-Sasl: herve.codina@bootlin.com X-GND-Sasl: herve.codina@bootlin.com X-GND-Sasl: herve.codina@bootlin.com X-GND-Sasl: herve.codina@bootlin.com X-GND-Sasl: herve.codina@bootlin.com Received: by mail.gandi.net (Postfix) with ESMTPA id 9E598FF806; Thu, 15 Jun 2023 15:26:33 +0000 (UTC) From: Herve Codina To: Herve Codina , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jonathan Cameron , Lars-Peter Clausen , Jaroslav Kysela , Takashi Iwai , Kuninori Morimoto , Andy Shevchenko Cc: alsa-devel@alsa-project.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, Christophe Leroy , Thomas Petazzoni Subject: [PATCH v5 00/13] Add support for IIO devices in ASoC Date: Thu, 15 Jun 2023 17:26:18 +0200 Message-Id: <20230615152631.224529-1-herve.codina@bootlin.com> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 Message-ID-Hash: QFPR6OKRHJCNMCBP6FMJ4WRRXIAJDGG3 X-Message-ID-Hash: QFPR6OKRHJCNMCBP6FMJ4WRRXIAJDGG3 X-MailFrom: herve.codina@bootlin.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-alsa-devel.alsa-project.org-0; header-match-alsa-devel.alsa-project.org-1; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.8 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Several weeks ago, I sent a series [1] for adding a potentiometer as an auxiliary device in ASoC. The feedback was that the potentiometer should be directly handled in IIO (as other potentiometers) and something more generic should be present in ASoC in order to have a binding to import some IIO devices into sound cards. The series related to the IIO potentiometer device is already applied. This series introduces audio-iio-aux. Its goal is to offer the binding between IIO and ASoC. It exposes attached IIO devices as ASoC auxiliary devices and allows to control them through mixer controls. On my system, the IIO device is a potentiometer and it is present in an amplifier design present in the audio path. Compare to the previous iteration https://lore.kernel.org/linux-kernel/20230614074904.29085-1-herve.codina@bootlin.com/ This v5 series mainly: - Fixes {min,max}_array macros Best regards, Hervé [1] https://lore.kernel.org/linux-kernel/20230203111422.142479-1-herve.codina@bootlin.com/ [2] https://lore.kernel.org/linux-kernel/20230421085245.302169-1-herve.codina@bootlin.com/ Changes v4 -> v5 - Patches 1, 2, 3, 4, 5, 9, 10, 11, 12, 13 No changes. - Patch 6 Fix commit log. Add 'Reviewed-by: Andy Shevchenko ' - Patch 7 Fix the macros to be able to use them with: - an array defined as int *buff; - an array defined as int buff[N]; - Rework the way to "unconstify" the temporary variable to avoid issues due to integer promotion. Add 'Reviewed-by: Andy Shevchenko ' - Patch 8 Add 'Reviewed-by: Andy Shevchenko ' Changes v3 -> v4 - Patches 1, 2 No changes. - Patches 3, 4, 5 Add 'Reviewed-by: Andy Shevchenko '. - Patch 6 (new in v4) Fix headers inclusion order. - Patch 7 (patch 6 in v3) Add a comment related to __must_be_array() Use __array[0] of *__array - Patch 8 (patch 7 in v3) Fix minmax.h inclusion order. Add 'Reviewed-by: Andy Shevchenko '. - Patch 9 (patch 8 in v3) Add 'Suggested-by: Jonathan Cameron '. Add 'Reviewed-by: Andy Shevchenko '. - Patch 10 (patch 9 in v3) Add 'Reviewed-by: Andy Shevchenko '. - Patch 11 (patch 10 in v3) Fix a typo. Add 'Suggested-by: Andy Shevchenko '. Add 'Reviewed-by: Andy Shevchenko '. - Patch 12 (patch 11 in v3) Fix typos in the commit log. Fix headers inclusion order. Removed unneeded variable initialization. Replace {0} by {}. Use struct device *dev in probe(). Check an error on the snd-control-invert-range property read. - Patch 13 (patch12 in v3) No changes. Changes v2 -> v3 - Patches 1, 2 No changes. - Patch 3, 4 Add 'Acked-by: Jonathan Cameron '. - Patch 5 (new in v3) Removed the 'unused' variable and check the null pointer when used. - Patch 6 (new in v3) Introduce {min,max}_array(). - Patch 7 (new in v3) Use max_array() in iio_channel_read_max(). - Patch 8 (new in v3) Replace a FIXME comment by a TODO one. - Patch 9 (patch 5 in v2) Removed the 'unused' variable and check the null pointer when used. Use min_array(). Remplace a FIXME comment by a TODO one. - Patch 10 (patch 6 in v2) Convert existing macros to return a compound litteral instead of adding a new helper. - Patch 11 (patch 7 in v2) Remove the file name from the C file header. Use directly converted DAPM macros. Replace by . Add . Be sure that min <= max. Swap values if it is not the case. Move the bool structure member after the int ones. Remove unneeded assignements. Use dev_err_probe() when relevant. Use str_on_off(). Use static_assert() instead of BUILD_BUG_ON(). Remove unneeded comma and blank line. Use device_property_*() instead of the OF API. - patch 8 available in v2 removed as already applied - Patch 12 (patch 9 in v2) Use devm_add_action_or_reset(). Call simple_populate_aux() from simple_parse_of(). Changes v1 -> v2 - Patch 1 Rename simple-iio-aux to audio-iio-aux Rename invert to snd-control-invert-range Remove the /schemas/iio/iio-consumer.yaml reference Remove the unneeded '|' after description - Patch 2 (new in v2) Introduce the simple-audio-card additional-devs subnode - Patch 3 (new in v2) Check err before switch() in iio_channel_read_max() - Patch 4 (new in v2) Fix raw reads and raw writes documentation - Patch 5 (patch 2 in v1) Check err before switch() in iio_channel_read_min() Fix documentation - Patch 6 (path 3 in v1) No changes - Patch 7 (patch 4 in v1) Rename simple-iio-aux to audio-iio-aux Rename invert to snd-control-invert-range Remove the mask usage from audio_iio_aux_{get,put}_volsw helpers Use directly PTR_ERR() in dev_err_probe() parameter Remove the '!!' construction Remove of_match_ptr() - Patch 8 (new in v2) Add a missing of_node_put() in the simple-card driver - Patch 9 (new in v2) Handle additional-devs in the simple-card driver Herve Codina (13): ASoC: dt-bindings: Add audio-iio-aux ASoC: dt-bindings: simple-card: Add additional-devs subnode iio: inkern: Check error explicitly in iio_channel_read_max() iio: consumer.h: Fix raw values documentation notes iio: inkern: Remove the 'unused' variable usage in iio_channel_read_max() iio: inkern: Fix headers inclusion order minmax: Introduce {min,max}_array() iio: inkern: Use max_array() to get the maximum value from an array iio: inkern: Replace a FIXME comment by a TODO one iio: inkern: Add a helper to query an available minimum raw value ASoC: soc-dapm.h: Convert macros to return a compound literal ASoC: codecs: Add support for the generic IIO auxiliary devices ASoC: simple-card: Handle additional devices .../bindings/sound/audio-iio-aux.yaml | 64 ++++ .../bindings/sound/simple-card.yaml | 53 +++ drivers/iio/inkern.c | 86 ++++- include/linux/iio/consumer.h | 37 +- include/linux/minmax.h | 64 ++++ include/sound/soc-dapm.h | 138 ++++--- sound/soc/codecs/Kconfig | 12 + sound/soc/codecs/Makefile | 2 + sound/soc/codecs/audio-iio-aux.c | 338 ++++++++++++++++++ sound/soc/generic/simple-card.c | 46 ++- 10 files changed, 769 insertions(+), 71 deletions(-) create mode 100644 Documentation/devicetree/bindings/sound/audio-iio-aux.yaml create mode 100644 sound/soc/codecs/audio-iio-aux.c