From patchwork Wed Apr 5 14:01:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Frattaroli X-Patchwork-Id: 13201788 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2716FC77B60 for ; Wed, 5 Apr 2023 14:04:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238435AbjDEOEW (ORCPT ); Wed, 5 Apr 2023 10:04:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43726 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238287AbjDEODO (ORCPT ); Wed, 5 Apr 2023 10:03:14 -0400 Received: from mail-lj1-x230.google.com (mail-lj1-x230.google.com [IPv6:2a00:1450:4864:20::230]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AB1A7729A; Wed, 5 Apr 2023 07:01:37 -0700 (PDT) Received: by mail-lj1-x230.google.com with SMTP id a44so18758722ljr.10; Wed, 05 Apr 2023 07:01:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1680703292; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2kEpFJSLQ8LuijRNCE1GflXz6A3tNgKwJ9XWnGsb954=; b=HywO5JxM90BaXLZoJ5SdW/n8CKGwqjoFou8tbU3RPTvez7ntTaBhDGKin2tO1VL5Fz qk65aJHkMaY5g8xssLhCLpiD7t+VS3sXi9ai1OLU5jjU8HtfVLiaSR42UPTXRTB2sATt 9LAEevwZH0eDCCcUFKWN8ctibZjpLgaOPvqT8AwYIpq6ULgeviZ02ebGEKG0IX+k7DuB OqUOibuHBMQahXW0uwtyqJIhv/9EWiI/fEAr7Y5I912WLCflL2ICNjeMV7IYI0upi9S8 fDx7Hj9Iy/udXiUaGdZzYbeAEidcfrtdnUUmfv0ju8i8XM+tjYGP/d54TMqvc9t6tKnx VorQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680703292; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2kEpFJSLQ8LuijRNCE1GflXz6A3tNgKwJ9XWnGsb954=; b=vjvsu5drKFXsUOrYAySBNwRLASAJC/WK1XUpzLQqZV2wvH6301eBtxw4HejcmJ3AIl Yzg9YPqOBXzmX3vafo02nLmCY84WF6kfv/Ev/mp8gLYZhbqmx7mr9uRrynfFwTXVPhKX FWr4Wz77bftQPr2KSy7FsalDgCe1TXU7jxFnSC+2SYOZVkeMmdbNFT0+0MBDW32x19qj 3WiSZYhblpViSvjoNXI0my1Dk9pX/nzKnWEvNY2giOVBawzN7GFdXJZgJLXen2qfeRUc ItSNEF/M6RZlI22it3TVOFmDio8HZmaOCvbaU89FXOlHfgSfXGzyFvodRVwKJQWdnGVF 9Itg== X-Gm-Message-State: AAQBX9e5SuIuzRRGrNkC0E5KA7Crg4RX5yCxhcStFhIAXczwtSby4wPN g2fSixBeZ+xFTioi94ExfeQ= X-Google-Smtp-Source: AKy350aJvXnN1jyTntFpnUvVePZdTUkqffK34fvAXYEZlDTuP1r5VAHxnz07gxcQiSgHfGIUkeQnOw== X-Received: by 2002:a05:651c:22f:b0:299:ac49:46da with SMTP id z15-20020a05651c022f00b00299ac4946damr1787725ljn.42.1680703292092; Wed, 05 Apr 2023 07:01:32 -0700 (PDT) Received: from archbox.v.cablecom.net (84-72-105-84.dclient.hispeed.ch. [84.72.105.84]) by smtp.gmail.com with ESMTPSA id g6-20020a05600c4ec600b003edc4788fa0sm2412383wmq.2.2023.04.05.07.01.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Apr 2023 07:01:31 -0700 (PDT) From: Nicolas Frattaroli To: Jonathan Cameron , Lars-Peter Clausen , Rob Herring , Krzysztof Kozlowski , Michael Welling Cc: Nicolas Frattaroli , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/4] dt-bindings: iio: dac: mcp4922: add vdd-supply property Date: Wed, 5 Apr 2023 16:01:11 +0200 Message-Id: <20230405140114.99011-2-frattaroli.nicolas@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230405140114.99011-1-frattaroli.nicolas@gmail.com> References: <20230405140114.99011-1-frattaroli.nicolas@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org These chips have a vdd supply input, which should be modelled in the bindings as well. Vref is only the voltage reference supply for the string DAC. Signed-off-by: Nicolas Frattaroli Acked-by: Michael Welling --- .../devicetree/bindings/iio/dac/microchip,mcp4922.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Documentation/devicetree/bindings/iio/dac/microchip,mcp4922.yaml b/Documentation/devicetree/bindings/iio/dac/microchip,mcp4922.yaml index 19374401e509..a3e80e90eeca 100644 --- a/Documentation/devicetree/bindings/iio/dac/microchip,mcp4922.yaml +++ b/Documentation/devicetree/bindings/iio/dac/microchip,mcp4922.yaml @@ -21,11 +21,14 @@ properties: reg: maxItems: 1 + vdd-supply: true + vref-supply: true required: - compatible - reg + - vdd-supply - vref-supply allOf: @@ -42,6 +45,7 @@ examples: dac@0 { compatible = "microchip,mcp4912"; reg = <0>; + vdd-supply = <&dac_reg>; vref-supply = <&dac_vref>; }; }; From patchwork Wed Apr 5 14:01:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Frattaroli X-Patchwork-Id: 13201790 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7F6B1C77B6E for ; Wed, 5 Apr 2023 14:04:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238441AbjDEOEY (ORCPT ); Wed, 5 Apr 2023 10:04:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42536 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238335AbjDEODP (ORCPT ); Wed, 5 Apr 2023 10:03:15 -0400 Received: from mail-lf1-x135.google.com (mail-lf1-x135.google.com [IPv6:2a00:1450:4864:20::135]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ABAC972A9; Wed, 5 Apr 2023 07:01:37 -0700 (PDT) Received: by mail-lf1-x135.google.com with SMTP id k37so46824424lfv.0; Wed, 05 Apr 2023 07:01:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1680703294; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mPAHsCB+vewAndH85J11KGlhia9f1zZVc29B15eZm9c=; b=Hl1YkxX408ksxtgpJsoPqFtNm8AGaBNRHeN3oipVgw1Y8pQyQCXwT6fu07JcpbI++1 cqjO4MmRf8onmi7mrY1Ei/P4Js1zNR/7rh//Wo/fz3qi3nxquBQB1lbMmZvhZtDk7ay3 S8tXkZGsA8kvLTTTUlEEsedxTYLQDqPHDGT6s57lHRT25faJi02Uzih/jiwAsdBqGBI1 Be5hesX8uJGs6dHIuem7NT+9d2E+IooOG6S2+cSNP6dcioaLcQ1LTgkRSUAifTBGfn8d rxIplIalZduK0l4EU42SCtOo5uWlGED8mkCusPtzWbUsWHrklfen8F+1/iX0ZoTfhtKv yarQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680703294; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mPAHsCB+vewAndH85J11KGlhia9f1zZVc29B15eZm9c=; b=RdffTwzXaB17ToywZnThCUmz6ggzV8TXjliSAaitz43ligGnD9zz0QaWdeRvsiJVIL 9xcuVF93pgfOjRetlN2tfSGEOWr+1BwjJVt7SpuptO18lU7rIRb0am3ryhiM3NALn8ae xav8F0XfWEuTy74LG86KLvvcK1MfedRdwbM3zR3qj9meWqNAwFgHT9eN8TXfdKuTTGRF CJc3J+df1HGgJqVhNptt718zWWlVhvThKRIfzHX5Ilt93qAeoS64ggl8j3jdYKgP54Xs XwtduDSa08JAdlKF1dla7iMzsSjXKT6rK3tYeuY7/HI3XHaCyMeA19mLFh28NIki4GGu XrxA== X-Gm-Message-State: AAQBX9cyyQjctNeWzresa5488NLJ0yP6ybp6DypFhqzYr2jH10wRsEcq T5nxtschSYITMkK0FNVvkjM= X-Google-Smtp-Source: AKy350bQQ06vmL12FOZTrLwYg7QQ/v1odHrtFvuh7wHG38TJYkoenMhyuq7eXxESP94AlO6803AWMw== X-Received: by 2002:ac2:50c2:0:b0:4a9:39f4:579a with SMTP id h2-20020ac250c2000000b004a939f4579amr1594470lfm.66.1680703293093; Wed, 05 Apr 2023 07:01:33 -0700 (PDT) Received: from archbox.v.cablecom.net (84-72-105-84.dclient.hispeed.ch. [84.72.105.84]) by smtp.gmail.com with ESMTPSA id g6-20020a05600c4ec600b003edc4788fa0sm2412383wmq.2.2023.04.05.07.01.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Apr 2023 07:01:32 -0700 (PDT) From: Nicolas Frattaroli To: Jonathan Cameron , Lars-Peter Clausen Cc: Nicolas Frattaroli , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/4] iio: dac: mcp4922: get and enable vdd regulator Date: Wed, 5 Apr 2023 16:01:12 +0200 Message-Id: <20230405140114.99011-3-frattaroli.nicolas@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230405140114.99011-1-frattaroli.nicolas@gmail.com> References: <20230405140114.99011-1-frattaroli.nicolas@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org The MCP4922 family of chips has a vdd power input, which we model in our device tree binding for it. The driver should get and enable the vdd regulator as is appropriate. Signed-off-by: Nicolas Frattaroli --- drivers/iio/dac/mcp4922.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/drivers/iio/dac/mcp4922.c b/drivers/iio/dac/mcp4922.c index da4327624d45..0b9458cbbcff 100644 --- a/drivers/iio/dac/mcp4922.c +++ b/drivers/iio/dac/mcp4922.c @@ -31,6 +31,7 @@ struct mcp4922_state { unsigned int value[MCP4922_NUM_CHANNELS]; unsigned int vref_mv; struct regulator *vref_reg; + struct regulator *vdd_reg; u8 mosi[2] __aligned(IIO_DMA_MINALIGN); }; @@ -148,10 +149,23 @@ static int mcp4922_probe(struct spi_device *spi) if (ret < 0) { dev_err(&spi->dev, "Failed to read vref regulator: %d\n", ret); - goto error_disable_reg; + goto error_disable_vref_reg; } state->vref_mv = ret / 1000; + state->vdd_reg = devm_regulator_get(&spi->dev, "vdd"); + if (IS_ERR(state->vdd_reg)) { + ret = dev_err_probe(&spi->dev, PTR_ERR(state->vdd_reg), + "vdd regulator not specified\n"); + goto error_disable_vref_reg; + } + ret = regulator_enable(state->vdd_reg); + if (ret) { + dev_err(&spi->dev, "Failed to enable vdd regulator: %d\n", + ret); + goto error_disable_vref_reg; + } + spi_set_drvdata(spi, indio_dev); id = spi_get_device_id(spi); indio_dev->info = &mcp4922_info; @@ -167,12 +181,13 @@ static int mcp4922_probe(struct spi_device *spi) if (ret) { dev_err(&spi->dev, "Failed to register iio device: %d\n", ret); - goto error_disable_reg; + goto error_disable_vdd_reg; } return 0; - -error_disable_reg: +error_disable_vdd_reg: + regulator_disable(state->vdd_reg); +error_disable_vref_reg: regulator_disable(state->vref_reg); return ret; @@ -185,6 +200,7 @@ static void mcp4922_remove(struct spi_device *spi) iio_device_unregister(indio_dev); state = iio_priv(indio_dev); + regulator_disable(state->vdd_reg); regulator_disable(state->vref_reg); } From patchwork Wed Apr 5 14:01:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Frattaroli X-Patchwork-Id: 13201789 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 221FEC76188 for ; Wed, 5 Apr 2023 14:04:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238439AbjDEOEX (ORCPT ); Wed, 5 Apr 2023 10:04:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42534 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238330AbjDEODO (ORCPT ); Wed, 5 Apr 2023 10:03:14 -0400 Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 80BC372AB; Wed, 5 Apr 2023 07:01:38 -0700 (PDT) Received: by mail-wm1-x32c.google.com with SMTP id n10-20020a05600c4f8a00b003ee93d2c914so23473376wmq.2; Wed, 05 Apr 2023 07:01:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1680703294; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yJO4cU5jxcnurUOX6f4KDHqm+rWcV3FRe8BNYyMZhTs=; b=GZIpSKio8POp9yFYqcy4tTIeg6G75uXC1rI4ORepXnVW7XpXjwXzkb57sYVxYVXpMq Jbt9w4pHidyxTVQAo2V6U3cG5lU2mQCqoQ9H8yQ0oLfHLpU8o8DV3KIgREQZYyt8JNxY f957Sy1t8LJcEW4ZOI/y+UEu9dTVSmIuSl/kR2U5q0IdfxSFQRMYuCOxmKurAd2+IVWB 10i/3KGSrNcA2V2UP3PNTp0kp3atWyo5mfPee9+RSBQ4ZftdBAj0cvUY+flnPifhYiqF RcYiLCQifela1BYE5qH0EeY+ycaxYtay+YabFiUSeVOG/fsizaRHsG7pYiwfgEgexqgJ SOaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680703294; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yJO4cU5jxcnurUOX6f4KDHqm+rWcV3FRe8BNYyMZhTs=; b=TIgtqibIUf7y+3rtaOnrfSk+c/kVhmGeqKczAyoRCQ9k/mXlGK45K9mzLW/vgZ+iZG tOI+v6CtKEQNrKZwQOjNsc3QAFfwGxew7VtZx22WPZGRG+IY0vaLbofSRHmsrlWUafUU Ic3QvejoDYgDs30NNKXzxaN48UEICtsiLZ7BC2zVZEPVuGK449R95scQmaaWLKCp7Bhc wjDCRXSG1gUf9THoQpgLF2m+g/0T8kb4skSrBXT9nv6Hwgu5cGWYvc5TXF2o/1L4Upb/ NS6M1WKSSnb/736oDLOvLOX3LBNqs2A/Vr5wBYmKC7vusj/vcs6M4H/8hAxxNtXXEriU lNLw== X-Gm-Message-State: AAQBX9ckE644z6LioMC0IB5/No8ItjG1V2jazPfQKX+TLU4D5MT2wqAJ l1RykzokqnceaQn09gZhDeA= X-Google-Smtp-Source: AKy350aatKyrYZdlVWUDF0Q3KqS0G65RpWo8nbCYld43xcVdeJFQb3zoRkj/yKe0PMdV508v2AI4vQ== X-Received: by 2002:a7b:c416:0:b0:3ee:6d55:8b73 with SMTP id k22-20020a7bc416000000b003ee6d558b73mr4918297wmi.29.1680703294286; Wed, 05 Apr 2023 07:01:34 -0700 (PDT) Received: from archbox.v.cablecom.net (84-72-105-84.dclient.hispeed.ch. [84.72.105.84]) by smtp.gmail.com with ESMTPSA id g6-20020a05600c4ec600b003edc4788fa0sm2412383wmq.2.2023.04.05.07.01.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Apr 2023 07:01:33 -0700 (PDT) From: Nicolas Frattaroli To: Jonathan Cameron , Lars-Peter Clausen , Rob Herring , Krzysztof Kozlowski , Nicolas Frattaroli Cc: linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/4] dt-bindings: iio: dac: add mcp4822 Date: Wed, 5 Apr 2023 16:01:13 +0200 Message-Id: <20230405140114.99011-4-frattaroli.nicolas@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230405140114.99011-1-frattaroli.nicolas@gmail.com> References: <20230405140114.99011-1-frattaroli.nicolas@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org The MCP4801, MCP4802, MCP4811, MCP4812, MCP4821, and MCP4822 are SPI digital-to-analog converters by Microchip, which have an internal voltage reference, in contrast to the MCP49xx series of DACs which use an external voltage reference. Thus, these need a separate binding, as to not overcomplicate the mcp4922 binding. Signed-off-by: Nicolas Frattaroli --- .../bindings/iio/dac/microchip,mcp4822.yaml | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Documentation/devicetree/bindings/iio/dac/microchip,mcp4822.yaml diff --git a/Documentation/devicetree/bindings/iio/dac/microchip,mcp4822.yaml b/Documentation/devicetree/bindings/iio/dac/microchip,mcp4822.yaml new file mode 100644 index 000000000000..c6eaf0079add --- /dev/null +++ b/Documentation/devicetree/bindings/iio/dac/microchip,mcp4822.yaml @@ -0,0 +1,49 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/iio/dac/microchip,mcp4822.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Microchip MCP4801, MCP4802, MCP4811, MCP4812, MCP4821 and MCP4822 SPI DACs + +maintainers: + - Nicolas Frattaroli + +properties: + compatible: + enum: + - microchip,mcp4801 + - microchip,mcp4802 + - microchip,mcp4811 + - microchip,mcp4812 + - microchip,mcp4821 + - microchip,mcp4822 + + reg: + maxItems: 1 + + vdd-supply: true + +required: + - compatible + - reg + - vdd-supply + +allOf: + - $ref: /schemas/spi/spi-peripheral-props.yaml# + +unevaluatedProperties: false + +examples: + - | + spi { + #address-cells = <1>; + #size-cells = <0>; + + dac@0 { + compatible = "microchip,mcp4821"; + reg = <0>; + vdd-supply = <&dac_reg>; + }; + }; +... From patchwork Wed Apr 5 14:01:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Frattaroli X-Patchwork-Id: 13201791 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C2DFFC7619A for ; Wed, 5 Apr 2023 14:04:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238405AbjDEOE2 (ORCPT ); Wed, 5 Apr 2023 10:04:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42568 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238042AbjDEODU (ORCPT ); Wed, 5 Apr 2023 10:03:20 -0400 Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8E27272AE; Wed, 5 Apr 2023 07:01:38 -0700 (PDT) Received: by mail-wm1-x329.google.com with SMTP id hg25-20020a05600c539900b003f05a99a841so4118981wmb.3; Wed, 05 Apr 2023 07:01:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1680703295; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7CFv3XBpVecjFAWjZh9EMMv7oN85dxMWirjY5MCFhvU=; b=WVIqZzsxIOJEdoj0PJDwxV1df1OqJEQyAhxFdT6lPYDCYxgpW+2PpQqKiAnco4k4OS TWisiU6ATOa+TSuCXloWUBKgWPgQdEsDHIoFVaZ7DQn/dqywAMAKvkf3l5OvqldEC0Q4 FH9sst45KoVUNbnj4MFpySdgCurtB/AkNRg4yzvsXRFfQMOMasdZV+kxEyhXbKgY7wHd IdjbTzqfDCIvOgOvdEX4HOPZdu6BYONt7TV+sRzxvYJMXzJqBRfx2Tcqepz4MeVsMKIS OIjMsDkPmY8z+Shvmy2FOZmUE+EQiTy+Kg0DvWLsjZYIoa6O10eeJBEdMjoM+F6jP017 LLNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680703295; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7CFv3XBpVecjFAWjZh9EMMv7oN85dxMWirjY5MCFhvU=; b=lqSwgS9ZhTviV2puEAz748vTN7jhodzWyI//PT8uQHKOEHkMgzG0Xc1DZPt6NNIkhD FPJ0PTX9BwmFl2XbYDBEP0ETeYe2iPAeF+1DmirJmnY2SL4l0lc7MJF1C0ysqos9HGyK didlX9xbRPNar957EcFnIqnLjFI7HiO7e+lxgwFnYpjPQI0OjHpZt5dLCNxlB9q3slOO jnsHTAWukkOdwL5DukrMWNxqzVjIxVaApFcKy2erXxz/bvvbxBV2tfHobaI2roIbSs59 VXg2lTLfYpoZQLIfDT0oi2Z3RuF+mJQVL5DJA2gmyL0h5VM7HmKOhhF6oGzBqLt45i0u XsnQ== X-Gm-Message-State: AAQBX9etHo2Mvp0X9Sa51/W880yhMMLyI5QaiAMjHNuKI0ABoonQG/MK RN7+KWCD8IwVwgaAohSAdYnlP1ctLyc= X-Google-Smtp-Source: AKy350aoBKQ5WcUBLLoMcISoYoLTHapk0BsZwpRzrmDuR0H3qdk5yJysE/7kWUnWXtOucbAX7Mr+Aw== X-Received: by 2002:a1c:4c16:0:b0:3ee:1084:aa79 with SMTP id z22-20020a1c4c16000000b003ee1084aa79mr1724440wmf.20.1680703295301; Wed, 05 Apr 2023 07:01:35 -0700 (PDT) Received: from archbox.v.cablecom.net (84-72-105-84.dclient.hispeed.ch. [84.72.105.84]) by smtp.gmail.com with ESMTPSA id g6-20020a05600c4ec600b003edc4788fa0sm2412383wmq.2.2023.04.05.07.01.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Apr 2023 07:01:34 -0700 (PDT) From: Nicolas Frattaroli To: Jonathan Cameron , Lars-Peter Clausen Cc: Nicolas Frattaroli , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/4] iio: dac: mcp4922: add support for mcp48xx series chips Date: Wed, 5 Apr 2023 16:01:14 +0200 Message-Id: <20230405140114.99011-5-frattaroli.nicolas@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230405140114.99011-1-frattaroli.nicolas@gmail.com> References: <20230405140114.99011-1-frattaroli.nicolas@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org The MCP4801, MCP4802, MCP4811, MCP4812, MCP4821 and MCP4822 DACs are analogous to their MCP49XX counterparts, but contain an internal 2.048V voltage reference. Add support for them by refactoring the driver to allow for chips without a vref supply, and add the necessary device IDs. Signed-off-by: Nicolas Frattaroli --- drivers/iio/dac/mcp4922.c | 112 ++++++++++++++++++++++++++++---------- 1 file changed, 84 insertions(+), 28 deletions(-) diff --git a/drivers/iio/dac/mcp4922.c b/drivers/iio/dac/mcp4922.c index 0b9458cbbcff..56dcb90c8464 100644 --- a/drivers/iio/dac/mcp4922.c +++ b/drivers/iio/dac/mcp4922.c @@ -3,7 +3,8 @@ * mcp4922.c * * Driver for Microchip Digital to Analog Converters. - * Supports MCP4902, MCP4912, and MCP4922. + * Supports MCP4902, MCP4912, MCP4921, MCP4922, MCP4801, MCP4802, MCP4811, + * MCP4812, MCP4821, and MCP4822. * * Copyright (c) 2014 EMAC Inc. */ @@ -16,14 +17,21 @@ #include #include -#define MCP4922_NUM_CHANNELS 2 -#define MCP4921_NUM_CHANNELS 1 +#define MCP4922_NUM_CHANNELS 2 +#define MCP4921_NUM_CHANNELS 1 +#define MCP48XX_INTERNAL_VREF_MV 2048 enum mcp4922_supported_device_ids { ID_MCP4902, ID_MCP4912, ID_MCP4921, ID_MCP4922, + ID_MCP4801, + ID_MCP4802, + ID_MCP4811, + ID_MCP4812, + ID_MCP4821, + ID_MCP4822, }; struct mcp4922_state { @@ -50,6 +58,35 @@ struct mcp4922_state { }, \ } +static bool mcp4922_needs_vref(int device_id) +{ + switch (device_id) { + case ID_MCP4902: + case ID_MCP4912: + case ID_MCP4921: + case ID_MCP4922: + return true; + default: + return false; + } +} + +static int mcp4922_num_channels(int device_id) +{ + switch (device_id) { + case ID_MCP4902: + case ID_MCP4912: + case ID_MCP4922: + case ID_MCP4802: + case ID_MCP4812: + case ID_MCP4822: + return MCP4922_NUM_CHANNELS; + default: + return MCP4921_NUM_CHANNELS; + } + +} + static int mcp4922_spi_write(struct mcp4922_state *state, u8 addr, u32 val) { state->mosi[1] = val & 0xff; @@ -108,11 +145,17 @@ static int mcp4922_write_raw(struct iio_dev *indio_dev, } } -static const struct iio_chan_spec mcp4922_channels[4][MCP4922_NUM_CHANNELS] = { +static const struct iio_chan_spec mcp4922_channels[10][MCP4922_NUM_CHANNELS] = { [ID_MCP4902] = { MCP4922_CHAN(0, 8), MCP4922_CHAN(1, 8) }, [ID_MCP4912] = { MCP4922_CHAN(0, 10), MCP4922_CHAN(1, 10) }, [ID_MCP4921] = { MCP4922_CHAN(0, 12), {} }, [ID_MCP4922] = { MCP4922_CHAN(0, 12), MCP4922_CHAN(1, 12) }, + [ID_MCP4801] = { MCP4922_CHAN(0, 8), {} }, + [ID_MCP4802] = { MCP4922_CHAN(0, 8), MCP4922_CHAN(1, 8) }, + [ID_MCP4811] = { MCP4922_CHAN(0, 10), {} }, + [ID_MCP4812] = { MCP4922_CHAN(0, 10), MCP4922_CHAN(1, 10) }, + [ID_MCP4821] = { MCP4922_CHAN(0, 12), {} }, + [ID_MCP4822] = { MCP4922_CHAN(0, 12), MCP4922_CHAN(1, 12) }, }; static const struct iio_info mcp4922_info = { @@ -133,25 +176,31 @@ static int mcp4922_probe(struct spi_device *spi) state = iio_priv(indio_dev); state->spi = spi; - state->vref_reg = devm_regulator_get(&spi->dev, "vref"); - if (IS_ERR(state->vref_reg)) - return dev_err_probe(&spi->dev, PTR_ERR(state->vref_reg), - "Vref regulator not specified\n"); + id = spi_get_device_id(spi); + if (mcp4922_needs_vref(id->driver_data)) { + state->vref_reg = devm_regulator_get(&spi->dev, "vref"); + if (IS_ERR(state->vref_reg)) + return dev_err_probe(&spi->dev, PTR_ERR(state->vref_reg), + "Vref regulator not specified\n"); - ret = regulator_enable(state->vref_reg); - if (ret) { - dev_err(&spi->dev, "Failed to enable vref regulator: %d\n", - ret); - return ret; - } + ret = regulator_enable(state->vref_reg); + if (ret) { + dev_err(&spi->dev, "Failed to enable vref regulator: %d\n", + ret); + return ret; + } - ret = regulator_get_voltage(state->vref_reg); - if (ret < 0) { - dev_err(&spi->dev, "Failed to read vref regulator: %d\n", - ret); - goto error_disable_vref_reg; + ret = regulator_get_voltage(state->vref_reg); + if (ret < 0) { + dev_err(&spi->dev, "Failed to read vref regulator: %d\n", + ret); + goto error_disable_vref_reg; + } + state->vref_mv = ret / 1000; + } else { + state->vref_mv = MCP48XX_INTERNAL_VREF_MV; } - state->vref_mv = ret / 1000; + state->vdd_reg = devm_regulator_get(&spi->dev, "vdd"); if (IS_ERR(state->vdd_reg)) { @@ -167,14 +216,10 @@ static int mcp4922_probe(struct spi_device *spi) } spi_set_drvdata(spi, indio_dev); - id = spi_get_device_id(spi); indio_dev->info = &mcp4922_info; indio_dev->modes = INDIO_DIRECT_MODE; indio_dev->channels = mcp4922_channels[id->driver_data]; - if (id->driver_data == ID_MCP4921) - indio_dev->num_channels = MCP4921_NUM_CHANNELS; - else - indio_dev->num_channels = MCP4922_NUM_CHANNELS; + indio_dev->num_channels = mcp4922_num_channels(id->driver_data); indio_dev->name = id->name; ret = iio_device_register(indio_dev); @@ -188,7 +233,9 @@ static int mcp4922_probe(struct spi_device *spi) error_disable_vdd_reg: regulator_disable(state->vdd_reg); error_disable_vref_reg: - regulator_disable(state->vref_reg); + if (mcp4922_needs_vref(id->driver_data)) + regulator_disable(state->vref_reg); + return ret; } @@ -197,11 +244,14 @@ static void mcp4922_remove(struct spi_device *spi) { struct iio_dev *indio_dev = spi_get_drvdata(spi); struct mcp4922_state *state; + const struct spi_device_id *id = spi_get_device_id(spi); iio_device_unregister(indio_dev); state = iio_priv(indio_dev); regulator_disable(state->vdd_reg); - regulator_disable(state->vref_reg); + if (mcp4922_needs_vref(id->driver_data)) { + regulator_disable(state->vref_reg); + } } static const struct spi_device_id mcp4922_id[] = { @@ -209,6 +259,12 @@ static const struct spi_device_id mcp4922_id[] = { {"mcp4912", ID_MCP4912}, {"mcp4921", ID_MCP4921}, {"mcp4922", ID_MCP4922}, + {"mcp4801", ID_MCP4801}, + {"mcp4802", ID_MCP4802}, + {"mcp4811", ID_MCP4811}, + {"mcp4812", ID_MCP4812}, + {"mcp4821", ID_MCP4821}, + {"mcp4822", ID_MCP4822}, {} }; MODULE_DEVICE_TABLE(spi, mcp4922_id); @@ -224,5 +280,5 @@ static struct spi_driver mcp4922_driver = { module_spi_driver(mcp4922_driver); MODULE_AUTHOR("Michael Welling "); -MODULE_DESCRIPTION("Microchip MCP4902, MCP4912, MCP4922 DAC"); +MODULE_DESCRIPTION("Microchip MCP49XX and MCP48XX DAC"); MODULE_LICENSE("GPL v2");