Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3442270pxf; Mon, 15 Mar 2021 09:36:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzcIdOr8/73cPNtREVCYNICN6qTblzkyu52a/GUbpcdRrFFhgob8qizp+e/URl0fdd89CBp X-Received: by 2002:a17:906:ac6:: with SMTP id z6mr24325881ejf.505.1615826179769; Mon, 15 Mar 2021 09:36:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1615826179; cv=none; d=google.com; s=arc-20160816; b=SafIl36kVMUgBED/EMngrdUf87EjXnOMNX1W0pjEQZAnlAgF4pUU325qCJYk/NitQg ojjwqBV0l8+bh3Kt7rv3iheXoB4A7f6hnP5NNnghtQUEOvGm2m1FORvW0ts8+ZSfKP0C VjLZR3Ghz+kPNYK4KBI8BOpfoBdawsv94gLWcv6MQGhDMugybTH7efD56TjPCCG96Miy qGj7XufxqiQ4JudS4bBnmAEoW5vbuXa/0KalRZn9Mx/kyCkbPzbZlBlCbE+ZcqlyemNq YZcecIVr9y3lSeRvuOv54iAUwg9MC06O9DmQ1AyUNJzpYUhqqwLSaCV5YZizDVCJebMF iOyg== 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; bh=Ds5r4atkt7H3fXeTYFVLQ2kdiH1XrKSXEJN8znX27WY=; b=zbdIbuE+XH08yNtjDbafDNXeUL+YdtMU4n/JJIIdj52fU4vM/7pdMJRxDt2eofIxAa bXyQ8FMtlEBj/UdkUdaH5/1A1AEoPtWUsfTuhPWVpivLq/QwEDVBHcjOj9MDC+iS3YGi 2tLXRNuKo1HTYW2hiVyfxidN5p2csNHNVbiXA3s+8Vof1akzK6cXSXTojm25fT3xCMAb azg1K7cWdgVJKueC6sXbpwF2MlC2RAqbLu6E3t8gBAOSfUdvCBgBFktxMeg4itGaSJr2 n7i3T4k8FTTyI6kkmGzGPMsnpHp2JpvOLyFOTaEXPvIHRP3XY48IGqXhqMXjMXYZ221g Siyg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@de.bosch.com header.s=key3-intmail header.b=MIN3BlJN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=NONE dis=NONE) header.from=de.bosch.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h15si11586924edv.182.2021.03.15.09.35.56; Mon, 15 Mar 2021 09:36:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@de.bosch.com header.s=key3-intmail header.b=MIN3BlJN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=NONE dis=NONE) header.from=de.bosch.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231890AbhCOQem (ORCPT + 99 others); Mon, 15 Mar 2021 12:34:42 -0400 Received: from de-out1.bosch-org.com ([139.15.230.186]:45224 "EHLO de-out1.bosch-org.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232363AbhCOQe1 (ORCPT ); Mon, 15 Mar 2021 12:34:27 -0400 Received: from fe0vm1649.rbesz01.com (lb41g3-ha-dmz-psi-sl1-mailout.fe.ssn.bosch.com [139.15.230.188]) by fe0vms0186.rbdmz01.com (Postfix) with ESMTPS id 4Dzhp92g1cz1XLFjX; Mon, 15 Mar 2021 17:34:25 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=de.bosch.com; s=key3-intmail; t=1615826065; bh=fP74M6HwZDCum3+vzeaerJPkseKxvj4gZV75mefECbo=; l=10; h=From:Subject:From:Reply-To:Sender; b=MIN3BlJNgODXDNSB3/Hku9dYktOxtyonFptukMu1o1hljZ+htCVy9PiFayD+Pr7Sh ebeMpH3cy7hQSFTPFDhiUqsgTqTMcnYKeoOtRrcd/aejipx7IVXo8OmzVfsPA3hf8/ /i37zd9AqejkwKYAHZzr5qmkKJBqM7JXYclPAR9Q= Received: from fe0vm1740.rbesz01.com (unknown [10.58.172.176]) by fe0vm1649.rbesz01.com (Postfix) with ESMTPS id 4Dzhp92K7zz1K5; Mon, 15 Mar 2021 17:34:25 +0100 (CET) X-AuditID: 0a3aad14-081ff70000004cbe-59-604f8c91600b Received: from si0vm1949.rbesz01.com ( [10.58.173.29]) (using TLS with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by fe0vm1740.rbesz01.com (SMG Outbound) with SMTP id 8A.9F.19646.19C8F406; Mon, 15 Mar 2021 17:34:25 +0100 (CET) Received: from FE-HUB2000.de.bosch.com (unknown [10.4.103.109]) by si0vm1949.rbesz01.com (Postfix) with ESMTPS id 4Dzhp91Xrmz6CjZP7; Mon, 15 Mar 2021 17:34:25 +0100 (CET) Received: from luchador.grb-fir.grb.de.bosch.com (10.19.187.97) by FE-HUB2000.de.bosch.com (10.4.103.109) with Microsoft SMTP Server id 15.1.2176.2; Mon, 15 Mar 2021 17:34:24 +0100 From: Mark Jonas To: Support Opensource , Lee Jones CC: , , , , , , , Wolfram Sang , Mark Jonas Subject: [PATCH v5] mfd: da9063: Support SMBus and I2C mode Date: Mon, 15 Mar 2021 17:09:03 +0100 Message-ID: <20210315160903.799426-1-mark.jonas@de.bosch.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrILMWRmVeSWpSXmKPExsXCZbVWVndij3+CwZ5pghZL3y9ltrj/9Sij RcffL4wWl3fNYbO4+ns9i8Xe1ovMFnf3z2V0YPdY8UnfY9OqTjaPO9f2sHl83iQXwBLFZZOS mpNZllqkb5fAlfHs4HP2glbRih9HUhoYNwp2MXJySAiYSMy73csMYgsJTGeSeLBJpYuRC8he xyhx5OZ0dghnB6PEhnmrGEGq2AS0JG6e2AHWISIQLdHy9QQTSBGzwComiTurdrGDJIQFrCVO rvzJBGKzCKhK9K57xwZi8wrYSjQuusgKsVpeYual7+wQcUGJkzOfsIDYzEDx5q2zmSFsCYmD L14wT2Dkm4WkbBaSsllIyhYwMq9iFE1LNSjLNTQ3MdArSkotrjIw1EvOz93ECAlVkR2MJ3s+ 6B1iZOJgPMQowcGsJML7Wcc3QYg3JbGyKrUoP76oNCe1+BCjNAeLkjivCs/GOCGB9MSS1OzU 1ILUIpgsEwenVANToK9LImP+/OpHkdO1k+X3rZ86X+zaqX9H2/ceVbwrsFxewvDrnzU5GVKv RK5qb3n1Z1tbqebrX0ufxhpJXG8w9/NmWfz+x/K+fKGjHMZXM+9ZdF0R/3I35tFHkxPB4Sr5 yf8nu8148i+7ffniV5/mX600+Ke3zynB481i2xNmgq8Piz7061F2XfTjmnres+XJQbLp5p+Y G1ZseFB+YRK7fcHx8k+m93O2Ciy6f8eKu9Bn8eJLSj9zdglMzVjw7tOS11VHfOe2Vb9Uabvk m9Jw2XzHmsPR84tkJ52+LrzsY/xDXR73a6vfus7WNZKUjD9VkNxfzLq3+kvqEjWG2MmPnQuY z3iFdM5KOluVM33uYyWW4oxEQy3mouJEAF3tk+TEAgAA Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Hubert Streidl By default the PMIC DA9063 2-wire interface is SMBus compliant. This means the PMIC will automatically reset the interface when the clock signal ceases for more than the SMBus timeout of 35 ms. If the I2C driver / device is not capable of creating atomic I2C transactions, a context change can cause a ceasing of the clock signal. This can happen if for example a real-time thread is scheduled. Then the DA9063 in SMBus mode will reset the 2-wire interface. Subsequently a write message could end up in the wrong register. This could cause unpredictable system behavior. The DA9063 PMIC also supports an I2C compliant mode for the 2-wire interface. This mode does not reset the interface when the clock signal ceases. Thus the problem depicted above does not occur. This patch tests for the bus functionality "I2C_FUNC_I2C". It can reasonably be assumed that the bus cannot obey SMBus timings if this functionality is set. SMBus commands most probably are emulated in this case which is prone to the latency issue described above. This patch enables the I2C bus mode if I2C_FUNC_I2C is set or otherwise keeps the default SMBus mode. Signed-off-by: Hubert Streidl Signed-off-by: Mark Jonas --- drivers/mfd/da9063-i2c.c | 10 ++++++++++ include/linux/mfd/da9063/registers.h | 3 +++ 2 files changed, 13 insertions(+) diff --git a/drivers/mfd/da9063-i2c.c b/drivers/mfd/da9063-i2c.c index 3781d0bb7786..e8a022e697c5 100644 --- a/drivers/mfd/da9063-i2c.c +++ b/drivers/mfd/da9063-i2c.c @@ -442,6 +442,16 @@ static int da9063_i2c_probe(struct i2c_client *i2c, return ret; } + /* If SMBus is not available and only I2C is possible, enter I2C mode */ + if (i2c_check_functionality(i2c->adapter, I2C_FUNC_I2C)) { + ret = regmap_clear_bits(da9063->regmap, DA9063_REG_CONFIG_J, + DA9063_TWOWIRE_TO); + if (ret < 0) { + dev_err(da9063->dev, "Failed to set Two-Wire Bus Mode.\n"); + return -EIO; + } + } + return da9063_device_init(da9063, i2c->irq); } diff --git a/include/linux/mfd/da9063/registers.h b/include/linux/mfd/da9063/registers.h index 1dbabf1b3cb8..6e0f66a2e727 100644 --- a/include/linux/mfd/da9063/registers.h +++ b/include/linux/mfd/da9063/registers.h @@ -1037,6 +1037,9 @@ #define DA9063_NONKEY_PIN_AUTODOWN 0x02 #define DA9063_NONKEY_PIN_AUTOFLPRT 0x03 +/* DA9063_REG_CONFIG_J (addr=0x10F) */ +#define DA9063_TWOWIRE_TO 0x40 + /* DA9063_REG_MON_REG_5 (addr=0x116) */ #define DA9063_MON_A8_IDX_MASK 0x07 #define DA9063_MON_A8_IDX_NONE 0x00 -- 2.25.1