From patchwork Sun Apr 16 12:44:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 674425 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 1D7EEC77B73 for ; Sun, 16 Apr 2023 12:45:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230375AbjDPMpI (ORCPT ); Sun, 16 Apr 2023 08:45:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56834 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230362AbjDPMpG (ORCPT ); Sun, 16 Apr 2023 08:45:06 -0400 Received: from sonic314-19.consmr.mail.ir2.yahoo.com (sonic314-19.consmr.mail.ir2.yahoo.com [77.238.177.145]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AC805269E for ; Sun, 16 Apr 2023 05:45:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1681649102; bh=vcMGH2mB7eHRV3jsyfJ2abjxznWmNhKkivWuWeFmIyE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=kaBAC3tyz2euOa7nEJtwnq74GCMk8VlifCkyRAyilRMdgcjqOlECd9pYdp5VVpc1tZ7++pCZHLvjG3I2KfG1eunvoqbHemEmDreJwS6YpOzDMCwpfEdll0/6P+FbUScecDOJkwYed7Fj+rjH8Pq4xElGZFXtWeca0rLs516QrPc9m7VK8xTdRgLm7yKq4Pha6etLAaBMwzTL/ycwlTHkNzCPOR9iihUD41w6VGuGhTQ5IJGSgtUD27ZYvTU3TWLPjEr0UoFHMI9y/7bVFMcBMpUD85wnrEzBB8+0YLZRYOKcn1L2J5Z0L5OAxBt3WbTl+xf2zX5SIiK31rGZrQzfSQ== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1681649102; bh=8ZNE0MQuLwrNNYS0CbBCfLqbwkm0cePeENa4S1PfKW9=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=hRsQx2d8AyRGgmcs/kOmv+M59k8Q9/u8jPqqD03RO+86FVdd0fLOBx/e93EQmesORgV89OolRfVaNAh2o7EfcpBn3xeySTXQoPWd+ec03uoC3I3mOa9VBwHqb+jFHoemuzuQFI3ecVcOzehCB2AdiqC8qOpet7jUR+YNqLOAFkhwwQNKYMD1DQMax8ejBKztx1JnGV+akMR79oZ0XFrvs+pRWRIoOkLElOobbUSngV1xojqoFyRC5ipUntrAn64+5nXgSfRGaaBP9pvo54WUcULWMexKHjiKPHJ5TQ6VcUHOjqE8bvaalOvV6hPIR0qvyGPpoonTtiDzQ7yvDMQXZA== X-YMail-OSG: om7kt2oVM1lj35PrV2MoYBW57IVgfU8uOtqOzmGulUyABjbF4TOc.nzcKzrl8Ab 6wonre8A0VqBenbAvvW89jrNcydIMxk0Sl3g.XX6sSC2nh7C4XY3y0c3oTgAvT4IrvIq4ijTPb0V YpjSOAf1zhazDgfmRgeZuP96I49orFdYpVHe2oBMEUQAhpxNUwF0uGaZeot99nY87iYCwAR5ZLcX sR48RRB2VcCTL7pSncfl7L7NH7Eu2JTeTxbs8UPWZEJqe8N.C3PHeUnLw60yxN941eu_D3osT8XB u.i1knaXrygPTjiJ_CUWBVi.hdAqduhH5yBZNHyMc4K7YiZ_jb_rdxzxKO1r.j6d11z7M7neRutQ OPQ534.mNd1QW8bnca1QVo38TQJJQZ_BLwAbRPirb9gJBK4GA1O7KEd_VdGduALMnYy0J9sqPaoj BwOuofm5286Qm0.q0V5Uk3Uq1R50IwZ4jZ_Ky0GDBKfnuEc5tUGikbdCYlYrN5Z6geteCYFzshpB 9eaPE_GBqs9WBSsTAap.b6_CISZS708MoIjYBZn6_eyBg8wdGZS7iI_XEguQ28aj_aQViRH9afns .G.bTfwzhQrKnIHs7yFItg2e9EajHo4UrKzR4LePkRnWHWqxrpt1NsBDpONh.bX70yFTeuVd6o72 f1mdiigfmJbPiJSKyQtdDVCwrJcYI6fDn8hE07CsC1V5ywOj9a5u8_vt6hp0EcxeQSFqpuYTQeLq P2EU4q5HqnCATMz6D8CT76mnJIOBt.nQVZm9wFx0uW1KfGfs4BpN8ft.UWzWLfErtsGyI_Iec9gS 6Mz.AWLeZUnlJe4eAsAm06LdTJw4pm0T_AObCKkW5La3K0AyM3N7yx6JDS1xmAP.R8e7brKqjNqI Q6jqTSjRM4iyQHgBdS6WqkBnuCFY19lOg0ApyD4Yo8wJWpKv_U2lGHMmFot5OXiNxUe80e7CX7BE PJ5oEFiKRZaPGGmGU0DaCIaBR.k6VFjhY3dQVqypF7PAg.hBzhFzfE5VzNEG6yUjpkQ__iaiqzFi YZum5yg.cCx7ygWQfqyUowhmJsBPQ.vqe533UaS2cZA9Fe4eK6SpQ7dkg5I7OKYtid6NL99S1dGm LoTK6ovVUfYtI4f1R032uznNL8jcvfnRntPyf_NOoVhKb9mY9OKNTJu.aRoFf2xhASeyNkuGQKph Hm8jTlK5Tid9uRPa6rzj_i.VzuAHTlA9WI9R0rCVUbwZSfiHo.Yor4ftnT1phCnAvrCJcOimqDdG SJHz44ILSLNA0IL73BhxqjFTOYcwvbOSbsjCAzPBOMgQlElik2KTJqV0k91vjRO1ZY8UulPzY1GG Z7qKH9e_5GT20eVS4.Wz9EUtBp4l778ZkjGwCo9tSSl87_YyOJlZLRivQ1zKpGUrdJm3Mn6SQt.9 XtY_SsZWeUWcl5DSRtk7cfU5.cUdyGJsxFrOVVe_ZGTkUSjekrBfySyiQjaxLV2LECRfZOOISezS ZDLzpAUoeWmd.G8ssNMDyJdOE3Ka9uzvzSeJVqByuMWrG3Aq9mKLPixnSGYqdCtf6hQACoStHJYP drygj4L3cfTc1Yr4IFkww3kNe0rOL3n.qjfpcrGWO.YH4Lk_u_DDRYxH.EwwxStOUr7f273rPw9U OVbgt4YxjAvnI766P0Pn2whtxdAVXEoR_lS5Ru8R17yTDUX1VdURJgxo9LXmaI0OHEQxssVTDM_5 rqMlqAHxX1bRxNtFKVh5qxhzCtsb8j0RU63ZIBAPFHjJVhVW_sP.sBMZW7Y5x_16VT4FMFU1gfE2 MbtquMdYmfPE3.Chrp0Iu7ydc3DQyp1AgA_1A7Fyu1POfMhC9mDyb1lT0B.4DcTgB1I8.irEVhEI nMwPJPJoiSYi8Id0qEvyOld5oWw.tfUllNh1gJhR3CQIBnZxV0X3NmI.Pea3JjIjeOZ7aPO_ImvK zgyaQua3n.BARPv4zno8JTKTN83jSldWgtWLsKA6daoU7a4dcxPYIcbZ.ZgdDbgvA_tC3rYJWfnX pkTgde7bmb4TZOXS9z.cbNh9NP4rs8jcMZTDryf91KRZEoK8gK81WbKjPHGBkvogYBITknw5hjhZ A1mHXmpdKwnsTm_6dJ5d3H86Swx7greF6VIyKIh.zH5lCYu6pWClXArvPdOo65cLU9o7ZNzNiC1t LFV32NR4GnbiSXI1CbHJfO4obvCMrXLmFKn.6tsmfLonjOuTFPZHznqUUdV0ZBep1ij0BBYQxL2d gz3vRIlT1FUt8SxEOApEUKslUl4BupFHzJTvojDrUwY8a6utskkZgAKWTK9i2GV_3mMbuvAPIcR4 EFsenSqEGC1UfWL9Rx63rkbd5 X-Sonic-MF: X-Sonic-ID: 16ab8e62-c231-4b1a-8c5f-a2517dae839a Received: from sonic.gate.mail.ne1.yahoo.com by sonic314.consmr.mail.ir2.yahoo.com with HTTP; Sun, 16 Apr 2023 12:45:02 +0000 Received: by hermes--production-ir2-74cd8fc864-4bl68 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 8a53f7a8722383f9609d619e4fab1862; Sun, 16 Apr 2023 12:45:01 +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 , Pavel Machek , Axel Lin , ChiYuan Huang , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Lee Jones , Jakob Hauser Subject: [PATCH v2 1/9] mfd: rt5033: Drop rt5033-battery sub-device Date: Sun, 16 Apr 2023 14:44:28 +0200 Message-Id: X-Mailer: git-send-email 2.39.2 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 Reviewed-by: Linus Walleij --- 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 Sun Apr 16 12:44:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 673772 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 BFCD6C77B61 for ; Sun, 16 Apr 2023 12:45:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230424AbjDPMpR (ORCPT ); Sun, 16 Apr 2023 08:45:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57024 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230343AbjDPMpK (ORCPT ); Sun, 16 Apr 2023 08:45:10 -0400 Received: from sonic301-21.consmr.mail.ir2.yahoo.com (sonic301-21.consmr.mail.ir2.yahoo.com [77.238.176.98]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D93843A80 for ; Sun, 16 Apr 2023 05:45:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1681649106; bh=Fg8O9S7CQWLvLBXMCmKEFeFmz8DxFrOra+7NQGOwBwo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=KszPe5nUvNjng6faEv3yoQCb0HsZzD2YGWMLl/YxpjKxzXDXSgY8/SMEOHg81nvlSOQwKPrR0btBR5Uo42mog+ShPLwnLkLJTXjxE3aHterfs7/oVofN9quuRpfbK4dUfw/y1NHLbhqSsdT3/b1Ud3x3JV43YuXknZ9Uc9J2QAhgIkBSaWByxvWcdlyvM5KsbGnt9xhfPe5ztPMWTa65JO2xCliYgPmHkX39gSVBsK/8/8uuX5hi8IBFcwQFnFmfztSCQL2a8t0tJ39DPdYGb25/89dDzHNxC/xs5gKXSIitjG+OsX3/UfmB8j887drF3VlySUSRQ76a8xwJA3GFrA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1681649106; bh=PmzEobjZYlreqbgwJRMQ3U9bSsfqaPE/JSDDCP6IjM5=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=FPTF2ZiXdrGn2NabX1DCmBrxqvVhrA7IofWPqKlEaH4b1Pse/bgmdxqQM1zRsH6XuJpLIDNbrDaQSSTDxQ3FnSL8cXsdPzi/Ru4HEDQxHOlOcHQaEZN2uLMfSK5U6QPoi+o5cZaXh3ZcVkCrUaQoMsO3Wtt3goc2wDyo8UkNP9+CF9JwLIZmcikY2LIZIJuXrItB66+wmXt8Smjus2tTEyn/juBvMieSO6XFRoFzkMIQHz5RLBY3jY0uoEKBQjELizWulWkhD6rqXCWQpYvnooRA3HqrBNKnnT7YA2tUjsvl66ffDU8jMlMfy8OsjYVsbaWzFBSZI866hiqQi/MzgA== X-YMail-OSG: TE2VDu0VM1kkL6rkZ6o9hLwaMBLffhFWwGm9UbE3kZjkcmhjU7L2rSVHaVfwmZR EbHHP7FEVXNLkdVmkN_Y2nNxIVqsgZ6iBvgX2Ed9ZGlZDkhqB5_zOdqElHZkyibq3MdIbnCxffuy pZ6KWUM0JkrSIzhFVSx3MO4XhTee7MT0H.ASxC1p8eEhweuG1QXrsdRgpL.2gMngd_1u0nO2pHzA uJdwAaNj_PVFMYpV87_tmu7TWur7tH6RzLEra_akp.omUmpQA59KZayL1N9sL5t4VRnGWzRLGEAP fzocdWLYnetMXp2nXjhy2PxSaB3LZvJ1MuOBXoDRMEmD8vvNh32bHeApo.neWA2AeQLQRjJqtGVk NhoBEehuN4j9m0hyyGKOPeLqTr44_6DxZ5Tsb0MZxtWq7IU21b4BKi_fOWBaJFVj0om6jXlUz0ZT cbnEfl0WP1YYFRQdU5hd.CVMKyKNXaqihfgcTqljuA0tiY5W6DdRWppToAA.mUrl2DiUWXZ8k9Fk ogfgsqLsgaJILJDxg9osUeuEMdcDUvjfNPZnpqqvkm71nSgwBIVEa5.6xcIQbTLJdVNZWGEPCGFd FH4l2W0LPSch2KsiTIKhvl2dptgXWz2TPrfwijqhpLL.9Fe0ciU4UW6mMovO85ttJkNr9r2LQ7j1 m5w_qh4FRV21YmznPBBl7clJRZQew6rX0f3xV6hAB.pqqd3TTK1KmEv0ZWIdYnKfP.OYMWUwWS9g s4xPU1ffTJ9lSN4Ohoo3hUqOcJvWkmSPdhEONxWPj2fRH3lVysH55SlAAbA2fW1_j81RjHtM3_Rc FVTtmhf4hxzfs5QOtVkRhs0IAsoYYuz5wHp0AprSnaAcyh_SOZqGwJRaaPxq0FNxUn.XcfJvJhq9 g0j12uzBVzeZDxm7tW28sv1OZQ8Y3oK.utAw1NLtZp9Xk_Z_M_cfRS8rHVFNCOwzLdYNEzBLqTF. CYx_UdwzEB0BQO3DIz7lLRP2dnRisw08NP.mltZZ7l5ypcpJuregqv7gsyesovqr9YqRGnHT6cAV eeDHSV2qIXNQoUdb3BYwkZXDbOJvyYZTx9PUdYte8Wwb.HjEWBtuxQ7WmCf7HWz0SokMC9qYIwPJ FKeBOfhryULzBA9qk0wGxln_ur_n4XTienF1qozGbJ6AWMwdo_w0CRJ0Hr0PspZSDlPGpBMdq1C4 bzEQpuinJ2LjfAh8xt_sJ.bJv7QiFji_kX3wHDlVeyP3oFJ68kp9M_0SyVBixvKOyGD54CLhyL2h 2jaR4Q4UgBUC06kyBQq4rdE.HU_6dNRFxkOIQfZ_zeK3hILlAenVv2UfiAgXY_.tgkQN.NHLJNpW X716glIO9ckrVl1z9Qb2cn8XE0ZMZ5HX2UWp9l31WCDN4m0txNslE8irp4LPhV_kMVJADyaJKxyu Jb50X7gLdaSwInpptMh0mAmFdx8VeVroHgLDd8N6l5LjN7_R1tlGkMQT8td77rEntJ971fOv7Y7t xzFtdl4R3geuwgN0r9R2DTeB_qAj.4HQhScsznVmtXtQP6Lxc3CG0eOdcQ1x7AwTpjAskrdTy4r0 ubSseTslvfRdcAWAgBpnFTNZbwL2tcwkhqmrQWTbNK3.dPGHldlmJtm0Mf09K6T0JZO8lUGGcsN_ vz22_lOGa_KHtP7jFFpX1UgnTjjldrnFTN4l_xMdY3QJYjwmVongkNJws7nZIaYWBBxE7zVnF6hH pzpkYmd01n7SrnQwCJtmXxlhfwwvyMxt8VqB6v3EhNE1i1TQcK2c7rVTV.zKM1ciR.3_oHE0MymP w6Td1y3XZzDI6CEyG_8zsb.QNQrJ1Xt9rIZaZLBgwz14e.i.bKOjXotYLnTIRLrfPsxwyYa8ovQX Ze6d9wHSJuAzMpIv8KvcqJZybbJ_IGC67wGBNICrBFrZCBqeoPeP5X4oN7ukpkBOpmIJBWjqrZoW rOdMii_4MIxzA2M6jB7lY1MAw7BsSdekdIIkeflwSLttVusNlzETwsmknOhXkfmNQrNFFsskwAYW Dj9y6iL0nG6Q9LzoAwOVYmMjjsz4CiHtb5151u78mM2TXT33SWoh99ijkLcFImqWgbKTE1.1oCxd xU4ssssvH9CSbmNmXYgNaifk0fTPPUfEYcp_u8eQcnChYAhb5_xPIIuVHd8PehXiuUh5cSXTjAJ0 NvmmufAezPNg2RZWXLNYeeYGC60KJr2o5wGVQtl36vlR24.5Lcy81Bnqw6xkdjvsrlED1ZNcUIjF CCMTPWgjmnSexjzuXHzj26oqcfMATY.3sfuN1rZ.smrizQnnj6eHatURYV64YTmGYvfCe7FG6jy8 nhCu5JlTaT6xrsXeJ7SfjmMbGOFp77RInhYlCaW01Y_U79EY- X-Sonic-MF: X-Sonic-ID: e071def9-0b1c-4e98-8221-260d1abc3263 Received: from sonic.gate.mail.ne1.yahoo.com by sonic301.consmr.mail.ir2.yahoo.com with HTTP; Sun, 16 Apr 2023 12:45:06 +0000 Received: by hermes--production-ir2-74cd8fc864-4bl68 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 8a53f7a8722383f9609d619e4fab1862; Sun, 16 Apr 2023 12:45:03 +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 , Pavel Machek , Axel Lin , ChiYuan Huang , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Jakob Hauser Subject: [PATCH v2 2/9] mfd: rt5033: Fix chip revision readout Date: Sun, 16 Apr 2023 14:44:29 +0200 Message-Id: <7eab1fd42adf0428cd80cc2b4c2fb3d928014125.1681646904.git.jahau@rocketmail.com> X-Mailer: git-send-email 2.39.2 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 | 5 +++-- include/linux/mfd/rt5033-private.h | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/mfd/rt5033.c b/drivers/mfd/rt5033.c index 8029d444b794..3eee4242ee02 100644 --- a/drivers/mfd/rt5033.c +++ b/drivers/mfd/rt5033.c @@ -55,7 +55,7 @@ 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 dev_id, chip_rev; int ret; rt5033 = devm_kzalloc(&i2c->dev, sizeof(*rt5033), GFP_KERNEL); @@ -78,7 +78,8 @@ static int rt5033_i2c_probe(struct i2c_client *i2c) dev_err(&i2c->dev, "Device not found\n"); return -ENODEV; } - dev_info(&i2c->dev, "Device found Device ID: %04x\n", dev_id); + chip_rev = dev_id & 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 6bb432f6a96c..b035a67cec73 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 Sun Apr 16 12:44:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 674424 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 566DCC77B73 for ; Sun, 16 Apr 2023 12:45:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230404AbjDPMpU (ORCPT ); Sun, 16 Apr 2023 08:45:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57112 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230390AbjDPMpQ (ORCPT ); Sun, 16 Apr 2023 08:45:16 -0400 Received: from sonic314-19.consmr.mail.ir2.yahoo.com (sonic314-19.consmr.mail.ir2.yahoo.com [77.238.177.145]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B27684EFE for ; Sun, 16 Apr 2023 05:45:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1681649107; bh=BgnxKccDW0hD4wBKD/wGrzdwGz4y7GQfSjWtC1jgF84=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=WrGLvDI03t9ixKW8BXIrR4+Q+gua8L8MuaHIr2+gMD89i+nyI1OEfFhrZl3i5YxMJgnTV/IUgOH7pO1Ifz9piZ0BfdbF0A9KGyFMzfF58FOYCX17f5iUvx4uUYTdNN0XLjw5bF4pxG934CqBLExiiFMIV+W/wDhLdziZJDrzpw+F09wvScBeZriuhLB06wx21dbBnOfwafDFbYTqF+aU10/sQ4mXlXn20MBtDNFPD3iVtBTOotmFZB/J45ujSTcmGGJ+UObRf94vhurMK179l4Kljul8rDPUgjrC5LupBYYLluOToOWf54z27ik/UYeXmOlQ5PuSgor9DxOO9F1hWA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1681649107; bh=NW+YohgAJIbbu+CgcHo6KoDs37jn6lf4CpBsx9o0SLx=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=dJUlraXL6u+S2u75PB06KZo/r+CbL253gXEzSZC5EisMN4m0wm7nU8Ygj5wyRGEPo4yhCp81iBEIlvmCdJ1KOrpRhc5nuiCy067OltLrfIeDAozDwFmM6GsOnjTBshwokQmw05Yup91ycGP7Ykfb16UBN7QSnVTuuGIgV96HsggZptUu8LhU6PJoOhEX3WagkU3tkpHpyIbnng8GuDqT4XqsxdbRTvLYUP00RFiz3TwE4ihPSPGM6DdYXfMgEQR8Xvqlb631j8vXpvDNrUzCU28scjG0L05QcUyF7YimfsJRpEN1xpj6apK/53dK9khyyoP6YA+a7RIQozoUaWFT2A== X-YMail-OSG: 0xG1sX0VM1nFpK4qSSijT7Eo3.3W6j2mCRJwPArQWwvzLUQ17rf61lj8gHzNZnO o1LFuZ4.PegTxUrjbrXTI56K2eqOAiRfloL8w8EbkCt5LCEN0iNtxmJGvDwLhn0Dhfkqu5ZiG3UI cMWFYTfU53lJUYqWkW9_XPZ3tSjTCDu4ZG.Mk6ieRll_owWbnvvc8ezO33noV.aEmvH3zLI1rboY 0vHIsE924_cJ5.8eysb..EAkrUgflvVgaQrmdfLQd24R4tPv0wiJnbpF2AnomXw4Ypf47rYZzxZh Jf2W3878.7wvRmKsNFXlMYfQp3caKHZONlWxE5zfhBlsey9H6Ai.k9TrIY5SrEoSzgS9U8tcPw23 A8pGU8zpwIjyI4tgyYwQMBZ9NRAIGO4DftKwbw0q8im5aBvVHqzPRrxS64uNGethjx2Su.8NqnCi OtXAENS2ogKAVRUiRTi5UWDGZcbMYaJPJtnZK0JBYzMbdiISqu5zpIC9exmcW5zn9TpUNCIJ10Wv WrSA.vTZMm.MNoh4y4wH6OXuztOPJk7s1VydZVXifhoPmyRcllDJj1wdn2n0_ivWPOChRClqDXvI fKmiiFFR1j1HPWJmUN3P9UH22Mnj_MEP6C1sR0hjvgGN._q0mGOWWfyfRkfweYcNvR6vsNF4_2Uu qK8N_bNF1xLmdEMd9syTyy5fIbn54TrdM73D1hETKW1vWVOLYVY_qrOA9LDSWEVv6ZtIHlwMtQnc ZvAxuTUJkFXVapt7NSnz0dZu9txF.fFajP95SgoXBIyPvUXDFrxOPw2yY3FolEqs99Ghw2yzcCKW IjUlvmkrmCbK48sXfplE0mGcK9MrdQTKoM.0Oc7S5Yw8c2ns8X2f8Cx3Ttf5rIBt4JPIE6_hzjFL xZ2nmXo_5pbvOTJ.kApAp7BcCHhlWnzev.mjwxyPMTK8oZf1pyrVseHTBkCalLqgzBIsKu8WgdZc jDNmtYfn.lxLuJUj98MoskShpH.QYbQ_quQxQdv5yOfOmORaL1D38kXSxZ_k_1hEh4T7yXvJpvQN 38q9cQjZKMHqzLD5FyiTedTiDwHvupy76IvOMUeJfvRs8TaNB1uFtnRz7Mve67VeOIQnc3UNMTmu T3wlXnvSbCPrrA6KgRj18f3PLM68OBuQraKBxU8zPm6fgicBoyxS6FmOQWryIVPSeoC2dJ8a9Lch OKA9R8QlC3zhGtjpB3TrYiX0VQ5BTPg2.1WBcU0sCGb70E14vJHIyuGeXL7Hyw71bqzPXODsLQkN 6cxCzxZKe3qQ0Bd4C2JlhA.t0YyOY6Hd0bLbPpURbltBFwG8M7dJQZsoydggeTH9l9Y0jbdqSkFz MRa51pad_SfwcYkKXgDlzYZeOmvNjw9cD1yB1nkoN8c.ZdjDBZIhs.791cW1fZt3uDxh5xVtEdi3 YbKKUWjAZDq9W5Y7A0cGXDmT00qFT.T6ibek0zA3YavVD9SwMPPVCMruccACdhB5fZf0yrMXV2O5 xyroRqJ2r6AbLAlySKDsGbbKNJjCP8y_7175euO1LL6NyrbD7O4XHms08tzABXDVCvKGklX.uNqC Ep4YcEq0sDJZXuKkPl_uQ0pYITg2sZInJJQDvBWsbUuYyUDHF0YkZ5VP8joxBR1rWPJ4a_Pz9RzJ uG4cU9F6oajNf61CJ_1T3EZF2zkYEn8M7zyR8CnedXq3tTUVYqd_.jjH.EgAv1xOwmvAkfOVN4kS eOAOFIblhMOXP9GbikXNi178UxB8tx4dWqteH02skV45eAF4Z3I3lTrvlii9SDAWqT4mfGxMJkLW mQ79MGXIC.fs.lbmQ6vP4npYYPA8GJXUV8mHKkvqeynHi2h4G4VY5Hlz7sEaGUf0dalqAm60L5DJ VFKmfE5JR4un3ZaletgACAq5EedtEoC2uj0bIOOtuntGRq0rnhGPa7ZrmRURpkPyTpPITB5rDS9k GVvGLkRKfbgJ9SPufS2CpdiN5orYjKoINAsNLglgmGtcaiNI1ByHO77qu1_NZx_wmzW4iCBhKcdt .jtGv3o.ZeS84FjjyPzJc2vdPImrBjyQXOmHOnF2IHI9j8I1Y65iLR6uKrnDA5DLSaxQekcokfvW N5TalC4h7HJ9WmMm0GAKJ.V_tQyVejm8L3y1Z3hMw8YyzLcNoALaAmOLqEA.045jLXzUT8cp1qAt .Y4.h8l1KDEByyBMAMv3adeE3xBV2f63871KjoQlOyo4.mRYCVnipb8Ig_vk5ziOVgT5m4g2C.p0 JQTtdIjZw7Jst3HQMPiSlzGqb5qNDW6tR5.F8tmblFJS9bD1qf7DuU1XoZ68inGz1mDv7GgTbber yyChx.ZEZHlNjntEnoH8KxrzvDuflKu0elz3cMzSmcYYbsko- X-Sonic-MF: X-Sonic-ID: 8127dbfb-da10-4c3d-b8b5-d9c2217b666d Received: from sonic.gate.mail.ne1.yahoo.com by sonic314.consmr.mail.ir2.yahoo.com with HTTP; Sun, 16 Apr 2023 12:45:07 +0000 Received: by hermes--production-ir2-74cd8fc864-4bl68 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 8a53f7a8722383f9609d619e4fab1862; Sun, 16 Apr 2023 12:45:04 +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 , Pavel Machek , Axel Lin , ChiYuan Huang , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Jakob Hauser Subject: [PATCH v2 3/9] mfd: rt5033: Fix STAT_MASK, HZ_MASK and AICR defines Date: Sun, 16 Apr 2023 14:44:30 +0200 Message-Id: <7eda1f8751b4f5a5bd88063b7fbf3cfdb911019c.1681646904.git.jahau@rocketmail.com> X-Mailer: git-send-email 2.39.2 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 Acked-for-MFD-by: Lee Jones --- 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 Sun Apr 16 12:44:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 674423 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 41BBDC77B79 for ; Sun, 16 Apr 2023 12:45:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230437AbjDPMp0 (ORCPT ); Sun, 16 Apr 2023 08:45:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57320 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230362AbjDPMpT (ORCPT ); Sun, 16 Apr 2023 08:45:19 -0400 Received: from sonic310-57.consmr.mail.ir2.yahoo.com (sonic310-57.consmr.mail.ir2.yahoo.com [77.238.177.30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EE07E5FC1 for ; Sun, 16 Apr 2023 05:45:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1681649111; bh=5w6Shyycf9TKW8fxiIBkdZ0V7BL6iy8PZMl/Ylzmv2k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=LrMztTlliwRbTv5z/JWofG7LAQ7iak9yAdRU8G3DTgkEraIz/bTFMD8B9rUohK2vf+2kRmKB05fPtFyY4edRnNDM9J1a9jaYbd9DCPJOYISH22VRlSFQ3PNP2TWROT4LM+E/27kiKPOSZAK1d/6b73D0f5kOW/KJ5mZFb3PPGMnYr8dVeUI61okTmXlIqstvS73YUis1SMVfw8kivFShN/FSjHdvD/p0cZw+aYamdan8aMuwSpVttIPX6R58qgsalh/xia7TYOu+EsYYdGMKTZOHVjUQnhvZGmnjxtzllpgjDO6nXjLu6H/P5tRl4RhX6YckB/1I/s2cbeCNBsLnjw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1681649111; bh=6jNhRSkwjwcNdOysluK5MECwQrmE27tZ2YUS6DdYuC6=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=HxkliYZQ+UEAaqTKVmWF1wo9NSc+mY2B7E9Nm/RcQpcGEl+2ClqQuGakk8s2K4Q6kxZU6Wtm/FFG/zVDm4WB/+dOrygEAz0L27SuVVYBZSISWvr4RaF/M3Zl5daHlJ3Z3bsHHLjnI7za6uFDSNrdzOzhhDf7xncv0huA9S347bTRwcKxO5AiIPSLAOD+5Ks4fIA1u6ZLe7/wudPF5nxzVQhYouZI5oQExqrd4nP2omIlpAtb/poDmWHImtvSMob8Bd1fkpQwOZbqLg4nDwPrZ7O2msyyv4oDBE2FjsMpY8Oh/M7TJ99ab6dvprDYaavrh5yRQHKjl3zJY66a/Y2sBA== X-YMail-OSG: 80cIE4wVM1l6d8QFJAP7GwTQ9cVWNQxyEye6eYPKht4pV5848pUWVCvSZ.iT_g0 uhms_iuX5H4LwdCZockrDzAPf6GHiInciAVOaTdQjVcXt62TOQjyMM7Ipjxf9rkHp6xtJb5RNUaz tcnU3N_YBeWgUT163dPKF7PYxWuP2RjP_IJJ_I8IlmFoeR_eczQoyaER2gpGQGg3B19U_0ca_Fhg hRoH8knmwfZsghLmySlwuC9eeEQkkjX2qz.NkM4IRxSkXxsyo0Dvy362p8Y3GHvNu8iHFp6LWF.M xnfh6O83UJ_wAxTvjrYyyJagaPKtXBYIs5ZlkCPZ.hp6rXhanIl.GhYhednkB4.vZBohHJOuwb7u I4ixZCM0tXMtCEyHR4zqUUV.RcWuvR4VNeCJYkG4ORoxs8IdPA8ggad.NxR91.EeeBH32Fg5p1wK hoWR10H7XCornOogKu9sT7vQ4.v0uMixQWV2yU8b29ydsCokYCrHp9lhRvOD_fL8n8MLEb6su1FE NIeIL1FkXJFSDqAZrzJxQQogUZYrClyQLfspibUFRUIZYa9bgTpz1KXLvsIaIkPIsI62gR6MR_OJ RXuylMhwmvrY60wtTVFwR.3jUlIdSIWPfG_BudaoLoo4W0p8DWz_zshSMr9fn41d7fNPQbeqajNQ HEqCLNp4c.u4G_PmSxx73RnfC2ztm6SqpEfqc_TDu.MXXfbGiEYIEkkUIhadRrL4TGS06Id2QHJT FPC_.TuTg7OgWBGk7aZFZ28GZgxuVDseHtziJNaQbqqQQu6jVeYvrtFcUmdmcYw2A8ZOYF4_SG2c zGQKmHHQgRLzvMlMIQu3YAjpmbG8dKnHNUllmENr7mvJMhz7CJF1.kXfDY5sAbT8dtpgzC5QBamE cgBNVKhH8Gyo51T7vVvYk7vrCXa6sMHOySQbdIbV8rdLOpK6qgRfLExx06FoO8WscQOoUwXItWSN u8LHEF0nJmy_eBMsjbsucWeL5CKl_vgmtlbSxV1.wO6x5YPRUprhkn708vcvUWPJ0bjXof5X.Ip7 4.MkuilQ9sLBrQTzBMe6c90aKL1F1MtRfZHy6f7gv0YmYEh98K1FQM2TSjpPsWbQRysCu._tGnX6 e4aLBF4wvLSBCzL6Kn_ZO5NjVx9lHZjr_xiiWWFLnCptOlb0_SFm_OeOQS380.v_iXCfeIBNFENk LUvXcOd8CbLh8jQX9KhH4XPSAABLaNPS.fnEDRoEyi4SyMP8yYF6ARauWsXOTtgK9e2O4x4INUeg 9TKzPB5QHC7dPpx4ax6XS0NHyyi8UGUcsb.4kG6rw9yGaZkDTo3gQbtpx81a.sIWr.xm3JuGUlJo gfQ8JDIBkXuiXireTPVNDgVgeypCt.G..2glJSYeU9a5rVoluf2b2vY15y3kwBYrceuxgZ7FD319 j9IAc31w9n9FIHJqsP.iC2i7sgIasIMlkfb2DDKad2kbzZ5f__hWRQy0TJd2hHO_e9OYPYBreyh9 pN4Hmgho6F9jtTcg_tyZq5ibN50S9qMarWKEVTX9rVo8KOvOY1MO8mZU4DaebL.tcPpPDYthyuNn 7QBWOpeDMdlxnxC8IDQr2Z_T6gdLGXdR8sI70m6gfZcy.HGdmM.6_Zcl2VbCKRCuEZ0KZyzISRNq jfMr0b1OYhYlpWrAX2dtP8ZoUAPVbbON1K.KeK6Ry5njmc0.jr3E8KVFeeDHfSZ5wOufqtAx75gE Vh9qn0n9MyArN7QvoVFMs858_ciIJO6xtkgpqGuFcqxfFhcnTzh7hQ6JxEEoqjn_AAdXuHw4_uGz R2lJcERbZLL1OY8am4MTVFwPKUCdNqjDMXUSSPHRXtypdMhC3XZevmEGaawd_PwLkW6j7MqS6cHX m7SO8.1kzhBQyPW82DUtnU1wGcaxyqN6vSF0zU.qq_xSBuVOBs9Qa9PRWDqqXPqy7L5BFNdWR3v9 Bo77_rICF8.K35tBsolG47IRZaHQv0azjs.O.z9l.fj2B.GUQSIaZcUJiJw_xN65YkFj5luA9HlT 1Ymc.YViHE9c8XVYGfePI1QIrzSGm3i2p3yEyAH9FC3QcJvImtJRqdMcdd1XSYGNqOLuAKQ4pRcX CmnFhqWVy5pk1n0.uV3hA2URVNHda8IKrHf2CCPg_kyU6NVImAd_lK596mL93vS2RtyPWUT8Jjv0 6lUYU_hU8ARhaytlsOq1jL.8WPwwT7KIAUaI9r.GRIxYUwIcwYYWL8qyn4zsiN59W1HMHPJDHljm W15kiHmkkLOniMOAgMFaOwNe1F3AtWduU.Pbnlm2ftK_3HKkDi.9VvZtHeGQBo3_Yi0Ff701xubK C.3T9nU_NprSLmCGisVoKLgIY3ePq4.VDzwIigV6y0RAWyD94 X-Sonic-MF: X-Sonic-ID: 7428be8d-47e8-428a-9d4e-c25f9104e0c3 Received: from sonic.gate.mail.ne1.yahoo.com by sonic310.consmr.mail.ir2.yahoo.com with HTTP; Sun, 16 Apr 2023 12:45:11 +0000 Received: by hermes--production-ir2-74cd8fc864-4bl68 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 8a53f7a8722383f9609d619e4fab1862; Sun, 16 Apr 2023 12:45:06 +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 , Pavel Machek , Axel Lin , ChiYuan Huang , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Jakob Hauser Subject: [PATCH v2 4/9] mfd: rt5033: Apply preparatory changes before adding rt5033-charger driver Date: Sun, 16 Apr 2023 14:44:31 +0200 Message-Id: X-Mailer: git-send-email 2.39.2 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 Sun Apr 16 12:44:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 673771 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 312F6C77B61 for ; Sun, 16 Apr 2023 12:45:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230434AbjDPMpY (ORCPT ); Sun, 16 Apr 2023 08:45:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57318 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230448AbjDPMpS (ORCPT ); Sun, 16 Apr 2023 08:45:18 -0400 Received: from sonic312-25.consmr.mail.ir2.yahoo.com (sonic312-25.consmr.mail.ir2.yahoo.com [77.238.178.96]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B5A355BBF for ; Sun, 16 Apr 2023 05:45:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1681649111; bh=po22Pka6e1k6bWH2o5z/cMQ182cbRZtmE52Iz+lWe/U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=IzIxiWohCKA7+KYLrVB89fpkhRJjfiUKNN3mZjSEkndxYhz9NzqCWdVUlOPMH8r8FHVh11Mfiw7PXxHv7/C6mpfdXPZLdcH/YXHs/kWE0YJ4izXTY7f/omtX6+zsfEzefMtgBzSV24fMz0chYuNrLTXWagDtSSzxnZ1fSLpZma0itoPLTvSvRvBSo4zeLpjHLRv6lFTHzV/Tz2W4F+Kt7Ky7WHN6yGNEtsllMAcbST4hydTstrOyLPdOo6a3Zhl5v9Nw9nY8ooBOcPpNokE1RyvMRXqIj/ViwJ2HtAbguFH15n514XYQBrRffQiJfrl8FmV0Bt1eErzqH2CjFs9HEw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1681649111; bh=pF2rsLDQVLHDo6glnY5gsdjGqpZpEY01AJ1+FhIohsN=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=PsrBbSMDz4WN5+GAQxBDHs8MnjBMUYm7ZyUKBq75ZBz3/7h3YuZa+phgOXLwiGV/AcHeUizrSm5BdkF7m22mjKhHG0UKsL3k98VfmIlNzGNiCEvSdHDaqGwlcpZlqSJxEjaX3N/TMCIrDLzeZIHKEolMvzDtlw0zG0U+/DvAvVZahyR+qOgZhn5siqJRQMl6G702ywNzNwDfSCmRAmzIMQsLhR8U1W42vvdDThUVtb/VaSr477vbp7B4+sgc9ZW9GVmNPAhnxGtUWdzA9uOv+QVIH7sgxIDzFqP+L1cGS15xLTBSq0gxGyABIyiHqoyEor7YXYLm/e1uQ15Yqs9VXA== X-YMail-OSG: UsQXUSkVM1kcpFdkV.z5vAaCH_VMbfFfSVcqTcISR_ia8ry6OQG0utIEFy1aCmc R0w6k1L5zAdpXTDXkEeMIwH5TCFtut1XCQrmHwn03mh1DJAOXAxlIxD5Z0_KIKX0AIhr4FJvwkBc I6i2tvvwMo4XyJE7nN608VWYnfChaXAAZ3RjSyw18k00YZ4F.SDL657ZnVkp6XmRnOaSGIwEtW_x JWzqExY.Z0AmwS9OeluCch0dHVwECnwyGuQh1N7F26hEMpqnk3RsbhlHl9alYws5j.DMbRi7nkAy CoR8XTTz1NmSTr_I4uA.1onBEDQRFmPh9PkWcrMrgpu4fdO4fERVB6x8HkR0fhDN4u2lDpaZG9a2 4BSYDCevAiuFFTnhrfM1d3eSKbMQ970O577874EQ_ITHKhrM5D282cGhKUWtrblOfsf_BNwajQ9n pyGLCd336VWnMpalGhZgLBWpCmVfhWZLT7vARXiOGXClsaDGJXwaAn8E5iI6Lb4OI3FelMZF4tBV d2sL14KLSijVBz1fqgY1kl1aWpsR30aobvujhyqcSh7bGKDjM0ZOYTt6VCWq0xumjlmyQ6e75YwA GIJox2K.xOSvigPxdu5_vtEDgLvZU2F9xTEK2_7IOlna9Af.h2tvN56ZIY.S0t96a7cRlPXWnVg2 XzRDoZ4_.RhsI_7cIO.xBC6bQ9m6sTu7hBlUmMQ3DhUGXWwzkTbZBJIPaOcUkSXGZDL7DzvULC5L s3doFoHZdglw3fNJHJPj8msmeVk2.vCD4y8L.UGYfV7Z7ebmk7e1d1R0z6DD2ZNQc5qe09nHkZMd wAF3EfxEjdxwTzuArZ3rGO5PcO4x_UV.xy19qdBk.FREfRT1t5f77oTv3AQGKHnIS55Xjq3sFJno lcAqRBQSRe4LrMOtuwsbUwW8Z7REMKXFuebAG5SUX_zm.0BlqBoN4gRHRLEwshzT9spQDbk1PsQ. iKDKEzJTxXsarX3ktLdmgefRTOOK5U7.vZPJGuKkvZtqlBY8X_pgRwl1NXRv07KEnInUI6QCh_Za ve8fk0.hlL0OzKhrVYD_3pSH.EMcxbK6KswPfUNfu1IKFHbOiIUcGVjfA7oq5N4wj_i7CHaOJYNf lPIknva_hZFFXJibnmiXX5RRSFvjdZx0lF._Yk2zTmWSgBMwx0USZQAz7kx0QXMuEuX1aYGyrnIc wWmP3YWHa7I1MGDRoKSvne2LPpxlE1l630HQ0_GvFpTD3wvff7QPm5nN4l2rv8UVeT7Lk8v80xPx 0LZe_ryd7UrIU5.gzBAq26b3XuNmr8FynuiJauw4MmgiXFX.lg6Vnibs44qnFYdchxHkASOQvrLz iA3ANgz2J.p9iBJ5wwf6XTKa_5JctWPCG6C2bvePfX1jhWQwNvqak3Qeewhp9bwlJ5bwklU.hL6v Dp06VBokXNXAC_2_HNy1y202PMaNm5jK67ETQ5eWibepvUIhy7MTRvkJ52a7PIluSTz1Per36f3C 2cIC5qBNj5hmzO..IIki2_4wU.wnrZ5Lt73MXGlHClvbkl_jLR_uzMLUmg4_Kb0izYgDZCllVUjV wCQ9eq55kDFp.PN5E9F5JH7h9e2BPxJYrFlEwuR_X3fImdqcy9z1YaE4sAVUYd1z5r_0FLM7idX1 2gxFaggdjZ1_kNSpdrJCssdKao986lsrcH.WdLNyntfTWPfYVWE.9rGWwmqOIeTd7y0BcEDt_3HD nrVNqW.BwojAaBqYLMTkaVpxqfw6PJ2ZYa_aqQwXoSMVG1P9s_V.fnxNK9iEmT5XA7tNn2QVW5Eh YQ9jLEoNqCzD9xQTvdAKmZ4CcrfhR8NVdIGp6Nh1Q8SBK1nsqEqmTrigeghWEuBeoeRgRfjTzQee 6E2vc21vJ4hvyNXI1PU07oUu_DfGJNon8pHOhIUO.2XxKdwweNkgZfvOIWQotA9MpuBhnunQOj6m f8PpTDbqLMjOi1K3ppdxaWxQkhAena7pUMhvfuoel_X1fWS7A0j86BZA0GDyyr3R52aWYUOmhXJm p48nNsl1vsgdfBFx8m4lwlQh00aGQ.jexlcV9KQU19cA8NkHBvtNajkqioyk7ZvHW68.JyIEOF8h 6SXPdTHmJWZEQ1Of.7oblespE7a4HrRwVLpRLw8qUVAHJnMzRDob1uDa2eIvkOfNT9whxt2BRG0I EkUBmt0p2XGDdR6e2hw9zdLrtgJFxeZ_eT.qK4nwKcJlbGl_Pe5y_6BhvPrkNze0ZiEnDygeaAqN LbTnBhZo1TQbP7oV1YCsD5xdmJngqZYr2jJVWwSjOcRUVqn_v26o7svFtHTiz32t3Zm3aTVHMsA8 pGJC0hU8LuztGTVqMpho_Px84i1SmtMK0NR3RlmhAVozAjxVnmUVI0A-- X-Sonic-MF: X-Sonic-ID: a0f80762-b46e-493a-b2ed-7d0ef27e2824 Received: from sonic.gate.mail.ne1.yahoo.com by sonic312.consmr.mail.ir2.yahoo.com with HTTP; Sun, 16 Apr 2023 12:45:11 +0000 Received: by hermes--production-ir2-74cd8fc864-4bl68 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 8a53f7a8722383f9609d619e4fab1862; Sun, 16 Apr 2023 12:45:07 +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 , Pavel Machek , Axel Lin , ChiYuan Huang , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Jakob Hauser Subject: [PATCH v2 5/9] regulator: rt5033: Change regulator names to lowercase Date: Sun, 16 Apr 2023 14:44:32 +0200 Message-Id: X-Mailer: git-send-email 2.39.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Lowercase is preferred for node names. Cc: Beomho Seo Cc: Chanwoo Choi Cc: Axel Lin Cc: ChiYuan Huang Signed-off-by: Jakob Hauser --- drivers/regulator/rt5033-regulator.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/regulator/rt5033-regulator.c b/drivers/regulator/rt5033-regulator.c index 2ba74f205543..dee272dc81df 100644 --- a/drivers/regulator/rt5033-regulator.c +++ b/drivers/regulator/rt5033-regulator.c @@ -41,8 +41,8 @@ static const struct regulator_ops rt5033_buck_ops = { static const struct regulator_desc rt5033_supported_regulators[] = { [RT5033_BUCK] = { - .name = "BUCK", - .of_match = of_match_ptr("BUCK"), + .name = "buck", + .of_match = of_match_ptr("buck"), .regulators_node = of_match_ptr("regulators"), .id = RT5033_BUCK, .ops = &rt5033_buck_ops, @@ -57,8 +57,8 @@ static const struct regulator_desc rt5033_supported_regulators[] = { .vsel_mask = RT5033_BUCK_CTRL_MASK, }, [RT5033_LDO] = { - .name = "LDO", - .of_match = of_match_ptr("LDO"), + .name = "ldo", + .of_match = of_match_ptr("ldo"), .regulators_node = of_match_ptr("regulators"), .id = RT5033_LDO, .ops = &rt5033_buck_ops, @@ -73,8 +73,8 @@ static const struct regulator_desc rt5033_supported_regulators[] = { .vsel_mask = RT5033_LDO_CTRL_MASK, }, [RT5033_SAFE_LDO] = { - .name = "SAFE_LDO", - .of_match = of_match_ptr("SAFE_LDO"), + .name = "safe_ldo", + .of_match = of_match_ptr("safe_ldo"), .regulators_node = of_match_ptr("regulators"), .id = RT5033_SAFE_LDO, .ops = &rt5033_safe_ldo_ops, From patchwork Sun Apr 16 12:44:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 673770 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 6DED2C77B79 for ; Sun, 16 Apr 2023 12:50:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230390AbjDPMuh (ORCPT ); Sun, 16 Apr 2023 08:50:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34496 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230233AbjDPMug (ORCPT ); Sun, 16 Apr 2023 08:50:36 -0400 Received: from sonic308-17.consmr.mail.ir2.yahoo.com (sonic308-17.consmr.mail.ir2.yahoo.com [77.238.178.145]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 507F21726 for ; Sun, 16 Apr 2023 05:50:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1681649430; bh=w02hY1HIp+qDBUno1VcYVxa72PQBwajHWCo6K51iWc8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=IrGMbRhG26hGnSoQyHybWgFZB9tFyw3xUVvHznk/SpPaD/hJOEjvTVFrQT+qqtCYHn9QlcpilqWnC4lNfPzHqc3JRPJKCVLfaJgHugPMRn0+IUIDGbDvRYpp3QbO2q2yI4Cai8k+WH1e88izfNZZWosNfkugPp0EepjSrMrih5nzLgAVxo1E0TvJdKLIXbBPLbng2lb73ruK5PcbBQafNF/yz6nr4SE/HWeM1QJJVKJYcDIysM5980aB3tlqeo5uOTcY2jB7WFZgIBjP1OnasffOBMC2VW+jIjZhYrj5/r2go5dgXKN7QGq6djHaXyMQrCtcW6PRWizOLS62uaKFPA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1681649430; bh=KxG8LYB2qHuTiuGTL2/VUUQVh7xUPU+CUvksV498Hqb=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=VwO1frkc+wN0Hi2H3uxQMwLxQCl2JXxGgpeH/EV2lXVJxJ3rtMnnQApVz6F+/QKv1rKThonkc9PFTyOkrkSNWbP//LfB11CqclrIQ0ZwZGG7LHTPHSJ1YSjD3oBv0Rht5sFb4st1iUYsALcopIgWwcGEWPRoC5UmWDTE4vRicqPskh4TsUX/2WF13B4nmHJsr+nap9GhDCuzuQ7uiXPNjqvrdeDNk+fz29rT0YUSJGRl0iQfwznAr3RAKuKH4gylHa4kt9eZrTl0MSfT+pzhKJilcVh+ToHp0h8LWQ0mCI/o+Byg3Elvz3YSAaZ8ynD3sq1+606lpuiuRzKKGu11RQ== X-YMail-OSG: CkeyGTEVM1nDBZXJc6cljvEiNfWIefd19fxHRCZZCVPaQ1dYEdyWsBw1H0my8xq jutc3BIxhFMApInkeHgLaYjMtARQPozJPw_R3nVKpkewyixHKuXpLHvg21GL77xAUCHRPxCWgsfo jZ82qMkjFWjjdIJEdt8oZNGfvWygtrPAbYFGLjdbiO.Lgpro7tGa0xavsVdYv2EXxCUZSy03gzYr RPBcVRbX6BdZ1fzPM4Ps.c8Uus3dixmBlJqNfpRufVAmQklHkSbTZXZlc5GJHh2gPtGJMco0uSUS AqirYsowBGLtMmGz9f5q3r7GmhRSPjCZchNVauMF2hCIYhN_NKslEpy2sneqTlua43uWOsX3wmWI taPaUba.fh0xZXqP3oCR9Fnkbt3kX_G6rYSEXKVtMOz7jzdMFoPzlEqL2Jzt82J0uzDeQauU968K sxLTh3dGbQ7smVYjMXtmlIzWBoVA5_01IJiNY_ouZ3aG2Xo1utxtVyQkwvDFGEE8z2tVzcJSkBiz c3_vzcgUPSG6G3r6LgznrL5zJ9_w6TwRmVpzQojg.TKVS.rvsmPq78BOcm859VLvze_BZ1lvDJO3 rlmiRSM_NOxrassQPlxAldKZJZ3myxsH2WwYG7GT0RT7jofwqujd2mIhlVgAvsr4wbuWsrghVwm9 gKUHVxmBGIh_.89g59ww6jT3.7pIAUh1s1AQV4pzY9BuTeJWLvbTdSmnf038SJ94dGsFaNXerl6M 9Yyh7fjexLPpzqV0aVKNYxXQ7MM4sX2qTgwPRu50NVPLPw1eF4Y.2oUiJpJTiCuGJcW5jC4BLamH E4IiDXCbbJpE3H5Q6WuERZWiqyfnaYeiuhmaKRgMwPiVlF4nF.1VCPGpk2lDMf5JevmdEiIaU0lA .WTDgcbL3X1YUQq0swBmbYD6Ex9C0brRJJzaCemm4X7wrBBbQnQmGtxcNu9B7j_HkLSTv1g3ov4O R8XHjS5MqzlfOwqTlJjUuM7Q8GuR9h17xa5iwQEzIugbC44M9qmhnqmknW5UpmnvsR15Xm5WCb8N uphM0plHuMSdQBfQCqThSUxDBTws7SrT0gEOPOVMRgk5ZV.7_1BGH_m9ktfyIHVgZhr49hTYo8Xl 4Z02rvCI4143Rq4nM9jyR3TXC_sUMpNEIymYH0VTEmpbyVtk_hbnm_Z24ut2Np31.RjnjTJFGFyy g88r2Uuj6dyu9Y2IE9Kh2_fhn.5FZKq9XhfJ2PLoBJpSXHdkwgPJCHSdvPd1FOWFKYdS1Tg9V8wW 0NpxMeYQ608jYSlagZ_9gx.DesKngMrO3obhj09iP3ftFWnsG84Cjwj2hX5Rum4BACVpkF0UgWY_ l4.PUUPYvjJGvg_7x96mhFRW_3hxgQUD4S8ukpNeYrE_C2W45jSjeTYIcrrApJMcPU4IyhYS3_eV 5Cn.VgPteCDp.ba2yaoxrhiGYephA4mEMpNmLBMS_8h8MnY2vyq4x8wWk5eE1WKSX6m77lKFTVbG NPmcUm24FS72X1fLw01BusBfj5YCRCygk0DhHgSZI3jyGmmWIGRd42m_YudukWzy_7.zeseiuArF LfXI78RIj7VUrqIFP1mS7OyxkwIBG.jErjicKn9npWAGfdXsAiKX.n9GifgP0NfNr4u6GR_8kOwn 3.uJeB4QC4PsBOcRtTC7ZzTkveNB5WXhG1xJVAZJa4QRy.7qy9uxu9Q2w50fnqarmXLYtazT9t5X r7T63_u.hC5iQujcvGb3xqrlP4UPebPnGq4jwsQZy2.dsaNrbgsuCTLRrTBNyjz2ufFaBS5aFpwh JVY08Mtb3NXMtkhxQXS6KCh9rCI5TV4a0P9ofSNpzJh3qPxaHmYe3R6Vi9_gh1RfzIDd5FokH27n pEOyJnyoYwpdunvix01cgYhrohy6sNOIvWNrREcKXgSBbJwSDDRmjxKwoRunG3yeXc6z4tf21Q_H rhIr20pt8n2z7l0UAlfQj_9qqxL6tR7_i7.21w0UAtqU14rt_wleuvu2BsZBQOyTjPlBfyATVDTc no00m5ej1KqFoft_SVMX5DbgeVTq0S4npD9aZPPZHKtwM_k1T02YQkEY0UkF5jN.xFrzqROuqEA0 Pfr447.GO7qleFJ1ZMmZ0I4GGamJcK2y8H755u9aeBhUPt0dTz.Fid7tCTa07m2mJbo2qpFrJbVT iG.xhGPAtxZWtpHIpYaGqo8wPfqV1WXVRGoGUkFil5lVDP3uhubGaQFaVaB.FPlN7cV55tf.empM uYzA2HdoufgmUjoYqpwEc15C1xg2izmpqxRUiuam.5n04o01rUzAn9rIbMDoQ5f73r6kmt7Pk2ya JcbXv15prbpGk0NyxmL4swgdoEg111yHxtgl86VVBd0N2ClQkGEjFKg-- X-Sonic-MF: X-Sonic-ID: 5e0ee88b-bf01-45e8-b449-045deadfede7 Received: from sonic.gate.mail.ne1.yahoo.com by sonic308.consmr.mail.ir2.yahoo.com with HTTP; Sun, 16 Apr 2023 12:50:30 +0000 Received: by hermes--production-ir2-74cd8fc864-9w846 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID e1e6b4a18b1a30b9efb33afa6a04eb6c; Sun, 16 Apr 2023 12:50:30 +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 , Pavel Machek , Axel Lin , ChiYuan Huang , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Jakob Hauser Subject: [PATCH v2 6/9] power: supply: rt5033_charger: Add RT5033 charger device driver Date: Sun, 16 Apr 2023 14:44:33 +0200 Message-Id: <665d8906ea7b84e0a248315e8395a80007b8bafb.1681646904.git.jahau@rocketmail.com> X-Mailer: git-send-email 2.39.2 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 c78be9f322e6..ea11797670ca 100644 --- a/drivers/power/supply/Kconfig +++ b/drivers/power/supply/Kconfig @@ -766,6 +766,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 4adbfba02d05..dfc624bbcf1d 100644 --- a/drivers/power/supply/Makefile +++ b/drivers/power/supply/Makefile @@ -54,6 +54,7 @@ obj-$(CONFIG_BATTERY_MAX17040) += max17040_battery.o obj-$(CONFIG_BATTERY_MAX17042) += max17042_battery.o obj-$(CONFIG_BATTERY_MAX1721X) += max1721x_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_CHARGER_RT9467) += rt9467-charger.o obj-$(CONFIG_CHARGER_RT9471) += rt9471.o diff --git a/drivers/power/supply/rt5033_charger.c b/drivers/power/supply/rt5033_charger.c new file mode 100644 index 000000000000..b5be43e6ebf5 --- /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-microamp", &chg->pre_uamp); + if (ret) + return ERR_PTR(ret); + + ret = of_property_read_u32(np, "richtek,pre-threshold-microvolt", + &chg->pre_uvolt); + if (ret) + return ERR_PTR(ret); + + ret = of_property_read_u32(np, "richtek,fast-microamp", &chg->fast_uamp); + if (ret) + return ERR_PTR(ret); + + ret = of_property_read_u32(np, "richtek,const-microvolt", + &chg->const_uvolt); + if (ret) + return ERR_PTR(ret); + + ret = of_property_read_u32(np, "richtek,eoc-microamp", &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 Sun Apr 16 12:44:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 674421 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 B6274C77B61 for ; Sun, 16 Apr 2023 12:50:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230502AbjDPMur (ORCPT ); Sun, 16 Apr 2023 08:50:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34618 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230491AbjDPMum (ORCPT ); Sun, 16 Apr 2023 08:50:42 -0400 Received: from sonic308-17.consmr.mail.ir2.yahoo.com (sonic308-17.consmr.mail.ir2.yahoo.com [77.238.178.145]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 853D12D4C for ; Sun, 16 Apr 2023 05:50:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1681649435; bh=U4eMVUfWJ8XaHrvH+5J4MdBct8eeD1kSSIOQlDDshYk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=i0weJPFkHHKUGahoFSHKGbQhpm6ZsXyIVt8WSLqdSe//cbPl/RDwz/bBMOfS7uRTijgRTAVINYbuLk885l4nxrP3y2nYlutl63pfRu/2wxG40w9BUDGpW/SmxHyCM+f3ipDvoiotuubY6QQgy7jdDTIz5d0NpYUWOAuFRK7s+xNY9K8ClKUONj/7O9fBmfy2Pai30O5wqnzgt3UEJ+BqDL9PKQH4hLhea9iHtMi+OlFirPn9ofJgfUM0ZC7Hx/hFqbTp8Lean8kJjiWhwDjZrPke+RyUelTI72E/bpeGQXdfJNxHc4u3FC2pjEfRpEKuYl61qNHh0L+yB44aXarKnw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1681649435; bh=buPDOhnwlqoYBBjwCWGvecJ5PpIl0GLue1+djqkbzyZ=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=grBNsuXfaTAgR8k+cBKLEJq6n+WqKhOk3H1YCLfnTrdwobq/ie2cpsKXpXRspL7UNUxXy3DRo2tofJ2J1ypKobLSuEheLfibEIOqYTWlZotgD6O0AMifBJBCy/YWKbfITOtMXjk6tomIaNZ6BekEHnXlNT06xx7onXYI9S7nsUve8Ai9z+u3htvRGkdGlqKE5SJDdSpIhvVjPy1+4W0N4p9UjE8d8cbbfx/DrJumQWNOdSaiP4f+8ufnQp5HEmgkcgb26ytTLQEEWHxXBPOuT3Wkz3dBmEHMWGneoz2NVsYC0CYuMtDK8AaM/rcUizMY+bMBLl31csve/UE3VV7Hgg== X-YMail-OSG: GjfTNXQVM1kCSOcA9_TQfQSIh5c1CIcR5C0PwDJDfXUzefdx3tnTsTCzTw.sPeL L8Ureeo2yu1QxzN5MDj1LUNoUQB2OndLiN9qX0.JwTqV7Sz1Mfz9AWn6FiyyFI5KRdqkkPbCYD9k jTnO86aRx81DAe10aSdee2uZ8Z4jNH8_aC4LIC9zQAprLzgN.F41IZOPkkSXf5Uqk08xYzteGMfz _dj8tMfi5qmJvE2U1LMdHDNyrdhtsNcxR5w1UxWZxl1ptfH5SUb4Ci9VAeY5mPU0W243gu2PTqTZ Y88EXHOdgbKL.WDxPLTUeSFBxKuxsKdgIjdcrQdL0N1UBZnQg.pc3mCRdyUjr2iroCtMu_YO3Ze9 EoeMHzSioNrE0Ui8u739v0KW6jMKxqryQhGdyOR3P7ZLjpZEDPrVjEpPIOeI07E8ZrAPl8IUAWD2 6wAw6MXmutgOKa2YApSSFwzThP9L4jHiOy4dyt.Ie2jISp.p.FoTgOjgs6aOSltGt2DJ9ljMVxL1 L.r6dy0Fe.3SyTbxTm_MInzpWUhFPe6RxVN.wJYX3EluPNAa8W82mjhYdpsaVAkNy3zWWjt2K0R. 0ncAz8USuKdyN5DRsspj.IVeqpyffXpnNgt83vorMRAV10DNby.iKfAzsjEGAgTQ9k4J4MvPYIC6 MF9cKVq6kPnlleGfZ4Z1i5q99ZpsPW74I3PdgUBuBy4xvPDm11ri3HkPxdP2gq_owJArN0RKixHW m5HwzPSbmffckwaaJ08Jw9xsLzcvR_NWa4Uud4LLnRoHHXpzi3nqSzfEtk7YkuZpuEjIIVcvW_2D Fa51_kqC7xh7ITw9ELVyY4UpkCZAk8JD.NpE.W5HmjjsnIVplvVWCzCIz47ijIqKOhIoNUm0QBWz 8yGPGH.sPMCABcZw0d7hKVJlz7AL8WZbLViEeruY4jDOKOQQSKyftGsuLIGQbCXHTFFMC6d0pU4R 9fckmQXsbwb2kkmF70BQvQns1pNdd_C2IDVnoBljxGGd7EqHUdOV3NKfYn_PLI1wZGaMwPqL7Ewv DShL9XYzjmlGjdElRLBUAQYxriKtv7uuKY.SmA7kdzi.Qgu3Fp2nkGnjIS.c5bYPMzgDRJAhLNXB MS9U9TZy7tvwtTBM8wC7qqg259k1w6d2Bo4kX0MVm0K3zPZktgB8LPjzSRyMlxHUz2Wru57d1IS0 j62TrnL4oW0HgCf3c1PPIWbRiMeFxZXIRjRKufrQECiK4uqE5bzPwFZ67C0cV1DTDl7symd.EZl7 kTqd3o9T4osnSR55yWMCPUBINETVITzGP4WV0XqjnYu9szSO0BFCYw3aIogqm42x4lV3.qM47c.C pL0x0mh0gRV1WSxlkaBg72jjL0SQsLqYjRle1.bQErUhPTBX6taL4DY38mnVbKmAYa44V9ARk6au .yfukSaHrBdkZrbBdzlisY5IupeG1LLD.llRzLtPspqutxCk3eRaqYpiXuqr5XSuBrHcPNbiwyl7 lmTBkyj00JnU9Umxbtj.ZMLDzR4w_gaHDk0Eh8lE_NsL4QNnpUItdETe4mciT3IoEHrgLdgGwgSc CZJcdcbPGk.IhXR7gOlWoj8qdpHuDoSeGitE4w0xdzVdAeLB1I8vuZrA8K5igteQ6iKDtHABZwFq BJlePkCBumeQku33VcohfsOsyOKmMjTDh6AIWWU9I96FDHwuZN8agVXyewqAp9KbgghkcsHKa0.x tgtZJvXM.PLOhjbSJBvoREZCHzjW4vx8L_6Xx3hzuOvzZq398m0cyq6wDbNVqLgGoZ65tXLoLCTG N_fIuzrDaDvmG16MUY8Ke7l0nl_A3aQmB_ST4mPf1Jv.wXvo.aURZ1vE3XU9wTZdCOWWw5pnCoKd buaFJkK8HmcCYtxJuRTlfI9IZ6amiKhhGN_Ohm7.VztRM4HMX8tDBq0DnymRLv1xl8OGCdoQNErl 68kgNeSFu3Ew1rAf9HwAFzTwEa4FqEoZV.9LOsf1bNfX2SSiL7xcebRyQcZhffNWdncKA_1cCj07 IR_4zXpyHFw5FZtp_rxJkVo.qGG5JFEJJEOZ6d9UoNAGa7xkl3UWjWV6H_yupQ9ya8DTMaA4MNHX zlA.dtBUTnx9G6FBHPleTHj675gDuMw5zKbBzvNb.CNXzXc9BqEACSCTztY.CrIMakB9WB70ZXXD 81th5qtwNMt5FAqQBBAxIlMghJAIJ2gI2decojEQfy1NzQIt.CPBCxjbRRbmn4w2JojijeORuHkS WrPzS4uKHLNRhHLysRg6fqrOBzc.MIFtm6cJcUX85GDLVTLIm34_NeBAkCCrfrq9FCPEvuyurIz8 DHsdoEsSMluer0Ec3_tC6TqrCV9vB8eZMZRow52RbxWLs4y4.W6BYcg-- X-Sonic-MF: X-Sonic-ID: 52d95fc6-ec98-4b7e-9a40-c5246ee92025 Received: from sonic.gate.mail.ne1.yahoo.com by sonic308.consmr.mail.ir2.yahoo.com with HTTP; Sun, 16 Apr 2023 12:50:35 +0000 Received: by hermes--production-ir2-74cd8fc864-9w846 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID e1e6b4a18b1a30b9efb33afa6a04eb6c; Sun, 16 Apr 2023 12:50:31 +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 , Pavel Machek , Axel Lin , ChiYuan Huang , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Jakob Hauser Subject: [PATCH v2 7/9] power: supply: rt5033_charger: Add cable detection and USB OTG supply Date: Sun, 16 Apr 2023 14:44:34 +0200 Message-Id: X-Mailer: git-send-email 2.39.2 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 b5be43e6ebf5..dd71233d554b 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 Sun Apr 16 12:44:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 673769 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 8D5DFC77B7D for ; Sun, 16 Apr 2023 12:50:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230464AbjDPMum (ORCPT ); Sun, 16 Apr 2023 08:50:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34586 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230358AbjDPMul (ORCPT ); Sun, 16 Apr 2023 08:50:41 -0400 Received: from sonic301-21.consmr.mail.ir2.yahoo.com (sonic301-21.consmr.mail.ir2.yahoo.com [77.238.176.98]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E940A91 for ; Sun, 16 Apr 2023 05:50:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1681649436; bh=t2fvyYZS7Chh40ho3TEbOh4/xUHgvfaETlyY4tmywTw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=OOQ1PErd5vd8UQBpNxVM/+o1su7VLFHpeVTHjoFaEI/k6269DK9UvDTPxwQ4+zAvhbb+vNihoXqLpfsEpi68JifWkP1Y86UsXGFZLCfwHsLeWLNVHMJFwOTX5d0/qu/xsN7vN2+QDTOG1kQkLX7uO16k22jvKd6FKxIyC6az485KViJQKH4+1bjgRgmEE7ko77Y3DKiknLD0gX9PVA6olpqmBRmK8hGIhWh8iEMc0xnhOqbHACLuR0MCnnsrwhsWDqQX/3I8hE5DchN8JZtRAsTHNTJZ5M/n9QyBSDbPVtiUwjej7729BsQ0NfmtNp3QF5IIXWV8B0uUP+M950D+7w== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1681649436; bh=6pZIRE45gcFJ00KwaPV3W2dWc2VJdFKuQHIvliouYvS=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=MCljO7+jXWpB6VL4OH5CUK8VUdP8gOhTo+FTOeC3Tdm3cnWvcG8LXIuWpLY0YuumoO2IzuDGFUqUuMSVL2uzhfwUmbq70aQ7ijrXf9yKe0ZLjp43J7+8lCezeUEONnX3wfJEA/UIEzpgoDqxzbGsnfNsY8tKFwnB2T2CPMH2j0hpsyAOCdW88rAnoauBKBxr8dhOCVMx7Paqe8mK059QRs+Zn10JiB4bg1JZX/yfU6reZ7g0Yl6bYiFfqMQS8PoU4+T27499HlirtLO870gqnrehqQ7NSy3ixkbnEp7U/GDfj6fN3uyZhKFKo3b5a/H1Nqx1hzigjED0zcCFzrbnFA== X-YMail-OSG: Ajq8mNAVM1kRvYlg3OlYxJ6lg9CuVDdY42aRTCQRT4AvNkBUUfi9RrbqaiEOxPs dKYgHSxl2cgU9VvW.D8d2v1DRK3fUOFdjM_ABKn_POn4tTGgjlDcU4cRjq2U2SEkv6I.hMznlzGm S.Wu3X.UO9dNJxyk14jRaMd0NtnVzKk63ruTIFgB.oZkAGboQhppZOL9X0nOl2G2cp4rKkLPh81b HRWi9hlzsaq1kyHmF0xHC92JFJgDbaQLkJ.Z_ZugXSYo36EKVLoQb6Z5XvICBVcg13g9l3_Q32tx asBGoY9lwl3FQP4WgjonjAUGN1G2lx19R6kfhpkZetoR45hxUsl3W82Z7mcTFISUc4jXqeI2DS1a 3crPA2EvJh1_q2Ax4dY1FisNcyMIdi1uiyUC6qIjVIua1e1SdG0AfbPmgNYF_0M22ky60ya7JM25 jIkS3Yl2FW9YSePTQ9sD3RQotPt7NW6Uo6WeH5aDETsyKbKUZpavAkEPjCY65lc7X77EZ_MfoWJu vNhgGdNpkoXS.y2GPM2pTZ23iJPjLdEhwYeqVZMWvZ6eyyhmVJoGHBPGgLlgdKbXLSAWoypy4r9i a7ZVtvLXd7ajsOLkoo9bqkBjsiqWDe4Gr6fQ8KwBVPTc_YNqfqtlj35JFBVGbnmvKt8Qa0g17sSa EQ1SGhmrf8c6RUHmDupUNz1Wr0gIKFTAz_gYo5rJ_NlV3FJa5usPXKrJ52jg1.Su7DgMueqn_Ir8 vBj5ZmAP6ILBMeuuEo5T6jQQaCSnXkF_XVtWchijKcQRjNRTOOPePIngilFu1aUbQW8FJcprPJJ3 LJsYC2Nilg3xQ64Z_bKB_nClWQNSjNY98ECylr21SEgEpfTMB_OpDLmxL6lue4fm94xtPQHQzfTc 7ed2nJpXa0RyVnelSnV3U.u08RVk3ZTUti7JgB0Jt3HSXz51WWLcWtxOaxG9bXlFWepNwtvbWrmG Rd_Z9L3FzAks9SSVC8Lol.skh3apXYMe1WdXbQV6nzV8xshIluz8xfkU6_6DvKDVmc433PXwV9Ca Ax8Ld5Wbh5OfLesKk88HRinexHnkBCwHvB9UdFx8HHEv0A7O7eKaROTEbJRU2sAgDAywxhdQ_1SD 1n7YWsLCm2TzW03_adCn12_w.pcc2jLn6KkH5QpZDU_YI2JzXzHNrOzBzlbLWStbb5qiOLnxTtE_ 6B5EecZGJegW_h7Udap2ngGLezm9jRirXxOOrLB2wb49oaxF_T2imjFjZA6djPcQ_rrNAlS6zcVA y07K6sgmQOjCYBrPw7WnwAqr8XjTnMk2dnU7c490yYpk5HZdyd0Vb7kN7F.QqSoSA6SHrVjCzPzH mpRDGVSHlyX6UXCWrdrSyWfYGXYzPtc0fyVtQBLyevK6to6JEEtXEckoGEXWOhzUpVOVTRR_6Xfc dey9MOJmbYad.PL7tK5n3H6OFQcZYjq2.aPvdtLCTGdVtk9pTcG9jZdpLy_MYoIITdl99sGkOnK2 GRHl4EInnPsQ4WKFSlpGHOGlUkmBWMAp1qTYF0xtT2mjqg8dUz09gjXvWtYOjQ1QnpT6X6jo31gc Aa7H0ir2L_8VjhlBbGJLIs5Os0e_Q2mXw.867RSUF2LopS7cS7cFjUNL_HVrBwobF_EyCrTomH9C JUMH6oSx2csgmSJXDHx8UiKlsdd0IZMumbQ1vS0oa5RY9JPdyFaTreMCb9i1BU3NjxSfNLMpWcWP pjQYHWHTgNAmK5BbKzY.i5tnj4aLBPLBNEqCv9DwgyJWmNjfcJM_IFNQaEVYujmV8ONxQkhg6ypB .pQ7zfXLyS2VmFxgDRyUW1PYH.ZTGj5cH35xzoLvSSV_YldkMi6LdtilEMEVHFl_aV7ihtAGqkue LQtMbMXggSqoFdfOZZgpswwgqxbnkJ5pibvgO.UBUhjK3iCQyAPW1clHZhD1RkJwvLEKZzFOoCXY ELxSViGxreHLTj.d_mXhQZEIUI3vB8GfOx5uurdySxcmUTeDxYSPZmpD5aPOXnT7dLFKrWQcmt_l FeVGShetNNRo2q5ZgMyA2jSq9HonuUcbEGnr4jwbttbcMY0UoGvr_j4rxkb6vEHhZGPKbvP_GsB7 bcUMxrDPcDeBeEU92ZmZKC67884F0c3JyUYK9xpPIq59wFts4RHjqXO4_Y_anyAcjvwPNCljvJdS _klnB8Y6l2F3Jh0mJ1SN63_OeI9vPnNN.6KeP9.VElIFb4XFYQwlnZQ47n6gaha45Fz5tirNFN_o 6ibVKE2uVv2iOzbxvcXFvbGRrHcccHO9AWbRXW73.zre_YzufJg9.ELSihlXpVdVxu_jTQmGWCIR KUIYGBsZrN9tzKp4vqPy8TXGdCn7.oyDAfodXPCNkGjraeOVNFdkc3g-- X-Sonic-MF: X-Sonic-ID: 37b66e74-6baf-4456-be0a-5c9429113131 Received: from sonic.gate.mail.ne1.yahoo.com by sonic301.consmr.mail.ir2.yahoo.com with HTTP; Sun, 16 Apr 2023 12:50:36 +0000 Received: by hermes--production-ir2-74cd8fc864-9w846 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID e1e6b4a18b1a30b9efb33afa6a04eb6c; Sun, 16 Apr 2023 12:50:33 +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 , Pavel Machek , Axel Lin , ChiYuan Huang , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Jakob Hauser Subject: [PATCH v2 8/9] power: supply: rt5033_battery: Adopt status property from charger Date: Sun, 16 Apr 2023 14:44:35 +0200 Message-Id: <23260904aab2566faf86d2ac01a31e7f1e024e66.1681646904.git.jahau@rocketmail.com> X-Mailer: git-send-email 2.39.2 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 Sun Apr 16 12:44:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 674422 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 4742EC77B79 for ; Sun, 16 Apr 2023 12:50:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230477AbjDPMuk (ORCPT ); Sun, 16 Apr 2023 08:50:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34598 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230461AbjDPMuj (ORCPT ); Sun, 16 Apr 2023 08:50:39 -0400 Received: from sonic311-30.consmr.mail.ir2.yahoo.com (sonic311-30.consmr.mail.ir2.yahoo.com [77.238.176.162]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C85C126A6 for ; Sun, 16 Apr 2023 05:50:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1681649435; bh=ry1wdbINkSV09xVX5t7wSbuuNoW3ImeInKe2pM61If4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=Booa5Zq1c31RmSx4IxxAajr8qh23zdTe5Ey891xiJtQh6vvKujBID6m/nwGVBp3oTx2ZvncDPt7EytughQAevY/NPfuG04SwkPJ1xjT0lPX0jz8tsx7yxyxKVEdaoy2oactEO/3AxEShWMVdaIz3X0PrFS10spLuhYrb1BdKp8y8gl6YeWKxFP2oiApEPuQqMjcukVEjLn0YD6hgSywRqI8c35hG15Pu2At1Jpt5Ft3hiNp7X1+0hoDd/vlbEszAj0nOoGwT40eb+I+ftIsGhj8229hY+vT3jhHpobJxzLxQF/4SoPkkoK2fV5zTvP6VMa6f67Y6xKgHGBaXfnW2og== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1681649435; bh=JZsoKNWI4cnMSZae9t0cYKAZRwaD4i8FPqcyhb7fhe8=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=qhYCbiqTlJl0EVUw5QtXfyq3xB1g7qlKJn9qMVZZFw3+9erKrFLXi/e4Fxj7hMgRctMKhLivc590+iC24248OpnUFXK9x6tsPbMg5PmdbM9zKoM8cRrT9vfMk2YJrdpIlDI449hhogoH4vfz/vq5NtffYANtmNpuYVhct4eXoOfheA1LJmN57cUvlJ0Ov9EP2CzC2LPacFEdE4Pn4bkHAsP2HpxDLAhIhovN31Mni9iWob2w7PkoCvZ2cUgn/Q8pmluRhYiHlkqefF7/TjwO+LUVNEtzXxVJhloC8qsYCvMxdRG9kl1ThqcNLdrghf3wO2HHxwS/1tqN6CKeGcgQ8A== X-YMail-OSG: uMj2UUMVM1m1Tq3bH_fanHXbh4FRSZokE4.ULpVOdVqKRY6KvKvxK5WbH6bq_7_ BTvg2X9aIpDmsbftx2MT9TWJHtPmw6NaTSXapsrjuyTOXkgN3EzrzN5TQcwwAyyKI_LVFwPOGOo3 lFcvWI_cZ.P0J2dCn.r221JdtWuBeUQiFEM1sXgoBOqC72PcCzepVDzIT9GG9IaqqNsOfq89g5RZ Lw0Vwfan.iVyqg5GieuzyUsLrmIsHgIpKq3a7vuXaRsXznXmxLcmLdZtv.p3YYB2h0YtFUDD4fta a7MusQK5uKkMCSJsgGPg69Nk1eLx0AEpOGsg0Pg5_LVXXh7o62hBvwLKfAq3la4V31wnXupFQCkR lqb4ATZ80.Ecgp8HqjbeTyLyNrhko7dADnGAfn7.n.gKgn57YTArKF1dLLsCSqnf7EWgWED5_ZmW y_gitdkvrr944L2emy8WagLycalRNz8hJ_P6Vp2uKrACV6TpUWGF.IxuZSz1cjnA1yNrt06eJBVf IJc6ZWlYc79jz03fKcciqNGdlPxwF3k21NRQ6Z79S3cuWKuUxVZNe7xeb.c7BWiFTJypFgwjKaLt NrRb6646CtswMxSSnRzJcXhatMxoRt7L1p.frmrjOcGCZY7KvnPbdbTBMc6MNlnzFBYvzWkj6LKg GO7JfnOyU2HNXZwNzaxi.wgYq0xlRRT5uS_rODnYEiUM6tJvaHc2F1yXK5EQSE6q0_oVbxFWoSRB Mx9TAxQhPS08w1rUL6x_t15dUk1TS6_LKpFTH3efSsYBzvpauMu4zAzUp6lmagQm1oXFC_o.LNs3 LBBjy9aU7USIrYk0NT2VhDkIWpPAWmLT26XpPCVE0rl4t3wj9jHXjimWpJZIaiaz2XV47dba_LPS xuyrUqkAeZFeIIETa8X5NrdCgLKjB4pbALGPbEGM62fU5JD17aUqyS6GeAkswbr0NQ.ldARVwDS6 if96jml3JbWm6Fxc41ONCyot0hWyL1vmGmo_AmtzLnjFequSKv1VFc.G2e4iww0.v0ZlhTIdLwV6 Svq1s2DxQzENOy5vpEGgUBo5ytHQ3d4ei5.qacx8ONPO6nRw_1TDCcJUrmbXCDNyXRPDOKR41euw FPCT_bCvv2yBf7njmneXx8rcMmNg_lkxGtPHRTe3RZ_J6JlN_oC8fPdsejwjnQce1x9ZlaTjJ2Nj hKUjEACgRT5VBEJdOEzWmq.7qjUIPcc46sBxail_4ePgoqjobSCfFkdOZIK.CfRgelbHWB3zLtvL oFjHXvyQhSDmLYvVcRAidiaBy5pb.DvClP71N1CMcdPG5U02.l7Fe62RblDVRWEUnhStz4PYb_Ja anBgBE_gD_TvdNVfbjXHGhezgagoKYpnF0ycYqqlHF6jWKsDp_hxVYpdA76jimNaxR_TBfRp1vUW 3Ut5fvAhdHiwsjddorYqLp1AuLSo5u9fuDScvTmpmwe0L1TrlRyXSuEfsbo94Ob5QBZLGVONmQ12 T5ZgAu9M7WIY9QKJHTVZ_C9d5GoyO.ySW5Ti7CCW5_lRRDIReY5F2.hj1CGwzq08Q.4hRDZ6nhNC 2N7ALIbQ1kZw6cgHcbTPRD.y.G3Ws1Vus.h96xtNo5KwRIZCeLTmrQsSBqZwzPIQUhruI7ig7R1C z_A4K8bQjhvP5dKhPIHFoOjmNRk7lSCp76sCxuztqPeiuY4WUB5fYOhxGVDfyUxSqlqubBgqUPo5 MaJ1T1CkbcAbk8EDdiAZRriaP_mxNfObNrBfGBLDDlh3EPWzJ01aRl_2uicDsY8S12q1O.lZwlFz 71otxDUs0sdfathHEBHvDqnnm7Z7sAFnqr73sNuQaIum3bZuuEWm4Z7wEPQKUL.b6ZUVBNykpdfz w.kPKMUIMZMOOGgEl2MQ.YnutK2skxh9REancbLR8yumMrub0qClQmR3Mr7AD4El7C4F49KxAvce 7NGOPb653JbcHyO6IpCZVb79VFMU1RvHZFPCDe2p0ll1ge236Jxyh.kOvDlH03AVdwjG0QXRtYkl C8JbcwhHADeFlD.2MqiBeTVaetrHo_tRbbRrwcmWpYhabWpPsKser6EcFF8oLeFbBzpVI.616tDN y5.e2281.JTq2a5MpA3frgpdyb9ky9WF_nV6ec3.X7LDJbahmGjwrxlV9FOOA3DBQhX42ZbBMcv4 b8bOURSOU2oen8Hvsy7Hycmeikl2kv98LH3laSAUAJNqYGqdX8q17ns_jUxCeWsmb0qiNatWctM6 LVZK2DMECP8.mDmsI7pUFCqjpXeosAhFsjoXPUMOWuvDiz..sCPnUziN9vD2QVSO5J18GwlKAFJC ct93pLndcPmJ4Fnv5rlTQa0knerfSuFDKVKM2uA5WKLVZ6EsVSV3oBw-- X-Sonic-MF: X-Sonic-ID: c8ccb835-27b9-4f7b-a2f5-b718b209afcc Received: from sonic.gate.mail.ne1.yahoo.com by sonic311.consmr.mail.ir2.yahoo.com with HTTP; Sun, 16 Apr 2023 12:50:35 +0000 Received: by hermes--production-ir2-74cd8fc864-9w846 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID e1e6b4a18b1a30b9efb33afa6a04eb6c; Sun, 16 Apr 2023 12:50:34 +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 , Pavel Machek , Axel Lin , ChiYuan Huang , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Jakob Hauser Subject: [PATCH v2 9/9] dt-bindings: Add documentation for rt5033 mfd, regulator and charger Date: Sun, 16 Apr 2023 14:44:36 +0200 Message-Id: <9275af790e6e21b5cf661a2444effe4caf2be02e.1681646904.git.jahau@rocketmail.com> X-Mailer: git-send-email 2.39.2 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 --- The patch is based on linux-next (tag "next-20230413"). .../bindings/mfd/richtek,rt5033.yaml | 90 +++++++++++++++++++ .../power/supply/richtek,rt5033-charger.yaml | 76 ++++++++++++++++ .../regulator/richtek,rt5033-regulator.yaml | 24 +++++ 3 files changed, 190 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..158036a57291 --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/richtek,rt5033.yaml @@ -0,0 +1,90 @@ +# 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 { + #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-microamp = <450000>; + richtek,fast-microamp = <1000000>; + richtek,eoc-microamp = <150000>; + richtek,pre-threshold-microvolt = <3500000>; + richtek,const-microvolt = <4350000>; + extcon = <&muic>; + }; + }; + }; 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..439e0b7962f3 --- /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-microamp: + 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-microamp: + 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-microamp: + 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-microvolt: + 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-microvolt: + 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-microamp + - richtek,fast-microamp + - richtek,eoc-microamp + - richtek,pre-threshold-microvolt + - richtek,const-microvolt + +additionalProperties: false + +examples: + - | + charger { + compatible = "richtek,rt5033-charger"; + richtek,pre-microamp = <450000>; + richtek,fast-microamp = <1000000>; + richtek,eoc-microamp = <150000>; + richtek,pre-threshold-microvolt = <3500000>; + richtek,const-microvolt = <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..66c8a0692e10 --- /dev/null +++ b/Documentation/devicetree/bindings/regulator/richtek,rt5033-regulator.yaml @@ -0,0 +1,24 @@ +# 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