Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp8190731ybc; Fri, 29 Nov 2019 06:50:12 -0800 (PST) X-Google-Smtp-Source: APXvYqzuY3qXyTsObJikZsZDPXHJr57U38OMn3xLIfpNQPAfIVoiUEY2St/4THDDIGANQLdp5BqX X-Received: by 2002:a17:906:941:: with SMTP id j1mr6666394ejd.185.1575039012120; Fri, 29 Nov 2019 06:50:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575039012; cv=none; d=google.com; s=arc-20160816; b=QQ+1j1RaWmZIR5/S2P3NMnC0Bb9k5gIJtgtZgNv/6Y8BazsHyObkBj6e612GHsu4mU JVIn1CWi50R6uNtK1e8zlUnrlsltTYzNAsf57WpJD2r7SLeyoNfywtc+b/3DekseOnc6 wDJYdG4vLn/ewaqJX5VkLfHy7favFp8A6Gxf0WZ2HtrZhJFPZ5WCtfils5Z9yQEkOLyK F1Ri7vfvBjug8jZgF/JqPkPse2aW5CZC+c3eAHBX8qCBse8HlqpvCnlnH/LYlRDL4IMi EO4nmbrGSqELseYuSIBmZmt+8pX2VruyX7GGetzn4FyUCp7Cwjtdtff4SJvorpzYsGYH 6jrw== 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:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=vvURRIPqZ0q1dKBLZozivTn4KUk4nlEpHoP/wB5a5qM=; b=lSQgLRsYlA6bKCFncydcCUfS5wXRyOk+Wc53BP9ffU9Zre+l8m3VfoMDVTX3G41462 2vNj4S3OvhPGcuTaedm41SCE0bpy9O6dynY3njlNyC/y9rMQCZuQACiuvoBeYWSD8b2O LkE2spGz42RaIo1+tUBnNW656BSDZvPDOgTs1uOOgbYd1EJ3ChQOdZi2h4Wr/S8fnOxY 5E9lqSGihxSZJY4aYky5kJYudw3pEHfR16qg1HeWPVYmkuymLZxGs5l1HUEei1GCN8La FOjIgCxyUfbFQa5rnQb7vEh10dERBM9ff1/6QS/EnWJ/gSHpc5o59J0c0Dv50z0+3Qt5 o6vg== ARC-Authentication-Results: i=1; mx.google.com; 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 gu11si1079072ejb.36.2019.11.29.06.49.48; Fri, 29 Nov 2019 06:50:12 -0800 (PST) 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; 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 S1727116AbfK2Oqe (ORCPT + 99 others); Fri, 29 Nov 2019 09:46:34 -0500 Received: from mail-sz.amlogic.com ([211.162.65.117]:43435 "EHLO mail-sz.amlogic.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727092AbfK2Oqe (ORCPT ); Fri, 29 Nov 2019 09:46:34 -0500 Received: from droid15-sz.amlogic.com (10.28.8.25) by mail-sz.amlogic.com (10.28.11.5) with Microsoft SMTP Server id 15.1.1591.10; Fri, 29 Nov 2019 22:46:37 +0800 From: Jian Hu To: Jerome Brunet , Neil Armstrong CC: Jian Hu , Kevin Hilman , Rob Herring , Martin Blumenstingl , Michael Turquette , Stephen Boyd , Qiufang Dai , Jianxin Pan , Victor Wan , Chandle Zou , , , , Subject: [PATCH v3 3/7] clk: meson: eeclk: refactor eeclk common driver to support A1 Date: Fri, 29 Nov 2019 22:46:01 +0800 Message-ID: <20191129144605.182774-4-jian.hu@amlogic.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191129144605.182774-1-jian.hu@amlogic.com> References: <20191129144605.182774-1-jian.hu@amlogic.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.28.8.25] Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Introduce a common probe function for A1 series, the way to get regmap is different between A1 series and the previous series. The register region is only for one clock driver, the function of meson_eeclkc_probe is not fit for A1, So it is necessary to introduce a new function. --- drivers/clk/meson/meson-eeclk.c | 59 +++++++++++++++++++++++++++------ drivers/clk/meson/meson-eeclk.h | 2 ++ 2 files changed, 51 insertions(+), 10 deletions(-) diff --git a/drivers/clk/meson/meson-eeclk.c b/drivers/clk/meson/meson-eeclk.c index a7cb1e7aedc4..6f9c8ee38c20 100644 --- a/drivers/clk/meson/meson-eeclk.c +++ b/drivers/clk/meson/meson-eeclk.c @@ -13,25 +13,37 @@ #include "clk-regmap.h" #include "meson-eeclk.h" -int meson_eeclkc_probe(struct platform_device *pdev) +static struct regmap_config clkc_regmap_config = { + .reg_bits = 32, + .val_bits = 32, + .reg_stride = 4, +}; + +struct regmap *meson_regmap_resource(struct platform_device *pdev) +{ + struct resource *res; + void __iomem *base; + struct device *dev = &pdev->dev; + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + + base = devm_ioremap_resource(dev, res); + if (IS_ERR(base)) + return ERR_CAST(base); + + return devm_regmap_init_mmio(dev, base, &clkc_regmap_config); +} + +int meson_common_probe(struct platform_device *pdev, struct regmap *map) { const struct meson_eeclkc_data *data; struct device *dev = &pdev->dev; - struct regmap *map; int ret, i; data = of_device_get_match_data(dev); if (!data) return -EINVAL; - /* Get the hhi system controller node */ - map = syscon_node_to_regmap(of_get_parent(dev->of_node)); - if (IS_ERR(map)) { - dev_err(dev, - "failed to get HHI regmap\n"); - return PTR_ERR(map); - } - if (data->init_count) regmap_multi_reg_write(map, data->init_regs, data->init_count); @@ -54,3 +66,30 @@ int meson_eeclkc_probe(struct platform_device *pdev) return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, data->hw_onecell_data); } + +int meson_eeclkc_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct regmap *map; + + /* Get the hhi system controller node */ + map = syscon_node_to_regmap(of_get_parent(dev->of_node)); + if (IS_ERR(map)) { + dev_err(dev, + "failed to get HHI regmap\n"); + return PTR_ERR(map); + } + + return meson_common_probe(pdev, map); +} + +int meson_clkc_probe(struct platform_device *pdev) +{ + struct regmap *map; + + map = meson_regmap_resource(pdev); + if (IS_ERR(map)) + return PTR_ERR(map); + + return meson_common_probe(pdev, map); +} diff --git a/drivers/clk/meson/meson-eeclk.h b/drivers/clk/meson/meson-eeclk.h index 77316207bde1..db0bfba8f6b3 100644 --- a/drivers/clk/meson/meson-eeclk.h +++ b/drivers/clk/meson/meson-eeclk.h @@ -20,6 +20,8 @@ struct meson_eeclkc_data { struct clk_hw_onecell_data *hw_onecell_data; }; +struct regmap *meson_regmap_resource(struct platform_device *pdev); int meson_eeclkc_probe(struct platform_device *pdev); +int meson_clkc_probe(struct platform_device *pdev); #endif /* __MESON_CLKC_H */ -- 2.24.0