Re: [PATCH 2/4] rtc: pcf2127: add pcf2127_pwrmng_get/set

Stefan Kerkmann <[email protected]>
Newsgroups org.kernel.vger.linux-rtc,org.kernel.vger.linux-kernel
Message-ID <[email protected]>

On 3/11/26 21:02, Hugo Villeneuve wrote:
> From: Hugo Villeneuve <[email protected]>
> 
> Add common functions to get/set the pwrmng field in the CTRL3 register,
> used by pcf2127_param_get() and pcf2127_param_set().
> 
> Signed-off-by: Hugo Villeneuve <[email protected]>
> ---
> These functions will also be used in the following patch
> to add battery low detection.
> ---
>   drivers/rtc/rtc-pcf2127.c | 42 +++++++++++++++++++++++++++------------
>   1 file changed, 29 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/rtc/rtc-pcf2127.c b/drivers/rtc/rtc-pcf2127.c
> index e2e9746027348..0605295026564 100644
> --- a/drivers/rtc/rtc-pcf2127.c
> +++ b/drivers/rtc/rtc-pcf2127.c
> @@ -213,6 +213,30 @@ struct pcf2127 {
>   	bool ts_valid[PCF2127_MAX_TS_SUPPORTED];  /* Timestamp valid indication. */
>   };
>   
> +static int pcf2127_pwrmng_get(struct device *dev, u8 *pwrmng)
> +{
> +	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
> +	u32 value;
> +	int ret;
> +
> +	ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL3, &value);
> +	if (ret < 0)
> +		return ret;
> +
> +	*pwrmng = FIELD_GET(PCF2127_CTRL3_PM, value);
> +
> +	return 0;
> +}
> +
> +static int pcf2127_pwrmng_set(struct device *dev, u8 pwrmng)
> +{
> +	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
> +
> +	return regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL3,
> +				  PCF2127_CTRL3_PM,
> +				  FIELD_PREP(PCF2127_CTRL3_PM, pwrmng));
> +}
> +
>   /*
>    * In the routines that deal directly with the pcf2127 hardware, we use
>    * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch.
> @@ -337,18 +361,15 @@ static int pcf2127_rtc_set_time(struct device *dev, struct rtc_time *tm)
>   
>   static int pcf2127_param_get(struct device *dev, struct rtc_param *param)
>   {
> -	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
> -	u32 value;
> +	u8 value;
>   	int ret;
>   
>   	switch (param->param) {
>   	case RTC_PARAM_BACKUP_SWITCH_MODE:
> -		ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL3, &value);
> +		ret = pcf2127_pwrmng_get(dev, &value);
>   		if (ret < 0)
>   			return ret;
>   
> -		value = FIELD_GET(PCF2127_CTRL3_PM, value);
> -
>   		if (value < 0x3)
>   			param->uvalue = RTC_BSM_LEVEL;
>   		else if (value < 0x6)
> @@ -367,19 +388,16 @@ static int pcf2127_param_get(struct device *dev, struct rtc_param *param)
>   
>   static int pcf2127_param_set(struct device *dev, struct rtc_param *param)
>   {
> -	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
>   	u8 mode = 0;
> -	u32 value;
> +	u8 value;
>   	int ret;
>   
>   	switch (param->param) {
>   	case RTC_PARAM_BACKUP_SWITCH_MODE:
> -		ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL3, &value);
> +		ret = pcf2127_pwrmng_get(dev, &value);
>   		if (ret < 0)
>   			return ret;
>   
> -		value = FIELD_GET(PCF2127_CTRL3_PM, value);
> -
>   		if (value > 5)
>   			value -= 5;
>   		else if (value > 2)
> @@ -400,9 +418,7 @@ static int pcf2127_param_set(struct device *dev, struct rtc_param *param)
>   			return -EINVAL;
>   		}
>   
> -		return regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL3,
> -					  PCF2127_CTRL3_PM,
> -					  FIELD_PREP(PCF2127_CTRL3_PM, mode + value));
> +		return pcf2127_pwrmng_set(dev, mode + value);
>   
>   	default:
>   		return -EINVAL;

Reviewed-by: Stefan Kerkmann <[email protected]>

-- 
Pengutronix e.K.                       | Stefan Kerkmann             |
Steuerwalder Str. 21                   | https://www.pengutronix.de/ |
31137 Hildesheim, Germany              | Phone: +49-5121-206917-128  |
Amtsgericht Hildesheim, HRA 2686       | Fax:   +49-5121-206917-9    |
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.