Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp396994imu; Fri, 16 Nov 2018 04:22:23 -0800 (PST) X-Google-Smtp-Source: AJdET5ee9dN0Typ+tQ4blDTtC+JSlcKWRYtR+OZ9AjovNs1u3furk0up/jawQ5zmgzH/ISjjj+IM X-Received: by 2002:a63:4044:: with SMTP id n65mr9464274pga.90.1542370943166; Fri, 16 Nov 2018 04:22:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542370943; cv=none; d=google.com; s=arc-20160816; b=NEtLWyfJ0jJk6UfyZLgP5XPhHIh3c8w+m919pSPHbO/qY6YvfxA/vbwSLWvu3MZZf3 AZ/EszI/UtZcP0kbc7l7RpMbN8oxIs14pHeLR9QPggnrW+7WbVk0KaYF50GPDns9Qnbw 1kjOVw/NLTInBtvh67YHLBkUPRuCSrT6FWf+bGzQgvNdXsItNHSntbHN8FRN6KeDPvwe zG6LbAnAshxs0wKYcVmX5pc+tDHR5Z4f8Wkz/A2Oqy4v5p3EJ8lY+2PG8lSHI9/lm+vS mGimklAbplJjtUUKOQAvzX57ZPvahtuu/FCT2ebA3blAb263lClgfyAWdQi6Ay42dAtw 8uKA== 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=CNExSg1kZnHb/htiVqzGI2phKR28fQ5zgCtDQDaBjTE=; b=TexTh/YKAZ+GHCfOWiZ0GKO12Ze1+ie4WEOrfHZXek0z6lfZkjGri3TRYwgM4W3Xml lKFRsOSw7/GXOV7vVxTWt8wIPWdRt1tTHAyOtsI/8dZWBumyfe6Qdt5efRc+Hs158U9y cFkh5nF1ypL1Mb/FOpVYlfdjxetfEQrkc+E8q2j3Q6didq9Wwyy6lJQnyvBX/MnzVO7w nW9g8tQ8rSOEjhnGh5Dm3JHtVJA6SmaikVtzT8bHMj3eVg+vsSjW6jdk3eJ152dXNTqO 15PAjIoFkfRbbh6GoKPdeT3fsLSCvJhui+fYR18PC4IgqkSEqgQ4ppub5SF2nhz9fJB3 Zvjw== 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 y7-v6si31004813plk.174.2018.11.16.04.22.08; Fri, 16 Nov 2018 04:22:23 -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 S2389586AbeKPWc7 (ORCPT + 99 others); Fri, 16 Nov 2018 17:32:59 -0500 Received: from mx07-00178001.pphosted.com ([62.209.51.94]:39523 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727825AbeKPWc6 (ORCPT ); Fri, 16 Nov 2018 17:32:58 -0500 Received: from pps.filterd (m0046037.ppops.net [127.0.0.1]) by mx07-.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id wAGCIeJh002467; Fri, 16 Nov 2018 13:20:31 +0100 Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com with ESMTP id 2nr7cyqh9u-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Fri, 16 Nov 2018 13:20:31 +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 605AD31; Fri, 16 Nov 2018 12:20:30 +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 3A6F12A17; Fri, 16 Nov 2018 12:20:30 +0000 (GMT) Received: from localhost (10.75.127.50) by SFHDAG5NODE2.st.com (10.75.127.14) with Microsoft SMTP Server (TLS) id 15.0.1347.2; Fri, 16 Nov 2018 13:20:29 +0100 From: Pierre-Yves MORDRET To: Rob Herring , Mark Rutland , Maxime Coquelin , Alexandre Torgue , Wolfram Sang , Pierre-Yves MORDRET , , , , , Subject: [PATCH v1 2/2] i2c: i2c-stm32f7: SYSCFG Fast Mode Plus support for I2C STM32F7 Date: Fri, 16 Nov 2018 13:20:22 +0100 Message-ID: <1542370822-14721-3-git-send-email-pierre-yves.mordret@st.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1542370822-14721-1-git-send-email-pierre-yves.mordret@st.com> References: <1542370822-14721-1-git-send-email-pierre-yves.mordret@st.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.75.127.50] X-ClientProxiedBy: SFHDAG5NODE2.st.com (10.75.127.14) To SFHDAG5NODE2.st.com (10.75.127.14) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2018-11-16_06:,, 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: v1: * Initial --- --- drivers/i2c/busses/i2c-stm32f7.c | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/drivers/i2c/busses/i2c-stm32f7.c b/drivers/i2c/busses/i2c-stm32f7.c index 62d023e..8e381b7 100644 --- a/drivers/i2c/busses/i2c-stm32f7.c +++ b/drivers/i2c/busses/i2c-stm32f7.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -276,6 +277,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 +298,7 @@ struct stm32f7_i2c_dev { bool master_mode; struct stm32_i2c_dma *dma; bool use_dma; + struct regmap *regmap; }; /** @@ -1763,6 +1766,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 +1855,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