From patchwork Wed Apr 2 06:46:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matti Vaittinen X-Patchwork-Id: 14035567 Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.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 B360D3C17; Wed, 2 Apr 2025 06:46:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743576399; cv=none; b=KNmjlv9icN8OziKsvFyBYdzI4nri6YQCHmy5jv39iouQcnYil5X5IMReElY09wnjsxKKkw5HmZLmU3BvKaV3ZJ6zIy97ovUIxHAPoGYRZOBFhkInT3ukuVN3ygTlEnBSSq3XJDFcJ3XS/Rr6wHmHuZW5+8aBhDNsVujAQwdtUYc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743576399; c=relaxed/simple; bh=IUwdUbHeFL0dqDwaq4iIV3I6pbitR6/LH0Nohc/Vqqc=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=Z6/dykrfJqONla0IO6VmVPHvUmnkNy/Rxz9ntwDTazl4AbN062xEICUd3necyM+Dw56zKEmdDSngfZZwjbe6XLdaIz/kU8DRa95LAPmL3iJrujiqtqKKreahdK8jUKBcrGfCSlA3nrtcVZsYe7uHEUtGBYHBTR6opjWeKtlU4MM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=c3BFJMR8; arc=none smtp.client-ip=209.85.167.42 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="c3BFJMR8" Received: by mail-lf1-f42.google.com with SMTP id 2adb3069b0e04-54acc0cd458so654492e87.0; Tue, 01 Apr 2025 23:46:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743576396; x=1744181196; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=TApx6q5zRSyJu5vFDntepnYrxk7e4Dyv7PtEpuL5hI4=; b=c3BFJMR8jrQygWYcOi4RH/D7So5ON5G0UTAZJfqdELycOCCO69rYthanBhsQb7ipu2 K0A8kfgFBLkZDcO8QhbKZUkNhIEksB6gh6TWlg7CpXC4KYH7AMY6Bpi9RpS8tChszX66 1hKINopQFEmqqNxalqf9PyoyeEOAMXDv9P5HqIVUy/8wWjz0AIOCbFEab35J/2XZPZTv r0LMK4rUjARMSDulsTKflVeaPIRWco3Y35kefAZtYVFav3hI+fZwZAuDYrenRlv9tMdN megAAZaA0IpxHX87gsieH6OpUOgDP/DCAlAkR9XcxppoWUUro8TO28qtejYGC33SeEgJ a/XQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743576396; x=1744181196; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=TApx6q5zRSyJu5vFDntepnYrxk7e4Dyv7PtEpuL5hI4=; b=CLeek4db6WO8uH8LdpfR3ycKSgCZ0G7iGTvkDQrtyJ9sk+OT6SuR6mr/uuZESlitnB +D2xYHDGgFOkKgyCH3F4gJfo+lvh0VhsjeUQVccQHZV++sjqyjouqKlgyD/0mvJ83HjM RBsVvaskIw8OMLV9jMGrfdFnZK+ZjHkNTKDCa3ap8Dlgyx0njbzu1wDvnSiSf+9piS6+ ViU01yaEpfi59HdiGR611/S1EzYKhLz7fXwL4wVIatYTVz9N+bHhbPM0q4WARXrs9k0Y dAgFlBJkcol3gdXPNL/32Rq1PoD48OlPvh6L1FjZc/l9Nda0knLqrP3zGaN+iJGNYlIt 9JjA== X-Forwarded-Encrypted: i=1; AJvYcCVyYeCNpPUBfca0doEaxdgiNm6+m9eXL4nZuUl4gVNi1GxfqAsLUgnqjNkRVhEvDavXOFLqyEjS3N03@vger.kernel.org, AJvYcCWQiWBgzAX/DtVGLd7b/XziPVH9bSnlWCLtRfACJn6EZLooma37kAYQ7L0zAsbGo2ONifj/4jIa2XLWZRVw@vger.kernel.org, AJvYcCXN8VyETmbgIuGfhLFfP6dC6+j0ZAbn+ZEOEKfK5Zh2v5JPfldF7GXtmkRZEo/i70pyfrUf5PTRQeJ5@vger.kernel.org X-Gm-Message-State: AOJu0YzOCNgfhSauqhFGOL9XIGMMMsULDWd9/tQJyx0R8aX6j5bn2QfY Sheewg128O++jTEK4c2TPZDH9K079kmVZ9lF7536mXSlXOKk4ccx X-Gm-Gg: ASbGncsDx08LKz7yzxem43809aWCpAsOfX3Jkf6s8Uo6K8HNfIdB/h6gHcHbHTgbY6w U/jjn7dA/OWC43JGlKj1FjmpXNdNZ1RTzXf15iM3qGXjg7eJRpPV2zWKgpfZIOLngLDIC5sXfL4 e5eqk+9z7f/bGSaLpr+MepT6/NOw2nSklZfy7I70cPaNd9d3LoyjNLK6Yp4+/4A0eSDZNmiJ9PU cw7dr8lTCFHlTEf54pgvxEucupMdvo77wS26ofNCazv5MZ/aqSq7DYEJfDCrAJBElOiHHWDn0hf X+VSJI64EFycYhKviRScOAl6cth1Vb+u970cy/Dj8iia0IDO9HM= X-Google-Smtp-Source: AGHT+IHB1cqHIml6QCpYB2EIlpijEXbykwLbiu/6J4VIivRNVo2eFNPbbx98QtlmqxGoDkmvo9h1IQ== X-Received: by 2002:a05:6512:3e08:b0:545:f70:8aa7 with SMTP id 2adb3069b0e04-54c19c6b888mr393715e87.32.1743576395582; Tue, 01 Apr 2025 23:46:35 -0700 (PDT) Received: from mva-rohm ([2a10:a5c0:800d:dd00:8fdf:935a:2c85:d703]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-54b094bb3fasm1528319e87.25.2025.04.01.23.46.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Apr 2025 23:46:34 -0700 (PDT) Date: Wed, 2 Apr 2025 09:46:30 +0300 From: Matti Vaittinen To: Matti Vaittinen , Matti Vaittinen Cc: Jonathan Cameron , Lars-Peter Clausen , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matti Vaittinen , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/5] iio: bd79703: Support BD79700 and BD79701 Message-ID: <845aa45974f6fb81c83046368a24a0674e9a8b0e.1743576022.git.mazziesaccount@gmail.com> References: Precedence: bulk X-Mailing-List: linux-iio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: The BD79700 and BD79701 look like almost exact subsets of the BD79703. The BD79703 contains 6 channels (channels 0 to 5). The BD79700 provides only 2 channels, matching the BD79703 channels 0 and 1. The BD79701 provides 3 channels (matching BD79703 channels 0, 1, and 2). Furthermore, the BD79700 and BD79701 do not have separate VFS pin but use VCC for the full-scale voltage. Suopport these ICs using the BD79703 driver. Signed-off-by: Matti Vaittinen --- drivers/iio/dac/rohm-bd79703.c | 57 +++++++++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/drivers/iio/dac/rohm-bd79703.c b/drivers/iio/dac/rohm-bd79703.c index 35e1b1134ec6..63a70fbd7e0e 100644 --- a/drivers/iio/dac/rohm-bd79703.c +++ b/drivers/iio/dac/rohm-bd79703.c @@ -49,6 +49,7 @@ struct bd7970x_chip_data { const char *name; const struct iio_chan_spec *channels; int num_channels; + bool has_vfs; }; static int bd79703_read_raw(struct iio_dev *idev, @@ -93,6 +94,17 @@ static const struct iio_info bd79703_info = { .address = (_chan + 1), \ } +static const struct iio_chan_spec bd79700_channels[] = { + BD79703_CHAN(0), + BD79703_CHAN(1), +}; + +static const struct iio_chan_spec bd79701_channels[] = { + BD79703_CHAN(0), + BD79703_CHAN(1), + BD79703_CHAN(2), +}; + static const struct iio_chan_spec bd79703_channels[] = { BD79703_CHAN(0), BD79703_CHAN(1), @@ -102,10 +114,25 @@ static const struct iio_chan_spec bd79703_channels[] = { BD79703_CHAN(5), }; +static const struct bd7970x_chip_data bd79700_chip_data = { + .name = "bd79700", + .channels = bd79700_channels, + .num_channels = ARRAY_SIZE(bd79700_channels), + .has_vfs = false, +}; + +static const struct bd7970x_chip_data bd79701_chip_data = { + .name = "bd79701", + .channels = bd79701_channels, + .num_channels = ARRAY_SIZE(bd79701_channels), + .has_vfs = false, +}; + static const struct bd7970x_chip_data bd79703_chip_data = { .name = "bd79703", .channels = bd79703_channels, .num_channels = ARRAY_SIZE(bd79703_channels), + .has_vfs = true, }; static int bd79703_probe(struct spi_device *spi) @@ -131,15 +158,25 @@ static int bd79703_probe(struct spi_device *spi) return dev_err_probe(dev, PTR_ERR(data->regmap), "Failed to initialize Regmap\n"); - ret = devm_regulator_get_enable(dev, "vcc"); - if (ret) - return dev_err_probe(dev, ret, "Failed to enable VCC\n"); - - ret = devm_regulator_get_enable_read_voltage(dev, "vfs"); - if (ret < 0) - return dev_err_probe(dev, ret, "Failed to get Vfs\n"); - + /* + * BD79703 has a separate VFS pin, whereas the BD79700 and BD79701 use + * VCC for their full-scale output voltage. + */ + if (cd->has_vfs) { + ret = devm_regulator_get_enable(dev, "vcc"); + if (ret) + return dev_err_probe(dev, ret, "Failed to enable VCC\n"); + + ret = devm_regulator_get_enable_read_voltage(dev, "vfs"); + if (ret < 0) + return dev_err_probe(dev, ret, "Failed to get Vfs\n"); + } else { + ret = devm_regulator_get_enable_read_voltage(dev, "vcc"); + if (ret < 0) + return dev_err_probe(dev, ret, "Failed to get VCC\n"); + } data->vfs = ret; + idev->channels = cd->channels; idev->num_channels = cd->num_channels; idev->modes = INDIO_DIRECT_MODE; @@ -155,12 +192,16 @@ static int bd79703_probe(struct spi_device *spi) } static const struct spi_device_id bd79703_id[] = { + { "bd79700", (kernel_ulong_t)&bd79700_chip_data }, + { "bd79701", (kernel_ulong_t)&bd79701_chip_data }, { "bd79703", (kernel_ulong_t)&bd79703_chip_data }, { } }; MODULE_DEVICE_TABLE(spi, bd79703_id); static const struct of_device_id bd79703_of_match[] = { + { .compatible = "rohm,bd79700", .data = &bd79700_chip_data }, + { .compatible = "rohm,bd79701", .data = &bd79701_chip_data }, { .compatible = "rohm,bd79703", .data = &bd79703_chip_data }, { } };