From patchwork Mon Jan 15 13:30:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ceclan, Dumitru" X-Patchwork-Id: 13519636 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.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 600F8171A2; Mon, 15 Jan 2024 13:30:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZJXBERWn" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-3376d424a79so6747268f8f.1; Mon, 15 Jan 2024 05:30:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705325428; x=1705930228; darn=vger.kernel.org; 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=Eupg5ox+rYZJyukr/GeAxFlDga4wcn8HAieRx2GbhsQ=; b=ZJXBERWnQm/s2VJRCh0PDVlEEkiQ7msPJhnrYUzfC4RlLr79nR0zWJldQhyljIEEwO PPWDLBwdN5uQnZ9D1f8tgFSN//F5uVFczmLSUzA9bb2XOSxAMi7qcy+jEK+//bZOi8Pl UuY74quWuSp1yDGH0lxMU60vUGGsYmQ5zts2ZZoTbRFG/lFm3DHlQo6lLpV2lowSjpXi 11ilR3PGKpCmCA6C2iAJfGaz6KX3S4qtwomSDU9tK82SXGZAkP5Gv8hjxYfcYOTk1KBf 2TKUzYvLIhu1Ym1vvtcPl1QhUVzMSEHwRmnLNy+u/TSoalArdef2zXvNN9o0zQkDmCmr qWJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705325428; x=1705930228; 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=Eupg5ox+rYZJyukr/GeAxFlDga4wcn8HAieRx2GbhsQ=; b=kmTRmL0eSXk2YmIix2GuHPzvoE8SkGZ/7dUI/VN0uZ7QnLitVySsvk+PIwHWFk4gZa VN0xBLG0HSpWWHr77An4dYL26vCvLXT/8aJeryY8NjOE+6nYGGMcJebDJJEw3qXbAVvg ID189si0CdD3Q7h0BjFl3p57w4Wd13G+43CbbcBN9kuYuWc3FZvHSGhf08YPUI7TYZ8f +Nb1XgSoFplu00CvJl7NdiwGExrX1x3RqdQkbTFzYyijC/6SsakFm/l/nle5oyopcXTQ 1CsOdbBtmZtVI++osKJ61RXz0S1df1DNgS4QhTOpGoHXZ6yGA5O0tEcUaEzRzP3FhcQ/ Fa7Q== X-Gm-Message-State: AOJu0YwjHIzOCy67/EUbev3k6QOWzNLwksCCOqY5gVD162QvT91cx4vf 3ofh+33mp8evQs9FbVTC3oQ= X-Google-Smtp-Source: AGHT+IG1CZy93+shcO6ywzZ841ZwjggUltnDwmHvUMtbSfFmqYLRLdazEM8RtByIuPaq1HLlPHzG5g== X-Received: by 2002:adf:fa0e:0:b0:336:7794:4b9a with SMTP id m14-20020adffa0e000000b0033677944b9amr2991392wrr.33.1705325428223; Mon, 15 Jan 2024 05:30:28 -0800 (PST) Received: from HYB-hhAwRlzzMZb.ad.analog.com ([5.2.194.157]) by smtp.gmail.com with ESMTPSA id i6-20020adfb646000000b003378d89737fsm11566669wre.46.2024.01.15.05.30.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jan 2024 05:30:27 -0800 (PST) From: Dumitru Ceclan To: Cc: Lars-Peter Clausen , Jonathan Cameron , Rob Herring , Krzysztof Kozlowski , Conor Dooley , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Ceclan Dumitru , Dumitru Ceclan , Conor Dooley Subject: [PATCH v3 1/5] dt-bindings: iio: hmc425a: add conditional GPIO array size constraints Date: Mon, 15 Jan 2024 15:30:14 +0200 Message-ID: <20240115133023.3465-2-mitrutzceclan@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240115133023.3465-1-mitrutzceclan@gmail.com> References: <20240115133023.3465-1-mitrutzceclan@gmail.com> Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 ADRF5740 and HMC540S have a 4 bit parallel interface. Update ctr-gpios description and min/maxItems values depending on the matched compatible to correctly reflect the hardware properties. Fixes: 79f2ff6461e7 ("dt-bindings: iio: hmc425a: add entry for ADRF5740 Attenuator") Fixes: 20f87a9a26be ("dt-bindings: iio: hmc425a: add entry for HMC540S") Acked-by: Conor Dooley Signed-off-by: Dumitru Ceclan --- .../bindings/iio/amplifiers/adi,hmc425a.yaml | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/iio/amplifiers/adi,hmc425a.yaml b/Documentation/devicetree/bindings/iio/amplifiers/adi,hmc425a.yaml index 67de9d4e3a1d..a434cb8ddcc9 100644 --- a/Documentation/devicetree/bindings/iio/amplifiers/adi,hmc425a.yaml +++ b/Documentation/devicetree/bindings/iio/amplifiers/adi,hmc425a.yaml @@ -33,11 +33,38 @@ properties: ctrl-gpios: description: - Must contain an array of 6 GPIO specifiers, referring to the GPIO pins - connected to the control pins V1-V6. - minItems: 6 + Must contain an array of GPIO specifiers, referring to the GPIO pins + connected to the control pins. + ADRF5740 - 4 GPIO connected to D2-D5 + HMC540S - 4 GPIO connected to V1-V4 + HMC425A - 6 GPIO connected to V1-V6 + minItems: 1 maxItems: 6 +allOf: + - if: + properties: + compatible: + contains: + const: adi,hmc425a + then: + properties: + ctrl-gpios: + minItems: 6 + maxItems: 6 + - if: + properties: + compatible: + contains: + anyOf: + - const: adi,adrf5740 + - const: adi,hmc540s + then: + properties: + ctrl-gpios: + minItems: 4 + maxItems: 4 + required: - compatible - ctrl-gpios From patchwork Mon Jan 15 13:30:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ceclan, Dumitru" X-Patchwork-Id: 13519637 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.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 32666171D2; Mon, 15 Jan 2024 13:30:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IOHv4n8H" Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-33761e291c1so4959096f8f.0; Mon, 15 Jan 2024 05:30:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705325429; x=1705930229; darn=vger.kernel.org; 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=3IfByO+2rIcCGnCKsv3npkbJVqHFL3ale3i7+O8UKFk=; b=IOHv4n8HB5d+9DkcD57JE0E15ym14GRk2wpxrRxH3n9eZ2QZdRZQcDIoaLyQKnqxtI Z/ah5tlMM1yARYJNX+RIYvM37FATjkVO2MvNpoX6pjIVmJu+HiESvxNv5qiPZbL+iHO5 yBj07UjSv4kJXfwZsjTYZ7sO5wESOPavFSEj7p9K+5U6e82CesWMhM/yLp5V59lh28E/ aJnqbC8LwFAwmgKXrkAa+dsGeJvLq25RwsNAqULrjmeRCvR6aZLK2Poj/elUTg+iaqiP Ef0hHLseNgqHT/h5BebjhbouBrS97MnkZzHk4JLNal6CsnVOsllQ+RCCH1QRoPMYucf0 mXWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705325429; x=1705930229; 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=3IfByO+2rIcCGnCKsv3npkbJVqHFL3ale3i7+O8UKFk=; b=I7U3xCSWuLVVZUrxZr5d6LY+GUMvt+k+Jzn0lS4ztMTXxS0jshFXs6mu/CzbFqOh7n DeUs6J/7rANji1rul8YLOAYLmVbhQgqGD72HQP2C2PVvdqyfbO4F4/vu44ZQg2fORCUr phFzks9aJSsZYCiUyEZsCuARCmhT4Ib7r07ipCaNJ6cpz/ytTV4F9SVPDHY305lKuUTA LKpkLrBdvNebHaClSg5YEeQQh6EP96g9wrzC7h/a3UABa1zrwG+u/BrV2tdkbhq1EyvF Ua/13/cnI8W7SG2vGLMrkDLd9f2hSnJTsDurI7BxXU73hfcUdIGKNNFarp4KMGIo4g49 4Elg== X-Gm-Message-State: AOJu0YyiYuwixy9KQF/ge7eX35Adans+MTjbMQrtRsNbzuFK3DttBQjH 9IP57PhSPaWxdBG0sIjYypA= X-Google-Smtp-Source: AGHT+IHEOhdLprHLpE5Vb4yblwxY+uJsyFQqz7PpnPrXQPXIZPBLdES3DKWdIc0aU5NF2vX2WGnBJg== X-Received: by 2002:a05:6000:14d:b0:337:a0ae:13a6 with SMTP id r13-20020a056000014d00b00337a0ae13a6mr1455472wrx.64.1705325429489; Mon, 15 Jan 2024 05:30:29 -0800 (PST) Received: from HYB-hhAwRlzzMZb.ad.analog.com ([5.2.194.157]) by smtp.gmail.com with ESMTPSA id i6-20020adfb646000000b003378d89737fsm11566669wre.46.2024.01.15.05.30.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jan 2024 05:30:29 -0800 (PST) From: Dumitru Ceclan To: Cc: Lars-Peter Clausen , Jonathan Cameron , Rob Herring , Krzysztof Kozlowski , Conor Dooley , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Ceclan Dumitru , Dumitru Ceclan , Conor Dooley Subject: [PATCH v3 2/5] dt-bindings: iio: hmc425a: add entry for LTC6373 Date: Mon, 15 Jan 2024 15:30:15 +0200 Message-ID: <20240115133023.3465-3-mitrutzceclan@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240115133023.3465-1-mitrutzceclan@gmail.com> References: <20240115133023.3465-1-mitrutzceclan@gmail.com> Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The LTC6373 is a silicon, 3-bit Fully-Differential digital instrumentation amplifier that supports the following programmable gains (Vout/Vin): G = 0.25, 0.5, 1, 2, 4, 8, 16 + Shutdown. Acked-by: Conor Dooley Signed-off-by: Dumitru Ceclan --- .../bindings/iio/amplifiers/adi,hmc425a.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Documentation/devicetree/bindings/iio/amplifiers/adi,hmc425a.yaml b/Documentation/devicetree/bindings/iio/amplifiers/adi,hmc425a.yaml index a434cb8ddcc9..3a470459b965 100644 --- a/Documentation/devicetree/bindings/iio/amplifiers/adi,hmc425a.yaml +++ b/Documentation/devicetree/bindings/iio/amplifiers/adi,hmc425a.yaml @@ -21,6 +21,8 @@ description: | HMC540S 1 dB LSB Silicon MMIC 4-Bit Digital Positive Control Attenuator, 0.1 - 8 GHz https://www.analog.com/media/en/technical-documentation/data-sheets/hmc540s.pdf + LTC6373 is a 3-Bit precision instrumentation amplifier with fully differential outputs + https://www.analog.com/media/en/technical-documentation/data-sheets/ltc6373.pdf properties: compatible: @@ -28,6 +30,7 @@ properties: - adi,adrf5740 - adi,hmc425a - adi,hmc540s + - adi,ltc6373 vcc-supply: true @@ -38,6 +41,7 @@ properties: ADRF5740 - 4 GPIO connected to D2-D5 HMC540S - 4 GPIO connected to V1-V4 HMC425A - 6 GPIO connected to V1-V6 + LTC6373 - 3 GPIO connected to A0-A2 minItems: 1 maxItems: 6 @@ -64,6 +68,16 @@ allOf: ctrl-gpios: minItems: 4 maxItems: 4 + - if: + properties: + compatible: + contains: + const: adi,ltc6373 + then: + properties: + ctrl-gpios: + minItems: 3 + maxItems: 3 required: - compatible From patchwork Mon Jan 15 13:30:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ceclan, Dumitru" X-Patchwork-Id: 13519638 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.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 8082F17561; Mon, 15 Jan 2024 13:30:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Z6C+UUEe" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-3368b1e056eso7262038f8f.3; Mon, 15 Jan 2024 05:30:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705325431; x=1705930231; darn=vger.kernel.org; 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=L5ZLiXR5kdUypmrHIYtLlSib8TGB/r6oX4cgy4GCPvM=; b=Z6C+UUEenpB5+rWjiFwTmNWq9kCaF/7wc+2YasaKz7Trsy4JWNgw+lv/TJ56XtjzgB WZgsLIhYK9yg9JfZGoGYZWTVDTXgD0EF6/Hq2cQDauEuMZi9xMP/h+RcS+haIL5sZp7o bxqcQN8WmrihT0/QtCtbRYcDOEyPQJOUe9ouUr+JB6XDhwip4nPpZaQgUb0G7sjpHP7k /3BcfxWM4u6Z9U8tyR2nsV69/3nuRDNCRHYMXDr4fC0DSxxpMlNRkba0eIhk4rQmWZyg fH1dZ1CNj6+9CuDVUtjhpJYpEamotI0A9XLprSLAJlOWojEWCfZoXDbaIh7QSeDlRTjQ iTlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705325431; x=1705930231; 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=L5ZLiXR5kdUypmrHIYtLlSib8TGB/r6oX4cgy4GCPvM=; b=MWW2dAzGF9GSy8Vw7B3NkGWS4KgrwkbMV3XGdHZTUVAWsaG7Y6ot2cXZi3fT3ht06K Mjt0eC9VHRK4f2J6RL0vcsBCQeamgnolgKltH8x68Fv7zjk8IRrfX+ceGOgxgGMLU2GF OierY55y+mBFJm3vDR3uyRkK23fdlTaEcxjo/o4w9jshIs1xLhfyAAY7J8tEOocJ2Tpt 0YLfl6697KhKl7EpcX0gjLGbOZSkdqByaSwaupdRvhbCJuukfbdSwN06Mj5rrHvn/VSO 3AHduK7BVfNf/m9TUlj8r5ySlTgr1VyQ1DfSofBKc1y9B8iZnIiQ6mzACl2Dr1EkPuCi Gc5Q== X-Gm-Message-State: AOJu0YwnBB3g0DyKBLWF0E401B7mZEecP8sfBCqwx3h7y3Lcw7g0hcLn cmZljB7iLReDCrUxXiCFtNo= X-Google-Smtp-Source: AGHT+IEgeuLFnWbC+uyW/D/cvny4NZ3iIkKdFiN+k1H21ZKEbeQ8MT8C6jaSZqa6FG0M3By1LLHlJA== X-Received: by 2002:a5d:6588:0:b0:337:358d:4b5e with SMTP id q8-20020a5d6588000000b00337358d4b5emr3077432wru.73.1705325430766; Mon, 15 Jan 2024 05:30:30 -0800 (PST) Received: from HYB-hhAwRlzzMZb.ad.analog.com ([5.2.194.157]) by smtp.gmail.com with ESMTPSA id i6-20020adfb646000000b003378d89737fsm11566669wre.46.2024.01.15.05.30.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jan 2024 05:30:30 -0800 (PST) From: Dumitru Ceclan To: Cc: Lars-Peter Clausen , Jonathan Cameron , Rob Herring , Krzysztof Kozlowski , Conor Dooley , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Ceclan Dumitru , Dumitru Ceclan Subject: [PATCH v3 3/5] iio: amplifiers: hmc425a: move conversion logic Date: Mon, 15 Jan 2024 15:30:16 +0200 Message-ID: <20240115133023.3465-4-mitrutzceclan@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240115133023.3465-1-mitrutzceclan@gmail.com> References: <20240115133023.3465-1-mitrutzceclan@gmail.com> Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Move gain-dB<->code conversion logic from read_raw and write_raw to hmc425a_gain_dB_to_code() and hmc425a_code_to_gain_dB(). Signed-off-by: Dumitru Ceclan --- drivers/iio/amplifiers/hmc425a.c | 102 ++++++++++++++++++------------- 1 file changed, 59 insertions(+), 43 deletions(-) diff --git a/drivers/iio/amplifiers/hmc425a.c b/drivers/iio/amplifiers/hmc425a.c index ed4d72922696..e1162a500daf 100644 --- a/drivers/iio/amplifiers/hmc425a.c +++ b/drivers/iio/amplifiers/hmc425a.c @@ -56,35 +56,72 @@ static int hmc425a_write(struct iio_dev *indio_dev, u32 value) return 0; } +static int hmc425a_gain_dB_to_code(struct hmc425a_state *st, int val, int val2, int *code) +{ + struct hmc425a_chip_info *inf = st->chip_info; + int gain, temp; + + if (val < 0) + gain = (val * 1000) - (val2 / 1000); + else + gain = (val * 1000) + (val2 / 1000); + + if (gain > inf->gain_max || gain < inf->gain_min) + return -EINVAL; + + switch (st->type) { + case ID_HMC425A: + *code = ~((abs(gain) / 500) & 0x3F); + return 0; + case ID_HMC540S: + *code = ~((abs(gain) / 1000) & 0xF); + return 0; + case ID_ADRF5740: + temp = (abs(gain) / 2000) & 0xF; + *code = temp & BIT(3) ? temp | BIT(2) : temp; + return 0; + default: + return -EINVAL; + } +} + +static int hmc425a_code_to_gain_dB(struct hmc425a_state *st, int *val, int *val2) +{ + int code, gain; + + code = st->gain; + switch (st->type) { + case ID_HMC425A: + gain = ~code * -500; + break; + case ID_HMC540S: + gain = ~code * -1000; + break; + case ID_ADRF5740: + code = code & BIT(3) ? code & ~BIT(2) : code; + gain = code * -2000; + break; + } + + *val = gain / 1000; + *val2 = (gain % 1000) * 1000; + + return 0; +} + static int hmc425a_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long m) { struct hmc425a_state *st = iio_priv(indio_dev); - int code, gain = 0; int ret; mutex_lock(&st->lock); switch (m) { case IIO_CHAN_INFO_HARDWAREGAIN: - code = st->gain; - - switch (st->type) { - case ID_HMC425A: - gain = ~code * -500; - break; - case ID_HMC540S: - gain = ~code * -1000; + ret = hmc425a_code_to_gain_dB(st, val, val2); + if (ret) break; - case ID_ADRF5740: - code = code & BIT(3) ? code & ~BIT(2) : code; - gain = code * -2000; - break; - } - - *val = gain / 1000; - *val2 = (gain % 1000) * 1000; - ret = IIO_VAL_INT_PLUS_MICRO_DB; break; default: @@ -100,36 +137,15 @@ static int hmc425a_write_raw(struct iio_dev *indio_dev, int val2, long mask) { struct hmc425a_state *st = iio_priv(indio_dev); - struct hmc425a_chip_info *inf = st->chip_info; - int code = 0, gain; - int ret; - - if (val < 0) - gain = (val * 1000) - (val2 / 1000); - else - gain = (val * 1000) + (val2 / 1000); - - if (gain > inf->gain_max || gain < inf->gain_min) - return -EINVAL; - - switch (st->type) { - case ID_HMC425A: - code = ~((abs(gain) / 500) & 0x3F); - break; - case ID_HMC540S: - code = ~((abs(gain) / 1000) & 0xF); - break; - case ID_ADRF5740: - code = (abs(gain) / 2000) & 0xF; - code = code & BIT(3) ? code | BIT(2) : code; - break; - } + int code = 0, ret; mutex_lock(&st->lock); switch (mask) { case IIO_CHAN_INFO_HARDWAREGAIN: + ret = hmc425a_gain_dB_to_code(st, val, val2, &code); + if (ret) + break; st->gain = code; - ret = hmc425a_write(indio_dev, st->gain); break; default: From patchwork Mon Jan 15 13:30:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ceclan, Dumitru" X-Patchwork-Id: 13519639 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) (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 E696917595; Mon, 15 Jan 2024 13:30:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DINk+XaA" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-336755f1688so7715492f8f.0; Mon, 15 Jan 2024 05:30:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705325432; x=1705930232; darn=vger.kernel.org; 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=Dxr/9CTeqKC0kqg27NYuTzJNXMtNwRstnFwO4ZakeEs=; b=DINk+XaAC0YkTXYphTCCaUuyXYpCEdvhWgzcQxnM1TNpQqnYHeBvNDwSpzzYpolUrm vJhr4EXQcXinD8JFnPcXYSA6OtfOD0EBJe0F7yLPHbaqwVWnyPihbNTobSpjMHW01HoP r7+wxb+EXPxzhYCIxNmJ+B2zoQG3914no+oD1z9BOTTLRTk6V7LkE9v/cvkSXHvfH8VV nGbgs85w2uRxVgHVOFbcRvlLHfiwem2Bw5Onsptk7BwAzFmyqeGbeKYQXWxpOFxOfRCO h/QRsCd3skjr744Kc0x55nvnvQRuBqs8I8SXRfU/xUzAm8WGWuXReMslf/W02TUE+8C0 64bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705325432; x=1705930232; 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=Dxr/9CTeqKC0kqg27NYuTzJNXMtNwRstnFwO4ZakeEs=; b=mhSCVXNqHctRf2FpjmQVSesUD0i6njmYKkBm0EeAIIl53HtwrtXblcs5Z9T6KkzvCb GYB9xhtWLlJuWM/xLojL4LkGdUBzlUQ21qfZJGxcKubemy7dl1PDbRUqZoFClZ6r/Fht qxxJ0CGYJhYXGdj/NcwNHqLyvO1pSGJ2IfAdF2PYvB5lGYKbQqBldRHyTPqjF7Mxk988 MpueoRSzR1kF6gtMIMoP1nby6ILr/lvOwwxfWakpVQD3Xe3dtCWfqFTTW/P/aE2PU7B0 ihp3m9IvVm/lVCtieQEvwwxBryyffIdu4nVpGqHTPIxjpsr75BP9tAP3QeXvvgFWnq/o nePQ== X-Gm-Message-State: AOJu0Ywq9m4hI+Ms8cgApGYisuFzPpDO0CqIea+g3Jb3nsGXaYm7j4va ra2RQ4IIc6sTBy9jtgD9jWAJfXrIudrDHw== X-Google-Smtp-Source: AGHT+IH/EZAEeTFjH06wk8VEpI09QETA0Ol6ZYzWJDcNIKniZtz1yKk6/GcUmvtQBIhb7Qr8ANSaNw== X-Received: by 2002:a5d:4988:0:b0:336:6dba:e092 with SMTP id r8-20020a5d4988000000b003366dbae092mr3085634wrq.3.1705325432034; Mon, 15 Jan 2024 05:30:32 -0800 (PST) Received: from HYB-hhAwRlzzMZb.ad.analog.com ([5.2.194.157]) by smtp.gmail.com with ESMTPSA id i6-20020adfb646000000b003378d89737fsm11566669wre.46.2024.01.15.05.30.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jan 2024 05:30:31 -0800 (PST) From: Dumitru Ceclan To: Cc: Lars-Peter Clausen , Jonathan Cameron , Rob Herring , Krzysztof Kozlowski , Conor Dooley , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Ceclan Dumitru , Dumitru Ceclan Subject: [PATCH v3 4/5] iio: amplifiers: hmc425a: use pointers in match table Date: Mon, 15 Jan 2024 15:30:17 +0200 Message-ID: <20240115133023.3465-5-mitrutzceclan@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240115133023.3465-1-mitrutzceclan@gmail.com> References: <20240115133023.3465-1-mitrutzceclan@gmail.com> Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Change the match table to use pointers instead of device ids. Alignment of the hmc425a_state was changed because of the const specifier for hmc425a_chip_info. Signed-off-by: Dumitru Ceclan --- drivers/iio/amplifiers/hmc425a.c | 39 ++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/drivers/iio/amplifiers/hmc425a.c b/drivers/iio/amplifiers/hmc425a.c index e1162a500daf..b116b54e4206 100644 --- a/drivers/iio/amplifiers/hmc425a.c +++ b/drivers/iio/amplifiers/hmc425a.c @@ -37,11 +37,11 @@ struct hmc425a_chip_info { }; struct hmc425a_state { - struct mutex lock; /* protect sensor state */ - struct hmc425a_chip_info *chip_info; - struct gpio_descs *gpios; - enum hmc425a_type type; - u32 gain; + struct mutex lock; /* protect sensor state */ + const struct hmc425a_chip_info *chip_info; + struct gpio_descs *gpios; + enum hmc425a_type type; + u32 gain; }; static int hmc425a_write(struct iio_dev *indio_dev, u32 value) @@ -58,7 +58,7 @@ static int hmc425a_write(struct iio_dev *indio_dev, u32 value) static int hmc425a_gain_dB_to_code(struct hmc425a_state *st, int val, int val2, int *code) { - struct hmc425a_chip_info *inf = st->chip_info; + const struct hmc425a_chip_info *inf = st->chip_info; int gain, temp; if (val < 0) @@ -187,15 +187,6 @@ static const struct iio_chan_spec hmc425a_channels[] = { HMC425A_CHAN(0), }; -/* Match table for of_platform binding */ -static const struct of_device_id hmc425a_of_match[] = { - { .compatible = "adi,hmc425a", .data = (void *)ID_HMC425A }, - { .compatible = "adi,hmc540s", .data = (void *)ID_HMC540S }, - { .compatible = "adi,adrf5740", .data = (void *)ID_ADRF5740 }, - {}, -}; -MODULE_DEVICE_TABLE(of, hmc425a_of_match); - static struct hmc425a_chip_info hmc425a_chip_info_tbl[] = { [ID_HMC425A] = { .name = "hmc425a", @@ -226,6 +217,18 @@ static struct hmc425a_chip_info hmc425a_chip_info_tbl[] = { }, }; +/* Match table for of_platform binding */ +static const struct of_device_id hmc425a_of_match[] = { + { .compatible = "adi,hmc425a", + .data = &hmc425a_chip_info_tbl[ID_HMC425A]}, + { .compatible = "adi,hmc540s", + .data = &hmc425a_chip_info_tbl[ID_HMC540S]}, + { .compatible = "adi,adrf5740", + .data = &hmc425a_chip_info_tbl[ID_ADRF5740]}, + {}, +}; +MODULE_DEVICE_TABLE(of, hmc425a_of_match); + static int hmc425a_probe(struct platform_device *pdev) { struct iio_dev *indio_dev; @@ -237,14 +240,16 @@ static int hmc425a_probe(struct platform_device *pdev) return -ENOMEM; st = iio_priv(indio_dev); - st->type = (uintptr_t)device_get_match_data(&pdev->dev); - st->chip_info = &hmc425a_chip_info_tbl[st->type]; + st->chip_info = device_get_match_data(&pdev->dev); indio_dev->num_channels = st->chip_info->num_channels; indio_dev->channels = st->chip_info->channels; indio_dev->name = st->chip_info->name; st->gain = st->chip_info->default_gain; + /* Compute index of the acquired chip info in the array */ + st->type = st->chip_info - hmc425a_chip_info_tbl; + st->gpios = devm_gpiod_get_array(&pdev->dev, "ctrl", GPIOD_OUT_LOW); if (IS_ERR(st->gpios)) return dev_err_probe(&pdev->dev, PTR_ERR(st->gpios), From patchwork Mon Jan 15 13:30:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ceclan, Dumitru" X-Patchwork-Id: 13519640 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.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 4CC8717730; Mon, 15 Jan 2024 13:30:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ENtOzrfy" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-3374e332124so6819336f8f.2; Mon, 15 Jan 2024 05:30:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705325433; x=1705930233; darn=vger.kernel.org; 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=X/bvLckPY/B6iV2JgYPRYCAJR1OfXTgLpwfT8b63pic=; b=ENtOzrfywkvLbWgiDWHS92OIaL0HkuNyfDaaopypitTW8h3QaLhIgJDQh+u7LlhFKx NyoiDjD0u/SrzPdyYzz7T/5Z/NPt+9dTRyUFF0s/vhb/Vcr8kfmD0iWhNYbFjCnJe58A KgpTx61SO9o0E7HY69uJ2i4py5vW3jDEG5Z/WVUKNqQcvSNooAxoslGJiAqZq46LOFmN YvotVML8ugYgWTzprMzbDOfrtwcD3wN4X26iD6zt0OQ45UwAxJ/UvFh4+E/19V6T6zIO F9TLNlNyRKDosLIhGuglOijAi/K186IRfdl9gabSeYB72UZIDVekfd1DDNHpJSELP6oz DYEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705325433; x=1705930233; 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=X/bvLckPY/B6iV2JgYPRYCAJR1OfXTgLpwfT8b63pic=; b=K+CV97juU2amF3hTQYS0PHi9c/AnVGjZ6no9ISy5i1MAziTe4GfRpYLjnqBxlfWDl2 31qkGKtvHyOGD8Ofz0iCqcFGfsFkC9XCP7rWPTdIR+Rb+5BiO7pBpIZ9hzKft5KSaZqJ Yyrt8D/glHH/zWFfYzgcRBTvxGAP9z26qsooybyNakZZuBf+BImb9jVB+EAbH3lWoX4x 1kcjnkDOXrr2jdKvtcTg1U+A1iI/lYXSr0Q4WGuDtBLwlr5JT+CXr1pjSApIuHs7ZtBP pAp9Ddoo1fq1FHRSn3yHzTxhRvJ3rqlpKmddO7MSo8l7mMr6FFS2mfUlBx6EhhHtjUOp ZfXg== X-Gm-Message-State: AOJu0YxKNh2/I47SkGX4cntoBbRy/vHCFuRn9xMtEGuORIrbJxiPLmA3 T0N442WfDEL4CshsclglSmQ= X-Google-Smtp-Source: AGHT+IHBXFH3RZdizV3rZJEiIWZwdnffql2oJLxIccgMf52HlqJzf7FpKA5OFQo9QsKGmV1iCm/B0A== X-Received: by 2002:a5d:4ccf:0:b0:336:68dd:c7e2 with SMTP id c15-20020a5d4ccf000000b0033668ddc7e2mr3097613wrt.27.1705325433173; Mon, 15 Jan 2024 05:30:33 -0800 (PST) Received: from HYB-hhAwRlzzMZb.ad.analog.com ([5.2.194.157]) by smtp.gmail.com with ESMTPSA id i6-20020adfb646000000b003378d89737fsm11566669wre.46.2024.01.15.05.30.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jan 2024 05:30:32 -0800 (PST) From: Dumitru Ceclan To: Cc: Lars-Peter Clausen , Jonathan Cameron , Rob Herring , Krzysztof Kozlowski , Conor Dooley , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Ceclan Dumitru , Dumitru Ceclan Subject: [PATCH v3 5/5] iio: amplifiers: hmc425a: add support for LTC6373 Instrumentation Amplifier Date: Mon, 15 Jan 2024 15:30:18 +0200 Message-ID: <20240115133023.3465-6-mitrutzceclan@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240115133023.3465-1-mitrutzceclan@gmail.com> References: <20240115133023.3465-1-mitrutzceclan@gmail.com> Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This adds support for LTC6373 36 V Fully-Differential Programmable-Gain Instrumentation Amplifier with 25 pA Input Bias Current. The user can program the gain to one of seven available settings through a 3-bit parallel interface (A2 to A0). Signed-off-by: Dumitru Ceclan --- drivers/iio/amplifiers/hmc425a.c | 118 +++++++++++++++++++++++++++++-- 1 file changed, 114 insertions(+), 4 deletions(-) diff --git a/drivers/iio/amplifiers/hmc425a.c b/drivers/iio/amplifiers/hmc425a.c index b116b54e4206..e7f425677fd3 100644 --- a/drivers/iio/amplifiers/hmc425a.c +++ b/drivers/iio/amplifiers/hmc425a.c @@ -2,9 +2,10 @@ /* * HMC425A and similar Gain Amplifiers * - * Copyright 2020 Analog Devices Inc. + * Copyright 2020, 2023 Analog Devices Inc. */ +#include #include #include #include @@ -20,10 +21,24 @@ #include #include +/* + * The LTC6373 amplifier supports configuring gain using GPIO's with the following + * values (OUTPUT_V / INPUT_V): 0(shutdown), 0.25, 0.5, 1, 2, 4, 8, 16 + * + * Except for the shutdown value, all can be converted to dB using 20 * log10(x) + * From here, it is observed that all values are multiples of the '2' gain setting, + * with the correspondent of 6.020dB. + */ +#define LTC6373_CONVERSION_CONSTANT 6020 +#define LTC6373_MIN_GAIN_CODE 0x6 +#define LTC6373_CONVERSION_MASK GENMASK(2, 0) +#define LTC6373_SHUTDOWN GENMASK(2, 0) + enum hmc425a_type { ID_HMC425A, ID_HMC540S, - ID_ADRF5740 + ID_ADRF5740, + ID_LTC6373, }; struct hmc425a_chip_info { @@ -34,6 +49,8 @@ struct hmc425a_chip_info { int gain_min; int gain_max; int default_gain; + int powerdown_val; + bool has_powerdown; }; struct hmc425a_state { @@ -42,6 +59,7 @@ struct hmc425a_state { struct gpio_descs *gpios; enum hmc425a_type type; u32 gain; + bool powerdown; }; static int hmc425a_write(struct iio_dev *indio_dev, u32 value) @@ -80,6 +98,17 @@ static int hmc425a_gain_dB_to_code(struct hmc425a_state *st, int val, int val2, temp = (abs(gain) / 2000) & 0xF; *code = temp & BIT(3) ? temp | BIT(2) : temp; return 0; + case ID_LTC6373: + if (st->powerdown) + return -EPERM; + + /* add half of the value for rounding */ + temp = LTC6373_CONVERSION_CONSTANT / 2; + if (val < 0) + temp *= -1; + *code = ~((gain + temp) / LTC6373_CONVERSION_CONSTANT + 3) + & LTC6373_CONVERSION_MASK; + return 0; default: return -EINVAL; } @@ -101,6 +130,12 @@ static int hmc425a_code_to_gain_dB(struct hmc425a_state *st, int *val, int *val2 code = code & BIT(3) ? code & ~BIT(2) : code; gain = code * -2000; break; + case ID_LTC6373: + if (st->powerdown) + return -EPERM; + gain = ((~code & LTC6373_CONVERSION_MASK) - 3) * + LTC6373_CONVERSION_CONSTANT; + break; } *val = gain / 1000; @@ -174,6 +209,48 @@ static const struct iio_info hmc425a_info = { .write_raw_get_fmt = &hmc425a_write_raw_get_fmt, }; +static ssize_t ltc6373_read_powerdown(struct iio_dev *indio_dev, + uintptr_t private, + const struct iio_chan_spec *chan, + char *buf) +{ + struct hmc425a_state *st = iio_priv(indio_dev); + + return sysfs_emit(buf, "%d\n", st->powerdown); +} + +static ssize_t ltc6373_write_powerdown(struct iio_dev *indio_dev, + uintptr_t private, + const struct iio_chan_spec *chan, + const char *buf, + size_t len) +{ + struct hmc425a_state *st = iio_priv(indio_dev); + bool powerdown; + int code, ret; + + ret = kstrtobool(buf, &powerdown); + if (ret) + return ret; + + mutex_lock(&st->lock); + st->powerdown = powerdown; + code = (powerdown) ? LTC6373_SHUTDOWN : st->gain; + ret = hmc425a_write(indio_dev, code); + mutex_unlock(&st->lock); + return len; +} + +static const struct iio_chan_spec_ext_info ltc6373_ext_info[] = { + { + .name = "powerdown", + .read = ltc6373_read_powerdown, + .write = ltc6373_write_powerdown, + .shared = IIO_SEPARATE, + }, + {}, +}; + #define HMC425A_CHAN(_channel) \ { \ .type = IIO_VOLTAGE, \ @@ -183,10 +260,24 @@ static const struct iio_info hmc425a_info = { .info_mask_separate = BIT(IIO_CHAN_INFO_HARDWAREGAIN), \ } +#define LTC6373_CHAN(_channel) \ +{ \ + .type = IIO_VOLTAGE, \ + .output = 1, \ + .indexed = 1, \ + .channel = _channel, \ + .info_mask_separate = BIT(IIO_CHAN_INFO_HARDWAREGAIN), \ + .ext_info = ltc6373_ext_info, \ +} + static const struct iio_chan_spec hmc425a_channels[] = { HMC425A_CHAN(0), }; +static const struct iio_chan_spec ltc6373_channels[] = { + LTC6373_CHAN(0), +}; + static struct hmc425a_chip_info hmc425a_chip_info_tbl[] = { [ID_HMC425A] = { .name = "hmc425a", @@ -215,6 +306,18 @@ static struct hmc425a_chip_info hmc425a_chip_info_tbl[] = { .gain_max = 0, .default_gain = 0xF, /* set default gain -22.0db*/ }, + [ID_LTC6373] = { + .name = "ltc6373", + .channels = ltc6373_channels, + .num_channels = ARRAY_SIZE(ltc6373_channels), + .num_gpios = 3, + .gain_min = -12041, /* gain setting x0.25*/ + .gain_max = 24082, /* gain setting x16 */ + .default_gain = LTC6373_MIN_GAIN_CODE, + .powerdown_val = LTC6373_SHUTDOWN, + .has_powerdown = true, + }, + }; /* Match table for of_platform binding */ @@ -225,6 +328,8 @@ static const struct of_device_id hmc425a_of_match[] = { .data = &hmc425a_chip_info_tbl[ID_HMC540S]}, { .compatible = "adi,adrf5740", .data = &hmc425a_chip_info_tbl[ID_ADRF5740]}, + { .compatible = "adi,ltc6373", + .data = &hmc425a_chip_info_tbl[ID_LTC6373]}, {}, }; MODULE_DEVICE_TABLE(of, hmc425a_of_match); @@ -270,8 +375,13 @@ static int hmc425a_probe(struct platform_device *pdev) indio_dev->info = &hmc425a_info; indio_dev->modes = INDIO_DIRECT_MODE; - /* Set default gain */ - hmc425a_write(indio_dev, st->gain); + if (st->chip_info->has_powerdown) { + st->powerdown = true; + hmc425a_write(indio_dev, st->chip_info->powerdown_val); + } else { + /* Set default gain */ + hmc425a_write(indio_dev, st->gain); + } return devm_iio_device_register(&pdev->dev, indio_dev); }