From patchwork Fri Jun 9 09:49:11 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neil Armstrong X-Patchwork-Id: 9777817 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 696DE60350 for ; Fri, 9 Jun 2017 09:50:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5A56126B39 for ; Fri, 9 Jun 2017 09:50:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4F68A285E1; Fri, 9 Jun 2017 09:50:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id D8CD626B39 for ; Fri, 9 Jun 2017 09:50:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=kFFUhjitLPUhIvFnjBzKtAb8Cn6/x20yuJh1++dcCfQ=; b=mEHwftBrEHUWColwduf1OYAUzV hwiheBJ2z3n4MfH7Yq/6tv56uT230VO91K811G8QG3nY31YTLQ2hIhodfG2f9zPmYg3H2dD3GH5r4 SeCHlV82+OEGSuymYz0ELJ9/w0cEvFrp5jmfIh4CpMdwfvyx/sAYDSWfTGR14CHm9d30OXDwzzFh/ TEJNAXbIVVolC31uJkUZBBoKKP0zH/GrIC0+wqNoAn1zr8babg1OATi9cVQmnaAQ9KCwRHFZGB82s nboiSq8dBrspIxnfDzMA0H/5BeYceuc00/qZklyhGaUYz+VkIHWCl5zIo1INFYTn4/oc5IENDTKEe g2Qk63EA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1dJGYh-00088D-U1; Fri, 09 Jun 2017 09:50:23 +0000 Received: from mail-wr0-x235.google.com ([2a00:1450:400c:c0c::235]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1dJGYA-0006Hk-Ng for linux-amlogic@lists.infradead.org; Fri, 09 Jun 2017 09:49:53 +0000 Received: by mail-wr0-x235.google.com with SMTP id v104so28144034wrb.0 for ; Fri, 09 Jun 2017 02:49: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=XK46eUT9ylA8UbjdrActXPZi168P4T0Scx1HZd4WdX0=; b=ibbA7qx678mhhvAU5zdT91gADyZXFfX7bm/5vW4TpTC2HR7pND3C4W3fquBpJ6dBZF KVBHY/EEZBSoY1wtATsLounNaYAj6jbr0wWOQ4JKw1SXDS9oFDBk1GvhuL3Sic34k/m6 o5tMmDRtR3DG4NQgH93WmXSRu9lk0K6Dxq1ok3/LqIApYTIU8wm5Ouh8574xHPMSrsU6 VjXPNVW9NBXhg0hfWGE7AKmbtWXFunKFSr+b4LP5jAUC4JwTs29kPV4flzvw/FDO9pBJ wBd2A46T++TDdFRjvmlnAhXcci3NGZAaujSVocF8Q7wuSdNM3hYknGT/bOuZ6bQEw5uo c3HQ== 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=XK46eUT9ylA8UbjdrActXPZi168P4T0Scx1HZd4WdX0=; b=fzIUZs0Iu5PmxugMtW+QMhZbXYRK1YwY84DTYBZT5PAT+WJdaCdAn4mXSwKiXL1DrV PcS6i72lJgOFlxyGc5kkWaa5ox/g/BPrhXkoJTDbCgfHKbr/u/ABLvIyiotoRGJu8SuA XhMYWL0X05w4ZdoPZbaKG1qZe9hkMwXFky2s6tN6qdvKgF8OSDnDqrskzNAplIwNZbGr hCjlYGy+k82LKfLkFGCxJZhSwg1dhG5zqgtzgUqLSGhj2dElzfr2jWBD74cdgwwQdlVw UPxjpYnKYxRAlpahVmJIdEJv32jcqBuivBVdGi9GdHv0fvwmFWpMimggbuE4ys8XCFLC /zEw== X-Gm-Message-State: AODbwcAFDp8aS6f+z6BpDHYCKV9uWn+5pbmhHGgmYDHhL3ncYXePOdeM 4VYQeNUyCAc5074Z X-Received: by 10.223.171.24 with SMTP id q24mr24326428wrc.89.1497001769046; Fri, 09 Jun 2017 02:49:29 -0700 (PDT) Received: from localhost.localdomain ([90.63.244.31]) by smtp.gmail.com with ESMTPSA id n92sm968983wrb.62.2017.06.09.02.49.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 09 Jun 2017 02:49:28 -0700 (PDT) From: Neil Armstrong To: gregkh@linuxfoundation.org, khilman@baylibre.com Subject: [PATCH v4 2/7] tty/serial: meson_uart: update to stable bindings Date: Fri, 9 Jun 2017 11:49:11 +0200 Message-Id: <1497001756-942-3-git-send-email-narmstrong@baylibre.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1497001756-942-1-git-send-email-narmstrong@baylibre.com> References: <1497001756-942-1-git-send-email-narmstrong@baylibre.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170609_024951_031888_2682A243 X-CRM114-Status: GOOD ( 14.98 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Neil Armstrong , linux-kernel@vger.kernel.org, Helmut Klein , linux-serial@vger.kernel.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+patchwork-linux-amlogic=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP From: Helmut Klein This patch handle the stable UART bindings but also keeps compatibility with the legacy non-stable bindings until all boards uses them. Signed-off-by: Helmut Klein Signed-off-by: Neil Armstrong Reviewed-by: Jerome Brunet --- drivers/tty/serial/meson_uart.c | 109 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 103 insertions(+), 6 deletions(-) diff --git a/drivers/tty/serial/meson_uart.c b/drivers/tty/serial/meson_uart.c index 60f1679..d2c8136 100644 --- a/drivers/tty/serial/meson_uart.c +++ b/drivers/tty/serial/meson_uart.c @@ -579,8 +579,12 @@ static void meson_serial_early_console_write(struct console *co, device->con->write = meson_serial_early_console_write; return 0; } +/* Legacy bindings, should be removed when no more used */ OF_EARLYCON_DECLARE(meson, "amlogic,meson-uart", meson_serial_early_console_setup); +/* Stable bindings */ +OF_EARLYCON_DECLARE(meson, "amlogic,meson-ao-uart", + meson_serial_early_console_setup); #define MESON_SERIAL_CONSOLE (&meson_serial_console) #else @@ -595,11 +599,95 @@ static void meson_serial_early_console_write(struct console *co, .cons = MESON_SERIAL_CONSOLE, }; +/* + * This function gets clocks in the legacy non-stable DT bindings. + * This code will be remove once all the platforms switch to the + * new DT bindings. + */ +static int meson_uart_probe_clocks_legacy(struct platform_device *pdev, + struct uart_port *port) +{ + struct clk *clk = NULL; + int ret; + + clk = devm_clk_get(&pdev->dev, NULL); + if (IS_ERR(clk)) + return PTR_ERR(clk); + + ret = clk_prepare_enable(clk); + if (ret) { + dev_err(&pdev->dev, "couldn't enable clk\n"); + return ret; + } + + devm_add_action_or_reset(&pdev->dev, + (void(*)(void *))clk_disable_unprepare, + clk); + + port->uartclk = clk_get_rate(clk); + + return 0; +} + +static int meson_uart_probe_clocks(struct platform_device *pdev, + struct uart_port *port) +{ + struct clk *clk_xtal = NULL; + struct clk *clk_pclk = NULL; + struct clk *clk_baud = NULL; + int ret; + + clk_pclk = devm_clk_get(&pdev->dev, "pclk"); + if (IS_ERR(clk_pclk)) + return PTR_ERR(clk_pclk); + + clk_xtal = devm_clk_get(&pdev->dev, "xtal"); + if (IS_ERR(clk_xtal)) + return PTR_ERR(clk_xtal); + + clk_baud = devm_clk_get(&pdev->dev, "baud"); + if (IS_ERR(clk_xtal)) + return PTR_ERR(clk_baud); + + ret = clk_prepare_enable(clk_pclk); + if (ret) { + dev_err(&pdev->dev, "couldn't enable pclk\n"); + return ret; + } + + devm_add_action_or_reset(&pdev->dev, + (void(*)(void *))clk_disable_unprepare, + clk_pclk); + + ret = clk_prepare_enable(clk_xtal); + if (ret) { + dev_err(&pdev->dev, "couldn't enable xtal\n"); + return ret; + } + + devm_add_action_or_reset(&pdev->dev, + (void(*)(void *))clk_disable_unprepare, + clk_xtal); + + ret = clk_prepare_enable(clk_baud); + if (ret) { + dev_err(&pdev->dev, "couldn't enable baud clk\n"); + return ret; + } + + devm_add_action_or_reset(&pdev->dev, + (void(*)(void *))clk_disable_unprepare, + clk_baud); + + port->uartclk = clk_get_rate(clk_baud); + + return 0; +} + static int meson_uart_probe(struct platform_device *pdev) { struct resource *res_mem, *res_irq; struct uart_port *port; - struct clk *clk; int ret = 0; if (pdev->dev.of_node) @@ -625,11 +713,15 @@ static int meson_uart_probe(struct platform_device *pdev) if (!port) return -ENOMEM; - clk = clk_get(&pdev->dev, NULL); - if (IS_ERR(clk)) - return PTR_ERR(clk); + /* Use legacy way until all platforms switch to new bindings */ + if (of_device_is_compatible(pdev->dev.of_node, "amlogic,meson-uart")) + ret = meson_uart_probe_clocks_legacy(pdev, port); + else + ret = meson_uart_probe_clocks(pdev, port); + + if (ret) + return ret; - port->uartclk = clk_get_rate(clk); port->iotype = UPIO_MEM; port->mapbase = res_mem->start; port->irq = res_irq->start; @@ -668,9 +760,14 @@ static int meson_uart_remove(struct platform_device *pdev) return 0; } - static const struct of_device_id meson_uart_dt_match[] = { + /* Legacy bindings, should be removed when no more used */ { .compatible = "amlogic,meson-uart" }, + /* Stable bindings */ + { .compatible = "amlogic,meson6-uart" }, + { .compatible = "amlogic,meson8-uart" }, + { .compatible = "amlogic,meson8b-uart" }, + { .compatible = "amlogic,meson-gx-uart" }, { /* sentinel */ }, }; MODULE_DEVICE_TABLE(of, meson_uart_dt_match);