From patchwork Fri Jul 6 14:31:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 141330 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp3184071ljj; Fri, 6 Jul 2018 07:32:10 -0700 (PDT) X-Google-Smtp-Source: AAOMgpdemfniYJjCLlzbE33YEJKlP0yaA3aZW5G3aCQhCsFYvGP4jqRH2q+aOqlVq6UdBgU139JO X-Received: by 2002:a65:6559:: with SMTP id a25-v6mr9393525pgw.82.1530887530029; Fri, 06 Jul 2018 07:32:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530887530; cv=none; d=google.com; s=arc-20160816; b=UTVUTpxrGFj19cCfSZxVmKz6S7YonolYkI8bKD3fp9nQSKbNrGX7xHFsPQ8zCp0h7w yxHH2iSomhNbevSwrFBfZyP5ldNUyHCTv18jhLrt5zbZBh8NxLtTIPzkodoMAh7KVdMU 5zZnVlzbyAvcfuVx2NIwnCrzN54Xt3wv59kpKHzA1WxXcBTmqvmwN++xAEke73L3gb3K GbuURwwCfAaksA/Q04d+IwzKwipV7n7AV6c0T4+A50jxSayvCcyQZEFSIqDXht2oOo70 mwF5BlIR1wV95AmRgXnWtvLEbacFWwOkoC/D4++Xn1Yxgk32Ne9DWXqSfTpAXFl2vNnL XTyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=Q5udfyfJ9fkE3pRFewWqqyHAAM6JHa/PdncLvJV13n4=; b=nepeT18JT2SS0O1beROfZD0pchZhz3s5D/Afmqtd0+UNdrwhOgX8b7xCOzSFcd1li+ i97Q0dI39tyXZIFWA1cFVowWR2d7oGHWgy+/rD78S6MFLo0qephYZVOxOfXD2jNAqB9w dn/DZUFp18SMpuwxZSVs+/htZMQcRoC2X/dUuN+58zmjG9p6WUjkqjKmAGFlC6Jfkf3T oydL4PZeteBT0hrMXvsoyPjH3mj8pA5Iqpwsx+bhWQfirsZZ+QKQ9rZKELuB0WTAG98f YpU2nUrNRg0Cqlo8g0ryfw8+GDMlGS6db8qzYer3rGafAG9OxUB27skGW3thTkbrmSij BZyw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=ADYr4658; 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 l6-v6si7825535pgl.628.2018.07.06.07.32.04; Fri, 06 Jul 2018 07:32:10 -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=ADYr4658; 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 S933181AbeGFOcD (ORCPT + 31 others); Fri, 6 Jul 2018 10:32:03 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:33602 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932688AbeGFOb3 (ORCPT ); Fri, 6 Jul 2018 10:31:29 -0400 Received: by mail-wm0-f67.google.com with SMTP id z6-v6so5540953wma.0 for ; Fri, 06 Jul 2018 07:31:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Q5udfyfJ9fkE3pRFewWqqyHAAM6JHa/PdncLvJV13n4=; b=ADYr4658e2hrwNoBIUZciWF6aWijp7owrLRJqKkbS0+Lcu+CPXrmoNKZfeO4YemeQK w5tMvJr1k7jFhvotnMeFHsc2Ye9398OL0wrvocRUr+iHA3DLM/W1i21RvK6QbmAC+FG8 zY2v8FXwB6Uym5x7+PJfT1sESaBPtwJ7HAeJ2a7SSbKblGgzlkPIHuwEy/AYNHRdBHd5 kvFH4Wln7QxZA7oIIAHuxudHSgBjpXxXXxXuqx+YYm835ROBZZrMNxFWi05O/Q+VXDmv KjkXdLnJiWRP4gUx0tZtawfI3d5s0q2a5cGjm7tbJlxgHo2/sEaYVZ3YRgDl+6oN/6RA yLTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Q5udfyfJ9fkE3pRFewWqqyHAAM6JHa/PdncLvJV13n4=; b=UOhJWQkiIpk+8tCGAZlEw8LuoWQv1xesf4vxiEl6jNEmj3YOBmlZEsM2GfmOEAFL2u XfEPEU+vzHgt83na54BnJj3q1aCrdQ1wKunTxDeFwsAtxlfhe03v4MvmsqaQwH0sDRCt e1BRlFwRqL4F5Ao8aqiO7Pnvj16jHqp+QkyPToF0X9WKv5MbIS3OhFbXPmEW71t9ILjM 65sSOsXVGspFPKVDopE18RoGS1eVbUBmsKam1NVPauxJFg25XsaG+7GtNCVudxijUaop 4p3FGcJ6sySWHMDcaYyp66E6jMn3CZTFw8UHztzm0WgidpANEJXXFOopZQCk3XvKVDNZ SUxw== X-Gm-Message-State: APt69E1AzR/GzqEz5Eyhyt8tQlARYMNTBmCrH5cOuhWJRc+5TuYMrjhI CNPpDq5+sSF3yWjUo9D6kllkUA== X-Received: by 2002:a1c:bd5:: with SMTP id 204-v6mr7244408wml.160.1530887488120; Fri, 06 Jul 2018 07:31:28 -0700 (PDT) Received: from boomer.baylibre.local ([90.63.244.31]) by smtp.googlemail.com with ESMTPSA id b190-v6sm14358709wma.24.2018.07.06.07.31.26 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 06 Jul 2018 07:31:27 -0700 (PDT) From: Jerome Brunet To: Philipp Zabel , Kevin Hilman , Carlo Caione Cc: Jerome Brunet , devicetree@vger.kernel.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] reset: meson: add dt-bindings for meson-axg audio arb Date: Fri, 6 Jul 2018 16:31:21 +0200 Message-Id: <20180706143122.7612-2-jbrunet@baylibre.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180706143122.7612-1-jbrunet@baylibre.com> References: <20180706143122.7612-1-jbrunet@baylibre.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add dt-bindings for the audio memory arbitror found on Amlogic's A113 based SoCs Signed-off-by: Jerome Brunet --- .../bindings/reset/amlogic,meson-axg-audio-arb.txt | 21 +++++++++++++++++++++ .../dt-bindings/reset/amlogic,meson-axg-audio-arb.h | 17 +++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 Documentation/devicetree/bindings/reset/amlogic,meson-axg-audio-arb.txt create mode 100644 include/dt-bindings/reset/amlogic,meson-axg-audio-arb.h -- 2.14.4 diff --git a/Documentation/devicetree/bindings/reset/amlogic,meson-axg-audio-arb.txt b/Documentation/devicetree/bindings/reset/amlogic,meson-axg-audio-arb.txt new file mode 100644 index 000000000000..e29b3463f2e1 --- /dev/null +++ b/Documentation/devicetree/bindings/reset/amlogic,meson-axg-audio-arb.txt @@ -0,0 +1,21 @@ +* Amlogic audio memory arbitror controller + +The Amlogic Audio ARB is a simple device which enables or +disables the access of Audio FIFOs to DDR on AXG based SoC. + +Required properties: +- compatible: 'amlogic,meson-axg-audio-arb' +- reg: physical base address of the controller and length of memory + mapped region. +- clocks: phandle to the fifo peripheral clock provided by the audio + clock controller. +- #reset-cells: must be 1. + +Example on the A113 SoC: + +arb: reset-controller@280 { + compatible = "amlogic,meson-axg-audio-arb"; + reg = <0x0 0x280 0x0 0x4>; + #reset-cells = <1>; + clocks = <&clkc_audio AUD_CLKID_DDR_ARB>; +}; diff --git a/include/dt-bindings/reset/amlogic,meson-axg-audio-arb.h b/include/dt-bindings/reset/amlogic,meson-axg-audio-arb.h new file mode 100644 index 000000000000..05c36367875c --- /dev/null +++ b/include/dt-bindings/reset/amlogic,meson-axg-audio-arb.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: (GPL-2.0 OR MIT) + * + * Copyright (c) 2018 Baylibre SAS. + * Author: Jerome Brunet + */ + +#ifndef _DT_BINDINGS_AMLOGIC_MESON_AXG_AUDIO_ARB_H +#define _DT_BINDINGS_AMLOGIC_MESON_AXG_AUDIO_ARB_H + +#define AXG_ARB_TODDR_A 0 +#define AXG_ARB_TODDR_B 1 +#define AXG_ARB_TODDR_C 2 +#define AXG_ARB_FRDDR_A 3 +#define AXG_ARB_FRDDR_B 4 +#define AXG_ARB_FRDDR_C 5 + +#endif /* _DT_BINDINGS_AMLOGIC_MESON_AXG_AUDIO_ARB_H */ From patchwork Fri Jul 6 14:31:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 141329 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp3183428ljj; Fri, 6 Jul 2018 07:31:37 -0700 (PDT) X-Google-Smtp-Source: AAOMgpeH/l3SW9XZThCSiSiVaQSLW/jzKKWVXuDUdmMZ+6S6kvxxXBraL7wbcErmwcaJk78mh6rE X-Received: by 2002:a17:902:a5:: with SMTP id a34-v6mr10681156pla.80.1530887497097; Fri, 06 Jul 2018 07:31:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530887497; cv=none; d=google.com; s=arc-20160816; b=knqr+72TJXbBeTbSG/VutAFLU8RTuyqY4n+3kEnxdne5+X3ETLcI4ZGiL4BNCHAbPb P4r9ZeJBExzXEMEZTdqgfwBa0IhCo7Zxr59tB4cmj8+9pVZWQqnynd3tZmK8D/aoeSmc kFJQq4W1rOXtNZpOWrhs2u20hdrwacJsfdtcvbN0dmwvyHfAjo48Rrb+Y16sComzi+ey TXz2jpu2iMAYRPxgLQden5RpgVynJdlFasNQ37kIt5z4a3nWVwiATdVvaR6CJgNHrxGP 26ZSOlHxZU0WLitY20PvNiy2xf8nweoZR+1nDdGH6qckAC9IRedA6BiLqIXK/pNtPs4w 3G/w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=8w14N2fJyXXpDVsbu5ufgDBgPxgrsziRvwfn3mGkMo4=; b=KH7AkmLdnMOZDgczWlanWfqbTClsfRYXjb+mzopjoxxwgRmY/kCJhTbxtqxhi3vjKv VxEB1C7P9XCcICdlHzoRmgDDqwcqmNwau4r08cevVubT7fdjPPL4DVeOUUTxtjf6D9BK rWNvbqDpGWh55MvnPngUejlNdW7IBm8f0rag+kGauLkwYd2cL5kZQeDmsMFxskbmkGE4 Y0+/I2Lfb7Af4OLRij8VE1MJyZ65OmbS5zp3u/qwOmQlZLNgh0jkhnoblExWKQSItfeO fFgH+gaTzIlfad1rM11JnMURPD2hCBxjPUFFucyciDlhEutJz3Ix4Co1bLpP5P72Q3iQ f8cg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=Ck581qmj; 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 o11-v6si8146811plk.421.2018.07.06.07.31.36; Fri, 06 Jul 2018 07:31:37 -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=Ck581qmj; 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 S933098AbeGFObe (ORCPT + 31 others); Fri, 6 Jul 2018 10:31:34 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:45880 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932908AbeGFOba (ORCPT ); Fri, 6 Jul 2018 10:31:30 -0400 Received: by mail-wr1-f67.google.com with SMTP id u7-v6so4409655wrn.12 for ; Fri, 06 Jul 2018 07:31:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=8w14N2fJyXXpDVsbu5ufgDBgPxgrsziRvwfn3mGkMo4=; b=Ck581qmjtw4WtDzGmGZm6vnwJQsykGga6KZbGvLAndHgop/3LpRSGW6wZ9Dv0bIvDI mJsH6F1+4SlSq1mVzMZq9NP+hhtMseV230+6ZJfyGg361oX7XbZfyFLTg2THK2z2MoRs IuGygEdize3PgROc25HuXGr6sYZP56iH5Ftjl0qSroaXrqEVU4B0lni4xWpdtN91Zue+ CuIlhQC+xeoj8ZikKrEoub2s6VCcm0sovirgz3nGRuT2qtiPbN0BOcpE6IZpHx3tB+QA UZZp4FdN5Qr2Fcu6SagnSZNVi6X3SQmWq7z4G5H45ohElifYglacU2xsFXr7h40G4PeG +Yhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=8w14N2fJyXXpDVsbu5ufgDBgPxgrsziRvwfn3mGkMo4=; b=i4cZVBLwCKOMXf5tMEC4VEd2U/TpdvZJu8SMYwUnVS7pOuaDuee6u0XfuhicmzyE0d CYCQNAEtqw7whDqJU+LHS8cv+lScgzrNmYdXHQxvU3beA8pGWPtIV784X1HSEBiP7zg/ OWEgzOLpynu5MR+80NVzIkzJBM0cWCft4oVSrM2BcVDaUAt+ZH3rHS9dX2iwJmLjt0cU TzSX2UrQUH0t2FSKI9wtz/GD0FeWuQsLEEleL9iSE/0R3TtonlPwzmhcX4UwQMZegRaM oQg87g2sI1opWboOZZFnCdYtWMI0vUDVuomQUqSyq2PJvJ1LKixtYmIxyVhVggsC/Anm cYjw== X-Gm-Message-State: APt69E0CpQYNEMOMf5xrTtP9W3typN5EwlIu+zDcGVZHiqEJKlX965YS S4Xc1kChZcUn/7vDMqTq4KmKP+V6 X-Received: by 2002:adf:9aeb:: with SMTP id a98-v6mr7363696wrc.110.1530887489483; Fri, 06 Jul 2018 07:31:29 -0700 (PDT) Received: from boomer.baylibre.local ([90.63.244.31]) by smtp.googlemail.com with ESMTPSA id b190-v6sm14358709wma.24.2018.07.06.07.31.28 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 06 Jul 2018 07:31:28 -0700 (PDT) From: Jerome Brunet To: Philipp Zabel , Kevin Hilman , Carlo Caione Cc: Jerome Brunet , devicetree@vger.kernel.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/2] reset: meson: add meson audio arb driver Date: Fri, 6 Jul 2018 16:31:22 +0200 Message-Id: <20180706143122.7612-3-jbrunet@baylibre.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180706143122.7612-1-jbrunet@baylibre.com> References: <20180706143122.7612-1-jbrunet@baylibre.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The Amlogic Audio ARB is a simple device which enables or disables the access of Audio FIFOs to DDR on AXG based SoC. Signed-off-by: Jerome Brunet --- drivers/reset/Kconfig | 7 ++ drivers/reset/Makefile | 1 + drivers/reset/reset-meson-audio-arb.c | 168 ++++++++++++++++++++++++++++++++++ 3 files changed, 176 insertions(+) create mode 100644 drivers/reset/reset-meson-audio-arb.c -- 2.14.4 diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig index c0b292be1b72..c62c915167c4 100644 --- a/drivers/reset/Kconfig +++ b/drivers/reset/Kconfig @@ -73,6 +73,13 @@ config RESET_MESON help This enables the reset driver for Amlogic Meson SoCs. +config RESET_MESON_AUDIO_ARB + tristate "Meson Audio Memory Arbitror Reset Driver" + depends on ARCH_MESON || COMPILE_TEST + help + This enables the reset driver for Audio Memory Arbitror of + Amlogic's A113 based SoCs + config RESET_OXNAS bool diff --git a/drivers/reset/Makefile b/drivers/reset/Makefile index c1261dcfe9ad..aca2240b48aa 100644 --- a/drivers/reset/Makefile +++ b/drivers/reset/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_RESET_IMX7) += reset-imx7.o obj-$(CONFIG_RESET_LANTIQ) += reset-lantiq.o obj-$(CONFIG_RESET_LPC18XX) += reset-lpc18xx.o obj-$(CONFIG_RESET_MESON) += reset-meson.o +obj-$(CONFIG_RESET_MESON_AUDIO_ARB) += reset-meson-audio-arb.o obj-$(CONFIG_RESET_OXNAS) += reset-oxnas.o obj-$(CONFIG_RESET_PISTACHIO) += reset-pistachio.o obj-$(CONFIG_RESET_SIMPLE) += reset-simple.o diff --git a/drivers/reset/reset-meson-audio-arb.c b/drivers/reset/reset-meson-audio-arb.c new file mode 100644 index 000000000000..c3eec178972e --- /dev/null +++ b/drivers/reset/reset-meson-audio-arb.c @@ -0,0 +1,168 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) +// Copyright (c) 2018 BayLibre, SAS. +// Author: Jerome Brunet + +#include +#include +#include +#include +#include +#include + +#include + +struct meson_audio_arb_data { + struct reset_controller_dev rstc; + void __iomem *regs; + struct clk *clk; + const unsigned int *reset_bits; + spinlock_t lock; +}; + +#define ARB_GENERAL_BIT 31 + +static const unsigned int axg_audio_arb_reset_bits[] = { + [AXG_ARB_TODDR_A] = 0, + [AXG_ARB_TODDR_B] = 1, + [AXG_ARB_TODDR_C] = 2, + [AXG_ARB_FRDDR_A] = 4, + [AXG_ARB_FRDDR_B] = 5, + [AXG_ARB_FRDDR_C] = 6, +}; + +static int meson_audio_arb_update(struct reset_controller_dev *rcdev, + unsigned long id, bool assert) +{ + u32 val; + struct meson_audio_arb_data *arb = + container_of(rcdev, struct meson_audio_arb_data, rstc); + + spin_lock(&arb->lock); + val = readl(arb->regs); + + if (assert) + val &= ~BIT(arb->reset_bits[id]); + else + val |= BIT(arb->reset_bits[id]); + + writel(val, arb->regs); + spin_unlock(&arb->lock); + + return 0; +} + +static int meson_audio_arb_status(struct reset_controller_dev *rcdev, + unsigned long id) +{ + u32 val; + struct meson_audio_arb_data *arb = + container_of(rcdev, struct meson_audio_arb_data, rstc); + + val = readl(arb->regs); + + return !(val & BIT(arb->reset_bits[id])); +} + +static int meson_audio_arb_assert(struct reset_controller_dev *rcdev, + unsigned long id) +{ + return meson_audio_arb_update(rcdev, id, true); +} + +static int meson_audio_arb_deassert(struct reset_controller_dev *rcdev, + unsigned long id) +{ + return meson_audio_arb_update(rcdev, id, false); +} + +static const struct reset_control_ops meson_audio_arb_rstc_ops = { + .assert = meson_audio_arb_assert, + .deassert = meson_audio_arb_deassert, + .status = meson_audio_arb_status, +}; + +static const struct of_device_id meson_audio_arb_of_match[] = { + { .compatible = "amlogic,meson-axg-audio-arb", }, + {} +}; +MODULE_DEVICE_TABLE(of, meson_audio_arb_of_match); + +static int meson_audio_arb_remove(struct platform_device *pdev) +{ + struct meson_audio_arb_data *arb = platform_get_drvdata(pdev); + + /* Disable all access */ + spin_lock(&arb->lock); + writel(0, arb->regs); + spin_unlock(&arb->lock); + + clk_disable_unprepare(arb->clk); + + return 0; +} + +static int meson_audio_arb_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct meson_audio_arb_data *arb; + struct resource *res; + int ret; + + arb = devm_kzalloc(dev, sizeof(*arb), GFP_KERNEL); + if (!arb) + return -ENOMEM; + platform_set_drvdata(pdev, arb); + + arb->clk = devm_clk_get(dev, NULL); + if (IS_ERR(arb->clk)) { + if (PTR_ERR(arb->clk) != -EPROBE_DEFER) + dev_err(dev, "failed to get clock\n"); + return PTR_ERR(arb->clk); + } + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + arb->regs = devm_ioremap_resource(dev, res); + if (IS_ERR(arb->regs)) + return PTR_ERR(arb->regs); + + spin_lock_init(&arb->lock); + arb->reset_bits = axg_audio_arb_reset_bits; + arb->rstc.nr_resets = ARRAY_SIZE(axg_audio_arb_reset_bits); + arb->rstc.ops = &meson_audio_arb_rstc_ops; + arb->rstc.of_node = dev->of_node; + + /* + * Enable general : + * In the initial state, all memory interfaces are disabled + * and the general bit is on + */ + ret = clk_prepare_enable(arb->clk); + if (ret) { + dev_err(dev, "failed to enable arb clock\n"); + return ret; + } + writel(BIT(ARB_GENERAL_BIT), arb->regs); + + /* Register reset controller */ + ret = devm_reset_controller_register(dev, &arb->rstc); + if (ret) { + dev_err(dev, "failed to register arb reset controller\n"); + meson_audio_arb_remove(pdev); + } + + return ret; +} + +static struct platform_driver meson_audio_arb_pdrv = { + .probe = meson_audio_arb_probe, + .remove = meson_audio_arb_remove, + .driver = { + .name = "meson-audio-arb-reset", + .of_match_table = meson_audio_arb_of_match, + }, +}; +module_platform_driver(meson_audio_arb_pdrv); + +MODULE_DESCRIPTION("Amlogic A113 Audio Memory Arbitror"); +MODULE_AUTHOR("Jerome Brunet "); +MODULE_LICENSE("GPL v2");