From patchwork Tue Feb 28 22:32:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 657534 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5F6DFC7EE30 for ; Tue, 28 Feb 2023 22:33:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230005AbjB1Wd3 (ORCPT ); Tue, 28 Feb 2023 17:33:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50618 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230002AbjB1Wd1 (ORCPT ); Tue, 28 Feb 2023 17:33:27 -0500 Received: from sonic304-23.consmr.mail.ir2.yahoo.com (sonic304-23.consmr.mail.ir2.yahoo.com [77.238.179.148]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A69E720D0D for ; Tue, 28 Feb 2023 14:33:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1677623603; bh=rgYgcc9eGhp7V36drxg71w602vdE+75teK8NgdiZ6Iw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=CRGJ7H6PAtl346u8zvRwGPKo7jQVEMDPGSqTtHUMkH0lKRdwzhkhyHtIGp/Uqzcd1BpmpFCJuucawBS0Czu6D6kGGa/58CpQCli0E0o4wGZO0mQFGO6wSKGpVX5iKqn9HQJOyBVuLmoCPx00XhzIzkEOwkVtxn3g2HN2D8HSIRoKCF6pILXPQse8SZIkj08H+QWfwkTgUznETyUYUK/QOYUynDa8HxvGUkp/qwECUJJh8Anddgv+m9+JBlbv3m34HGD+HwCbv3MUUGJ8MkcE7M9jlv4Tm+WlC+cvk6OYpvxzIcN1ShucnZANKLlo7fr9IPetPd5EtraoZ/HXs9BDAA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1677623603; bh=UTRVPNsZ2Cd9o/aV0fnM4jV84uDsF/xwuVXk/6jysOt=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=jyh+5KqabzeLug1m5NRW7DJbWTT1ClNdbDqKlWFrPcOTaoZHLscwhcWned2B9DHCRXXLbevGdxdhxevx3mcVNeMH/GSRkniY0g55+qTWldCqXEs1UsN0TdTaR7c10A5Pr7fkCd2gMb23JFbqiVuOQELw6h7oiHU4V3z89FIxuhtgRvMH9zbqslTgEqettls4wdPWNoirWI72FThuyv+AENggH1njRKu37TJZB7rKl/at7AbdI5EbdB01eo/K1daUzJyai3nQS1S0HIyVMRlt8v9QdrmhuUpMwT+FB6akilgkxOCc96OXAvWB4ATbpP6Y4GAF2VyL79/mbgjS/Wjhgw== X-YMail-OSG: YQstmuwVM1kIxg1F67IVq3V2O.noHClPjupKACfzKpDkDcb5JAyUoJfi0MvGSX2 OjDcdtiZS6Ne4j93qJJ41n1n4rnRJRZz2JvGQYnUMmFbtVB.hckpmkHzGARbMd8DKAtTYbTTBOKn 1rev5WrhWmVaNi5IYHikSuZ9n.ZFB4SUct8ZSL2XX34n8wuBWg2.yKEcNyetNmNKJbMGVkVn7TSR uoFe1K9ydBwepKNBmVliArDHG5g17pBT5cSa6s7WpgTueJFKCBy5I9l_978YaXhP_Yh6D8_HchUB Y0ZvRAubAzOadz_Fjg.Ws.iGMoRfyZIhO2kRqjg5.3CGiRKToh2T98O5RqgmjmWNwvEbwjfcnHon Wm9cdAnsqj5ZNZoJlUYUqxcixu9V2g5PokqT1sU5gtoFcCXENj8V5VhX2azepBxHh0sn8CCqSGQ_ bpjgmplIs_CMjjJHumAcb1EgC7kXmOoMiIkJk0zQG_Hfj4LQe.WWhwEHC3hcV.EkJRr_5gN9g7kS guK58sGHRzc.4IlBuQAbkrlN7jGDdDm2m0x.GSJkzATC5g8.BduVqsVQnX_nHmaUFulkcTO1VJFt 19wOh7Vp3Ss4dNUxUzDwP3dETSR5WdDxfGXIOQKQP5ukidgfzKvPGkVSj3Um2t56N27HHeQrZMMC J.zzavz1pNqMCCQpkSewNhznsZ56__Fd5jcLlpsPN8zwYRUOmzecAox4VZRynl6zyWVD1gjiisz. oNe0BHF2ZHbuodipg7EaYA.QA9k7nQa7DD74JziH14TKieum9TT3nNyx1DbhWhtbRSATgHsimNCS 69eKaYfiu1AYfoYYKWO8rU.ur5kRjmRSjt9OTOKEMcbUAYYK2_du_cMdjp02EDxcBUHv.E5_gbGW aRGze330ZKke.vJAAypnnvutUSoeAvaQSjHWAx8m6fJ9sYaao81muFOGe7yfnOqNlqlEyNMuB6y6 3Id5swzzVb1OUxMmk.6pMCdo4VDVzfjLS2JSq6kMYNLUNfZrsE7KKbroRE0NpOXRkNw5LL6reOGK yD6lYb2f3VPMc12vJN3Brx.1ZhOXAVpCYI5UQIP2fz0maAs3xJ_muzHyh1ujpnS2QUxl0vDfksPe gvh6DkI5lAWs5zX.EaHPaxMGR_LnXHM1XPvvYSA2kxxduLEZyO4zICsny..I9WBWSG.nOUAQyqvr 8oDgVA_W32eAGuJhKVZNV5GfiJFWdaGm4i_S_Nu81Yu5OIX.N370OSuHkQcDg8.1TAcxs_Jiw5eI Bd4D_YNFlc9AGn2oc6rwnTB1dHz89XSd_gCYzB3jN7zUB8HH8HR.YYg2qcsSMc.._rXBU64nnS3N WjvV7NPrhvQ9XikXXr4dqGbXPeANlRc.1VwUGjJcvpB2GAMVSgxMYurwNf8JRnfOpQiQjt5xq_Yl MmwGxSrsazXp6da7JeItx3ruhV5xbxHrNbhZ9cuL.6qaDnkR5GE.MUabFNjxb.WEKwJwh6EhqubE jXmG29yILvkIPi2vH6DnuFey2.0gfE9eER7j1.b.AFsIIc2bYvC520skr.avl9EM40y9mBjP4KFO X0pUCVh.pCzYfFMSmSZMt161l0cTYO7HKS4qvNgtqy5DqRJGKyPIevtM3C_Trw0FoD_J1j1rtjaU .7lAHbBnSM56lUK6sxY0jJU7h_jWDpHfK5o_AX35xwS4hUMnlwi_EKVuqxTh19rcBQrZGOANJtR. UCXHF9dxoSUac8HU8.LqQ_Gh.tGBv.xeotHQoXx7IG7pfdB2T3_hA6skDsze1mFW0W6RFoPAhDaP SX6ktAs03ip4mPNHJI2pjpRAxH6hKt7WIw3hiW1t2PPzVGYW7vfW4GwWOPz3RDOa2utVyr4q25zY CaQOnpeiwFuoY4B7F21_iDVNGf5H1cz36WA9buXBVEsJEpsEGGsaNJrEshWY4b8bjSdoUDZD8wv_ hC_LrYrVEq24jYLTzX6S9nkQptdcBE3CoHLZ1pKeRTKas__Y4Stl23RRrlC6Ptq3zD1jNq79.rNc 8biwnXCmQvpSzUa3LFIENCdu4sVFTcOzpxpBmb9wlD0XHrgxJbWkGe3H6dm1l2.SvIrkO3cP5jQN A3_W36Q_mSG33qti08sqFnYJd_KzfsWmzqdRSD6aUWNCf.zS6gVRitEQW8R8XKN_mQTMt8Dr6wII K_4mdNiHoaKe.gLkkWaagYEj53s56pBuGS0GWo3Alj3AKhDpcDetomGiIL9bhD0JED5HftGKUfJp 754Qt7keMaAGUcP6LyQbk_MNzfmKdWLvxoC78fRs30dLaxOyMsqKZ.TDHgjotazumghCcZCCcbzz MwXehFIdbf5dJQLnwQ7e6HUhF5WYGhQ0xLsH9GQ.CY.YRkXE- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic304.consmr.mail.ir2.yahoo.com with HTTP; Tue, 28 Feb 2023 22:33:23 +0000 Received: by hermes--production-ir2-65c64dfd66-lx9xq (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 4362ede20d54ad479836919fc460cee8; Tue, 28 Feb 2023 22:33:19 +0000 (UTC) From: Jakob Hauser To: Sebastian Reichel , Lee Jones , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: Beomho Seo , Chanwoo Choi , Stephan Gerhold , Raymond Hackley , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Lee Jones , Jakob Hauser Subject: [PATCH 01/10] mfd: rt5033: Drop rt5033-battery sub-device Date: Tue, 28 Feb 2023 23:32:18 +0100 Message-Id: <31bc00905eb0ae243260abecf0d63d000628123d.1677620677.git.jahau@rocketmail.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org From: Stephan Gerhold The fuel gauge in the RT5033 PMIC (rt5033-battery) has its own I2C bus and interrupt lines. Therefore, it is not part of the MFD device and needs to be specified separately in the device tree. Cc: Beomho Seo Cc: Chanwoo Choi Fixes: 0b271258544b ("mfd: rt5033: Add Richtek RT5033 driver core.") Signed-off-by: Stephan Gerhold Acked-by: Lee Jones Signed-off-by: Jakob Hauser --- drivers/mfd/rt5033.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/mfd/rt5033.c b/drivers/mfd/rt5033.c index a5e520fe50a1..8029d444b794 100644 --- a/drivers/mfd/rt5033.c +++ b/drivers/mfd/rt5033.c @@ -40,9 +40,6 @@ static const struct mfd_cell rt5033_devs[] = { { .name = "rt5033-charger", .of_compatible = "richtek,rt5033-charger", - }, { - .name = "rt5033-battery", - .of_compatible = "richtek,rt5033-battery", }, { .name = "rt5033-led", .of_compatible = "richtek,rt5033-led", From patchwork Tue Feb 28 22:32:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 657533 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 27E3BC64EC7 for ; Tue, 28 Feb 2023 22:33:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230064AbjB1Wdm (ORCPT ); Tue, 28 Feb 2023 17:33:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50756 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230031AbjB1Wde (ORCPT ); Tue, 28 Feb 2023 17:33:34 -0500 Received: from sonic307-7.consmr.mail.ir2.yahoo.com (sonic307-7.consmr.mail.ir2.yahoo.com [87.248.110.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 88E0423648 for ; Tue, 28 Feb 2023 14:33:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1677623606; bh=tgDk+TZQ7fwBqx1EZFVd7dk+gNzKRgzsfoB9HPZliCM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=MFgeLyikwgC1V8wNrC30LV5407zKaRwotcMTLmQ9XOUiK95bK5l2fEB1rGacKxL+cbuiInk16TdUGoUVX6YDRJCLTqPs1IBMawFw/3izn+NbVqApwy4ylrjwtwjxTeQMApIs3VRGdcEafHg+u+z12uKfQR3WVsOJRaRAQDVlOEeDK24FB7GPxKVkfMM5us443WWQyVJPQmLMLBATJR+RkszyP6dRjy6p/QpGqiIw529kuWr5/SIiuf+Z5s1j55jkxcyya8y5/CeDKHTcjy+pVuQNyWfk8NFfE2YPWDy2umcOk0o62eXI3vMafC31ZtlCFYbN2oIsQVG3sUJNfEsrgg== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1677623606; bh=cuwU/M3pDTaAi42zbzXNOuKnzDT5HnokJR4+BJA3mLc=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=qXaE3LUNH+pHSSsffFA1R1cW4nbnJNf+mjkdQmZPGfLG+h6lLcwn7xMJO5IygmJ38odeR7N7MPL3UQl7E48C2BIOCR4fr4PNUao4/mfpFNr08S7WsR/LsrusUKHqeljoe5CaUcn7TYi87LuROhzpDsoRR498hnB6AuPcjFweZIQiVSMIZ46ALpPmtaZ+ycq2kDAzJaevVQQ1vltcH0T6qCe+QG0/CI97MS4fWiGObtGlXjYq45Tp7F55n0qw7QYsjn8Iv+jxrLYRCnpMZ0KEUNebJ7cjjtxwOflWdYDoj41/XtYxapQjATHZg6DnT9EU0tNfa+miiWU2OfrQZEakZw== X-YMail-OSG: lpR5oDwVM1mkEMrFc1rJ2gJGpYwKBVT9ACE5Evlyd22LPSXUZL_8EGLBZYn1Yu6 c2zM9zRq_5UqP6vYoPfK76mT24dTEeUzaNJNrRxRvO0IKbynGkYn2CpQp0c6QtgmMxhLjbVaS43_ HqzZU3jFBKEFjGt1XlekuTQididgcsTdy0xB7wmsmUjJ3yAEzM8a8QiZ4Ur44exk0prTh07JFy1g qNBQqA5C0o3Qn8OqusBBjBJtcYrZh3nVT_2n.toJzvRdcp073LM5Xnv.iu_gTUZDRUvw0ia5ti8A OILqSa.UQiGDuOKrba5BeLefgxKfhL1a4zITAWVntuDpo2zDuLSOcDA6fz3UxHEaXtICs3RuyICH 00bxiYKExm4ABcy2wvJaZ0be6z9CBtgk5EoyBejUgNeLaQ4RnSDIPJ3cuiY7gaI3MnkJyelX.OWi ibvvUn5vzSLC_QDcdu5Qpnc3FB5tUEQ_zieqLJGLfz3_oidXzX8LhUQfazeH36fNoUBdG0j7SUZM M8Uwv0RhN__EHDKMaIonERCfejPiJvI18LmkU2C4vpqWejhdtZ7mcJW9Ra_l6liGZj9bQdFQy1mo VaEQmJNjxIERPuZ49JS4NlTeb64NMGShjfin1aJhMyfTDwpBqrst_F33OWUbCt_0t4vgXpgdozB5 sVLszvdGu1tRFnUJYFJ5xRaBAb1oYPWdw1zFJwsaHfBlsFSUVwgndpBZiznkExdfAKM71qY4wrF8 qsC3MgAv9l6wnku2Y4GG64rWNJNZ9I11lo40eA.ykd__QAZ4VqLPVzIXghHezyoCGQ_.PipqMOVr snt8XcYPjQB5VrftpQknVGWYAg00Rh4pNsR7rYNLaMw1yp9hjcHX8T.H1TvKPj25yxzsYDPP5Wuh D7ET8FFfXRxZnSABBrDxh820SeudI5WJVRrO8ZmTRZCac9zgWKQUosooQTjT9te6KhE2i1U_hehr x3oDTqX.mi3Cs.hna1AO6MtT6druBDeJ13GCmDSUneivcOOHQMbevcSL5U1746CktS4OOASd3UxT gC9UenlF0KTaqqmn7S2GZUy0Gj6SyvcNWQH6FvZcKusjRpA7QwZ7sMbF352X93GFmlX2aHZqobFQ q1uZM.svjjHzFIqbNI7exVQkgxh33jEXjx2GzvV5wvnng0v.ZqRpfkSjDUoRkYCHPMSizscKeoFD 55graY5oWw5IEu.CpXFf6fPDYdZCp18eIA2aTLmR4z3WvSUnHdlU2e88oL02sP1JcVfEluVArmtl g30GK7G32GeDz7wzGx4m9ISmUzgPSvpdpK.HrMHY97FNJC5TbxGEU.EPuBFFKjbO.qHWl5IL_j3Q FOet4NISyyvaScDFYj7LMtegjIvDwCMc6r205DOVwMVW0IoijxlmYvvZrkuZ2QqZI__lpac5sC_t QHtqsFqf3dMEJVi9qVBehdAJlIFO9owJnScdGEExr8WRiuFyIy57V5mXyM7acegqBTEdGAVDUTqj yiNTCRDYt8W0c9LqZAtPLwjHeAtLlf6rE916TWhSonYiWlRMaP1pcz9pq7m2iFayHMtKzcxOkQFI gr7zKxe6jVq9AEtCdQzfap6YBEHmIGNtIZfqQuHjQjq9EPRKWmGZEyUSikypPEcFfsWWCD15Jail qcvApA_D9xNW5EdrW9TFZM1wjsBiyHNdIUMbLmkiA6TozbgxYNeK2Lwb.I_dKrwmmtlRfR7kA2X0 zN2zJdc7vMdoOMCnEASFsRc0BDszqYA7geHAtzLEAigkXwsOskKYpSLyQVYPORa7TT76ArGSKlmr vSaSQu3_ZMNoMAPXT9Mr_uR7AokDWVyCvsa6pf1rtUXoERGhjpEsGB.YHKRycIFGJQ747VlAs1qz kS88JoskC_Ttib4rx2XEAuWAR.n0od1Wi4rTPVYooz07b3jhdml9AE5dNioYpStktfPxSKPAv7qm 9Xs86Zk8G_mkj7eWRpXufQhyZ7jui87eiCueo64PobzGygddd3YVcFpsvfRpqXHXjkav6QnOuIq3 rGTu8O7xrvd7sdPW1uELJYwZo3vH1_1fE_qhj7yMN98sv1HR8JplEXwLyBlcaeP4_FgtIDi8CbkD nCfq6LkpdW.RNQk1W2GnKm7pRzodsbGu7ZWjbI1P9H1Bx5GRCVkkhMvPMWKzvJOZqZ5kTNX2HYmB vUf63fT6AVXoTmWF1e0I3qGf.cD6HG.etF3Q3Z3qPnmDiDtsHl5YOg_p71yGweMqU.idDn6cQ6qp NF7lB5qZtlCK.WPRwdvTyHj6PEeKwAIfoHn0Irw2PFLQ5JrMgZp1LSOFsG25E47d_GgwzNC3skAC KHa3q.pAvkOfrgI2O_FsfU_r1ECnWmoI4W9pw0xoeqJNEVQ-- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic307.consmr.mail.ir2.yahoo.com with HTTP; Tue, 28 Feb 2023 22:33:26 +0000 Received: by hermes--production-ir2-65c64dfd66-lx9xq (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 4362ede20d54ad479836919fc460cee8; Tue, 28 Feb 2023 22:33:21 +0000 (UTC) From: Jakob Hauser To: Sebastian Reichel , Lee Jones , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: Beomho Seo , Chanwoo Choi , Stephan Gerhold , Raymond Hackley , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Jakob Hauser Subject: [PATCH 02/10] mfd: rt5033: Fix chip revision readout Date: Tue, 28 Feb 2023 23:32:19 +0100 Message-Id: X-Mailer: git-send-email 2.39.1 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org After reading the data from the DEVICE_ID register, mask 0x0f needs to be applied to extract the revision of the chip [1]. The other part of the DEVICE_ID register, mask 0xf0, is a vendor identification code. That's how it is set up at similar products of Richtek, e.g. RT9455 [2] page 21 top. [1] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/mfd/rt5033_core.c#L484 [2] https://www.richtek.com/assets/product_file/RT9455/DS9455-00.pdf Signed-off-by: Jakob Hauser --- drivers/mfd/rt5033.c | 8 +++++--- include/linux/mfd/rt5033-private.h | 4 ++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/mfd/rt5033.c b/drivers/mfd/rt5033.c index 8029d444b794..d32467174cb5 100644 --- a/drivers/mfd/rt5033.c +++ b/drivers/mfd/rt5033.c @@ -55,7 +55,8 @@ static const struct regmap_config rt5033_regmap_config = { static int rt5033_i2c_probe(struct i2c_client *i2c) { struct rt5033_dev *rt5033; - unsigned int dev_id; + unsigned int data; + unsigned int chip_rev; int ret; rt5033 = devm_kzalloc(&i2c->dev, sizeof(*rt5033), GFP_KERNEL); @@ -73,12 +74,13 @@ static int rt5033_i2c_probe(struct i2c_client *i2c) return PTR_ERR(rt5033->regmap); } - ret = regmap_read(rt5033->regmap, RT5033_REG_DEVICE_ID, &dev_id); + ret = regmap_read(rt5033->regmap, RT5033_REG_DEVICE_ID, &data); if (ret) { dev_err(&i2c->dev, "Device not found\n"); return -ENODEV; } - dev_info(&i2c->dev, "Device found Device ID: %04x\n", dev_id); + chip_rev = data & RT5033_CHIP_REV_MASK; + dev_info(&i2c->dev, "Device found (rev. %d)\n", chip_rev); ret = regmap_add_irq_chip(rt5033->regmap, rt5033->irq, IRQF_TRIGGER_FALLING | IRQF_ONESHOT, diff --git a/include/linux/mfd/rt5033-private.h b/include/linux/mfd/rt5033-private.h index 2d1895c3efbf..d18cd4572208 100644 --- a/include/linux/mfd/rt5033-private.h +++ b/include/linux/mfd/rt5033-private.h @@ -71,6 +71,10 @@ enum rt5033_reg { /* RT5033 CHGCTRL2 register */ #define RT5033_CHGCTRL2_CV_MASK 0xfc +/* RT5033 DEVICE_ID register */ +#define RT5033_VENDOR_ID_MASK 0xf0 +#define RT5033_CHIP_REV_MASK 0x0f + /* RT5033 CHGCTRL3 register */ #define RT5033_CHGCTRL3_CFO_EN_MASK 0x40 #define RT5033_CHGCTRL3_TIMER_MASK 0x38 From patchwork Tue Feb 28 22:32:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 657532 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A8F1CC7EE36 for ; Tue, 28 Feb 2023 22:33:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230050AbjB1Wdp (ORCPT ); Tue, 28 Feb 2023 17:33:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50862 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230048AbjB1Wdm (ORCPT ); Tue, 28 Feb 2023 17:33:42 -0500 Received: from sonic311-31.consmr.mail.ir2.yahoo.com (sonic311-31.consmr.mail.ir2.yahoo.com [77.238.176.163]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 931EC2448F for ; Tue, 28 Feb 2023 14:33:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1677623608; bh=/60lX8qClY0qG4p+gMpnXJCc2PHWDxwrRrHNh7M4OdE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=j5eb2MEQxMQ21oQ07TNCKSyznwaJR5be14JWfKb7jPJs+VvY3Zv1M8zndpNiXH5eJ6bE6nJXHJM0bRZVWutqSutTvrzfhc0xuCuqtvBKbuijZA1a4I3T6hepNZzCpr6Bc/9Fbn7Ef+6nNP6fgAfzQYgEuDDys/lFnYrsWX8YZjQo34i2A8FPnZ7HykT5AbamSOWlSQ3fLIja0Ql9fjCuXLTXONtlTOZWMFHqNfz6nnqKSLuhwh30o5bBF0bm8ILqnigfjzzl3rcT7dIQBhLBEiT0S92YWlcJaiS1LwhM5npR/SEFNyTzk8RvjFYeBUyCMCxYn8juaksOAtP9pGJ27w== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1677623608; bh=3MHeEdLApQFylH5wpNauTk0oQjfVg4rZVS7S1Xlueqo=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=cKWhoGgHqVMSAqx4ksHCMKCvWxJrpumCxrDVKemX4ZEqeKfYbY5afg9mjGWLIGj804oximcDXYDdQbo5IY+CPDeq92Amsb2DxqVlvnRD95KKIumVxSg89EwvvW7Dh5rLVmctHCxe61QKfGarJ7aRW6psrIwp0Ez2dhPZ+v2GitYxSg5ju7cGrCF4Yz78HWA1/b3An5KI+9h9igl5d4yH9l24WoTiQYMs46ghiiFuO+VG+c+SOgilWMs5BmINTmZacCs/gClLrA1dKSwKA9Xj9mVQrDk6E2SAQXPMhW+btcS2PQg0ChOrK5LGVyMJGVPc06wjVc7oQbV1pxnexw7aoA== X-YMail-OSG: EQy1tkoVM1kGIESbKLoX9l2gD4QgX7fiO5vsj_FSSIVt_YVJJL0Z4vFdWl7.odh 24yTyHVJbHz9Fk2Yu21f7O2K_U6V6nPFGH2wN.iA57pTVzFN1q02Aew6jVolFJKBDVtn9wOZFiVJ xSq0hS8vqGRwDrWJHMMYo3MEV2mGA1QOuTbvAgKtSYrlaNlfyS5aMAYs1fcVWwOVkCuJeLadTH5d uaxavYBer2NphL7rWXxVWtwIxCfHnNO7RNCFKN4Ri8uDZ89vSYAnvLYGofd82SDwTIzdLwTWDQl4 I1l9z1BNzDczAvCo1VzBsRqEjOa7zekY7N.o.de84mUWsYlN0oYTGtxRp3cojgr.P4BgTACkfQg4 wFKYeWX2UM2lA36Fq7Fc3vUazGvOmXwXwkGua8vJ7foEXU.coOHTAUy.6exAy3BOscwjlAWsGnLB mhO54V1J8ikHDxbkam6Y.2.NfjPnN1QJuBOO0BSphY1HiYAzsvXgg77gdJ_I8VtbBa6sWPdtaU.3 0Nb3.eK4h1kJp7xlszoZGq4K43VHDAIrbEhQ.Fk9dZwLvpuNIWhHDwYHN7zsS3rogDKayK9E3KLb 1xeKjWvC2g86ngY.yvViYmf5YBglbic4CH.WFZMpZjY0XlM_IHmWE4W_oX4njeQWxB1GTHbFRMqr zxJJxjRLgSpFE.oNIdqjviNGx_XE0rAALD.5bAu7AQRzqyRbROUrqxUCQVuPsf3_wNh0We51WI.i vqNEex6sj5GWoZBfk_9ezNKA6BF37tpSj3CWQVCQAUTUqCaSqvi_bgiEoE_mXmVzEBF.Xbh50.pi M0xr2R65.NehzZFHBGap1ZygIMA5xgDGOEqlm.X0loYJ1laqBdCB0ni9V2BTjI61nKMgC9._6j2n x_CCHHFVW2mrR3q17rwbAoOdbddGaZgENxcczJjrpUwjzKESGxv9YvldeQg4699DpTaxkS_ivlDP seWJDgI2GG7zoJPf7periAJdslUAaK2PRPFOFsuGjI6i1cNzkRin30TSgvK5W6nt_8tJm5NhiBaP gITuJ21DFSZnLXUPynAGCdnTzUp4RbLRGNNIKpYc_GyV14jsNJbaoDYFmFONI2X1vgihr6xBxgwJ hZhtwxBaKwGrO.x0DsvPC0EkvZf4TL9Vz8xGHYLThZCa3PvELc9c5TTOq0tG8zWOVwy3L1Pf20aY RGFvIyugzbtO2jROUdhpeN0Bijd8.ks3XBhU.VFOBb3zZ0ctHVAaQVxYmZc5eI_RGFyMibqylHj4 azWGkVaf3jCjSqetk1L1kfig2PDuLrl371eEvWCpPYAaIAZuZElr.EghLVgrE2kZ.XEufrVsiHVW Ts21ElLMT1Cr9GRU8HLTu95jD0pIYcUPwT8KBf4I9m0fNkTJu5rLFU4nF_r.T9ur9s64_fOgi74e hpPLpHPwCaghV8ICwRaZrDlnRttxepzpurQucGhuAvd8tRATsc_kduo4Xr4uXVTGN8VClLljBm7F pWE9r4uhaIeIo0XU3ZzN0zESNRD0q56fcp0v8N2cx_VsWLXAkGeU0UJlutjfKvuVlvqEi0MKHJmJ MT1_LJQK5X9_0Q2H6hxiguG6z5NClcgvB9GreyL266tYCtbSFMEv2z3f4iwPLt9J2Zbr7Sb0WR0_ _Ow3Kuz2CxbUGyMUNpkK__q7xo8ueM2nS67UCzskDQpRuwNYOqC9KaY7m6ZsIm2IjSRNlwNo9_Bm SE1q6jXdVxELeRKjm8SeOnPx1eeNo5qye3Xlu.fRj2WSBBBLFSbmTonVKhVPzXZ8Gcekeqv.UD_A b44JBUaEvyGTeSIae6gthynVx5JOjzp.UlTjVdRO.8q98x14p8vf2McrlLc9HAYzp4tR43ESycUP .HxeNSvqh5xndof57XU6IEDDVnuUOyZ1z3ZFRowF8rvQ6zp1Gco0YxoFwgkHhO7GV4gAGBFO.QrH 9_HCMV6t3f9nvrXj0.0F3hbmLS2W0cWhJGiBLWHqon_J7ECiBhMZuj1_wMscDsgFWGsT0ZcUMIpA gRSW3txwBVr8JLFzQjY5hDfFecseEreGjRk3vfocmu8G11jqH7GuxsbETwPitKAWNw9sfNwfATYf 8UghOjuG2SlVJOHzjQb0jqjexzFHF4FKGVi3l4RsIVy7TdZkjP3ka3abrsIUVGospoAk1eiQ07de t50wVKOhxptXIjlEeFBMNMaH8S8izYcu9.FohaW2uUh5ScOiseyg3uq4OLKUlqaudo6g32aZ6W2S N3hb0BugwqQBlly2z82r81zokQeWzTv_u1Z6Fez_gi0oQ3IV228lh_ekvTO37Numv81k9p37XmtL qNsapB.MknikzTBleLhS1NZu.UxTM72MbkbXzA6f0gNZX4w-- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic311.consmr.mail.ir2.yahoo.com with HTTP; Tue, 28 Feb 2023 22:33:28 +0000 Received: by hermes--production-ir2-65c64dfd66-lx9xq (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 4362ede20d54ad479836919fc460cee8; Tue, 28 Feb 2023 22:33:23 +0000 (UTC) From: Jakob Hauser To: Sebastian Reichel , Lee Jones , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: Beomho Seo , Chanwoo Choi , Stephan Gerhold , Raymond Hackley , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Jakob Hauser Subject: [PATCH 04/10] mfd: rt5033: Fix STAT_MASK, HZ_MASK and AICR defines Date: Tue, 28 Feb 2023 23:32:21 +0100 Message-Id: X-Mailer: git-send-email 2.39.1 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org The charger state mask RT5033_CHG_STAT_MASK should be 0x30 [1][2]. The high impedance mask RT5033_RT_HZ_MASK is actually value 0x02 [3] and is assosiated to the RT5033 CHGCTRL1 register [4]. Accordingly also change RT5033_CHARGER_HZ_ENABLE to 0x02 to avoid the need of a bit shift upon application. For input current limiting AICR mode, the define for the 1000 mA step was missing [5]. Additionally add the define for DISABLE option. Concerning the mask, remove RT5033_AICR_MODE_MASK because there is already RT5033_CHGCTRL1_IAICR_MASK further up. They are redundant and the upper one makes more sense to have the masks of a register colleted there as an overview. [1] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/battery/rt5033_charger.c#L669-L682 [2] https://github.com/torvalds/linux/blob/v6.0/include/linux/mfd/rt5033-private.h#L59-L62 [3] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/include/linux/battery/charger/rt5033_charger.h#L44 [4] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/battery/rt5033_charger.c#L223 [5] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/battery/rt5033_charger.c#L278 Signed-off-by: Jakob Hauser --- include/linux/mfd/rt5033-private.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/include/linux/mfd/rt5033-private.h b/include/linux/mfd/rt5033-private.h index b035a67cec73..b6773ebf4e6b 100644 --- a/include/linux/mfd/rt5033-private.h +++ b/include/linux/mfd/rt5033-private.h @@ -55,7 +55,7 @@ enum rt5033_reg { }; /* RT5033 Charger state register */ -#define RT5033_CHG_STAT_MASK 0x20 +#define RT5033_CHG_STAT_MASK 0x30 #define RT5033_CHG_STAT_DISCHARGING 0x00 #define RT5033_CHG_STAT_FULL 0x10 #define RT5033_CHG_STAT_CHARGING 0x20 @@ -67,6 +67,7 @@ enum rt5033_reg { /* RT5033 CHGCTRL1 register */ #define RT5033_CHGCTRL1_IAICR_MASK 0xe0 #define RT5033_CHGCTRL1_MODE_MASK 0x01 +#define RT5033_CHGCTRL1_HZ_MASK 0x02 /* RT5033 CHGCTRL2 register */ #define RT5033_CHGCTRL2_CV_MASK 0xfc @@ -92,7 +93,6 @@ enum rt5033_reg { /* RT5033 RT CTRL1 register */ #define RT5033_RT_CTRL1_UUG_MASK 0x02 -#define RT5033_RT_HZ_MASK 0x01 /* RT5033 control register */ #define RT5033_CTRL_FCCM_BUCK_MASK BIT(0) @@ -119,13 +119,14 @@ enum rt5033_reg { * register), AICR mode limits the input current. For example, the AIRC 100 * mode limits the input current to 100 mA. */ +#define RT5033_AICR_DISABLE 0x00 #define RT5033_AICR_100_MODE 0x20 #define RT5033_AICR_500_MODE 0x40 #define RT5033_AICR_700_MODE 0x60 #define RT5033_AICR_900_MODE 0x80 +#define RT5033_AICR_1000_MODE 0xa0 #define RT5033_AICR_1500_MODE 0xc0 #define RT5033_AICR_2000_MODE 0xe0 -#define RT5033_AICR_MODE_MASK 0xe0 /* RT5033 use internal timer need to set time */ #define RT5033_FAST_CHARGE_TIMER4 0x00 @@ -195,7 +196,7 @@ enum rt5033_reg { /* RT5033 charger high impedance mode */ #define RT5033_CHARGER_HZ_DISABLE 0x00 -#define RT5033_CHARGER_HZ_ENABLE 0x01 +#define RT5033_CHARGER_HZ_ENABLE 0x02 /* RT5033 regulator BUCK output voltage uV */ #define RT5033_REGULATOR_BUCK_VOLTAGE_MIN 1000000U From patchwork Tue Feb 28 22:32:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 657531 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 78E7FC64EC4 for ; Tue, 28 Feb 2023 22:38:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229493AbjB1Wiy (ORCPT ); Tue, 28 Feb 2023 17:38:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57198 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229610AbjB1Wix (ORCPT ); Tue, 28 Feb 2023 17:38:53 -0500 Received: from sonic311-31.consmr.mail.ir2.yahoo.com (sonic311-31.consmr.mail.ir2.yahoo.com [77.238.176.163]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ADC8218A8D for ; Tue, 28 Feb 2023 14:38:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1677623928; bh=bCQUGN83UroFyDdUJqNBBht/r9fSPNLG1aiH88Wt/pA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=qnpJvYRxnF6d01rfdcyLO54hjTYj2ZvGhSZiD6qg19qJABylzWY7lx8dBVxaO2dTWL1t8NblrcNx5bFLFkDx0i8akH94VzXOdS4HG2ylCUfms6NsLza8uqEVt2A2DXkldVll+oFR9ygf+GtdaeJZ1rqPj3YESQLFIjbr8KW/+WcGFqaFdeb0knZVgU+6iflHNCiGj+Q3ynzlHCFxWqIy/2PaR9dLS89yE4rHX4IN6SHdoeQOyYGTMvK4OINxkhuAyKIRr3GwlfW6UstR/ZWjhO9WlMECqNKnrCVHt46OIQbX+6/t4z6LUGVT+FveoOVQO9olk5iwMK2U/8OvvEYZpQ== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1677623928; bh=UDr/jziOnmspLdRFZIlNGmKwYlyWnO/x0c88XJXgRaY=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=pNr49AAhaZsvcJyx2dCab3CBhsIPXlXppF9OCKOrmX+Jdmietqyik6vYROUNazjg/mJYRdboon7bX/W4iZsUUsjMX4T2g81udo8mER0K3CwBWxSEItlGwNgdV7ggJ1Z4byt+2Lv7cnAhBRgOq6F29epdoEjoQnT2kKSu54CemJvumJMC8cPRLDFFgO8+lVW5HTXX1Px8EryDcVn9tn84zL9RnZlwLZARYBHmaJ//QSi2GOlk9YBqW0rlm99/S0g9+Q+VrMnHOKklzEjKjRH8afd8sBWNVfb3d8RSM3poLcLIT4lX0UBwmvxZ57ucs6hIIgVTeeykfVOsImjtPdrFgg== X-YMail-OSG: Gj3Uk38VM1mQRwZpFU2pV4FObxhwiYD61BcMTgbtWY522HJ1OSN16GqSC6FgOLL t5l_.rki3dQgf7TWLsn_G9LpRijhR_Bk0LS8cIBx7t59lVYGHWGAMsBBzrTOSJfXauOsrm8vE9Bd fM6K5YUrhRUE2D_Fuv8CfDxc6lLl.sZjmGx.iRONawzYgipW7uDIjdOhNyz9wgHs5RO9qQHanCMg uqqtG0qgUhxl4lovL5R_gPB4uoBmTXpfGPOnMvELjvu_fG6iSMoIKlf6o4DwNCMXhSCseF4n2mFL 3VLeY.zZRPBQz9IASCq70ipcqOrdON5DeQtQxK_cM1xQskl1gaGlJim._NK_XycAndp0t8KrUA7z rScITYBkJ.b4qOYTr53JxMNkIgvuN9ccqL.chxSdGu6NrVAD3N0Vd4IR.kOYHq_qlaaopS2fUcg_ Bxyp9U9WZCDu.LXgNVn5c.lJQ7FaxiZoUO4RTwJpHPrPvKudUehdofB98Sx0RG.uE05CAl2OAHZo CPnVYDD6q7AXb6fPG_Sz1RVC6E51hwRjcjwHCjBCT0.D36rlx4Cd8sIMNaxaCX_nI3i45bYiCUCB FHQVCY5acPskpkMHEkKC1V6ecVM6FIo454lTYe_QLFoi430fjEZBgT6.EGMzx6Z4g_lfIrIOjVIN b6fj9EViCNeOKMsXOvY5CqOlUX8nk37.XGZlGuL9GhNmmsvOBZN8OCzPN1_lWKoTRd9Db1wgcply LZk7n5nil9d5FroDXQi8vVozhx1Qts.QVxP._ZZYUSJknqsoiumwDOzKecikItPpdEMi8v.FDD._ ZmFq4oOjzTzhW6BTDniQ_yZhjPLGJejFw5c.4Js_8GlYvs43POanOt_oZ13PSsRq.TEbHIHEfCi. DckgkHlgD7_kLBNpCQaMPEZ132SlPECiA7WpQlyPETZleKAylAi2vlRxALHePFHWjt0ddbErmVWe eylSKaZ5ocXvDIv.uq2kAMj6G0YP74EoCSwwtUnrvnvftmaPttzvyALhev.2Cj2FAwqXvEsxBJQy Zj2jpJjdBEIfNInabed16iPaMUR48v6kYZ9hbmbMjmvUTocb0hVmCNRH9DeBSlxufb963Zonk1Uj k3A0X707r0G_ljvr1xx_a2E.Y9ullWroBSkeg_Hk2XGzXmaV18v0QNW8u8AKl8A_hzxRYpfPtNLb PZTobfGAtRqswpUBcaYWsaSwDhMWodlg4lAzV51oHkan1ZS85iMlncpQwODBGnnS14IpCltKVEoi KMtSD74MfRoHXZNzZJer5dZ0OMsYbTfbuXCCEUq7s2tp.rzHEWaVg6Tz0o4K0Tg9mqiOw_GvkZVf jNJipYsK4SVgzzzPOW4tiWDUaCXrDeaAfv4frFi1AjuVxdlSNv.4s2T_NLDL7YQv6WZYXgs0RuVa TcUkQlkt9d4JfQOwpZliMD8nASmQf8PgICePJAKq21E1bqp_XdJvPD43XbCB.43vcb5.1NIfzyP2 9zr_Yqt7hB3zwZKeMwpCFn1NiZP6W96pUMenrBhysluDxOy0foRActndMPmeBUSiap3IDrBQIyrs C.uGFNpnfbrfh5zV.qonGbV7iAdhQys6BI.nOC6p7nxOREg_vIPixYHZHeB8U1gCwKr1XOWAwglI G_lir2Ko7fL7q1.ybiDW50WCFTVROpz7MCqiY6ByronjXADVHurJ_7QTTB.PaQTPRnqxDHqSLyM2 JDQtabE7pKHjZMFNzDB4wCLgDGwEbwr7Q2yiw6dCu1Fy1zR38NzSyXW8fpBKjQHGbf0_xKCo84sh Oi7CstvwSoHDUcaJvLkypQIn35XoKlbSXQINqrG3K0MspW57xUjzfCsv2cvrpeeWdreZMidXWCoL QPH1R0Gxo6.IsAEH9PQWKmK9PxKH4tKRZms9dOZoB90hLXPVNoyuNI5JSuxpr5EKEE9ojJOPQSwE qm_6TL2MSmtLXBf3XwPMBscYGQibuNCVha9asbqnB6lg1tqt5FvchmCrRbD.kZMGleOY0RN8vkzJ 4uLaOgFCJxZQk.JFaKA4OxqSpPgn2WrcWsNlADAmkoKNZQ9t03N8s06lxNRcrDAIr9JjwhATtPnX i9UdXtzBXldtMSjykXzeyLa7GRNK83buqNg2teIEMLQqQTR9ktA8ssb0chLo58gVMloi76mf.iRD CRwLkiS1A1ywvXZgFubqmk5o9VGC_fDWKF2M9nptsd1ttHSKP3.34m0szyR1bC43I1EDg5OxJQHC lgTGDaxug4qrziTJ7dE5HD1SbMN6kcV67n_giWxb6DgHHtJ_skd9oZBaMnHLJtK.2574pLqahbt1 .r3HzuyqI1jh211BJ_QRDrlhqjkNigqHWHRfs9bwsN4nBMh7fofjX X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic311.consmr.mail.ir2.yahoo.com with HTTP; Tue, 28 Feb 2023 22:38:48 +0000 Received: by hermes--production-ir2-65c64dfd66-svnc4 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 1052c26ec2388683ab738a7f87fce466; Tue, 28 Feb 2023 22:38:46 +0000 (UTC) From: Jakob Hauser To: Sebastian Reichel , Lee Jones , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: Beomho Seo , Chanwoo Choi , Stephan Gerhold , Raymond Hackley , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Jakob Hauser Subject: [PATCH 06/10] power: supply: rt5033_charger: Add RT5033 charger device driver Date: Tue, 28 Feb 2023 23:32:23 +0100 Message-Id: X-Mailer: git-send-email 2.39.1 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org This patch adds device driver of Richtek RT5033 PMIC. The driver supports switching charger. rt5033 charger provides three charging modes. The charging modes are pre-charge mode, fast charge mode and constant voltage mode. They vary in charge rate, the charge parameters can be controlled by i2c interface. Cc: Beomho Seo Cc: Chanwoo Choi Tested-by: Raymond Hackley Signed-off-by: Jakob Hauser --- drivers/power/supply/Kconfig | 8 + drivers/power/supply/Makefile | 1 + drivers/power/supply/rt5033_charger.c | 463 ++++++++++++++++++++++++++ 3 files changed, 472 insertions(+) create mode 100644 drivers/power/supply/rt5033_charger.c diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig index 0bbfe6a7ce4d..2719c51b6fca 100644 --- a/drivers/power/supply/Kconfig +++ b/drivers/power/supply/Kconfig @@ -785,6 +785,14 @@ config BATTERY_RT5033 The fuelgauge calculates and determines the battery state of charge according to battery open circuit voltage. +config CHARGER_RT5033 + tristate "RT5033 battery charger support" + depends on MFD_RT5033 + help + This adds support for battery charger in Richtek RT5033 PMIC. + The device supports pre-charge mode, fast charge mode and + constant voltage mode. + config CHARGER_RT9455 tristate "Richtek RT9455 battery charger driver" depends on I2C diff --git a/drivers/power/supply/Makefile b/drivers/power/supply/Makefile index 0ee8653e882e..0a3303176503 100644 --- a/drivers/power/supply/Makefile +++ b/drivers/power/supply/Makefile @@ -56,6 +56,7 @@ obj-$(CONFIG_BATTERY_MAX17042) += max17042_battery.o obj-$(CONFIG_BATTERY_MAX1721X) += max1721x_battery.o obj-$(CONFIG_BATTERY_Z2) += z2_battery.o obj-$(CONFIG_BATTERY_RT5033) += rt5033_battery.o +obj-$(CONFIG_CHARGER_RT5033) += rt5033_charger.o obj-$(CONFIG_CHARGER_RT9455) += rt9455_charger.o obj-$(CONFIG_BATTERY_S3C_ADC) += s3c_adc_battery.o obj-$(CONFIG_BATTERY_TWL4030_MADC) += twl4030_madc_battery.o diff --git a/drivers/power/supply/rt5033_charger.c b/drivers/power/supply/rt5033_charger.c new file mode 100644 index 000000000000..6bb3d45a5e9e --- /dev/null +++ b/drivers/power/supply/rt5033_charger.c @@ -0,0 +1,463 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Battery charger driver for RT5033 + * + * Copyright (C) 2014 Samsung Electronics, Co., Ltd. + * Author: Beomho Seo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include + +static int rt5033_get_charger_state(struct rt5033_charger *charger) +{ + struct regmap *regmap = charger->rt5033->regmap; + unsigned int reg_data; + int state; + + if (!regmap) + return state; + + regmap_read(regmap, RT5033_REG_CHG_STAT, ®_data); + + switch (reg_data & RT5033_CHG_STAT_MASK) { + case RT5033_CHG_STAT_DISCHARGING: + state = POWER_SUPPLY_STATUS_DISCHARGING; + break; + case RT5033_CHG_STAT_CHARGING: + state = POWER_SUPPLY_STATUS_CHARGING; + break; + case RT5033_CHG_STAT_FULL: + state = POWER_SUPPLY_STATUS_FULL; + break; + case RT5033_CHG_STAT_NOT_CHARGING: + state = POWER_SUPPLY_STATUS_NOT_CHARGING; + break; + default: + state = POWER_SUPPLY_STATUS_UNKNOWN; + } + + return state; +} + +static int rt5033_get_charger_type(struct rt5033_charger *charger) +{ + struct regmap *regmap = charger->rt5033->regmap; + unsigned int reg_data; + int state; + + regmap_read(regmap, RT5033_REG_CHG_STAT, ®_data); + + switch (reg_data & RT5033_CHG_STAT_TYPE_MASK) { + case RT5033_CHG_STAT_TYPE_FAST: + state = POWER_SUPPLY_CHARGE_TYPE_FAST; + break; + case RT5033_CHG_STAT_TYPE_PRE: + state = POWER_SUPPLY_CHARGE_TYPE_TRICKLE; + break; + default: + state = POWER_SUPPLY_CHARGE_TYPE_NONE; + } + + return state; +} + +static int rt5033_get_charger_current_limit(struct rt5033_charger *charger) +{ + struct regmap *regmap = charger->rt5033->regmap; + unsigned int state, reg_data, data; + + regmap_read(regmap, RT5033_REG_CHG_CTRL5, ®_data); + + state = (reg_data & RT5033_CHGCTRL5_ICHG_MASK) + >> RT5033_CHGCTRL5_ICHG_SHIFT; + + data = RT5033_CHARGER_FAST_CURRENT_MIN + + RT5033_CHARGER_FAST_CURRENT_STEP_NUM * state; + + return data; +} + +static int rt5033_get_charger_const_voltage(struct rt5033_charger *charger) +{ + struct regmap *regmap = charger->rt5033->regmap; + unsigned int state, reg_data, data; + + regmap_read(regmap, RT5033_REG_CHG_CTRL2, ®_data); + + state = (reg_data & RT5033_CHGCTRL2_CV_MASK) + >> RT5033_CHGCTRL2_CV_SHIFT; + + data = RT5033_CHARGER_CONST_VOLTAGE_LIMIT_MIN + + RT5033_CHARGER_CONST_VOLTAGE_STEP_NUM * state; + + return data; +} + +static inline int rt5033_init_const_charge(struct rt5033_charger *charger) +{ + struct rt5033_charger_data *chg = charger->chg; + int ret; + unsigned int val; + u8 reg_data; + + /* Set constant voltage mode */ + if (chg->const_uvolt < RT5033_CHARGER_CONST_VOLTAGE_LIMIT_MIN || + chg->const_uvolt > RT5033_CHARGER_CONST_VOLTAGE_LIMIT_MAX) + return -EINVAL; + + if (chg->const_uvolt == RT5033_CHARGER_CONST_VOLTAGE_LIMIT_MIN) + reg_data = 0x00; + else if (chg->const_uvolt == RT5033_CHARGER_CONST_VOLTAGE_LIMIT_MAX) + reg_data = RT5033_CV_MAX_VOLTAGE; + else { + val = chg->const_uvolt; + val -= RT5033_CHARGER_CONST_VOLTAGE_LIMIT_MIN; + val /= RT5033_CHARGER_CONST_VOLTAGE_STEP_NUM; + reg_data = val; + } + + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL2, + RT5033_CHGCTRL2_CV_MASK, + reg_data << RT5033_CHGCTRL2_CV_SHIFT); + if (ret) { + dev_err(charger->dev, "Failed regmap update\n"); + return -EINVAL; + } + + /* Set end of charge current */ + if (chg->eoc_uamp < RT5033_CHARGER_EOC_MIN || + chg->eoc_uamp > RT5033_CHARGER_EOC_MAX) + return -EINVAL; + + if (chg->eoc_uamp == RT5033_CHARGER_EOC_MIN) + reg_data = 0x01; + else if (chg->eoc_uamp == RT5033_CHARGER_EOC_MAX) + reg_data = 0x07; + else { + val = chg->eoc_uamp; + if (val < RT5033_CHARGER_EOC_REF) { + val -= RT5033_CHARGER_EOC_MIN; + val /= RT5033_CHARGER_EOC_STEP_NUM1; + reg_data = 0x01 + val; + } else if (val > RT5033_CHARGER_EOC_REF) { + val -= RT5033_CHARGER_EOC_REF; + val /= RT5033_CHARGER_EOC_STEP_NUM2; + reg_data = 0x04 + val; + } else { + reg_data = 0x04; + } + } + + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL4, + RT5033_CHGCTRL4_EOC_MASK, reg_data); + if (ret) { + dev_err(charger->dev, "Failed regmap update\n"); + return -EINVAL; + } + + return 0; +} + +static inline int rt5033_init_fast_charge(struct rt5033_charger *charger) +{ + struct rt5033_charger_data *chg = charger->chg; + int ret; + unsigned int val; + u8 reg_data; + + /* Set limit input current */ + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL1, + RT5033_CHGCTRL1_IAICR_MASK, RT5033_AICR_2000_MODE); + if (ret) { + dev_err(charger->dev, "Failed regmap update\n"); + return -EINVAL; + } + + /* Set fast-charge mode charging current */ + if (chg->fast_uamp < RT5033_CHARGER_FAST_CURRENT_MIN || + chg->fast_uamp > RT5033_CHARGER_FAST_CURRENT_MAX) + return -EINVAL; + + if (chg->fast_uamp == RT5033_CHARGER_FAST_CURRENT_MIN) + reg_data = 0x00; + else if (chg->fast_uamp == RT5033_CHARGER_FAST_CURRENT_MAX) + reg_data = RT5033_CHG_MAX_CURRENT; + else { + val = chg->fast_uamp; + val -= RT5033_CHARGER_FAST_CURRENT_MIN; + val /= RT5033_CHARGER_FAST_CURRENT_STEP_NUM; + reg_data = val; + } + + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL5, + RT5033_CHGCTRL5_ICHG_MASK, + reg_data << RT5033_CHGCTRL5_ICHG_SHIFT); + if (ret) { + dev_err(charger->dev, "Failed regmap update\n"); + return -EINVAL; + } + + return 0; +} + +static inline int rt5033_init_pre_charge(struct rt5033_charger *charger) +{ + struct rt5033_charger_data *chg = charger->chg; + int ret; + unsigned int val; + u8 reg_data; + + /* Set pre-charge threshold voltage */ + if (chg->pre_uvolt < RT5033_CHARGER_PRE_THRESHOLD_LIMIT_MIN || + chg->pre_uvolt > RT5033_CHARGER_PRE_THRESHOLD_LIMIT_MAX) + return -EINVAL; + + if (chg->pre_uvolt == RT5033_CHARGER_PRE_THRESHOLD_LIMIT_MIN) + reg_data = 0x00; + else if (chg->pre_uvolt == RT5033_CHARGER_PRE_THRESHOLD_LIMIT_MAX) + reg_data = 0x0f; + else { + val = chg->pre_uvolt; + val -= RT5033_CHARGER_PRE_THRESHOLD_LIMIT_MIN; + val /= RT5033_CHARGER_PRE_THRESHOLD_STEP_NUM; + reg_data = val; + } + + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL5, + RT5033_CHGCTRL5_VPREC_MASK, reg_data); + if (ret) { + dev_err(charger->dev, "Failed regmap update\n"); + return -EINVAL; + } + + /* Set pre-charge mode charging current */ + if (chg->pre_uamp < RT5033_CHARGER_PRE_CURRENT_LIMIT_MIN || + chg->pre_uamp > RT5033_CHARGER_PRE_CURRENT_LIMIT_MAX) + return -EINVAL; + + if (chg->pre_uamp == RT5033_CHARGER_PRE_CURRENT_LIMIT_MIN) + reg_data = 0x00; + else if (chg->pre_uamp == RT5033_CHARGER_PRE_CURRENT_LIMIT_MAX) + reg_data = RT5033_CHG_MAX_PRE_CURRENT; + else { + val = chg->pre_uamp; + val -= RT5033_CHARGER_PRE_CURRENT_LIMIT_MIN; + val /= RT5033_CHARGER_PRE_CURRENT_STEP_NUM; + reg_data = val; + } + + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL4, + RT5033_CHGCTRL4_IPREC_MASK, + reg_data << RT5033_CHGCTRL4_IPREC_SHIFT); + if (ret) { + dev_err(charger->dev, "Failed regmap update\n"); + return -EINVAL; + } + + return 0; +} + +static int rt5033_charger_reg_init(struct rt5033_charger *charger) +{ + int ret = 0; + + /* Enable charging termination */ + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL1, + RT5033_CHGCTRL1_TE_EN_MASK, RT5033_TE_ENABLE); + if (ret) { + dev_err(charger->dev, "Failed to enable charging termination.\n"); + return -EINVAL; + } + + /* + * Disable minimum input voltage regulation (MIVR), this improves + * the charging performance. + */ + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL4, + RT5033_CHGCTRL4_MIVR_MASK, RT5033_CHARGER_MIVR_DISABLE); + if (ret) { + dev_err(charger->dev, "Failed to disable MIVR.\n"); + return -EINVAL; + } + + ret = rt5033_init_pre_charge(charger); + if (ret) + return ret; + + ret = rt5033_init_fast_charge(charger); + if (ret) + return ret; + + ret = rt5033_init_const_charge(charger); + if (ret) + return ret; + + return 0; +} + +static enum power_supply_property rt5033_charger_props[] = { + POWER_SUPPLY_PROP_STATUS, + POWER_SUPPLY_PROP_CHARGE_TYPE, + POWER_SUPPLY_PROP_CURRENT_MAX, + POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE, + POWER_SUPPLY_PROP_MODEL_NAME, + POWER_SUPPLY_PROP_MANUFACTURER, + POWER_SUPPLY_PROP_ONLINE, +}; + +static int rt5033_charger_get_property(struct power_supply *psy, + enum power_supply_property psp, + union power_supply_propval *val) +{ + struct rt5033_charger *charger = power_supply_get_drvdata(psy); + int ret = 0; + + switch (psp) { + case POWER_SUPPLY_PROP_STATUS: + val->intval = rt5033_get_charger_state(charger); + break; + case POWER_SUPPLY_PROP_CHARGE_TYPE: + val->intval = rt5033_get_charger_type(charger); + break; + case POWER_SUPPLY_PROP_CURRENT_MAX: + val->intval = rt5033_get_charger_current_limit(charger); + break; + case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE: + val->intval = rt5033_get_charger_const_voltage(charger); + break; + case POWER_SUPPLY_PROP_MODEL_NAME: + val->strval = RT5033_CHARGER_MODEL; + break; + case POWER_SUPPLY_PROP_MANUFACTURER: + val->strval = RT5033_MANUFACTURER; + break; + case POWER_SUPPLY_PROP_ONLINE: + val->intval = (rt5033_get_charger_state(charger) == + POWER_SUPPLY_STATUS_CHARGING); + break; + default: + return -EINVAL; + } + + return ret; +} + +static struct rt5033_charger_data *rt5033_charger_dt_init( + struct platform_device *pdev) +{ + struct rt5033_charger_data *chg; + struct device_node *np = pdev->dev.of_node; + int ret; + + if (!np) { + dev_err(&pdev->dev, "No charger of_node\n"); + return ERR_PTR(-EINVAL); + } + + chg = devm_kzalloc(&pdev->dev, sizeof(*chg), GFP_KERNEL); + if (!chg) + return ERR_PTR(-ENOMEM); + + ret = of_property_read_u32(np, "richtek,pre-uamp", &chg->pre_uamp); + if (ret) + return ERR_PTR(ret); + + ret = of_property_read_u32(np, "richtek,pre-threshold-uvolt", + &chg->pre_uvolt); + if (ret) + return ERR_PTR(ret); + + ret = of_property_read_u32(np, "richtek,fast-uamp", &chg->fast_uamp); + if (ret) + return ERR_PTR(ret); + + ret = of_property_read_u32(np, "richtek,const-uvolt", + &chg->const_uvolt); + if (ret) + return ERR_PTR(ret); + + ret = of_property_read_u32(np, "richtek,eoc-uamp", &chg->eoc_uamp); + if (ret) + return ERR_PTR(ret); + + return chg; +} + +static const struct power_supply_desc rt5033_charger_desc = { + .name = "rt5033-charger", + .type = POWER_SUPPLY_TYPE_USB, + .properties = rt5033_charger_props, + .num_properties = ARRAY_SIZE(rt5033_charger_props), + .get_property = rt5033_charger_get_property, +}; + +static int rt5033_charger_probe(struct platform_device *pdev) +{ + struct rt5033_charger *charger; + struct rt5033_dev *rt5033 = dev_get_drvdata(pdev->dev.parent); + struct power_supply_config psy_cfg = {}; + int ret; + + charger = devm_kzalloc(&pdev->dev, sizeof(*charger), GFP_KERNEL); + if (!charger) + return -ENOMEM; + + platform_set_drvdata(pdev, charger); + charger->dev = &pdev->dev; + charger->rt5033 = rt5033; + + charger->chg = rt5033_charger_dt_init(pdev); + if (IS_ERR_OR_NULL(charger->chg)) + return -ENODEV; + + ret = rt5033_charger_reg_init(charger); + if (ret) + return ret; + + psy_cfg.of_node = pdev->dev.of_node; + psy_cfg.drv_data = charger; + + charger->psy = devm_power_supply_register(&pdev->dev, + &rt5033_charger_desc, + &psy_cfg); + if (IS_ERR(charger->psy)) { + dev_err(&pdev->dev, "failed: power supply register\n"); + return PTR_ERR(charger->psy); + } + + return 0; +} + +static const struct platform_device_id rt5033_charger_id[] = { + { "rt5033-charger", }, + { } +}; +MODULE_DEVICE_TABLE(platform, rt5033_charger_id); + +static const struct of_device_id rt5033_charger_of_match[] = { + { .compatible = "richtek,rt5033-charger", }, + { } +}; +MODULE_DEVICE_TABLE(of, rt5033_charger_of_match); + +static struct platform_driver rt5033_charger_driver = { + .driver = { + .name = "rt5033-charger", + .of_match_table = rt5033_charger_of_match, + }, + .probe = rt5033_charger_probe, + .id_table = rt5033_charger_id, +}; +module_platform_driver(rt5033_charger_driver); + +MODULE_DESCRIPTION("Richtek RT5033 charger driver"); +MODULE_AUTHOR("Beomho Seo "); +MODULE_LICENSE("GPL v2"); From patchwork Tue Feb 28 22:32:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 657530 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DAE69C64EC7 for ; Tue, 28 Feb 2023 22:39:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229821AbjB1WjA (ORCPT ); Tue, 28 Feb 2023 17:39:00 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57254 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229730AbjB1Wiz (ORCPT ); Tue, 28 Feb 2023 17:38:55 -0500 Received: from sonic312-26.consmr.mail.ir2.yahoo.com (sonic312-26.consmr.mail.ir2.yahoo.com [77.238.178.97]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A94AD1ACD4 for ; Tue, 28 Feb 2023 14:38:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1677623932; bh=KKArGEApjXBYAg0J0GNZwOaNh+WdVYCjGHfCqBUChNw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=AWhW/jcbkzQdWr6roCxW88m/xDQMAJFmeVvtfsG8xnVsx76k3wZkEaKa2KmngLUav2yRH/uxAXIqoO0cUpdRpB1yBCg6dRPUStwlf/xpju/BdmudRibsFp9mHFIl55/L7TbtLJeGuITkBfO8Qx6MO+TV3Gf0ukMs3/YeFMH+jeT7YGrFCzTzgk5ni4obId+6T1u5WYh1l6GLsK23T/Vuo4g/+LpClnq5gHyaGEw5CgDKznSTXvnhzGwqr4za4pJlUJv2KKYJsMGHxfded1qDr4DcH/T/BuftAV63tu4fGWFUik0riSMFhyLVSFZBnNKcBPM2clh9RCwEpGoQs3pAOA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1677623932; bh=HRs6k7UF1laWBQcY03G8zidW2528KM3PtV7I94Eflvg=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=kRtAkDtEhgqEMkWHDXid4+Nxfy+u0HWU146FPmXaE7U1HZnYeA8O3obslRfy4wDuOOFzNbiM8SDWC0LwbK6kZNU9AjvIyhsZI1TJViMKAeHTgdIih+4/eB3E+oIwq2IsHkOxdCOOp5CJ+OwBFyjWUTdO0VFLBgqG/Mutm9szk6oG1bWifWeFR3daYldlwElqLrZOeWrEj6ZJhaCsWXHVBSsTg/+BzGSBKxIuUhfObQap8/a7pgyhU9Lm+/qlqdrhghyzPuWC0s9CHFfC7RtDYfnEDGp8FcyY92sybwTiLclGS3wjc+SxcrJYzZhlZlCWhX8JOvX0MZ+QRceDuhXZWQ== X-YMail-OSG: 9AyCvHkVM1l2j6ncmIXBeNZ4EyS0iUfqqLQ8e71ZZq3EFdFwDgC0AcCYa8ldD7_ lqk0i3Yna9dfI0RhHrsu20MTEQ1B1EkDHLMwUlKB7X3jEvJKLqwF4FhUY1rKYcCT2viXgqOXYit0 9rRXBAC3VBKMUnNk3t55khwaoEQjr6k60Ej9hvLEp.6vhiAOMJeBpMNQBqixOafjJhgdM_kEZytm fjVvFD0iya0Fi4XBGowl7MaOmo_DyZl0zgnjVhtdnRYP6XjvzWEytGfp1SvaSpjG3SKvvkr21VUw msctFyUv19bXhgvSi6xnwLZs0b41_beGugd1wAJVFXDllqSkimYUuG_d639c13St8jrFVJAhU1o0 5FIRavXL6mtGCNHNhZKFLfgZTswFBiWrJgvZrIpY7N_TnHJfoJlp4OLHGpWhhLljusqq.A2EC2fZ hiwLS_Hys40SBIZJ8r.6bvJ4.UyPijQtcqrwoB8kX9BZ1Kg_13rFjGLpaAm35Z6BoCqELAggRlsN fz0DcdsNPjEeFWAac9eao0AGftIusMs69PM.Byk0MUr3YMpY5dThB0mPxPg49JnK177QlAik9XWf UN3NAsLi0UbxDJRUFrwVf7yxg.vPkDDQSuLQwhvmFCse2RYckSSiuj.Itjepuzi.CVioUfEJxi2U UL4XaJYiktj2nnRB_8CoJidFl2nD5BGaYiTqoPWfEYzUZdO_ODyYUKwO58yddtrw170MJ1mrbE2n Hzv0xjTRNRrEzwuEKkmGEuLTH_zghcVyp_gs2fxYjrLpYxM6tfvThE4t5BishZPny19JNAjVuMlE JgloYjEmCCHq95dliXjhE9cd5eekDTnGqTZIJQ6UELOybeIgcFvX3T_OSwlYhICHzlx5d8geNbpB 1DuHXzmbZReCE3E8qPZ0sqBd3lh652Iqk123AOQeQVtfN31qITpGrmVkOqgoKWzx6FX.sEPaI0zT dwF9qpzUE6unlWTjnw5SHtibLKmO5iuX9.dVpanoRyb2gveNK4XH0G41X0KUOI_eJx1IzHzAaS0a D6CbliuOuGMb3oyLpkPCBB3p25TnN4JTI0wEpMLIEgI0CVAPNUlyYhBGldiHiKXb8yb0ed91dhT_ iUe4yB9OROGvXb3swZvMzEM45lrDYidJXDUv4ReFWzNhWlRKrpqcUXOVwkDFmCkgQZfUqaE4oimh gxREirTFo8uhLmccjNameWpH815auT.2NEPwOFmZyIHbBA.UCvGy7qbAAMP3PWAuWC8NJg1qk120 ojG7sBQB0gbyfRnJPTkDNeMosXf3rquT35FineTmgWOV7FTfT0zEeX0mk6A8p3X7JIK2MPIMPtr4 ce_TxgKoWeG_5LecGimgGYUS3aIKF_kzBm2j_jRn91iHl8oUXX7nkLsB_VwCkKYV34ymCf30TVG9 7x8NgYjGWDetjegxBThyIMK0sOtXqbuq18qDq1iNzZREX34yuKe.P_mhs2lZpFHDq3KL5l1DCder JL0.JxyPRCQJ2q5KgS8bgmWi5GFKdXnkI_a7NRiYJWrHp_S1XGa2ouEKMDDsIHc.69Avuf0YDpvp EfanXPjptBzi5FYI6dr8fNlqc9oJJndF3WXu4HJgTWZfBbX91.D46A8.OnMB2.MOxT97VYDV.fUZ MobHtQhkivqh2i9WNqLLkWM8eF3ecI9cepjhol8eCTkbE51hN9pGzAJAX_Kv7KVXXuxks9HV.12U O4LIY_sw8EcOz4.04MGYCT7S8PF2AKU3eAeyvQ58Gn2yx6UBbHKzOSo9lmerIZceilryOwS0XLaB WqSs8_Ar8PKAaOhHgZfGaOuSgaLKEDKnTM_iSyD.TDyXETmKY1dYf3v5Zni5rHMdwppxMCGey1ak wu49xeIAZqbSsdwNHK2J6i.O9imRZ3XA3TXjx1B91FTIheYraniXdY3GkWjlqfOYbJ1.XYn2BNwG Y8e8NFY3qB3o1E_h4V3fFncvGeI6fKpt8pQ2gZ30DBWEUK4u9oMdFDGBWIGNvA9d0.LwbhZtUank a5DS7VgJY1X8bRZwvchY7QlCt04oyhNgyqVFOQNUnOImOkR.xH.2gwsmk52mZ8dLcU58YdXFWTIh Qwicyvd77O7tU6Coz7YGECD_.LqPTVkh.f4AQcuhIX48RW5MhoyT48tXhm7XNBA_IvbgqA.Jm8NG zZj0IsCULZmAmc7FBfKG9_cfx78w61UWV2nnv7FhZG_zs_BIUIAKIV6rAWbOzMrUzII4tdTjGmWb CDczKLKp.ixTRfHiMnYL37xuG8_5yVrJhuCUIXgC.3xP7zWBXCoEI2JePd_6mWdhcP4I0n9Cxf4v 6y2mq9i7qJrkQ8qvcVJEOVcyF.swW6x2z3.VmkBZlBifMGf65bg-- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic312.consmr.mail.ir2.yahoo.com with HTTP; Tue, 28 Feb 2023 22:38:52 +0000 Received: by hermes--production-ir2-65c64dfd66-svnc4 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 1052c26ec2388683ab738a7f87fce466; Tue, 28 Feb 2023 22:38:49 +0000 (UTC) From: Jakob Hauser To: Sebastian Reichel , Lee Jones , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: Beomho Seo , Chanwoo Choi , Stephan Gerhold , Raymond Hackley , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Jakob Hauser Subject: [PATCH 08/10] power: supply: rt5033_charger: Make use of high impedance mode Date: Tue, 28 Feb 2023 23:32:25 +0100 Message-Id: <6b474e64f752ca6802dfb0bfc5571eb1adad8449.1677620677.git.jahau@rocketmail.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Enable high impedance mode to reduce power consumption. However, it needs to be disabled in case of charging or OTG mode. Tested-by: Raymond Hackley Signed-off-by: Jakob Hauser --- drivers/power/supply/rt5033_charger.c | 47 ++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/drivers/power/supply/rt5033_charger.c b/drivers/power/supply/rt5033_charger.c index 79e7f75fe634..ab406fc9fa19 100644 --- a/drivers/power/supply/rt5033_charger.c +++ b/drivers/power/supply/rt5033_charger.c @@ -298,6 +298,17 @@ static int rt5033_charger_reg_init(struct rt5033_charger *charger) return -EINVAL; } + /* + * Enable high impedance mode. It stops charging or boosting and + * operates at a low current sinking to reduce power consumption. + */ + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL1, + RT5033_CHGCTRL1_HZ_MASK, RT5033_CHARGER_HZ_ENABLE); + if (ret) { + dev_err(charger->dev, "Failed to enable high impedance mode.\n"); + return -EINVAL; + } + ret = rt5033_init_pre_charge(charger); if (ret) return ret; @@ -319,6 +330,14 @@ static int rt5033_charger_set_otg(struct rt5033_charger *charger) mutex_lock(&charger->lock); + /* Disable high impedance mode to allow OTG mode */ + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL1, + RT5033_CHGCTRL1_HZ_MASK, RT5033_CHARGER_HZ_DISABLE); + if (ret) { + dev_err(charger->dev, "Failed to disable high impedance mode.\n"); + return -EINVAL; + } + /* Set OTG boost v_out to 5 volts */ ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL2, RT5033_CHGCTRL2_CV_MASK, @@ -381,6 +400,14 @@ static int rt5033_charger_set_charging(struct rt5033_charger *charger) mutex_lock(&charger->lock); + /* Disable high impedance mode to allow charging mode */ + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL1, + RT5033_CHGCTRL1_HZ_MASK, RT5033_CHARGER_HZ_DISABLE); + if (ret) { + dev_err(charger->dev, "Failed to disable high impedance mode.\n"); + return -EINVAL; + } + /* In case someone switched from OTG to charging directly */ if (charger->otg) { ret = rt5033_charger_unset_otg(charger); @@ -431,6 +458,14 @@ static int rt5033_charger_set_disconnect(struct rt5033_charger *charger) mutex_lock(&charger->lock); + /* Enable high impedance mode to reduce power consumption */ + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL1, + RT5033_CHGCTRL1_HZ_MASK, RT5033_CHARGER_HZ_ENABLE); + if (ret) { + dev_err(charger->dev, "Failed to enable high impedance mode.\n"); + return -EINVAL; + } + /* Disable MIVR if enabled */ if (charger->mivr_enabled) { ret = regmap_update_bits(charger->rt5033->regmap, @@ -671,11 +706,21 @@ static int rt5033_charger_probe(struct platform_device *pdev) /* * Extcon support is not vital for the charger to work. If no extcon - * is available, just emit a warning and leave the probe function. + * is available, just emit a warning, disable high impedance mode and + * leave the probe function. */ charger->edev = extcon_get_edev_by_phandle(&pdev->dev, 0); if (IS_ERR(charger->edev)) { dev_warn(&pdev->dev, "no extcon phandle found in device-tree\n"); + ret = regmap_update_bits(charger->rt5033->regmap, + RT5033_REG_CHG_CTRL1, + RT5033_CHGCTRL1_HZ_MASK, + RT5033_CHARGER_HZ_DISABLE); + if (ret) { + dev_err(&pdev->dev, + "Failed to disable high impedance mode.\n"); + return -EINVAL; + } goto out; } From patchwork Tue Feb 28 22:32:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 657529 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CFAEFC64EC4 for ; Tue, 28 Feb 2023 22:39:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229840AbjB1WjD (ORCPT ); Tue, 28 Feb 2023 17:39:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229774AbjB1WjB (ORCPT ); Tue, 28 Feb 2023 17:39:01 -0500 Received: from sonic305-35.consmr.mail.ir2.yahoo.com (sonic305-35.consmr.mail.ir2.yahoo.com [77.238.177.97]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D3E822CFE1 for ; Tue, 28 Feb 2023 14:38:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1677623936; bh=DEPjcIA3533VAWySuEI9s7PPZDzVB5wbr8s5WByqx1U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=GLkQ1YmZofqOFSU4HHlCBhXXvjQuAOYRnV+HNOEcJudjl5DblCXek1CTsaOUewsYZ42HS6LMkg7oXk726KgzRAqwIOo7wCDWExN/Ys5mojRtdm3HcG1UVlgaNArK+kIJopf+8J/i3YuqSSaziBG3wX7TgcmXjeC0LAcIpvvCfchyBefazGRDSiSvFqnO9QkfLlY3iz5EFtQQAuqzfYf7j2L9oVJcKCr7DRVB1ip6MEnk+NTnr2wH/CWDcE6f60zSy9rzV8abywp+yJTfaMSbtRrz7DBbL76D23oHur01onHeEqbyfB6RPVTXEgKl+kd/dlwhjlMTNB9XHWz0U+f0pA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1677623936; bh=puQJA0gdVym2HfwHj5egYqRerFeCvP4PggIFAAKOIRc=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=UkFbdaxEulnv5TVXl0qmYdrNbmFKncHQZE9Y2d5rpRbc82gA5kckJDBCEnUc4iUDUPXohaH9zAzBzdKlUNuxt8zis9lpmSSfvHISm2GMzylWYz4GQCEpnhKWWOQAwzyszazX1MwlWujGK7EvAnqJKMNFlVOTavQ9mphd/3QgFiOSrVePVGeCdZPw0vCCSzLwiBhKRg21f5kgP+38ztmThaEtGuEpIll2aRxBaDRrdeExPYCBpdkMA2CeruScCtFsS20o4peMNi//Cqv3QY1sfbVwrAKBl92ZYnLXJA16NIpujUnSuEpHRbWzSIEKIF8unZAm0Lix8hOavzGsKv6+5g== X-YMail-OSG: rktOehMVM1lApGO.db2VNB2jhLvPQpCZr5joCvujiq8YHDTbdtPtVrV7Nfwcib5 XvlaAMF5EpLsV__fJEFsX05Yjm4sZW8q0QcBMoLlCKqw4RSdrpsqDIuvSS48MV.xqqPTo2w9WCpu IMpEJdxff.NMzLTbLzUBkXUQdeXckzjIcW5N.dMbJS4L7l8oI5WwxQY6UYoBjr7b_yk1GEDGhLEb TTf3b5RNxUq8SkAl7vwPMj_jtwDH6hA0oMbmmWjfAr0xtN96lwdGyxjqEQKGgKfU7NZMkofjeGdT 00gx.0IojhExt9QpxY7LVTVGHV2Usm5sgVYceQ_dVBOIo2.7QtiuNRfYUsRtRMS5d3ywzSzd9syC puXF1SGhLp56ppjYjqZJA2RGXqV9IiOAvk_GOSHc7E8MaVGzdmBCUJ0aJL_NyM9prl5XD8GX_.yK ot1TX3IzOqL9SE27jfnkBhlwpI0F2wNWa6JQrIZbJk9UcafcYrO40cL71Ja805k1X2xQ7ByNPJnJ 5E7yx3JoS4nigASS2zMbG80QalFvrGHsGS52Kw3t6nJniuGgPizz.9MclQq6oMqd7oZ.RAsSWYWI d9qqTnOM.D8W7Op3MrjsOovkMwGrIOKX29D3xZvtxJ3juG_cgkPo6cTkoW.7.ziiIrsdmaFqyWQg c3zuOq1G6dDp7SDkJE4GtH7OCxnFr_xK7NfnfrKFk0_KoxW.7tWMPW2cz0rlbqYEgBqgi7ZaiqLd O_9dWzRBM_zLNcZKJQ9IQqX7SnxdrohIOaL2D_n9gmjGOlSu_Dqzb_O7y9SyK58EEfY.0uzISY5v 5nGzkJg5uX54ZxSxWa2FAewhIpkuC9C4wYbI0e8B9YBanhEdEv6DjA4x9ykzDzZmY0zt_tpvwYYD SgWrRRIKyw10yvUMygVNzbM17rjyXmPl63m0csG1qRVIIAycWU4_ZhoFGNGDZOA.4YqKI5Zoj2cB 0JZ_SRpCXcukTPvqLJADud0li6nDo34KBXoUlyqHYKscgpb70Br96NBQp228aR8zjf4QbVdxWRsv wGROnEEfRksjxoUC7.ceoKYQjf0wAPYg3MoWrVzCEkuJrNdHmpA7hLDt7z_yCE6mUoFrWYEJ1U4p sqSNCi2beLBOvqKZshBQZcGli9hrChn4BGcSKIP3WQ4XNH9DN2dfGjiyMbVP7CrAaeye4Yqk8HN6 Kq8NjoFhwF_yQ63B8vMTYOuCsiQJtCM66CcLuBM.rcSmKqcmjJFNqYvyNP1oisxxMMBzoTdecjAc eO4eyu6awpqadT_t4_CrecKNn4OwEpHbBEld5hzHjNERbgGRqqyfrqkM4zDnqwFbpRk0j3z9fJhU NmJmh4HoabjMdiFZCNBCY78V52dVlel1arctxg8NT2CTwZ3voggHvvhaaKK3COdZHdIjChMJo8gI qQXlNJU7s1ukcFOxGpMj1PvL0SYmQGCD.VJOX_LKmAkGAiNNmOCg.hLczF7RFuhBEiU7Qj8zVbZC 3gWlXrEpC.wwdjlczZB77pT.j7EnadOzkrQrL3pGQBujlmZ_VCz_XfDBIPMlV9N_Df0cH.Hvhm3e FNCaX9oZLkMguTwooUV2auTk7F.3HVO9rrn5_w1yzQaRZ6oNNY6d8dm2qULsMTcBtFKxRV4p71hT YHuhmz_72zRi0JJL1RstxokT1OPZcYG2_x8G9E4xGwB0wtSHux_lQLMl25g76P3CmIHsQu9oPHtp Q3oJXj.WW2BOvWHok8eD6PiO5pjfTqa_M_b72IRde49GUAwNaNzVqaHM6qwnZP4V04a.k6h59x.J a_gXmWu3g.DJrMfd2UQzEF5fnRdugMobOwXC247Y_KlB2SvcK1Y_b3dMZZ7vBpMTc7Mrw93ZKXa7 Oj20cX8a4TtO.AZyjzavL0D7A8h5eReq9BhObugJRcV2213OODqL1t8BNUYsFReKeNlfgTe_Qrri bCsChdyShy0bDq4_2o7Qr3yk9lS3f3KHbveCQ1SoDht0b66_ncKuCCOkJjuchvHzfuixie3Vz8hf iKHX7v20yV3sOM7yCIaGzUjpRs8bPdpFsxEYcccIgztCFkivQyY5VQkDGNtYKKGQM1emXIHC5Ka5 NOREzSMQnIVEfqfaSgciRTcSGEHKKRxjXEAjQ5y4NeKkm7sQW_AiXtkmxivg7CF6VjFVSt1Ny4rV WDQYfUwk.hfquUU9sTx63A3FcdholkECDZ_ziXr8xJaI6kQDqlkRU4iDAII97YYfyAdqoOs_9tcw KG98KAUUbJTk8IrkaOngNUTrccw_K4F5xf6knJ7GnQ7LVMqmfHvO80_2Y5POCWoHRl_Qne39Idd0 yb5AFpkZMvk1W3YrnlCL_S1bZ43v7E33rbWV47Py91sREpHTs7V7H_JWfRB3QhO4LAkKAEj4psct uYppjtlOCIktRaprFGIxociotrdDeNLCv79WEAfg8I8J0mk8- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic305.consmr.mail.ir2.yahoo.com with HTTP; Tue, 28 Feb 2023 22:38:56 +0000 Received: by hermes--production-ir2-65c64dfd66-svnc4 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 1052c26ec2388683ab738a7f87fce466; Tue, 28 Feb 2023 22:38:52 +0000 (UTC) From: Jakob Hauser To: Sebastian Reichel , Lee Jones , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski Cc: Beomho Seo , Chanwoo Choi , Stephan Gerhold , Raymond Hackley , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Jakob Hauser Subject: [PATCH 10/10] dt-bindings: Add documentation for rt5033 mfd, regulator and charger Date: Tue, 28 Feb 2023 23:32:27 +0100 Message-Id: X-Mailer: git-send-email 2.39.1 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Add device tree binding documentation for rt5033 multifunction device, voltage regulator and battery charger. Cc: Beomho Seo Cc: Chanwoo Choi Signed-off-by: Jakob Hauser --- .../bindings/mfd/richtek,rt5033.yaml | 102 ++++++++++++++++++ .../power/supply/richtek,rt5033-charger.yaml | 76 +++++++++++++ .../regulator/richtek,rt5033-regulator.yaml | 45 ++++++++ 3 files changed, 223 insertions(+) create mode 100644 Documentation/devicetree/bindings/mfd/richtek,rt5033.yaml create mode 100644 Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml create mode 100644 Documentation/devicetree/bindings/regulator/richtek,rt5033-regulator.yaml diff --git a/Documentation/devicetree/bindings/mfd/richtek,rt5033.yaml b/Documentation/devicetree/bindings/mfd/richtek,rt5033.yaml new file mode 100644 index 000000000000..f1a58694c81e --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/richtek,rt5033.yaml @@ -0,0 +1,102 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/mfd/richtek,rt5033.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Richtek RT5033 Power Management Integrated Circuit + +maintainers: + - Jakob Hauser + +description: | + RT5033 is a multifunction device which includes battery charger, fuel gauge, + flash LED current source, LDO and synchronous Buck converter for portable + applications. It is interfaced to host controller using I2C interface. The + battery fuel gauge uses a separate I2C bus. + +properties: + compatible: + const: richtek,rt5033 + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + regulators: + type: object + $ref: /schemas/regulator/richtek,rt5033-regulator.yaml# + + charger: + type: object + $ref: /schemas/power/supply/richtek,rt5033-charger.yaml# + +required: + - compatible + - reg + - interrupts + +additionalProperties: false + +examples: + - | + #include + + i2c@0 { + #address-cells = <1>; + #size-cells = <0>; + + pmic@34 { + compatible = "richtek,rt5033"; + reg = <0x34>; + + interrupt-parent = <&msmgpio>; + interrupts = <62 IRQ_TYPE_EDGE_FALLING>; + + pinctrl-names = "default"; + pinctrl-0 = <&pmic_int_default>; + + regulators { + safe_ldo_reg: SAFE_LDO { + regulator-name = "SAFE_LDO"; + regulator-min-microvolt = <4900000>; + regulator-max-microvolt = <4900000>; + regulator-always-on; + }; + ldo_reg: LDO { + regulator-name = "LDO"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + }; + buck_reg: BUCK { + regulator-name = "BUCK"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + }; + }; + + charger { + compatible = "richtek,rt5033-charger"; + richtek,pre-uamp = <450000>; + richtek,fast-uamp = <1000000>; + richtek,eoc-uamp = <150000>; + richtek,pre-threshold-uvolt = <3500000>; + richtek,const-uvolt = <4350000>; + extcon = <&muic>; + }; + }; + }; + + i2c@1 { + #address-cells = <1>; + #size-cells = <0>; + + battery@35 { + compatible = "richtek,rt5033-battery"; + reg = <0x35>; + interrupt-parent = <&msmgpio>; + interrupts = <121 IRQ_TYPE_EDGE_FALLING>; + }; + }; diff --git a/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml b/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml new file mode 100644 index 000000000000..996c2932927d --- /dev/null +++ b/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml @@ -0,0 +1,76 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/power/supply/richtek,rt5033-charger.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Richtek RT5033 PIMC Battery Charger + +maintainers: + - Jakob Hauser + +description: | + The battery charger of the multifunction device RT5033 has to be instantiated + under sub-node named "charger" using the following format. + +properties: + compatible: + const: richtek,rt5033-charger + + richtek,pre-uamp: + description: | + Current of pre-charge mode. The pre-charge current levels are 350 mA to + 650 mA programmed by I2C per 100 mA. + maxItems: 1 + + richtek,fast-uamp: + description: | + Current of fast-charge mode. The fast-charge current levels are 700 mA + to 2000 mA programmed by I2C per 100 mA. + maxItems: 1 + + richtek,eoc-uamp: + description: | + This property is end of charge current. Its level ranges from 150 mA to + 600 mA. Between 150 mA and 300 mA in 50 mA steps, between 300 mA and 600 mA + in 100 mA steps. + maxItems: 1 + + richtek,pre-threshold-uvolt: + description: | + Voltage of pre-charge mode. If the battery voltage is below the pre-charge + threshold voltage, the charger is in pre-charge mode with pre-charge current. + Its levels are 2.3 V to 3.8 V programmed by I2C per 0.1 V. + maxItems: 1 + + richtek,const-uvolt: + description: | + Battery regulation voltage of constant voltage mode. This voltage levels from + 3.65 V to 4.4 V by I2C per 0.025 V. + maxItems: 1 + + extcon: + description: | + Phandle to the extcon device. + maxItems: 1 + +required: + - richtek,pre-uamp + - richtek,fast-uamp + - richtek,eoc-uamp + - richtek,pre-threshold-uvolt + - richtek,const-uvolt + +additionalProperties: false + +examples: + - | + charger { + compatible = "richtek,rt5033-charger"; + richtek,pre-uamp = <450000>; + richtek,fast-uamp = <1000000>; + richtek,eoc-uamp = <150000>; + richtek,pre-threshold-uvolt = <3500000>; + richtek,const-uvolt = <4350000>; + extcon = <&muic>; + }; diff --git a/Documentation/devicetree/bindings/regulator/richtek,rt5033-regulator.yaml b/Documentation/devicetree/bindings/regulator/richtek,rt5033-regulator.yaml new file mode 100644 index 000000000000..61b074488db4 --- /dev/null +++ b/Documentation/devicetree/bindings/regulator/richtek,rt5033-regulator.yaml @@ -0,0 +1,45 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/regulator/richtek,rt5033-regulator.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Richtek RT5033 PIMC Voltage Regulator + +maintainers: + - Jakob Hauser + +description: | + The regulators of RT5033 have to be instantiated under a sub-node named + "regulators". For SAFE_LDO voltage there is only one value of 4.9 V. LDO + voltage ranges from 1.2 V to 3.0 V in 0.1 V steps. BUCK voltage ranges from + 1.0 V to 3.0 V in 0.1 V steps. + +patternProperties: + "^(SAFE_LDO|LDO|BUCK)$": + type: object + $ref: /schemas/regulator/regulator.yaml# + unevaluatedProperties: false + +additionalProperties: false + +examples: + - | + regulators { + safe_ldo_reg: SAFE_LDO { + regulator-name = "SAFE_LDO"; + regulator-min-microvolt = <4900000>; + regulator-max-microvolt = <4900000>; + regulator-always-on; + }; + ldo_reg: LDO { + regulator-name = "LDO"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + }; + buck_reg: BUCK { + regulator-name = "BUCK"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + }; + };