mfd: rt5033: Apply preparatory changes before adding rt5033-charger driver
authorJakob Hauser <jahau@rocketmail.com>
Mon, 15 May 2023 20:57:13 +0000 (22:57 +0200)
committerLee Jones <lee@kernel.org>
Thu, 8 Jun 2023 17:16:57 +0000 (18:16 +0100)
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 <jahau@rocketmail.com>
Signed-off-by: Lee Jones <lee@kernel.org>
Link: https://lore.kernel.org/r/31c750ae13a1c1896b51d8f0a0d9869f8b85624f.1684182964.git.jahau@rocketmail.com
include/linux/mfd/rt5033-private.h
include/linux/mfd/rt5033.h

index b6773eb..0221f80 100644 (file)
@@ -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 */
index 8f306ac..e99e2ab 100644 (file)
@@ -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;
 };