Received: by 2002:a5d:925a:0:0:0:0:0 with SMTP id e26csp1167306iol; Fri, 10 Jun 2022 01:31:46 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwL6aQsLQ6ZeCUbqHh2hFKe26T/ye6itt3sSJC10H3xccGYHn2S5IOWbafCbxuVU0isJXt/ X-Received: by 2002:a63:318d:0:b0:3fc:6683:b with SMTP id x135-20020a63318d000000b003fc6683000bmr37979271pgx.251.1654849906505; Fri, 10 Jun 2022 01:31:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654849906; cv=none; d=google.com; s=arc-20160816; b=S2/loEULGd+5BYL2HK1HJxmvhpVrRX3SM6RefVm5D8QkziWqUUMVC8vAqB4HWyeSAm gWTINSFBMWIMOB7wisBt5gi1JjyC1dvgBP5h/HqJcB8TgjmjZRa5hrFQ44hs2IBsy040 2uUN0ZfxBc0/Y1XWl0utmwUHQHAXDFxjjGOLaNMpiU85uPVwgShNRZgZxtDok1/1nGDY r6IOfmw1vBDPgqyhLVegVMFzkCIpoEYqpfMVb98iBrPUBSKg9iKCcMD0DCFLMJDI2MX5 GR9cfTncVtVKQ2DMH+SDdg16iq71ZwqIeU9iEmLkdZPjWxEslXWgE2htsIiszzuMw24Q WXLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature:dkim-filter; bh=syGEXbGU09RDUy94S1bN5tHxUdSFPZ6wQd2qAtgwrPQ=; b=bNH9YPTFGAe79ObXLpOJ6rRN948S5YdllFuRuec7m3ZHNLICp8umwVBaZAVFlB1jYV axRKzPCbdlSO2J7MnubkuXFzXIXMeKhI2QGZB9oHK7kR2BLOGnY3zbKOJHsTrjXV4Cfi 5vEUE3cCBlUwpwlhkiqhm+2annVQELOrgR7qIl27L2CD2bemAkMCW+KjjKhPKh2R+f+6 LnuSSFIJt5LO3jOaKO+5TZ47mzvDjHhK4/VJ9djKZSiAm0pjVN/7nrgt5LgrPt7liKJl miQfWCGQPSsK9awCvpL3LVxuQqPlnVmVcZDxjQYY24ibZ4depouyFSrahMx0O/N9Qbru 2jjA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baikalelectronics.ru header.s=mail header.b=eYd91DXx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=baikalelectronics.ru Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 185-20020a6206c2000000b005189b83cdbcsi33064394pfg.61.2022.06.10.01.31.32; Fri, 10 Jun 2022 01:31:46 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@baikalelectronics.ru header.s=mail header.b=eYd91DXx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=baikalelectronics.ru Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346898AbiFJHmw (ORCPT + 99 others); Fri, 10 Jun 2022 03:42:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41192 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243900AbiFJHmu (ORCPT ); Fri, 10 Jun 2022 03:42:50 -0400 Received: from mail.baikalelectronics.com (mail.baikalelectronics.com [87.245.175.230]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 2910B3701B for ; Fri, 10 Jun 2022 00:42:45 -0700 (PDT) Received: from mail (mail.baikal.int [192.168.51.25]) by mail.baikalelectronics.com (Postfix) with ESMTP id 2ACF116A0; Fri, 10 Jun 2022 10:43:36 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 mail.baikalelectronics.com 2ACF116A0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baikalelectronics.ru; s=mail; t=1654847016; bh=syGEXbGU09RDUy94S1bN5tHxUdSFPZ6wQd2qAtgwrPQ=; h=From:To:CC:Subject:Date:From; b=eYd91DXxxLPdJztWvzh8UKCgXCqU9PmzRhTYOQ3F9JMDx91kHN4MHomHhmjgk3/8L +DJ4e5/6+ggrUWafZtvkhwE2jpftHxSg9d9Jlj6qGfoAfkFPJ8sucBcoTEdDGV56lo WGNv6YoYITKPI6vNOYNwo7vQsyxDt5zL3NYBPcFQ= Received: from localhost (192.168.53.207) by mail (192.168.51.25) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Fri, 10 Jun 2022 10:42:43 +0300 From: Serge Semin To: Jarkko Nikula , Andy Shevchenko , Mika Westerberg , Jan Dabros , Wolfram Sang , Phil Edworthy , Gareth Williams , Suravee Suthikulpanit CC: Serge Semin , Serge Semin , Alexey Malahov , Pavel Parkhomenko , , Subject: [PATCH] i2c: designware: Use standard optional ref clock implementation Date: Fri, 10 Jun 2022 10:42:33 +0300 Message-ID: <20220610074233.9748-1-Sergey.Semin@baikalelectronics.ru> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: MAIL.baikal.int (192.168.51.25) To mail (192.168.51.25) X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Even though the DW I2C controller reference clock source is requested by the method devm_clk_get() with non-optional clock requirement the way the clock handler is used afterwards has a pure optional clock semantic (though in some circumstances we can get a warning about the clock missing printed in the system console). There is no point in reimplementing that functionality seeing the kernel clock framework already supports the optional interface from scratch. Thus let's convert the platform driver to using it. Note by providing this commit we get to fix two problems. The first one was introduced in commit c62ebb3d5f0d ("i2c: designware: Add support for an interface clock"). It causes not having the interface clock (pclk) enabled/disabled in case if the reference clock isn't provided. The second problem was first introduced in commit b33af11de236 ("i2c: designware: Do not require clock when SSCN and FFCN are provided"). Since that modification the deferred probe procedure has been unsupported in case if the interface clock isn't ready. Fixes: c62ebb3d5f0d ("i2c: designware: Add support for an interface clock") Fixes: b33af11de236 ("i2c: designware: Do not require clock when SSCN and FFCN are provided") Signed-off-by: Serge Semin --- drivers/i2c/busses/i2c-designware-common.c | 3 --- drivers/i2c/busses/i2c-designware-platdrv.c | 13 +++++++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c index 9f8574320eb2..b08e5bc2b64c 100644 --- a/drivers/i2c/busses/i2c-designware-common.c +++ b/drivers/i2c/busses/i2c-designware-common.c @@ -477,9 +477,6 @@ int i2c_dw_prepare_clk(struct dw_i2c_dev *dev, bool prepare) { int ret; - if (IS_ERR(dev->clk)) - return PTR_ERR(dev->clk); - if (prepare) { /* Optional interface clock */ ret = clk_prepare_enable(dev->pclk); diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c index 70ade5306e45..ba043b547393 100644 --- a/drivers/i2c/busses/i2c-designware-platdrv.c +++ b/drivers/i2c/busses/i2c-designware-platdrv.c @@ -320,8 +320,17 @@ static int dw_i2c_plat_probe(struct platform_device *pdev) goto exit_reset; } - dev->clk = devm_clk_get(&pdev->dev, NULL); - if (!i2c_dw_prepare_clk(dev, true)) { + dev->clk = devm_clk_get_optional(&pdev->dev, NULL); + if (IS_ERR(dev->clk)) { + ret = PTR_ERR(dev->clk); + goto exit_reset; + } + + ret = i2c_dw_prepare_clk(dev, true); + if (ret) + goto exit_reset; + + if (dev->clk) { u64 clk_khz; dev->get_clk_rate_khz = i2c_dw_get_clk_rate_khz; -- 2.35.1