From patchwork Sat Mar 11 18:23:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 737716 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3vgXbk1jrPz9s2s for ; Sun, 12 Mar 2017 05:24:50 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="QOawgt44"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933046AbdCKSYu (ORCPT ); Sat, 11 Mar 2017 13:24:50 -0500 Received: from mail-wr0-f193.google.com ([209.85.128.193]:36616 "EHLO mail-wr0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932743AbdCKSYt (ORCPT ); Sat, 11 Mar 2017 13:24:49 -0500 Received: by mail-wr0-f193.google.com with SMTP id l37so15221616wrc.3 for ; Sat, 11 Mar 2017 10:24:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:subject:to:references:cc:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding; bh=0SF4LorSsUYK3c2thHPApO169D57QI1SLlwynlnQj7c=; b=QOawgt44VynYxVV2KYeCekM4IU0abS4wq8f+BaahgoTsMC9+P1ismkFXdMkhP//mXy iZEfQo4KxtIg3LZGPnBM2bGT/QRGw5dNhcrU/ZPa4D658EDGUQ4E8p5YPOjxEsAHp93S zjACCjsrjM/1igBo+SJ/ibBD2slBP3YqJPAnRsIMi+ZRYpIaxOKk/aNYsMMuwVzk0VB8 NkNfBXcSb3+YuXSnTE8s1f7+Ew9pNkfgfMUS72Bin6n7bNMNwBc9h8Fb8xkBBUjduFOj IHKcvzx+riFWZ6l/gc1ldLeie2ZkkcQdVwsOnVOPWJhDXE+CcVtgzlWg739nYWV+PdqC trSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:references:cc:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=0SF4LorSsUYK3c2thHPApO169D57QI1SLlwynlnQj7c=; b=dx8fvu+OPUKWI2dLGBOYG50a5EBmCUc14Rg80SdEhX8Q9dvJE1T7yu/zNudCUzx8Ry E0jUjyES43VvKMKVYhKFwqyRc1z8jSzAATubXncno95SnZFOxWvgQ4jC1PLKhi0PHJaU db8YoGPcjPiHYZvXwBREtQY/FLs/KpgNF+FcMtKZ1jvBG0YT49IFTZIEAEbLdQWr7TPC oagXaOg/k/ouHSk7CVTO7BDQQA7TpWQj2iOuYQ+ZY82In5Ni3bletKJeqZBNgsoaJG1K L06MkNY2lfKGzplLRF/ueeNqVTerlbhQmh9B66ZAmoRpdjCtO94RzXq6uAazeQIwQsaM 5AGg== X-Gm-Message-State: AMke39mPZ6qOT7JfcI5BGW3QjWErrmHbdB4ckIpISW7zJBPksoprmMn/nEjarb7aDUF34w== X-Received: by 10.223.175.15 with SMTP id z15mr23904156wrc.84.1489256687446; Sat, 11 Mar 2017 10:24:47 -0800 (PST) Received: from ?IPv6:2003:c6:ebdc:4000:3419:a191:120:8b2e? (p200300C6EBDC40003419A19101208B2E.dip0.t-ipconnect.de. [2003:c6:ebdc:4000:3419:a191:120:8b2e]) by smtp.googlemail.com with ESMTPSA id q4sm4538334wme.17.2017.03.11.10.24.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 11 Mar 2017 10:24:47 -0800 (PST) From: Heiner Kallweit Subject: [PATCH v3 05/10] i2c: meson: use full 12 bits for clock divider To: Wolfram Sang , Jerome Brunet References: Cc: "linux-i2c@vger.kernel.org" , linux-amlogic@lists.infradead.org Message-ID: <6b3eaf91-c3ec-72e0-4f7d-7ee398791554@gmail.com> Date: Sat, 11 Mar 2017 19:23:29 +0100 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org The clock divider has 12 bits, splitted into a 10 bit field and a 2 bit field. The extra 2 bits aren't used currently. Change this to use the full 12 bits and warn if the requested frequency is too low. Signed-off-by: Heiner Kallweit Acked-by: Jerome Brunet --- v2: - added Acked-by v3: - changed order of patches --- drivers/i2c/busses/i2c-meson.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/i2c/busses/i2c-meson.c b/drivers/i2c/busses/i2c-meson.c index ac0ac82d..03f70282 100644 --- a/drivers/i2c/busses/i2c-meson.c +++ b/drivers/i2c/busses/i2c-meson.c @@ -35,7 +35,9 @@ #define REG_CTRL_STATUS BIT(2) #define REG_CTRL_ERROR BIT(3) #define REG_CTRL_CLKDIV_SHIFT 12 -#define REG_CTRL_CLKDIV_MASK ((BIT(10) - 1) << REG_CTRL_CLKDIV_SHIFT) +#define REG_CTRL_CLKDIV_MASK GENMASK(21, 12) +#define REG_CTRL_CLKDIVEXT_SHIFT 28 +#define REG_CTRL_CLKDIVEXT_MASK GENMASK(29, 28) #define I2C_TIMEOUT_MS 500 @@ -134,8 +136,15 @@ static void meson_i2c_set_clk_div(struct meson_i2c *i2c, unsigned int freq) unsigned int div; div = DIV_ROUND_UP(clk_rate, freq * 4); + + /* clock divider has 12 bits */ + WARN_ON(div >= (1 << 12)); + meson_i2c_set_mask(i2c, REG_CTRL, REG_CTRL_CLKDIV_MASK, - div << REG_CTRL_CLKDIV_SHIFT); + (div & GENMASK(9, 0)) << REG_CTRL_CLKDIV_SHIFT); + + meson_i2c_set_mask(i2c, REG_CTRL, REG_CTRL_CLKDIVEXT_MASK, + (div >> 10) << REG_CTRL_CLKDIVEXT_SHIFT); dev_dbg(i2c->dev, "%s: clk %lu, freq %u, div %u\n", __func__, clk_rate, freq, div);