Received: by 2002:a05:7412:37c9:b0:e2:908c:2ebd with SMTP id jz9csp2420623rdb; Thu, 21 Sep 2023 19:47:37 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGOP7UlXbBynJOOtT7g18M9kaSTdnFp2waZekuvakb/JplNbp/TNhg+MzFdsZxl5571vUMA X-Received: by 2002:a05:6808:1412:b0:3a9:d5df:2bc with SMTP id w18-20020a056808141200b003a9d5df02bcmr8725047oiv.32.1695350857358; Thu, 21 Sep 2023 19:47:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695350857; cv=none; d=google.com; s=arc-20160816; b=SIfaLViqMdIPHeIcMrfbxcemYq4jQSevu2sYoa8MqMFyo4mtmR57Q7ZMN+UxsSZ63x A9bQAV1W2UXmxcP4WGrQviwquM6sV0TABGOW4sYcI4VfgF2fh0L/Gze/9BhXWHW6bnX1 VfNm+lKPJ8XQYe8sxOuxVdwAn1eaVDKhXKxbk3cmVmNie+9xVcVqyUJeU+d6hgXz91sn oW8cArTVSyumdK0+uY49RRYYIb5bi3od/oo8qdu1Bcs+YyXlnXHVt31ohfVbL1RvyK52 QnqsUn/mUxCGimKrdComhVDbL3Nh3ldYuyRCcUXFcjhJL3Vgmq0i4OJUtXt+zU6k15Zq 1L5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=phvZq4VpwSFX4vyqlS17/uN/agj73xAJlQboMqH0z3o=; fh=rOC7q8UJisRayejF6PsoKdRfRTtXVZOwgDCXOG0B/ws=; b=haa+ijuJyBingCi6hSCVKMUVb2lqkVjwnR8tqSI1BXxe9epzNSHcqfXLZPcjbba+hS FqfrnpqhV7ZvxGn3mVn6zC3x/cATXaMJPkqJ1e+PIpRVnP8aqzKpnTDUUx+cn70Y9Wcx OxyiX1k41W7l4jDcUJGAsPE5fbSf9wE0bsCDydEfHZDRLZt1EkVS176OUBLe9IcZFBfD 3Of42N5eUhXJnVT2qGwpKWTQiUHQjwizGSOaAxbW4EyBoUZqEb74dN6xtlw19b+OGaI8 DwM7tlUmN1cC028cn6aPQ/5UDoA4nXeTBO8vRC1xuaRbqdpubKKeEzT9HLgHHRZrWwNd oe2Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20230601.gappssmtp.com header.s=20230601 header.b=bwoijMUN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from howler.vger.email (howler.vger.email. [23.128.96.34]) by mx.google.com with ESMTPS id i192-20020a636dc9000000b0056aea4cc1c9si2812859pgc.653.2023.09.21.19.47.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Sep 2023 19:47:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) client-ip=23.128.96.34; Authentication-Results: mx.google.com; dkim=pass header.i=@baylibre-com.20230601.gappssmtp.com header.s=20230601 header.b=bwoijMUN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id 6AA3B822DA36; Thu, 21 Sep 2023 13:00:42 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230016AbjIUUAi (ORCPT + 99 others); Thu, 21 Sep 2023 16:00:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47514 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230445AbjIUUAB (ORCPT ); Thu, 21 Sep 2023 16:00:01 -0400 Received: from mail-lj1-x22c.google.com (mail-lj1-x22c.google.com [IPv6:2a00:1450:4864:20::22c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3287B101A5 for ; Thu, 21 Sep 2023 10:30:03 -0700 (PDT) Received: by mail-lj1-x22c.google.com with SMTP id 38308e7fff4ca-2c00b37ad84so22109891fa.0 for ; Thu, 21 Sep 2023 10:30:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1695317394; x=1695922194; 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=phvZq4VpwSFX4vyqlS17/uN/agj73xAJlQboMqH0z3o=; b=bwoijMUNheaeHMc9bTKSK2DN9ZhujbfmI/Y+P5dZLU/ox5VdeCd4N+mQtaCd3rJi2T QkBsSPyqcZ/x6MlcB3ZmZIkZB8biCMKJ7JMUxrQLR6KDGYtP0rm1RwKJNH+e1m2AvkiQ wB83l8HpKxu/U5QWmUjBFnhiepHAZp3KKttr0+mDJOucjgLnbmqyRYf4lKU5I6LwTB32 Q5Ek45uxYbLzc4pjULI/2F4BBX7JpbE55YrWzTXZmRDLntWiKPNXgGiCLsR2G2NSH4zK F/dgPIVGVX2M34yfOO1GHH3dcQgPVUEZR4rvEzR0/o4r8tM+nXldGZFEMZahJZJ+J43v XT+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695317394; x=1695922194; 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=phvZq4VpwSFX4vyqlS17/uN/agj73xAJlQboMqH0z3o=; b=tNnfOsym/LcVUET/uvJn/t9wkzb2D1+KWal+XndPDbIJM1fgvA2jmrQ48Smh39TIg4 FhXthmizycIV+dVMrgbdbX1+V5Xijb4cAAjz2tVubpjXTBjdYleLrlJnn+7fBs8XFYoy J550LrB7oUhpFcPr/z4R0NDDZ78t8dN3xx1ewyj+0ohX2jbg6c5mgmGLIlqeJaswDRhr /Zh8mJXAOv9oxICPRE92kN5OeTzKAmTL69akiKw0dYi69SHAQA4aTa9gtDqkKRSUzL6t MQPoWib4/3cJawTZgHqzQzMfXgXrYVMlTn7QZo1kGk3E2j6EFTZKk6wh83qzX1yHm+cb jifQ== X-Gm-Message-State: AOJu0Yzr7rvZj4Sg3VBrNF8BoiXpZGKhHafuEOijlxd8ekwVujzDyAWH DjHNA9CRnetNtM3MfWFX0XmeMj+kTPPxtv+M7IOvWtLH X-Received: by 2002:a05:600c:4ec7:b0:405:37bb:d93e with SMTP id g7-20020a05600c4ec700b0040537bbd93emr1147858wmq.9.1695307459769; Thu, 21 Sep 2023 07:44:19 -0700 (PDT) Received: from localhost.localdomain (abordeaux-655-1-129-86.w90-5.abo.wanadoo.fr. [90.5.10.86]) by smtp.gmail.com with ESMTPSA id s17-20020a1cf211000000b003fe2a40d287sm2125515wmc.1.2023.09.21.07.44.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Sep 2023 07:44:19 -0700 (PDT) From: David Lechner To: linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-staging@lists.linux.dev Cc: linux-kernel@vger.kernel.org, Jonathan Cameron , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Michael Hennerich , =?UTF-8?q?Nuno=20S=C3=A1?= , Axel Haslam , Philip Molloy , David Lechner Subject: [PATCH v2 08/19] staging: iio: resolver: ad2s1210: use devicetree to get fclkin Date: Thu, 21 Sep 2023 09:43:49 -0500 Message-Id: <20230921144400.62380-9-dlechner@baylibre.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230921144400.62380-1-dlechner@baylibre.com> References: <20230921144400.62380-1-dlechner@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Thu, 21 Sep 2023 13:00:43 -0700 (PDT) This removes the fclkin sysfs attribute and replaces it with getting the fclkin clock rate using the clk subsystem (i.e. from the devicetree). The fclkin clock comes from an external oscillator that is connected directly to the AD2S1210 chip, so users of the sysfs attributes should not need to be concerned with this. Also sort includes while we are touching this. Signed-off-by: David Lechner --- drivers/staging/iio/resolver/Kconfig | 1 + drivers/staging/iio/resolver/ad2s1210.c | 76 +++++++++---------------- 2 files changed, 28 insertions(+), 49 deletions(-) diff --git a/drivers/staging/iio/resolver/Kconfig b/drivers/staging/iio/resolver/Kconfig index 6d1e2622e0b0..bebb35822c9e 100644 --- a/drivers/staging/iio/resolver/Kconfig +++ b/drivers/staging/iio/resolver/Kconfig @@ -7,6 +7,7 @@ menu "Resolver to digital converters" config AD2S1210 tristate "Analog Devices ad2s1210 driver" depends on SPI + depends on COMMON_CLK depends on GPIOLIB || COMPILE_TEST help Say yes here to build support for Analog Devices spi resolver diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c index 95d43b241a75..153ac7704ad7 100644 --- a/drivers/staging/iio/resolver/ad2s1210.c +++ b/drivers/staging/iio/resolver/ad2s1210.c @@ -5,16 +5,17 @@ * Copyright (c) 2010-2010 Analog Devices Inc. * Copyright (C) 2023 BayLibre, SAS */ -#include -#include +#include +#include #include +#include +#include +#include #include -#include #include +#include #include -#include -#include -#include +#include #include #include @@ -91,7 +92,8 @@ struct ad2s1210_state { struct mutex lock; struct spi_device *sdev; struct gpio_desc *gpios[5]; - unsigned int fclkin; + /** The external oscillator frequency in Hz. */ + unsigned long fclkin; unsigned int fexcit; bool hysteresis; u8 resolution; @@ -198,45 +200,6 @@ static inline int ad2s1210_soft_reset(struct ad2s1210_state *st) return ad2s1210_config_write(st, 0x0); } -static ssize_t ad2s1210_show_fclkin(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev)); - - return sprintf(buf, "%u\n", st->fclkin); -} - -static ssize_t ad2s1210_store_fclkin(struct device *dev, - struct device_attribute *attr, - const char *buf, - size_t len) -{ - struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev)); - unsigned int fclkin; - int ret; - - ret = kstrtouint(buf, 10, &fclkin); - if (ret) - return ret; - if (fclkin < AD2S1210_MIN_CLKIN || fclkin > AD2S1210_MAX_CLKIN) { - dev_err(dev, "ad2s1210: fclkin out of range\n"); - return -EINVAL; - } - - mutex_lock(&st->lock); - st->fclkin = fclkin; - - ret = ad2s1210_update_frequency_control_word(st); - if (ret < 0) - goto error_ret; - ret = ad2s1210_soft_reset(st); -error_ret: - mutex_unlock(&st->lock); - - return ret < 0 ? ret : len; -} - static ssize_t ad2s1210_show_fexcit(struct device *dev, struct device_attribute *attr, char *buf) @@ -546,8 +509,6 @@ static int ad2s1210_read_raw(struct iio_dev *indio_dev, return ret; } -static IIO_DEVICE_ATTR(fclkin, 0644, - ad2s1210_show_fclkin, ad2s1210_store_fclkin, 0); static IIO_DEVICE_ATTR(fexcit, 0644, ad2s1210_show_fexcit, ad2s1210_store_fexcit, 0); static IIO_DEVICE_ATTR(control, 0644, @@ -596,7 +557,6 @@ static const struct iio_chan_spec ad2s1210_channels[] = { }; static struct attribute *ad2s1210_attributes[] = { - &iio_dev_attr_fclkin.dev_attr.attr, &iio_dev_attr_fexcit.dev_attr.attr, &iio_dev_attr_control.dev_attr.attr, &iio_dev_attr_bits.dev_attr.attr, @@ -654,6 +614,24 @@ static const struct iio_info ad2s1210_info = { .attrs = &ad2s1210_attribute_group, }; +static int ad2s1210_setup_clocks(struct ad2s1210_state *st) +{ + struct device *dev = &st->sdev->dev; + struct clk *clk; + + clk = devm_clk_get_enabled(dev, NULL); + if (IS_ERR(clk)) + return dev_err_probe(dev, PTR_ERR(clk), "failed to get clock\n"); + + st->fclkin = clk_get_rate(clk); + if (st->fclkin < AD2S1210_MIN_CLKIN || st->fclkin > AD2S1210_MAX_CLKIN) + return dev_err_probe(dev, -EINVAL, + "clock frequency out of range: %lu\n", + st->fclkin); + + return 0; +} + static int ad2s1210_setup_gpios(struct ad2s1210_state *st) { struct spi_device *spi = st->sdev; -- 2.34.1