Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2592701imu; Mon, 19 Nov 2018 03:06:37 -0800 (PST) X-Google-Smtp-Source: AFSGD/VQh0/oYUgJub/9Ofqlyv5PNhC6QiTfeGWDj1xVsc0OjTNn7qv8PhrmwtmakLWFjyiF1rTK X-Received: by 2002:a17:902:1681:: with SMTP id h1mr11629140plh.129.1542625596973; Mon, 19 Nov 2018 03:06:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542625596; cv=none; d=google.com; s=arc-20160816; b=B8S/z9mLSuNjfHofoKI7d2q5QatOgFW+x/XJdqVstWjGB9e/OG6sPrxi6cWsxxUa2T gviDcuXyPgf1b+iwgtLuJM10QqJ6/ZuRbi4bYN/PQSJwccIk5IwlMvnJKvQ1EJlIVpjJ W64X7W4ZQ+zcA9W0S4XAQojOwn6i+jVyI6zPYyHh57jW+7q8s1dWUzlRObvePJiYt/FD +RNixptEG0blekEZBSXjwVtgViW+y6+BiFqjIZnSh9MliaAnHGN8wU0HpGopsRInhCSn te41rbFtYiQebxngVeLToys1zb0l8eLrTJemeVWt2uKZH2sSxX3lmigIOKEDZC0FmYkV H56Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:to:from; bh=8ZFTATewSJAKjbhwuD3xjm6mka2VYT7lA6HEkN45ly8=; b=NEYSu87/zrLTqUzOGVMSZEXEh75K2hzxopSiEJuGtkKrGS4ze6h69pbiOJB8D9nLCw agv4FFQC7Ivi2628NrC8A4s8spxwbvaEHWak4ilkPe04CjzdgDiQcmTcWouVyZNSEQxi R+mSbLaV4kF2oC5ig22bw2eZFP0XJ2ExN2qGG+10R5GfXvzQ+R4s+GPrxWeps4uvbs1V rvxHSyXFlhkg7Hde3yUF6HYDWwmuZnc4/nFTEYicyJ3wIUjtmCX49PRTAfxM7DxjA+S1 wyQEFuqyNaXLWKzW64t8H4zRyIbJgOIGHXlLtSw9Jh3nCTi5iXJZEc1j+wFRIuCITjj1 fzMQ== 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 n4si19879527pgv.512.2018.11.19.03.06.21; Mon, 19 Nov 2018 03:06:36 -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 S1728420AbeKSV11 (ORCPT + 99 others); Mon, 19 Nov 2018 16:27:27 -0500 Received: from mx08-00178001.pphosted.com ([91.207.212.93]:50262 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725911AbeKSV11 (ORCPT ); Mon, 19 Nov 2018 16:27:27 -0500 Received: from pps.filterd (m0046661.ppops.net [127.0.0.1]) by mx08-.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id wAJAx52C016310; Mon, 19 Nov 2018 12:03:37 +0100 Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx08-00178001.pphosted.com with ESMTP id 2ntarga8p4-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Mon, 19 Nov 2018 12:03:37 +0100 Received: from zeta.dmz-eu.st.com (zeta.dmz-eu.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 6DEF231; Mon, 19 Nov 2018 11:03:36 +0000 (GMT) Received: from Webmail-eu.st.com (sfhdag5node2.st.com [10.75.127.14]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 4C28B26A3; Mon, 19 Nov 2018 11:03:36 +0000 (GMT) Received: from localhost (10.75.127.46) by SFHDAG5NODE2.st.com (10.75.127.14) with Microsoft SMTP Server (TLS) id 15.0.1347.2; Mon, 19 Nov 2018 12:03:35 +0100 From: Pierre-Yves MORDRET To: Rob Herring , Mark Rutland , Maxime Coquelin , Alexandre Torgue , Wolfram Sang , Pierre-Yves MORDRET , , , , , Subject: [PATCH v2 2/2] i2c: i2c-stm32f7: SYSCFG Fast Mode Plus support for I2C STM32F7 Date: Mon, 19 Nov 2018 12:03:32 +0100 Message-ID: <1542625412-4277-3-git-send-email-pierre-yves.mordret@st.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1542625412-4277-1-git-send-email-pierre-yves.mordret@st.com> References: <1542625412-4277-1-git-send-email-pierre-yves.mordret@st.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.75.127.46] X-ClientProxiedBy: SFHDAG5NODE3.st.com (10.75.127.15) To SFHDAG5NODE2.st.com (10.75.127.14) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2018-11-19_04:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Read SYSCFG bindings to set Fast Mode Plus bits if Fast Mode Plus speed is selected. Signed-off-by: Pierre-Yves MORDRET --- Version history: v2: * Missing header file inclusion v1: * Initial --- --- drivers/i2c/busses/i2c-stm32f7.c | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/drivers/i2c/busses/i2c-stm32f7.c b/drivers/i2c/busses/i2c-stm32f7.c index 62d023e..e9f0c0b 100644 --- a/drivers/i2c/busses/i2c-stm32f7.c +++ b/drivers/i2c/busses/i2c-stm32f7.c @@ -21,12 +21,14 @@ #include #include #include +#include #include #include #include #include #include #include +#include #include #include @@ -276,6 +278,7 @@ struct stm32f7_i2c_msg { * slave) * @dma: dma data * @use_dma: boolean to know if dma is used in the current transfer + * @regmap: holds SYSCFG phandle for Fast Mode Plus bits */ struct stm32f7_i2c_dev { struct i2c_adapter adap; @@ -296,6 +299,7 @@ struct stm32f7_i2c_dev { bool master_mode; struct stm32_i2c_dma *dma; bool use_dma; + struct regmap *regmap; }; /** @@ -1763,6 +1767,30 @@ static int stm32f7_i2c_unreg_slave(struct i2c_client *slave) return 0; } +static int stm32f7_i2c_setup_fm_plus_bits(struct platform_device *pdev, + struct stm32f7_i2c_dev *i2c_dev) +{ + struct device_node *np = pdev->dev.of_node; + int ret; + u32 reg, mask; + + i2c_dev->regmap = syscon_regmap_lookup_by_phandle(np, "st,syscfg-fmp"); + if (IS_ERR(i2c_dev->regmap)) { + /* Optional */ + return 0; + } + + ret = of_property_read_u32_index(np, "st,syscfg-fmp", 1, ®); + if (ret) + return ret; + + ret = of_property_read_u32_index(np, "st,syscfg-fmp", 2, &mask); + if (ret) + return ret; + + return regmap_update_bits(i2c_dev->regmap, reg, mask, mask); +} + static u32 stm32f7_i2c_func(struct i2c_adapter *adap) { return I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR | I2C_FUNC_SLAVE | @@ -1828,12 +1856,16 @@ static int stm32f7_i2c_probe(struct platform_device *pdev) i2c_dev->speed = STM32_I2C_SPEED_STANDARD; ret = device_property_read_u32(&pdev->dev, "clock-frequency", &clk_rate); - if (!ret && clk_rate >= 1000000) + if (!ret && clk_rate >= 1000000) { i2c_dev->speed = STM32_I2C_SPEED_FAST_PLUS; - else if (!ret && clk_rate >= 400000) + ret = stm32f7_i2c_setup_fm_plus_bits(pdev, i2c_dev); + if (ret) + goto clk_free; + } else if (!ret && clk_rate >= 400000) { i2c_dev->speed = STM32_I2C_SPEED_FAST; - else if (!ret && clk_rate >= 100000) + } else if (!ret && clk_rate >= 100000) { i2c_dev->speed = STM32_I2C_SPEED_STANDARD; + } rst = devm_reset_control_get(&pdev->dev, NULL); if (IS_ERR(rst)) { -- 2.7.4