Message ID | 4edfef7fdf129185355d4dd2d3928d63c04bac73.1677620677.git.jahau@rocketmail.com |
---|---|
State | Superseded |
Headers | show |
Series | Add RT5033 charger device driver | expand |
On Tue, 28 Feb 2023, Jakob Hauser wrote: > 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(). Are there no present users to account for? > [1] https://media.digikey.com/pdf/Data%20Sheets/Richtek%20PDF/RT5036%20%20Preliminary.pdf > > Signed-off-by: Jakob Hauser <jahau@rocketmail.com> > --- > include/linux/mfd/rt5033-private.h | 53 ++++++++++++++++++++---------- > include/linux/mfd/rt5033.h | 2 +- > 2 files changed, 36 insertions(+),` 19 deletions(-)
Hi Lee, On 05.03.23 11:55, Lee Jones wrote: > On Tue, 28 Feb 2023, Jakob Hauser wrote: > >> 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(). > > Are there no present users to account for? At least none I'm aware of. Within the upstream kernel the rt5033_charger power_supply didn't exist so far, the patchset is about to implement it. >> [1] https://media.digikey.com/pdf/Data%20Sheets/Richtek%20PDF/RT5036%20%20Preliminary.pdf >> >> Signed-off-by: Jakob Hauser <jahau@rocketmail.com> >> --- >> include/linux/mfd/rt5033-private.h | 53 ++++++++++++++++++++---------- >> include/linux/mfd/rt5033.h | 2 +- >> 2 files changed, 36 insertions(+),` 19 deletions(-) > Kind regards, Jakob
Hi Lee, On 05.03.23 17:14, Jakob Hauser wrote: > On 05.03.23 11:55, Lee Jones wrote: >> On Tue, 28 Feb 2023, Jakob Hauser wrote: >> >>> 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(). >> >> Are there no present users to account for? > > At least none I'm aware of. Within the upstream kernel the > rt5033_charger power_supply didn't exist so far, the patchset is about > to implement it. Is there anything you want me to change or improve on this patch? >>> [1] >>> https://media.digikey.com/pdf/Data%20Sheets/Richtek%20PDF/RT5036%20%20Preliminary.pdf >>> >>> Signed-off-by: Jakob Hauser <jahau@rocketmail.com> >>> --- >>> include/linux/mfd/rt5033-private.h | 53 ++++++++++++++++++++---------- >>> include/linux/mfd/rt5033.h | 2 +- >>> 2 files changed, 36 insertions(+),` 19 deletions(-) Kind regards, Jakob
On Sun, 02 Apr 2023, Jakob Hauser wrote: > Hi Lee, > > On 05.03.23 17:14, Jakob Hauser wrote: > > On 05.03.23 11:55, Lee Jones wrote: > > > On Tue, 28 Feb 2023, Jakob Hauser wrote: > > > > > > > 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(). > > > > > > Are there no present users to account for? > > > > At least none I'm aware of. Within the upstream kernel the > > rt5033_charger power_supply didn't exist so far, the patchset is about > > to implement it. > > Is there anything you want me to change or improve on this patch? If there were I would have said. :) Please fix up the other review comments in the set and submit the next revision. > > > > [1] https://media.digikey.com/pdf/Data%20Sheets/Richtek%20PDF/RT5036%20%20Preliminary.pdf > > > > > > > > Signed-off-by: Jakob Hauser <jahau@rocketmail.com> > > > > --- > > > > include/linux/mfd/rt5033-private.h | 53 ++++++++++++++++++++---------- > > > > include/linux/mfd/rt5033.h | 2 +- > > > > 2 files changed, 36 insertions(+),` 19 deletions(-) > > Kind regards, > Jakob -- Lee Jones [李琼斯]
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; };
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> --- include/linux/mfd/rt5033-private.h | 53 ++++++++++++++++++++---------- include/linux/mfd/rt5033.h | 2 +- 2 files changed, 36 insertions(+), 19 deletions(-)