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: 13155298 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 468A4C64EC4 for ; Tue, 28 Feb 2023 22:33:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230004AbjB1Wd3 (ORCPT ); Tue, 28 Feb 2023 17:33:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50620 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230001AbjB1Wd1 (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 A894223111 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: linux-pm@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: 13155301 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 3FDAFC7EE30 for ; Tue, 28 Feb 2023 22:33:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230072AbjB1Wdm (ORCPT ); Tue, 28 Feb 2023 17:33:42 -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 S230036AbjB1Wde (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 9825223DA0 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: linux-pm@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:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 13155300 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 221A8C7EE30 for ; Tue, 28 Feb 2023 22:33:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230030AbjB1Wde (ORCPT ); Tue, 28 Feb 2023 17:33:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50812 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230015AbjB1Wdd (ORCPT ); Tue, 28 Feb 2023 17:33:33 -0500 Received: from sonic313-21.consmr.mail.ir2.yahoo.com (sonic313-21.consmr.mail.ir2.yahoo.com [77.238.179.188]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0E8FF2D56 for ; Tue, 28 Feb 2023 14:33:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1677623605; bh=6QW6qS6qzowaGzOmGHWiceyKh+dBbL/WJK+sPHLzENU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=sxqKJXC3m5EhA76wqzFLOUebw75uEvB56XPUmEm+RIfF1H8WcNybXVg6p1TmEwlXMpn8FvgEQgDfczgdotytJ/1fjDhMSH9ZTMTFiGoyMmCS8XnPNYJ77PGnNHJ9izHt24jYyT2s3Y833yrJ+apfTv30spR+wr/ZrYtXCYu/ivxqJRMhyZNmhxW/Fud5LYlzr9ZhPwcRmYqvfc99E9ilL79z8RftNcbfp8UllxKTHMgvbvWUD0WLzV8HvfpZUEzBv8+a9K7LLjOgjtL6z97oObozt0swfmjyXDYzaXegtg+e5/y50tymkcM+hIV/DV61Rbp9Oz9hnc/PKaSKpQZPLA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1677623605; bh=X/5tTRJbSPuplgAZ4YAqIBfa5BNtSu4ZJL3loG7x6jn=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=Qhe3uaJ6Tote77utTPdWj2KaC3NPMfb7RJffJDWHjOv+D7k4SqLYHJDmOdSqIOTHzOESsuj9jvkdxPEokTxIhsgt2QlS9k9d1PjZ99UrN4rJma3f58U1oPhVzEIb577lVcVrv4b/IO46WAJxlGFZeJsHyOEOZij6+GH5q1Fvv/rX3N7LFpoi9hyn+F/+KjcFigJ6QAlHFMlV3VIUI3XOrzXljZgJTY/5L8yhvbVdddVYHAGhXnx0Sa7KOPv2NfPJ4vOHrgfyEaKTDT59DDDKiUtNHNhzTD820WlhLztJRNheYIDKUy8Nyo+DlpOqFDwwwzHfrXGpmtGgrPlVm60Dqg== X-YMail-OSG: 9Pj7EC0VM1kca6J4TiCMe52rGOoFwXiuadi.IKPGkk7Ej0T9F9uVlFTPSdwCsT1 _j137lpuXnvqD_KbJ94CjjJVIj9yOZtvDtioDXSMLR0ULhGOIqXZswlsCBMDcDOnrtNOKy8pXgWz G1GUfWGNUqE4BnTxLDuECDrcUJr4KyNltMwtIDS70vWPYJs0wShqgh2axEtld_iUnFpTEenXDu.0 OJFN_TqWAO4Y_SNO.G_xz_vns54EubQ8lbGFzK7ve48C8ByQd21xDMPQvy0adW7XmdUC1YdUmYyN C8RCxy3v0aeAB.Yzs20BU9WS5Q1K_YF0KXZ6lwPxbcrMWUvM8V1FvgJDa3et02zFKH0EUohjvod. gHF7PwKfkIQc3MUM2xd7vqYLrjtlqtFPqVsd8x1bATdN.APk3J.VCDO3OjAyGl4aSUCuge2nJh5z lWYHY0wnJSNmksRL17Rqzzzgm8zwU.AdCgflEYcb1GI2IwrnmIQOc4_7HJGbrbcGBepWOgHUYFMM tNXkiiP4bOaDk8oCeKlAlQZVET5UOa.9ocszmIFasCbBlLzp9xEOcD1NOY2Sv3f3OkApyaYDkGSL N8.FsTLKT2DTEsP89T9BRmBZCtIXDvgbXtD71YuuAwBKGMjQGZzbo81Wm2Y1wLcoN.roFsMq7oPd ay0PtzM2y.QR8qKGBQEncbGahzp9aXnRkwkwskGQv2O3PaJMLG5yYBWrr9ducXyKYI.3iyvtHbfa K31_lV9VqLly5brqlSluX52MBrgkdp6A05Eku9e8.RntQ.N7SCboCS7r38ckApKTNAOUnwOw13iT sn27zOBZuACsIpt8mImMqfH3fL4Q7Ju.1W4ZhMZcMKxkVWncYvLs5LS0ipSTheHzD7sW.KTvLV6x Vxd3.VfoYq91JfyGrTeEyxLE5SX7d0s4YY2zUuFgM84OIlIXQ0_uOJf3IfsLAkA0K9VE196Cf0kb rsDa2y8gsX7i8UJBwq2JMZjKUE6Wa2D9qdLmbs8PnprE7v8xkxSbOFb6MmBsNGuxy7m5twQ22GGi a4ll6zThoOjqMjwGc_Vjp4oWkovno5013AOC2yLDa0CY6Ju7o4uFhDioa6SfnczKvaxexGngKMuV aCSthVZrOQz.tJ68uylXQq2u2ZDyqIdu0rb39BDodgTDrhcO1kaXjCaRYPC_8EQKEe1w3Z8Od.Dd oaEFw0DCfDD635hQyUGM_vLmk0xudL04ZYd7BVAXCpny.5fzyFBZLcw9czVyOgM68IY7zR319N5f qD_wFYVDrnCmEVvJFSwXArgk47.vUjSmndYrYBiIi4RPein0xsPkQVyXvJUY4rhXD6szCCNTcoQL T69oOWJXmHLV02KN88E8YlZhCSSGZsT5gzfDqDWV9JzVhqaTzP_HwhMAHIE_1p8VLDrMGAWskRdJ YnqZ3br2kJldqBipnvOgU02K7wB_levtm7aoyIF.r1XllUL7bjhT._YXlLZktvt7wK_sS0h9zb0H uWOT5g1zqEzRm8xUOKdWrvd3uygh3IgUe9j54a0xt3XoKISBjhA2Ltw.EvmWAosEpbmVY4FOh3R9 GNk5ZzYp87AO3O4Db4kLhbSyacenWXHuzM_O6txoHzz2jTYyDm4w_JWhmdbyAK9pa6qBgIqWWG9h 5a75g1f9ID5nIvx7c7RRsRwwjzA9GsgzkylOL3YUTbss.dxGEhPs.7b2YoeScyQjy6V74iG.Fr3N 1KOWAB9S.TDZkrSWFG3KxAIFuUVG4GDdSgn35Z0KUTzeaf3afiQWTpLpzD365f6BRZSDA2qu.nxN EkSG550KZMbuWHFiG6qNgxqZaPwr.tXAhKyH2FHBwRTWI7dVyU.d5C3bB30aLahiPHduXIcWn.Y7 oCd9uswaK1jzbgx8JFO2DfYgMBWGiH9HQ6OHUiUODwPu3dGWhMze_PzpsTLge.gbdYfNiTUKK_fg C5CiBikVyL6UQZ2_5gYynB9sS7ahxDB6.7GvTbct5XXRnaQjvvzyzTMavQKNq5TRYxm__rORPL6T xabb.78tmTakTtqKKQAOR.g4jzSFOLnQ2krdPffD6ewz1ysny.xFyoYnlecccrDa5OQlPG828DvY LIrVZM2kOMshhEJdJbsBmJsOJsaO3fgn.hTEs8.Vt_dP1QfPBFuD8thl800.Rld_bbw8zMmtR69J Kqrulee_UXsI9WM.yVB8WkpWLEx7scP3DtoKMB6J96Pv9OSKDu_R3y7tgKx2oQO2wQjbdIwBl8DF y41fjVgw.bhvUVrXIinW5GXpaBPujTeeSJ93MPBOEn_9OoRXpG4_1U43ewDxWn.wl8YRTnCse5lh 4CGd6Aa5UHlh6IOXX6kWjji1el9ixPAxiIW74H6WIOqaKHQ-- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.ir2.yahoo.com with HTTP; Tue, 28 Feb 2023 22:33:25 +0000 Received: by hermes--production-ir2-65c64dfd66-lx9xq (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 4362ede20d54ad479836919fc460cee8; Tue, 28 Feb 2023 22:33:22 +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 03/10] mfd: rt5033: Fix comments and style in includes Date: Tue, 28 Feb 2023 23:32:20 +0100 Message-Id: <606950da6f4b36f5a124ff13756c78644fc89804.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: linux-pm@vger.kernel.org Fix comments and remove some empty lines in rt5033-private.h. Align struct rt5033_charger in rt5033.h. Signed-off-by: Jakob Hauser --- include/linux/mfd/rt5033-private.h | 17 +++++++---------- include/linux/mfd/rt5033.h | 7 +++---- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/include/linux/mfd/rt5033-private.h b/include/linux/mfd/rt5033-private.h index d18cd4572208..b035a67cec73 100644 --- a/include/linux/mfd/rt5033-private.h +++ b/include/linux/mfd/rt5033-private.h @@ -111,14 +111,13 @@ enum rt5033_reg { #define RT5033_LDO_CTRL_MASK 0x1f /* RT5033 charger property - model, manufacturer */ - #define RT5033_CHARGER_MODEL "RT5033WSC Charger" #define RT5033_MANUFACTURER "Richtek Technology Corporation" /* - * RT5033 charger fast-charge current lmits (as in CHGCTRL1 register), - * AICR mode limits the input current for example, - * the AIRC 100 mode limits the input current to 100 mA. + * While RT5033 charger can limit the fast-charge current (as in CHGCTRL1 + * register), AICR mode limits the input current. For example, the AIRC 100 + * mode limits the input current to 100 mA. */ #define RT5033_AICR_100_MODE 0x20 #define RT5033_AICR_500_MODE 0x40 @@ -143,10 +142,9 @@ enum rt5033_reg { #define RT5033_TE_ENABLE_MASK 0x08 /* - * RT5033 charger opa mode. RT50300 have two opa mode charger mode - * and boost mode for OTG + * RT5033 charger opa mode. RT5033 has two opa modes for OTG: charger mode + * and boost mode. */ - #define RT5033_CHARGER_MODE 0x00 #define RT5033_BOOST_MODE 0x01 @@ -185,18 +183,17 @@ enum rt5033_reg { * RT5033 charger pre-charge threshold volt limits * (as in CHGCTRL5 register), uV */ - #define RT5033_CHARGER_PRE_THRESHOLD_LIMIT_MIN 2300000U #define RT5033_CHARGER_PRE_THRESHOLD_STEP_NUM 100000U #define RT5033_CHARGER_PRE_THRESHOLD_LIMIT_MAX 3800000U /* - * RT5033 charger enable UUG, If UUG enable MOS auto control by H/W charger + * RT5033 charger UUG. It enables MOS auto control by H/W charger * circuit. */ #define RT5033_CHARGER_UUG_ENABLE 0x02 -/* RT5033 charger High impedance mode */ +/* RT5033 charger high impedance mode */ #define RT5033_CHARGER_HZ_DISABLE 0x00 #define RT5033_CHARGER_HZ_ENABLE 0x01 diff --git a/include/linux/mfd/rt5033.h b/include/linux/mfd/rt5033.h index 3c23b6220c04..8f306ac15a27 100644 --- a/include/linux/mfd/rt5033.h +++ b/include/linux/mfd/rt5033.h @@ -49,10 +49,9 @@ struct rt5033_charger_data { }; struct rt5033_charger { - struct device *dev; - struct rt5033_dev *rt5033; - struct power_supply psy; - + struct device *dev; + struct rt5033_dev *rt5033; + struct power_supply psy; struct rt5033_charger_data *chg; }; 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: 13155302 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 BF9C4C7EE32 for ; Tue, 28 Feb 2023 22:33:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229947AbjB1Wdo (ORCPT ); Tue, 28 Feb 2023 17:33:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50754 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230003AbjB1Wdm (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 8C29324133 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: linux-pm@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:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 13155303 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 108A6C64EC4 for ; Tue, 28 Feb 2023 22:33:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230036AbjB1Wdn (ORCPT ); Tue, 28 Feb 2023 17:33:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51166 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229947AbjB1Wdl (ORCPT ); Tue, 28 Feb 2023 17:33:41 -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 72A9223126 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=FbVYddpsZyZOwFt1hKP1uV44/imXC63D+WJnMDA/Y8Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=MmsDo9sxW1kt9LCo8hONulayMmxkVqWrNG9JFuWr3LOm1QOktSPS+VpeUcHKn3J0ODRPE+7U/3hP2I/mUJxgksq+pZaufkCCXeysBJGjp6qaZJH+vKYvxR2H97CGukpJuhVRcTY8uJ8lRn+R7BlOJj0226DXIxAw28gJV3MxJyURjzZ9risDdbeWYMWsiN3Dtm8xgvkrj8eAwSzbUtK6g3nZflfOJGFIoJL9XPFVyLLUctorhU7K4raA4FvYxPKRbraXUULoM0+ZN0jUxyFPHSxZzbwqOgg6jCCPBDDy7MJeLns/zscbQuOkNr3sKjQB5SI686CJqUSwZSVVR2c0vQ== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1677623608; bh=YamGTgELO1bXYBSaWwTaMGBBLHmCM60U3zDykLCNPz2=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=UbCk3ur0Reh7ULQ4No4s9SSF/nPyM1a8EhfH++3HnxuJorQgYY18AVTy011kQKKxLo8e8gWeezFJUTXx3zdO1NarWpcXwV6MUzER+v3XaHmPRil3qYGDt8YaIZoYIGt1f95mUMjC6gDRny2nHxNqTEozB98qijsWKj7fGhCokjRuvpK2ugQYBaw+SxGYa8f1jRarEWCSjpjuJGgpo2g4bfIXEhVdx6Ptba04ivoiZq/Zqc3J6+DvXK7L4WvRN/F4jl0K0fcw+SIlCha83rdwbsqiegetnOY8MpfLsPZb1A1XO8w42+CxaRF4gFEkmrP3FAGXCXsDLlpazYqJy9fp6A== X-YMail-OSG: F1gSIZUVM1kaNk8M2Cu40BJD8C_87G1.9NuQerxZjL1uCrU6omdSMcQtCxZVNU. VZGSUCVxaT_nqnRlm.vEmICEEEeENA35pIZdogMfGauN_EoZJleTO.GetMPaMuTs045vAtnSA_wn m0f9LCsGrm.MhdrY2spYw.HxzrXrDGNqOKdc5lUU02RLkHF6DhE7m6AABdaDqQwOBjlKHwpvfa8u iL.JwxMHkBr3ryUwxv8vjngO7YZ3qiwjkn.l30_ajxhcvdZFq2xudEnuijqM19xAYouNan2o_IIg mxQP5KkHMYC._Od99bn_CU_PbpD0zWsHxxiboaM.neW4SVhdTGK3KM2k98WbCfI7pLpQlEig5dhs OLr82wVFpnhUS6Fhx21tMz4oUBQO1NkVNoJ6xMapNdkBA71BWMVw5CHSwGRSBtDkO9Rm_Sbp2byc TA56lYPAuWUDDX0JtCNwM75bV102Af3pGCwCMfqYhUfSZc3eocpQ32nO545aMwU1k.wExUuhkK0S QbkseLNsWfN2WopFCtIA_oHIAJFMbGhJ42RkygDXpDV3KrhZvzOQ_HLsA28fl6IFecipyUT_WV4j _YeA8U7UpoRpZvuOcPgw._TFF8qGTqBUR6xCwbsnqc0gcAlnO2eqzVlsQn36WZPt0i_65RMLHt85 CIwsFU6bV1uxIoHGV1XhAIND.IkS7z5X361mTCgKpZrOfBp7f49oDni8Z_RsFIxW.bELfeF6weD0 eyd7UQQo1wym6AVJgjWgsVLvyicr1K8K1CLwlLtZnxExBeHeJx4Wrab5aLVBrAun4wi60cuzRFea 2zLZIjlxn4.MiSsIalGZHRWzZC1Q6Mxfvnpq1wgX4XFkYJ.DwyftGNcz5lE8jx56AvbUM44tBpCF P6AhYJb7tu5FJrVV0ED2CwSvdAsb3goVPRvn0ljet.sMfZoCAZnkSRu5WXT8UKmOR_tio.qDnBz3 6djIXXQwiW0OwB8sMgVgl9LZ8gisGmzRX8aLtAb2o3K5pOaY5GC1UoqZBLa8CUUpAmjp5Pnd84R. ioaj3cRf0CcuOdgi6h24wpw.56DTpX8z_6CJmfQvgZN8r09LzVD5drtD4wDQffGGXlSwdmoYv3xU tXUJ3yOPksosM30NqaY.SC6KL5G.T4mNPMHDv_rTYJbRA8nhgavvfgicSKVqL0F7Pq_b50LG78x5 rMA5JwbiBL7tL1mt108_6pOftKO_j_t0oA.PJvYofmsEAE27crYxdElpXzmtwLEbobTYTYdNiClQ nmhenHgFt2grgQIqMl58UuCfkSr0f8x2BpNQ0JNnFKDOaGIV07uVjxJ.ejso7zNUVEAfDSPpA1It 4Zzvm2XePalY3IUxK5JizhsDWsY7OKLnwsMlz8pC0hJubGYsXP84VAGfyHxe4UzSE99xnxWHDxOW D1q56PpCJw035exL5cXlDwV5EiweZKDSsO6.i_RETn9LpAaJRkQgR1bEFKirhbnsQvGBKiVERbHH sWEC6VYva.ByEG6YfOC80B7lSVcR1Jw3upYcawSTkqIkTqLMaAE.LkT4oxacbcS0r9tdh3dWpBPU BD9txeNkwnRYl9XdfPiaOFmiCai_vMpyAosNHcNPIvnXK2KtJT9xwEKYcQkksWht_gM_FBdveBBT 77.Ecw8VcfohAUWGyGsL_0Z7NvPC9Gn4wuwgO1KCvAMfbyvJdkLgHlgfMJI1wpQpdm1O4DSuMSjs 3gkAmRhzRM9j7vrkvIip4yq.MvYpBLTLvsFNCpvhLpHhs9UsjGOGxAsUrVgSyHjDdLQilpAFpPG0 CBYyvycbBJjtHp.dL14D0MOcnR7PKH0Oy.pw1JjrtE8xXRwHy3FXNoc8Lx3Hn62L2PbMJN7IWa6Q rsUBuUmHLK.ipX_cH1rmBQbvScCNXG5BnIgSMyv9uvu6F8xJ7QBq29WrxjG6U2Ejk6u92AQMrmrh W0ll.gYvjeWFZWSnbbNIL2LalDrZe6SZJgmKuclrmftT0lXM47N1rwmKPlJGmj4VQWRwWYpcHZSs kvo.KkuSTNe9sM7p6pnGOydWf0Wsogqg_HSjcHyGm4XIXBAPHbCAubw4ESt05vapPEzPhBi3rjUd 1DfOocQ7P77IlwsBciD9OBWf_paEQ_Ki4sBhcJ4r2aJ7ruSPqsmuXxCXzg2RSGmFJZdX8JIhx_RJ vJQW._B14Mc4douJXpvQuRh5xS_pqXPfNPnhjhxH0MG8SYPERE1BpKZhMpNq0y2hVQiH9JGOMEBc mFmJoi1NjR1Na7qw_hs4mu.NWAIK7W2HOFHldhjnNHy9hAdJrCu8s6KV35jmDaBWZZ.VGDIrb4ya Tk_5rvd_W5j0M_OkzPCvb27BBdEc0OFPVeO0U5f2YH5gy0XI- 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:28 +0000 Received: by hermes--production-ir2-65c64dfd66-lx9xq (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 4362ede20d54ad479836919fc460cee8; Tue, 28 Feb 2023 22:33:24 +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 05/10] mfd: rt5033: Apply preparatory changes before adding rt5033-charger driver Date: Tue, 28 Feb 2023 23:32:22 +0100 Message-Id: <4edfef7fdf129185355d4dd2d3928d63c04bac73.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: linux-pm@vger.kernel.org Order the register blocks to have the masks in descending manner. Add new defines for constant voltage shift (RT5033_CHGCTRL2_CV_SHIFT), MIVR mask (RT5033_CHGCTRL4_MIVR_MASK), pre-charge current shift (RT5033_CHGCTRL4_IPREC_SHIFT), internal timer disable (RT5033_INT_TIMER_DISABLE), termination disable (RT5033_TE_DISABLE), CFO disable (RT5033_CFO_DISABLE), UUG disable (RT5033_CHARGER_UUG_DISABLE). The fast charge timer type needs to be written on mask 0x38 (RT5033_CHGCTRL3_TIMER_MASK). To avoid a bit shift on application, change the values of the timer types to fit the mask. Added the timout duration as a comment. And the timer between TIMER8 and TIMER12 is most likely TIMER10, see e.g. RT5036 [1] page 28 bottom. Add value options for MIVR (Minimum Input Voltage Regulation). Move RT5033_TE_ENABLE_MASK to the block "RT5033 CHGCTRL1 register", in order to have the masks of the register collected there. To fit the naming scheme, rename it to RT5033_CHGCTRL1_TE_EN_MASK. Move RT5033_CHG_MAX_CURRENT to the block "RT5033 charger fast-charge current". Add new defines RT5033_CV_MAX_VOLTAGE and RT5033_CHG_MAX_PRE_CURRENT to the blocks "RT5033 charger constant charge voltage" and "RT5033 charger pre-charge current limits". In include/linux/mfd/rt5033.h, turn power_supply "psy" into a pointer in order to use it in devm_power_supply_register(). [1] https://media.digikey.com/pdf/Data%20Sheets/Richtek%20PDF/RT5036%20%20Preliminary.pdf Signed-off-by: Jakob Hauser --- include/linux/mfd/rt5033-private.h | 53 ++++++++++++++++++++---------- include/linux/mfd/rt5033.h | 2 +- 2 files changed, 36 insertions(+), 19 deletions(-) diff --git a/include/linux/mfd/rt5033-private.h b/include/linux/mfd/rt5033-private.h index b6773ebf4e6b..0221f806d139 100644 --- a/include/linux/mfd/rt5033-private.h +++ b/include/linux/mfd/rt5033-private.h @@ -55,22 +55,24 @@ enum rt5033_reg { }; /* RT5033 Charger state register */ +#define RT5033_CHG_STAT_TYPE_MASK 0x60 +#define RT5033_CHG_STAT_TYPE_PRE 0x20 +#define RT5033_CHG_STAT_TYPE_FAST 0x60 #define RT5033_CHG_STAT_MASK 0x30 #define RT5033_CHG_STAT_DISCHARGING 0x00 #define RT5033_CHG_STAT_FULL 0x10 #define RT5033_CHG_STAT_CHARGING 0x20 #define RT5033_CHG_STAT_NOT_CHARGING 0x30 -#define RT5033_CHG_STAT_TYPE_MASK 0x60 -#define RT5033_CHG_STAT_TYPE_PRE 0x20 -#define RT5033_CHG_STAT_TYPE_FAST 0x60 /* RT5033 CHGCTRL1 register */ #define RT5033_CHGCTRL1_IAICR_MASK 0xe0 -#define RT5033_CHGCTRL1_MODE_MASK 0x01 +#define RT5033_CHGCTRL1_TE_EN_MASK 0x08 #define RT5033_CHGCTRL1_HZ_MASK 0x02 +#define RT5033_CHGCTRL1_MODE_MASK 0x01 /* RT5033 CHGCTRL2 register */ #define RT5033_CHGCTRL2_CV_MASK 0xfc +#define RT5033_CHGCTRL2_CV_SHIFT 0x02 /* RT5033 DEVICE_ID register */ #define RT5033_VENDOR_ID_MASK 0xf0 @@ -82,14 +84,15 @@ enum rt5033_reg { #define RT5033_CHGCTRL3_TIMER_EN_MASK 0x01 /* RT5033 CHGCTRL4 register */ -#define RT5033_CHGCTRL4_EOC_MASK 0x07 +#define RT5033_CHGCTRL4_MIVR_MASK 0xe0 #define RT5033_CHGCTRL4_IPREC_MASK 0x18 +#define RT5033_CHGCTRL4_IPREC_SHIFT 0x03 +#define RT5033_CHGCTRL4_EOC_MASK 0x07 /* RT5033 CHGCTRL5 register */ -#define RT5033_CHGCTRL5_VPREC_MASK 0x0f #define RT5033_CHGCTRL5_ICHG_MASK 0xf0 #define RT5033_CHGCTRL5_ICHG_SHIFT 0x04 -#define RT5033_CHG_MAX_CURRENT 0x0d +#define RT5033_CHGCTRL5_VPREC_MASK 0x0f /* RT5033 RT CTRL1 register */ #define RT5033_RT_CTRL1_UUG_MASK 0x02 @@ -128,20 +131,28 @@ enum rt5033_reg { #define RT5033_AICR_1500_MODE 0xc0 #define RT5033_AICR_2000_MODE 0xe0 -/* RT5033 use internal timer need to set time */ -#define RT5033_FAST_CHARGE_TIMER4 0x00 -#define RT5033_FAST_CHARGE_TIMER6 0x01 -#define RT5033_FAST_CHARGE_TIMER8 0x02 -#define RT5033_FAST_CHARGE_TIMER9 0x03 -#define RT5033_FAST_CHARGE_TIMER12 0x04 -#define RT5033_FAST_CHARGE_TIMER14 0x05 -#define RT5033_FAST_CHARGE_TIMER16 0x06 +/* RT5033 charger minimum input voltage regulation */ +#define RT5033_CHARGER_MIVR_DISABLE 0x00 +#define RT5033_CHARGER_MIVR_4200MV 0x20 +#define RT5033_CHARGER_MIVR_4300MV 0x40 +#define RT5033_CHARGER_MIVR_4400MV 0x60 +#define RT5033_CHARGER_MIVR_4500MV 0x80 +#define RT5033_CHARGER_MIVR_4600MV 0xa0 +#define RT5033_CHARGER_MIVR_4700MV 0xc0 +#define RT5033_CHARGER_MIVR_4800MV 0xe0 +/* RT5033 use internal timer need to set time */ +#define RT5033_FAST_CHARGE_TIMER4 0x00 /* 4 hrs */ +#define RT5033_FAST_CHARGE_TIMER6 0x08 /* 6 hrs */ +#define RT5033_FAST_CHARGE_TIMER8 0x10 /* 8 hrs */ +#define RT5033_FAST_CHARGE_TIMER10 0x18 /* 10 hrs */ +#define RT5033_FAST_CHARGE_TIMER12 0x20 /* 12 hrs */ +#define RT5033_FAST_CHARGE_TIMER14 0x28 /* 14 hrs */ +#define RT5033_FAST_CHARGE_TIMER16 0x30 /* 16 hrs */ + +#define RT5033_INT_TIMER_DISABLE 0x00 #define RT5033_INT_TIMER_ENABLE 0x01 -/* RT5033 charger termination enable mask */ -#define RT5033_TE_ENABLE_MASK 0x08 - /* * RT5033 charger opa mode. RT5033 has two opa modes for OTG: charger mode * and boost mode. @@ -150,25 +161,30 @@ enum rt5033_reg { #define RT5033_BOOST_MODE 0x01 /* RT5033 charger termination enable */ +#define RT5033_TE_DISABLE 0x00 #define RT5033_TE_ENABLE 0x08 /* RT5033 charger CFO enable */ +#define RT5033_CFO_DISABLE 0x00 #define RT5033_CFO_ENABLE 0x40 /* RT5033 charger constant charge voltage (as in CHGCTRL2 register), uV */ #define RT5033_CHARGER_CONST_VOLTAGE_LIMIT_MIN 3650000U #define RT5033_CHARGER_CONST_VOLTAGE_STEP_NUM 25000U #define RT5033_CHARGER_CONST_VOLTAGE_LIMIT_MAX 4400000U +#define RT5033_CV_MAX_VOLTAGE 0x1e /* RT5033 charger pre-charge current limits (as in CHGCTRL4 register), uA */ #define RT5033_CHARGER_PRE_CURRENT_LIMIT_MIN 350000U #define RT5033_CHARGER_PRE_CURRENT_STEP_NUM 100000U #define RT5033_CHARGER_PRE_CURRENT_LIMIT_MAX 650000U +#define RT5033_CHG_MAX_PRE_CURRENT 0x03 /* RT5033 charger fast-charge current (as in CHGCTRL5 register), uA */ #define RT5033_CHARGER_FAST_CURRENT_MIN 700000U #define RT5033_CHARGER_FAST_CURRENT_STEP_NUM 100000U #define RT5033_CHARGER_FAST_CURRENT_MAX 2000000U +#define RT5033_CHG_MAX_CURRENT 0x0d /* * RT5033 charger const-charge end of charger current ( @@ -192,6 +208,7 @@ enum rt5033_reg { * RT5033 charger UUG. It enables MOS auto control by H/W charger * circuit. */ +#define RT5033_CHARGER_UUG_DISABLE 0x00 #define RT5033_CHARGER_UUG_ENABLE 0x02 /* RT5033 charger high impedance mode */ diff --git a/include/linux/mfd/rt5033.h b/include/linux/mfd/rt5033.h index 8f306ac15a27..e99e2ab0c1c1 100644 --- a/include/linux/mfd/rt5033.h +++ b/include/linux/mfd/rt5033.h @@ -51,7 +51,7 @@ struct rt5033_charger_data { struct rt5033_charger { struct device *dev; struct rt5033_dev *rt5033; - struct power_supply psy; + struct power_supply *psy; struct rt5033_charger_data *chg; }; 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: 13155307 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 ADD6AC64EC7 for ; Tue, 28 Feb 2023 22:38:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229564AbjB1Wiw (ORCPT ); Tue, 28 Feb 2023 17:38:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57178 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229509AbjB1Wiw (ORCPT ); Tue, 28 Feb 2023 17:38:52 -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 A8EB417CD7 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: linux-pm@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:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 13155308 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 722F4C7EE31 for ; Tue, 28 Feb 2023 22:38:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229771AbjB1Wi4 (ORCPT ); Tue, 28 Feb 2023 17:38:56 -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 S229610AbjB1Wiy (ORCPT ); Tue, 28 Feb 2023 17:38:54 -0500 Received: from sonic309-25.consmr.mail.ir2.yahoo.com (sonic309-25.consmr.mail.ir2.yahoo.com [77.238.179.83]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9341B16ACE for ; Tue, 28 Feb 2023 14:38:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1677623931; bh=AI+0hvjdKYfuB0QkdFl88NWEQ2qielkjcdN5HypZVtY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=K+bYtng/VdIfpwNTdozQJArlLgcN/9aT9bl9/AkvLCmy4lpmGJcczzb6OVjP+9x1nueDQuOeUq1Lhbxsgia0NiQh3gwS05Qix4czhY8jFO8ZCXzOgCDZl/Nhoaqepe9R9x4BGhBG7PhDfyDwCN4EEL1lndMPgg16VGzeW1NH3LSUhRAk6wQbaAE30Hsm9aVEx3v0TznGvGltFLYJOZTGgu40zCiCEtXB1+8IUc9zK/CuKNoHKubTC1iSyuCNAi7ZCexA4jM5Wf5yIbYA7vLwj/9Uxk/gfohN4iiAme94FjiArgcAJvaRdDrLmyW1SxFwKGo4s4EDsmmfaNp7uEJDWQ== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1677623931; bh=GUg78fiVwK5rF01aTpoXztZE69VaZmSMSXH83LLhrrx=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=nMgS7P3EpkqAFAueYtG50Jio2L2E9lgRKKAbcmlY/Y7HxpyvJH6q72byhQ0DiAk4lfGdUoS/Z8EPDo2frdswAmxu7yX18Pz1Rp35fQLMKQ8/00lIVjGvq8pNRJ4tbwOnj2XqJ4zpoheLFCyejbvwe9yu0oVPLCxv/Zu0ijdnHzIzeD8dqnpVqKHOKshGZ04MQvanGAMRmDubksPXluBmjV4j4TiWk62SuVs8YqGfgupf35+tqjQYIULJFiQbO8M11Zr8aO4bFfRyAgo4ePFq3qbQRpKdTBeMG+UbuUQa7DteTrmTNS5R5Qt4yVqzUerZL/dzXWVjUBm/IKkeyAwCwg== X-YMail-OSG: 1TQ0hVMVM1l9r60NJxhMOVpxFP6LRBtKkPbGA652M.3tTnY.HurONKYxZrhG2ng Z3jczbeoImDlJaP5LIAyX2hJtVhRRBPQUYrLpWTPvZzQlTevzvbrJJFinfPpxCTfOSTIi8.5LIA3 F9TWzzXz1AkA7NUtlSM26DxAud.BqRvUkUMV2950SG0g.QNeT7ubvMu84CK.Cu1AulLi.BKeGibS Bls7HBHy18vg02wQf0R_HEKLtosNHN_2gcmjIsq2JDs85i63OZyrO8_Ig0K9qK0JRFv4wc4O6KkE dBOmnTBgAKr7t14ZgwcXSb12ZVB199SkYheQw6cAd_E9BdIuUHcREapTjWZXkYxcrosh8BHMOxw5 w1Mk_OkFhVMq5UzjPrrw6uxtzdGr8xABce4aKHZr0ar4ebmt0tP6YmJbHhwGnb26mWUzXDsjG_45 lc0MKuUXIhuHnyn36F4VDtrspoOKtjbOhMxahn6zBLW7k4oBrIOjwfnkdwwnXc99O9NuTQwNgNdx DcF4yx.w7M7_VXDkDIjKXf8.MMQG2hnhHCCW6OerpvsMa5DqUOu9Iswd5Dk8NmKVlClrGiGBAPId QnbSuGeGThEIDmDvjHdfipDdycXtzoB8C1RjkpUKCkyr2jcELjzqXnIJc2xYL7wHL9Syz1ZdPecA 44YEaOjk3xPRNc7uI56ucmYggUalQ2MEhbbuZ9.rZAK3SDZ7wGVM0cfD1Sa2som1n_1q4sPie1mf OO5k5kSEDDBPZviT5dI7qAoLDC9h7QlSFa7IpSNCV6o9tXDXvC02ALJTUBoNDnUekQUYIvXp00iF XL1ONkjiaZja3rEmxnCGg27I7NWFfG3n2ilJgMYN4UOYvyJHgMwT5S1gClz_d.yIrsh9xZTl4kOC BU3bEA5f2cIAouhsVKCwJPKUHryIikHJA0WDANyhbwCs4JQfu8z3bqRNaI_oSfaRjWQvx5jxY8Y7 wr4ik9.heQXQn8RVzriQZL_.NTS3MuEfsWKceVoU7Eo1rlEzYQ9YYGTkiF5cmzzVrSEUuXxPaPBc eZnweFb.AjeEclv8UtTS7qW7V4hLJvECib4kIoU.q_KWrC2TlmBAuuDK5KqKyYJVV0lEFIDitRW8 67bb3f05pLvEugmlGMlqdduSCoa1Z2N0GekvHb3pKvXRJe8L6CqyXbXCcOKf6bMbEF_7p5edWSb. 6drupwRjjB7974wZZe_F5XAPpZ6DlvtOV9tQ50ZqnpPomoKzzytEiWscUd5jv.leBOFmxeE5Vhjl snmS2YtrTxOVbG_Z81TrpPX0TbeY9dc54Uf3O7OsMVDNLXenr5u7bplUTY7BdAfnHp0oLTABGmNP 5BhBdZpRx9QnMoqlU2WIP5ia.ynMsgibzmqou6fHBrcT2NqVyws_AScjlaUb4Bv1LnzGQkP3Ow7n df.xprNDPK3NEBCt4qt.3ghVhJN4OMzl_ER6bka7JL9hq5CkAEeyQzZq67b97E_98vyiCqL_mPM6 .uVneran6S0W5oktsN7PiSsdTRM9rCDZO8zBWHx4QsaIWLmTzb52LqoD1oSFey.ohis9NmKbjVuE oPqQnaFHeElUmZQ9UO.h5UrCe7tDX2bXtg6cQulNtMQSKu9bEbzJPLiOl_9zzMdg_zyvQ2bF0h6T _ZCG_SQVyb9iSVy_pFm6fkHxbBgaE4XLWs1ioQ1qwNVqBVOz.eHYXnfKrRoT_zv2M0SyIWrG6KnI lmB40RLcadrU13I47AtcR3CIHhhpN1PhOOu6VhyJPdCgi4ryRL6_Y8ywnqILE7XhreB_i1dICSyT rflZO5TR5wpNRYiJwOPcUd8tNZ6QMYDdXmmemOdFrESVJZ6RjrmdMoVB3L8UK9DpLZPGih0CuUiG gsO_h.BwYz2p.CnFReCrJ5COxmeP_6Wo9FPaRVchgZS1frIWHOhkZJtNsg_4wR5lJ2j2q_etalEB a94I1TPTzs8aI.mhx.tbiGZGBtL8pzmKhDEfmJ.RWNwN2S4AUnPoTnkHGpqe4hsagoZHPT_ulC43 qdCP4xz1hNIVmWDP886lZiaJSM1eQaFzIW5n9XWnqEwDi6IfllTN6CenD3ZGm3a8IhrHiTHHr8rQ laavLr3ZHr9F.pPpj7QP50_pD4bdP7XWzsfTAynPBQwJr.Q9eIOKE2ZOOdLkyzekNtJzMcfj06Dr sJSABvR1U2Db0Fiw0oxmRdRWPQMFE7tFr.5UUAIBrzCkYG0q8o2AnbfGc3wlLDUjvnXs0MSimleo 2N.QSQmdQIqL31qYpzer17t5M4rseTilBWPdcCte7y7_igEtSsGIof2liRnhBGpRbGXoM9zH.eLg CMMuXTlh1Yict1ykzTElm9DgCJCiRHdZ0gEdXY93P6fv9QdGlbe4w X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.ir2.yahoo.com with HTTP; Tue, 28 Feb 2023 22:38:51 +0000 Received: by hermes--production-ir2-65c64dfd66-svnc4 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 1052c26ec2388683ab738a7f87fce466; Tue, 28 Feb 2023 22:38:48 +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 07/10] power: supply: rt5033_charger: Add cable detection and USB OTG supply Date: Tue, 28 Feb 2023 23:32:24 +0100 Message-Id: <4ec6fa3f1b2f4a96267771e8f34b12f566bbae06.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: linux-pm@vger.kernel.org Implement cable detection by extcon and handle the driver according to the connector type. There are basically three types of action: "set_charging", "set_otg" and "set_disconnect". A forth helper function to "unset_otg" was added because this is used in both "set_charging" and "set_disconnect". In the first case it covers the rather rare event that someone changes from OTG to charging without disconnect. In the second case, when disconnecting, the values are set back to the ones from initialization to return into a defined state. Additionally, there is "set_mivr". When connecting to e.g. a laptop/PC, the minimum input voltage regulation (MIVR) shall prevent a voltage drop if the cable or the supply is weak. The MIVR value is set to 4600MV, same as in the Android driver [1]. When disconnecting, MIVR is set back to DISABLED. In the function rt5033_get_charger_state(): When in OTG mode, the chip reports status "charging". Change this to "discharging" because there is no charging going on in OTG mode [2]. [1] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/battery/rt5033_charger.c#L499 [2] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/battery/rt5033_charger.c#L686-L687 Tested-by: Raymond Hackley Signed-off-by: Jakob Hauser --- drivers/power/supply/rt5033_charger.c | 265 +++++++++++++++++++++++++- include/linux/mfd/rt5033.h | 8 + 2 files changed, 271 insertions(+), 2 deletions(-) diff --git a/drivers/power/supply/rt5033_charger.c b/drivers/power/supply/rt5033_charger.c index 6bb3d45a5e9e..79e7f75fe634 100644 --- a/drivers/power/supply/rt5033_charger.c +++ b/drivers/power/supply/rt5033_charger.c @@ -10,7 +10,10 @@ * published by the Free Software Foundation. */ +#include +#include #include +#include #include #include #include @@ -44,6 +47,10 @@ static int rt5033_get_charger_state(struct rt5033_charger *charger) state = POWER_SUPPLY_STATUS_UNKNOWN; } + /* For OTG mode, RT5033 would still report "charging" */ + if (charger->otg) + state = POWER_SUPPLY_STATUS_DISCHARGING; + return state; } @@ -132,6 +139,9 @@ static inline int rt5033_init_const_charge(struct rt5033_charger *charger) return -EINVAL; } + /* Store that value for later usage */ + charger->cv_regval = reg_data; + /* Set end of charge current */ if (chg->eoc_uamp < RT5033_CHARGER_EOC_MIN || chg->eoc_uamp > RT5033_CHARGER_EOC_MAX) @@ -303,6 +313,152 @@ static int rt5033_charger_reg_init(struct rt5033_charger *charger) return 0; } +static int rt5033_charger_set_otg(struct rt5033_charger *charger) +{ + int ret; + + mutex_lock(&charger->lock); + + /* Set OTG boost v_out to 5 volts */ + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL2, + RT5033_CHGCTRL2_CV_MASK, + 0x37 << RT5033_CHGCTRL2_CV_SHIFT); + if (ret) { + dev_err(charger->dev, "Failed set OTG boost v_out\n"); + return -EINVAL; + } + + /* Set operation mode to OTG */ + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL1, + RT5033_CHGCTRL1_MODE_MASK, RT5033_BOOST_MODE); + if (ret) { + dev_err(charger->dev, "Failed to update OTG mode.\n"); + return -EINVAL; + } + + /* In case someone switched from charging to OTG directly */ + if (charger->online) + charger->online = false; + + charger->otg = true; + + mutex_unlock(&charger->lock); + + return 0; +} + +static int rt5033_charger_unset_otg(struct rt5033_charger *charger) +{ + int ret; + u8 data; + + /* Restore constant voltage for charging */ + data = charger->cv_regval; + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL2, + RT5033_CHGCTRL2_CV_MASK, + data << RT5033_CHGCTRL2_CV_SHIFT); + if (ret) { + dev_err(charger->dev, "Failed to restore constant voltage\n"); + return -EINVAL; + } + + /* Set operation mode to charging */ + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL1, + RT5033_CHGCTRL1_MODE_MASK, RT5033_CHARGER_MODE); + if (ret) { + dev_err(charger->dev, "Failed to update charger mode.\n"); + return -EINVAL; + } + + charger->otg = false; + + return 0; +} + +static int rt5033_charger_set_charging(struct rt5033_charger *charger) +{ + int ret; + + mutex_lock(&charger->lock); + + /* In case someone switched from OTG to charging directly */ + if (charger->otg) { + ret = rt5033_charger_unset_otg(charger); + if (ret) + return -EINVAL; + } + + charger->online = true; + + mutex_unlock(&charger->lock); + + return 0; +} + +static int rt5033_charger_set_mivr(struct rt5033_charger *charger) +{ + int ret; + + mutex_lock(&charger->lock); + + /* + * When connected via USB connector type SDP (Standard Downstream Port), + * the minimum input voltage regulation (MIVR) should be enabled. It + * prevents an input voltage drop due to insufficient current provided + * by the adapter or USB input. As a downside, it may reduces the + * charging current and thus slows the charging. + */ + ret = regmap_update_bits(charger->rt5033->regmap, RT5033_REG_CHG_CTRL4, + RT5033_CHGCTRL4_MIVR_MASK, RT5033_CHARGER_MIVR_4600MV); + if (ret) { + dev_err(charger->dev, "Failed to set MIVR level.\n"); + return -EINVAL; + } + + charger->mivr_enabled = true; + + mutex_unlock(&charger->lock); + + /* Beyond this, do the same steps like setting charging */ + rt5033_charger_set_charging(charger); + + return 0; +} + +static int rt5033_charger_set_disconnect(struct rt5033_charger *charger) +{ + int ret; + + mutex_lock(&charger->lock); + + /* Disable MIVR if enabled */ + if (charger->mivr_enabled) { + 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; + } + + charger->mivr_enabled = false; + } + + if (charger->otg) { + ret = rt5033_charger_unset_otg(charger); + if (ret) + return -EINVAL; + } + + if (charger->online) + charger->online = false; + + mutex_unlock(&charger->lock); + + return 0; +} + static enum power_supply_property rt5033_charger_props[] = { POWER_SUPPLY_PROP_STATUS, POWER_SUPPLY_PROP_CHARGE_TYPE, @@ -340,8 +496,7 @@ static int rt5033_charger_get_property(struct power_supply *psy, val->strval = RT5033_MANUFACTURER; break; case POWER_SUPPLY_PROP_ONLINE: - val->intval = (rt5033_get_charger_state(charger) == - POWER_SUPPLY_STATUS_CHARGING); + val->intval = charger->online; break; default: return -EINVAL; @@ -391,6 +546,86 @@ static struct rt5033_charger_data *rt5033_charger_dt_init( return chg; } +static void rt5033_charger_extcon_work(struct work_struct *work) +{ + struct rt5033_charger *charger = + container_of(work, struct rt5033_charger, extcon_work); + struct extcon_dev *edev = charger->edev; + int connector, state; + int ret; + + for (connector = EXTCON_USB_HOST; connector <= EXTCON_CHG_USB_PD; + connector++) { + state = extcon_get_state(edev, connector); + if (state == 1) + break; + } + + /* + * Adding a delay between extcon notification and extcon action. This + * makes extcon action execution more reliable. Without the delay the + * execution sometimes fails, possibly because the chip is busy or not + * ready. + */ + msleep(100); + + switch (connector) { + case EXTCON_CHG_USB_SDP: + ret = rt5033_charger_set_mivr(charger); + if (ret) { + dev_err(charger->dev, "failed to set USB mode\n"); + break; + } + dev_info(charger->dev, "USB mode. connector type: %d\n", + connector); + break; + case EXTCON_CHG_USB_DCP: + case EXTCON_CHG_USB_CDP: + case EXTCON_CHG_USB_ACA: + case EXTCON_CHG_USB_FAST: + case EXTCON_CHG_USB_SLOW: + case EXTCON_CHG_WPT: + case EXTCON_CHG_USB_PD: + ret = rt5033_charger_set_charging(charger); + if (ret) { + dev_err(charger->dev, "failed to set charging\n"); + break; + } + dev_info(charger->dev, "charging. connector type: %d\n", + connector); + break; + case EXTCON_USB_HOST: + ret = rt5033_charger_set_otg(charger); + if (ret) { + dev_err(charger->dev, "failed to set OTG\n"); + break; + } + dev_info(charger->dev, "OTG enabled\n"); + break; + default: + ret = rt5033_charger_set_disconnect(charger); + if (ret) { + dev_err(charger->dev, "failed to set disconnect\n"); + break; + } + dev_info(charger->dev, "disconnected\n"); + break; + } + + power_supply_changed(charger->psy); +} + +static int rt5033_charger_extcon_notifier(struct notifier_block *nb, + unsigned long event, void *param) +{ + struct rt5033_charger *charger = + container_of(nb, struct rt5033_charger, extcon_nb); + + schedule_work(&charger->extcon_work); + + return NOTIFY_OK; +} + static const struct power_supply_desc rt5033_charger_desc = { .name = "rt5033-charger", .type = POWER_SUPPLY_TYPE_USB, @@ -413,6 +648,7 @@ static int rt5033_charger_probe(struct platform_device *pdev) platform_set_drvdata(pdev, charger); charger->dev = &pdev->dev; charger->rt5033 = rt5033; + mutex_init(&charger->lock); charger->chg = rt5033_charger_dt_init(pdev); if (IS_ERR_OR_NULL(charger->chg)) @@ -433,6 +669,31 @@ static int rt5033_charger_probe(struct platform_device *pdev) return PTR_ERR(charger->psy); } + /* + * Extcon support is not vital for the charger to work. If no extcon + * is available, just emit a warning 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"); + goto out; + } + + ret = devm_work_autocancel(&pdev->dev, &charger->extcon_work, + rt5033_charger_extcon_work); + if (ret) { + dev_err(&pdev->dev, "failed to initialize extcon work\n"); + return ret; + } + + charger->extcon_nb.notifier_call = rt5033_charger_extcon_notifier; + ret = devm_extcon_register_notifier_all(&pdev->dev, charger->edev, + &charger->extcon_nb); + if (ret) { + dev_err(&pdev->dev, "failed to register extcon notifier\n"); + return ret; + } +out: return 0; } diff --git a/include/linux/mfd/rt5033.h b/include/linux/mfd/rt5033.h index e99e2ab0c1c1..d2c613764756 100644 --- a/include/linux/mfd/rt5033.h +++ b/include/linux/mfd/rt5033.h @@ -53,6 +53,14 @@ struct rt5033_charger { struct rt5033_dev *rt5033; struct power_supply *psy; struct rt5033_charger_data *chg; + struct extcon_dev *edev; + struct notifier_block extcon_nb; + struct work_struct extcon_work; + struct mutex lock; + bool online; + bool otg; + bool mivr_enabled; + u8 cv_regval; }; #endif /* __RT5033_H__ */ 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: 13155309 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 0E7C8C64EC4 for ; Tue, 28 Feb 2023 22:39:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229786AbjB1WjA (ORCPT ); Tue, 28 Feb 2023 17:39:00 -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 S229673AbjB1Wiz (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 9E4581ACC5 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: linux-pm@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:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 13155310 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 ABEECC7EE30 for ; Tue, 28 Feb 2023 22:39:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229730AbjB1WjB (ORCPT ); Tue, 28 Feb 2023 17:39:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57282 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229732AbjB1Wiz (ORCPT ); Tue, 28 Feb 2023 17:38:55 -0500 Received: from sonic302-21.consmr.mail.ir2.yahoo.com (sonic302-21.consmr.mail.ir2.yahoo.com [87.248.110.84]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D3C272069A 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=s32HUPwCKOshIyB3RzDVkjP0uF49xcWO2+tOArORygE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=VigrbbD8aKFhzR97hZhIck1i/JZoKmjNuqqlIYkdawxgM2bALYrg5XHv3kzjLy+MFdth/ams8RdUG62fNEZbh3VND51wJMYty5O9oN2eD1xr40d5cIJ0qbZXFHKxDnNBi4tC3UfvCahYeR84sWbkTyJKzgHQgB0TqF/1ejM1LTqcBD0pHwlhaP4XjG9ENjDAtGSwyD2+llN5RrdJI/Zhcs5usM09h7036wpRrCJ9F1GdxjZJbfJVeJJDchySTTs2fmvqmooncMtH8WTTg51zts2RA0d/t95BTNA1MsX/tPcHVKM5Ig1gBco8u/Mj40BBVBlWc8zJDqut68XCMMQMVg== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1677623932; bh=DazgWJ/4JyL16bAVXpPyn+BI5M9Si0HC/6Rq5ZQ296C=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=hTdT9sM6BDIYDYRfEijeoUxODPej0NVXea9647wzjH+E4NK7qR50bjcS5F2Zrg4QqiGs0ExNccc0Rx5d8aLVG+Hodd/OeEg1DJHIpzas659GHI7I4S+vl7YjnhUff6lvSVzFeK0Ef/ErflRzkiijRLKl0IFCLWpl1brfuu1du8wEOSB3BOyppMc76FkO3c3lKiGsH5F7ZlqlpcjeRWzqLd7ru8LSF/Q52pwqmmsfLLII8VOse+D9UtsEdB9ygeN76ShK2Vf4b8x7ZfrIpd3XSVObJceR27FMCbtNmdnXjjcP8+7zWxSczd7IzT/Dl1BnxpvMn3FYWUqhCjMnopRrYg== X-YMail-OSG: wICbhc0VM1kdw4_duWXEt.87sSWmKgwAI8ZrMPcIumfg88JbB06OJTaSCgLk8Yd Jl9su5MeOZ_2jIkT6rTpvdsdLyHjVDIqRJzHUZ4ghIHJKtXCbyJ_ayZ3p8QeX6WuNJAgeO1a1S4g cz0NuhwUIW0uftUuV5_UABjWEjmBaTlkTytX6iNmYIFqs4RmjQFN770klq2DAspORAhlWM.lfPBf nn7EJWFr5rRwZAAAn3Z1cDFJ92PkHibAkNojbm.szu60af8USbF65vUCq3y9vmx8rkWoTj2sxOaZ S16sZm1Jd7Jry2zs3owFGT3_lG7kCDGIezf7rmM2fKWk6DoFm8LWN2Ke81UWw3Ie792226xfkS8c Tn9HxZPJY4OR0ASDK_4KNUAQ.GLmJXpQIjpNyCSnp6nJomMHhiRH0HE497b3LLG3cjdJPMgzVtf3 6YFGLUvM5z9MkFoTPi8OxHaNTro2go2xzARGYS.R67a0bA5oynjCJV.5HKUSAMIV81X44fstTlFT a8TJMe223wY7FxRPcY6QWnt6B8b9k6S4EQqrCmKUmYZTDliLUB.05OOhXS9NfbrX7Wv3dBdzQ6vh k11ZWypjD4HK17dWYOfSVUU59Ff3eSWVDqc3gibTYBNVvnBYYWi_osqNHG2gy9WTbbiBnHXQGK2t NPbqfb77RdnSb9HoCg34Pea6qbHc_Exh_6OxKx4hT0ud68F1bSibqpsk0fHyG1tHIIcWvWBs6tH. oat3_FDGB_41HYFnU2t51aqFavp56biEMQaAwy_gqjJZ8WR4GE3bH4AUS.uhjNuBfBxbal3YVJ1P mXbwhF5YvYAjw8L16wonkggB_WyjE5aufSKreDyhraVvuRyTf1HmyBW8zl48aC6ibDkcGXitTjtq Pu0cYgFPzFVJUiXeMmlS0y6Rbabv4ujMReTMdUFm.VlSDlsonc8gjuMvB6cYDaofvAnkUq9FPfKY HDlDkxcITgJyVb0JWp3ipFjrAMhWXh7aLR_cZU4AcyZkHpnHxmqM4Q8ShypbWyPC83jm7GQe3AUL yTLLScncVcYTe3rvE2icXOmOmZP0bvACA55v6BZFgqos3zvg0luTW4YR64AxSE76ZUJfxtRI1RbM G9oxfJVN9_TP26Y0tw0SdUUCsxwjqQ55gJzXqm2zPV7XXdeNTfaJPsXEwVPIQJKDaXUCYqTwTOWx B4cWE2651A8_PmpdMOIjmpoByJWJz2DCMlMNPme86ntKR0FX7cTnTooM44FSgPj8UnHtZNZ.cMt5 FMjXscrhzo4caqjqS.jHhGlFlojcFy4gFflAbud956CzWhAmsfKM3iK90xFWl7ryvSdMdexswGYo hkrh5OKRE_cFnPVdOfl1QBhw9rTiWmrJYd_1Dg6oN7TDHJz8MwyWql.8yoqzX7l9Uf9rp8dB437Z d1cHQwa7L5kQMQFnqHtOnEPn2ThJqyQX70pnS2k5D6tyw41LcMfFWjnz2_DyHvq_hxM7r9R1rs1o I_N.8SOFbyBB4llT41oEQ7VzXHVxbo3ad9pzPJ1f88mF5WtDgQsnrCFzrOVx.seMPoEvNhlGlFON aTeshFn7V0qdoMpvi7zl_4NcK5SZOowZqzj1RBqg1.eipsI9c6dqqIjzqoUOkFEeAc6hp56fq7We oX3fvVd1a8UWtikLIKyKoLZNFzhWLskpwHqr92az0bqcJ.TPcZ53udvq2LK8WtqzQkssUerkkLFP DS7vLmc3YPIH28xcWDLFzoSXs61P7aPa61UocBGLmvfePMM27THFHeiT1FlmbaWZ.ToJ1SSqCJid _X19uXAA3k86dFpglIyq6VEmDEQ0wdOOx3CcjC38SiNR3k7i.ReRQS5LlbOShmJWUZRBBVb6u5T_ c0.Dt9AGhLgOqHlgStN8y9tS8u.A4bMnMuXrdMCjOMFV527a9pkoTjhTIC2Xn9.XaVCTJ8iw4LzF n3Jb1MYBHf_F7qyzqDETlTPTlUJ6KfCy.Vjl9xc8Xw9jYgfh80w9gjbSwJKI7gF.2BSWrT7Z4y0a ZrzdN2PR94kHl4xh57K.iUjvFwISpPYQGgWF07iNF3SecIqx3wsSkM87Fx9AAaEph44uVMCWZa8g SwWlY3Eq3ADySg3Ctc48RTDoNFrJsHkS1iWvipBnUyi43Eli6eDNGdAewM4ytQ8A8q1jDj3EZUuu 17Ix4KHfPohq_PsdZIVfcOPqrIWJFyYKWCxHlkTA7n08cuwq4xGU2UiR6vwNJaNTE_Iv4H29x7Xz 3brrE4wy0mZCnZ_SnDZdk2grj6NxkUla0oAHGvhsT8.K7h1kletjiinZnzDT5PxNRllXIjeo2Dtt pfE2d6CMD.4vswlI4CDvjA.kQxKC3186sgWnCWM0qT1NLjBVvow-- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.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:50 +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 09/10] power: supply: rt5033_battery: Adopt status property from charger Date: Tue, 28 Feb 2023 23:32:26 +0100 Message-Id: <768faa5609bcf52a97f1f1f71dea6518237b04a0.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: linux-pm@vger.kernel.org The rt5033-battery fuelgauge can't get a status by itself. The rt5033-charger can, let's get this value. Tested-by: Raymond Hackley Signed-off-by: Jakob Hauser --- drivers/power/supply/rt5033_battery.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/power/supply/rt5033_battery.c b/drivers/power/supply/rt5033_battery.c index 5c04cf305219..48d4cccce4f6 100644 --- a/drivers/power/supply/rt5033_battery.c +++ b/drivers/power/supply/rt5033_battery.c @@ -12,6 +12,26 @@ #include #include +static int rt5033_battery_get_status(struct i2c_client *client) +{ + struct power_supply *charger; + union power_supply_propval val; + int ret; + + charger = power_supply_get_by_name("rt5033-charger"); + if (!charger) + return -ENODEV; + + ret = power_supply_get_property(charger, POWER_SUPPLY_PROP_STATUS, &val); + if (ret) { + power_supply_put(charger); + return POWER_SUPPLY_STATUS_UNKNOWN; + } + + power_supply_put(charger); + return val.intval; +} + static int rt5033_battery_get_capacity(struct i2c_client *client) { struct rt5033_battery *battery = i2c_get_clientdata(client); @@ -84,6 +104,9 @@ static int rt5033_battery_get_property(struct power_supply *psy, case POWER_SUPPLY_PROP_CAPACITY: val->intval = rt5033_battery_get_capacity(battery->client); break; + case POWER_SUPPLY_PROP_STATUS: + val->intval = rt5033_battery_get_status(battery->client); + break; default: return -EINVAL; } @@ -96,6 +119,7 @@ static enum power_supply_property rt5033_battery_props[] = { POWER_SUPPLY_PROP_VOLTAGE_OCV, POWER_SUPPLY_PROP_PRESENT, POWER_SUPPLY_PROP_CAPACITY, + POWER_SUPPLY_PROP_STATUS, }; static const struct regmap_config rt5033_battery_regmap_config = { 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: 13155311 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 E0092C7EE33 for ; Tue, 28 Feb 2023 22:39:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229708AbjB1WjD (ORCPT ); Tue, 28 Feb 2023 17:39:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57488 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229824AbjB1WjA (ORCPT ); Tue, 28 Feb 2023 17:39:00 -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 D400E2CFF3 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: linux-pm@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>; + }; + };