Received: by 10.192.165.148 with SMTP id m20csp1764452imm; Thu, 26 Apr 2018 01:48:02 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrhuVznURgs0vJ2qbKJzm1pPj1uF27JcKxKuHNiJnr5Lo8DcR4EdiSDgI1e2QUE29XpTkTG X-Received: by 2002:a17:902:bc4a:: with SMTP id t10-v6mr6506401plz.343.1524732482396; Thu, 26 Apr 2018 01:48:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524732482; cv=none; d=google.com; s=arc-20160816; b=M+WUyz2ICOaKBESpKwz8FbQMjir4EHpHiEIfh71FlcYCO/lUANU03z/FJwnTqHGOyF LOIK9jnQ8Lr+3qiwi19sDodJjp7nrPssVhEuytiv5EyF266puLOqozCgOUELa7oH/RCF M62aqSR8ePxEWvxFVj7BYE3zY8fFxWoyxCLjCRYDVwzDGabPuMdOlCotVgBLi4x+Op1q o5czmX28APQ4akawMLD6zrh5osYlZC202K8J92UDj0d2TNj6nlAxO6GIOXInq18370Z7 nwyVgoKU7u73ES1ZkK9vjm/szisO+WTlHmSOqYdFgrgxBucOCN1ccWxYfOWEY08NKvah M93g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:organization:autocrypt:openpgp:from:references:cc:to :subject:dkim-signature:arc-authentication-results; bh=F550QjxVR6ELD33zPIWJ3vH+LS3ULfB7Lr72h0tT6QU=; b=NFfnmXrQ0zpJMb/XGmP9V6ovT7/9PHJSx/M7FAAHEv8j+I6KNyXITXHNI2KE7wDqmf sgJeuX3Oz/HuuqyrNQf6YQT+Kjf1VsvGJp7j7YbqyBLBKDrzJzgU3aqbNvph0CcSQ+rV NdZzzvQI1ImwuNZ2hZuVLp53PdKkVrAXQanHQbjBe1Dwtec12Msv8pD4+LvZNr8eiT/o 6sMf0At4ubSwgBa3ciqQsup/ikbOx+OtyU8eL4WhCW/uKu0eq21GiAzct4gH39Dw8nw2 EEi6iZJgXWz8gJRdaV6q1mA5r/ILmamcQo85qiXMvrEzdXI3xhn8Dot9KsAcFtd0HmWY Eouw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=nqS9AmJ1; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p24si17345516pfh.328.2018.04.26.01.47.48; Thu, 26 Apr 2018 01:48:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=nqS9AmJ1; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754829AbeDZIqX (ORCPT + 99 others); Thu, 26 Apr 2018 04:46:23 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:54279 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754819AbeDZIqP (ORCPT ); Thu, 26 Apr 2018 04:46:15 -0400 Received: by mail-wm0-f68.google.com with SMTP id f6so11500487wmc.4 for ; Thu, 26 Apr 2018 01:46:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=subject:to:cc:references:from:openpgp:autocrypt:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=F550QjxVR6ELD33zPIWJ3vH+LS3ULfB7Lr72h0tT6QU=; b=nqS9AmJ166XcBDN76mj1VQJ3i3sWlHmvoC0d+MzCGpFgqCAAPRmDpa3aMAanTLBUKa nKJL6apFwR/jMw9X/qY9Iwx8JLsFeQkDgnpw+6OpXyuI/B4rX9Dkz5pov6Q5du783IuO aeCNA1Su8cqMqBXRvdpt3bU0ZdmB5U6FqoWOUSa1i98IN8GIjOjD1YOnd7TJOFPCiX5I kx43dmUFnF5EfimguTTHapw30c4J35oUwVrALEwXPuXHPV4Ix46QQQe9c58Z0AnbcRfZ 8pgXy+u45As0rfbw+EnDr3/eGjlcelE1iTBOytvxc/CzMSO9SQk8pPSgSKD36pOAvmjN XA4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:openpgp:autocrypt :organization:message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=F550QjxVR6ELD33zPIWJ3vH+LS3ULfB7Lr72h0tT6QU=; b=I5Vb2A7ucD5Ny3+bBL6zWU8ZqivtYwyYnh2DqRKU6YqZZec+LOFqXzshTuY7F88jGL w/AahwH+vbtxQViaXuC96ZGlwUw1cN202wSeoeGu80M7WojyLCzXQp2aOV4wA70cPh2e Cn1CSYewPhFHvgN3U8PxwDPdZ6CMTJJd/COzfwutq1Z6K1ZwWee+ZfOa7QX01iYCMNww HNlNvGTEs1AsUB4HX+OelqfdvaPtEv3y+2d1zZWCoTV40aTrUcMEYxPRX+6MZtIkbnv+ R9plU8VNqMIEWI4XE6BgXPLGN7uI87qisl1OGlqiUnY1zjAS6rDmwwsQdqUzARuTTucK 6XvA== X-Gm-Message-State: ALQs6tAXSUXDboFYDA/mXprHeHmBd7a8MFZMj6eeaWUVG+rBV/5NuMqC wh75uGqWis0iRNv3DgKbQjMsL0yP8lo= X-Received: by 10.28.47.5 with SMTP id v5mr18114933wmv.93.1524732374237; Thu, 26 Apr 2018 01:46:14 -0700 (PDT) Received: from [10.1.2.12] ([90.63.244.31]) by smtp.gmail.com with ESMTPSA id d7-v6sm17192701wrj.26.2018.04.26.01.46.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Apr 2018 01:46:13 -0700 (PDT) Subject: Re: [PATCH 2/7] clk: meson: add clk-phase clock driver To: Jerome Brunet , Carlo Caione , Kevin Hilman Cc: Michael Turquette , Stephen Boyd , linux-amlogic@lists.infradead.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org References: <20180425163304.10852-1-jbrunet@baylibre.com> <20180425163304.10852-3-jbrunet@baylibre.com> From: Neil Armstrong Openpgp: preference=signencrypt Autocrypt: addr=narmstrong@baylibre.com; prefer-encrypt=mutual; keydata= xsBNBE1ZBs8BCAD78xVLsXPwV/2qQx2FaO/7mhWL0Qodw8UcQJnkrWmgTFRobtTWxuRx8WWP GTjuhvbleoQ5Cxjr+v+1ARGCH46MxFP5DwauzPekwJUD5QKZlaw/bURTLmS2id5wWi3lqVH4 BVF2WzvGyyeV1o4RTCYDnZ9VLLylJ9bneEaIs/7cjCEbipGGFlfIML3sfqnIvMAxIMZrvcl9 qPV2k+KQ7q+aXavU5W+yLNn7QtXUB530Zlk/d2ETgzQ5FLYYnUDAaRl+8JUTjc0CNOTpCeik 80TZcE6f8M76Xa6yU8VcNko94Ck7iB4vj70q76P/J7kt98hklrr85/3NU3oti3nrIHmHABEB AAHNKE5laWwgQXJtc3Ryb25nIDxuYXJtc3Ryb25nQGJheWxpYnJlLmNvbT7CwHsEEwEKACUC GyMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheABQJXDO2CAhkBAAoJEBaat7Gkz/iubGIH/iyk RqvgB62oKOFlgOTYCMkYpm2aAOZZLf6VKHKc7DoVwuUkjHfIRXdslbrxi4pk5VKU6ZP9AKsN NtMZntB8WrBTtkAZfZbTF7850uwd3eU5cN/7N1Q6g0JQihE7w4GlIkEpQ8vwSg5W7hkx3yQ6 2YzrUZh/b7QThXbNZ7xOeSEms014QXazx8+txR7jrGF3dYxBsCkotO/8DNtZ1R+aUvRfpKg5 ZgABTC0LmAQnuUUf2PHcKFAHZo5KrdO+tyfL+LgTUXIXkK+tenkLsAJ0cagz1EZ5gntuheLD YJuzS4zN+1Asmb9kVKxhjSQOcIh6g2tw7vaYJgL/OzJtZi6JlIXOwE0ETVkGzwEIALyKDN/O GURaHBVzwjgYq+ZtifvekdrSNl8TIDH8g1xicBYpQTbPn6bbSZbdvfeQPNCcD4/EhXZuhQXM coJsQQQnO4vwVULmPGgtGf8PVc7dxKOeta+qUh6+SRh3vIcAUFHDT3f/Zdspz+e2E0hPV2hi SvICLk11qO6cyJE13zeNFoeY3ggrKY+IzbFomIZY4yG6xI99NIPEVE9lNBXBKIlewIyVlkOa YvJWSV+p5gdJXOvScNN1epm5YHmf9aE2ZjnqZGoMMtsyw18YoX9BqMFInxqYQQ3j/HpVgTSv mo5ea5qQDDUaCsaTf8UeDcwYOtgI8iL4oHcsGtUXoUk33HEAEQEAAcLAXwQYAQIACQUCTVkG zwIbDAAKCRAWmrexpM/4rrXiB/sGbkQ6itMrAIfnM7IbRuiSZS1unlySUVYu3SD6YBYnNi3G 5EpbwfBNuT3H8//rVvtOFK4OD8cRYkxXRQmTvqa33eDIHu/zr1HMKErm+2SD6PO9umRef8V8 2o2oaCLvf4WeIssFjwB0b6a12opuRP7yo3E3gTCSKmbUuLv1CtxKQF+fUV1cVaTPMyT25Od+ RC1K+iOR0F54oUJvJeq7fUzbn/KdlhA8XPGzwGRy4zcsPWvwnXgfe5tk680fEKZVwOZKIEuJ C3v+/yZpQzDvGYJvbyix0lHnrCzq43WefRHI5XTTQbM0WUIBIcGmq38+OgUsMYu4NzLu7uZF Acmp6h8g Organization: Baylibre Message-ID: <86b8e8f5-fb69-3249-fc1e-b4f2213284db@baylibre.com> Date: Thu, 26 Apr 2018 10:46:12 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <20180425163304.10852-3-jbrunet@baylibre.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 25/04/2018 18:32, Jerome Brunet wrote: > Add a driver based meson clk-regmap to control clock phase on > amlogic SoCs > > Signed-off-by: Jerome Brunet > --- > drivers/clk/meson/Makefile | 1 + > drivers/clk/meson/clk-phase.c | 63 +++++++++++++++++++++++++++++++++++++++++++ > drivers/clk/meson/clkc.h | 8 ++++++ > 3 files changed, 72 insertions(+) > create mode 100644 drivers/clk/meson/clk-phase.c > > diff --git a/drivers/clk/meson/Makefile b/drivers/clk/meson/Makefile > index ffee82e60b7a..352fb848c406 100644 > --- a/drivers/clk/meson/Makefile > +++ b/drivers/clk/meson/Makefile > @@ -3,6 +3,7 @@ > # > > obj-$(CONFIG_COMMON_CLK_AMLOGIC) += clk-pll.o clk-mpll.o clk-audio-divider.o > +obj-$(CONFIG_COMMON_CLK_AMLOGIC) += clk-phase.o > obj-$(CONFIG_COMMON_CLK_MESON8B) += meson8b.o > obj-$(CONFIG_COMMON_CLK_GXBB) += gxbb.o gxbb-aoclk.o gxbb-aoclk-32k.o > obj-$(CONFIG_COMMON_CLK_AXG) += axg.o > diff --git a/drivers/clk/meson/clk-phase.c b/drivers/clk/meson/clk-phase.c > new file mode 100644 > index 000000000000..96e70497ef1b > --- /dev/null > +++ b/drivers/clk/meson/clk-phase.c > @@ -0,0 +1,63 @@ > +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) > +/* > + * Copyright (c) 2018 BayLibre, SAS. > + * Author: Jerome Brunet > + */ > + > +#include > +#include "clkc.h" > + > +#define phase_step(_width) (360 / (1 << (_width))) > + > +static inline struct meson_clk_phase_data * > +meson_clk_phase_data(struct clk_regmap *clk) > +{ > + return (struct meson_clk_phase_data *)clk->data; > +} > + > +int meson_clk_degrees_from_val(unsigned int val, unsigned int width) > +{ > + return phase_step(width) * val; > +} > +EXPORT_SYMBOL_GPL(meson_clk_degrees_from_val); > + > +unsigned int meson_clk_degrees_to_val(int degrees, unsigned int width) > +{ > + unsigned int val = DIV_ROUND_CLOSEST(degrees, phase_step(width)); > + > + /* > + * This last calculation is here for cases when degrees is rounded > + * to 360, in which case val == (1 << width). > + */ > + return val % (1 << width); > +} > +EXPORT_SYMBOL_GPL(meson_clk_degrees_to_val); > + > +static int meson_clk_phase_get_phase(struct clk_hw *hw) > +{ > + struct clk_regmap *clk = to_clk_regmap(hw); > + struct meson_clk_phase_data *phase = meson_clk_phase_data(clk); > + unsigned int val; > + > + val = meson_parm_read(clk->map, &phase->ph); > + > + return meson_clk_degrees_from_val(val, phase->ph.width); > +} > + > +static int meson_clk_phase_set_phase(struct clk_hw *hw, int degrees) > +{ > + struct clk_regmap *clk = to_clk_regmap(hw); > + struct meson_clk_phase_data *phase = meson_clk_phase_data(clk); > + unsigned int val; > + > + val = meson_clk_degrees_to_val(degrees, phase->ph.width); > + meson_parm_write(clk->map, &phase->ph, val); > + > + return 0; > +} > + > +const struct clk_ops meson_clk_phase_ops = { > + .get_phase = meson_clk_phase_get_phase, > + .set_phase = meson_clk_phase_set_phase, > +}; > +EXPORT_SYMBOL_GPL(meson_clk_phase_ops); > diff --git a/drivers/clk/meson/clkc.h b/drivers/clk/meson/clkc.h > index 8fe73c4edca8..9a17d6705e0a 100644 > --- a/drivers/clk/meson/clkc.h > +++ b/drivers/clk/meson/clkc.h > @@ -104,6 +104,13 @@ struct meson_clk_audio_div_data { > u8 flags; > }; > > +struct meson_clk_phase_data { > + struct parm ph; > +}; > + > +int meson_clk_degrees_from_val(unsigned int val, unsigned int width); > +unsigned int meson_clk_degrees_to_val(int degrees, unsigned int width); > + > #define MESON_GATE(_name, _reg, _bit) \ > struct clk_regmap _name = { \ > .data = &(struct clk_regmap_gate_data){ \ > @@ -127,5 +134,6 @@ extern const struct clk_ops meson_clk_mpll_ro_ops; > extern const struct clk_ops meson_clk_mpll_ops; > extern const struct clk_ops meson_clk_audio_divider_ro_ops; > extern const struct clk_ops meson_clk_audio_divider_ops; > +extern const struct clk_ops meson_clk_phase_ops; > > #endif /* __CLKC_H */ > Acked-by: Neil Armstrong