The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH] rtc: rv3028: configure backup switch mode from device tree
@ 2026-08-22  9:29 Dhaval Shiroya
  2026-08-22 13:09 ` Alexandre Belloni
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Dhaval Shiroya @ 2026-08-22  9:29 UTC (permalink / raw)
  To: alexandre.belloni; +Cc: Dhaval Shiroya, linux-rtc, linux-kernel

Enable and set the backup switch mode directly from the device tree at
probe, instead of requiring a userspace RTC_PARAM_BACKUP_SWITCH_MODE
ioctl on every unit.

Signed-off-by: Dhaval Shiroya <dhaval.shiroya@siliconsignals.io>

diff --git a/drivers/rtc/rtc-rv3028.c b/drivers/rtc/rtc-rv3028.c
index d96f6bb68850..5dde1aed76dd 100644
--- a/drivers/rtc/rtc-rv3028.c
+++ b/drivers/rtc/rtc-rv3028.c
@@ -80,6 +80,7 @@
 #define RV3028_EEBUSY_TIMEOUT		100000
 
 #define RV3028_BACKUP_TCE		BIT(5)
+#define RV3028_BACKUP_FEDE		BIT(4)
 #define RV3028_BACKUP_TCR_MASK		GENMASK(1,0)
 #define RV3028_BACKUP_BSM		GENMASK(3,2)
 
@@ -519,70 +520,6 @@ static int rv3028_set_offset(struct device *dev, long offset)
 
 }
 
-static int rv3028_param_get(struct device *dev, struct rtc_param *param)
-{
-	struct rv3028_data *rv3028 = dev_get_drvdata(dev);
-	int ret;
-	u32 value;
-
-	switch(param->param) {
-	case RTC_PARAM_BACKUP_SWITCH_MODE:
-		ret = regmap_read(rv3028->regmap, RV3028_BACKUP, &value);
-		if (ret < 0)
-			return ret;
-
-		value = FIELD_GET(RV3028_BACKUP_BSM, value);
-
-		switch(value) {
-		case RV3028_BACKUP_BSM_DSM:
-			param->uvalue = RTC_BSM_DIRECT;
-			break;
-		case RV3028_BACKUP_BSM_LSM:
-			param->uvalue = RTC_BSM_LEVEL;
-			break;
-		default:
-			param->uvalue = RTC_BSM_DISABLED;
-		}
-		break;
-
-	default:
-		return -EINVAL;
-	}
-
-	return 0;
-}
-
-static int rv3028_param_set(struct device *dev, struct rtc_param *param)
-{
-	struct rv3028_data *rv3028 = dev_get_drvdata(dev);
-	u8 mode;
-
-	switch(param->param) {
-	case RTC_PARAM_BACKUP_SWITCH_MODE:
-		switch (param->uvalue) {
-		case RTC_BSM_DISABLED:
-			mode = 0;
-			break;
-		case RTC_BSM_DIRECT:
-			mode = RV3028_BACKUP_BSM_DSM;
-			break;
-		case RTC_BSM_LEVEL:
-			mode = RV3028_BACKUP_BSM_LSM;
-			break;
-		default:
-			return -EINVAL;
-		}
-
-		return rv3028_update_cfg(rv3028, RV3028_BACKUP, RV3028_BACKUP_BSM,
-					 FIELD_PREP(RV3028_BACKUP_BSM, mode));
-
-	default:
-		return -EINVAL;
-	}
-
-	return 0;
-}
-
 static int rv3028_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
 {
 	struct rv3028_data *rv3028 = dev_get_drvdata(dev);
@@ -852,8 +789,6 @@ static const struct rtc_class_ops rv3028_rtc_ops = {
 	.read_offset = rv3028_read_offset,
 	.set_offset = rv3028_set_offset,
 	.ioctl = rv3028_ioctl,
-	.param_get = rv3028_param_get,
-	.param_set = rv3028_param_set,
 };
 
 static const struct regmap_config regmap_config = {
@@ -920,6 +855,65 @@ static u8 rv3028_set_trickle_charger(struct rv3028_data *rv3028,
 	return ret;
 }
 
+/*
+ * Configure backup switchover mode from device tree.
+ *   0 = disabled
+ *   1 = DSM (Direct Switching Mode)  - switch when VDD < VBACKUP
+ *   3 = LSM (Level Switching Mode)   - switch when VDD < 2.0V
+ */
+static int rv3028_set_bsm_from_dt(struct rv3028_data *rv3028,
+				  struct i2c_client *client)
+{
+	u32 val_old, bsm_dt, bsm_bits;
+	int ret;
+
+	if (device_property_read_u32(&client->dev, "backup-switch-mode",
+				     &bsm_dt))
+		return 0;
+
+	/* Validate and convert DT value to register bits */
+	switch (bsm_dt) {
+	case 0:
+		bsm_bits = 0;
+		break;
+	case 1:
+		bsm_bits = FIELD_PREP(RV3028_BACKUP_BSM, RV3028_BACKUP_BSM_DSM);
+		break;
+	case 3:
+		bsm_bits = FIELD_PREP(RV3028_BACKUP_BSM, RV3028_BACKUP_BSM_LSM);
+		break;
+	default:
+		dev_warn(&client->dev,
+			 "invalid backup-switch-mode %u (use 0, 1, or 3)\n",
+			 bsm_dt);
+		return 0;
+	}
+
+	/* Read current BACKUP register */
+	ret = regmap_read(rv3028->regmap, RV3028_BACKUP, &val_old);
+	if (ret < 0)
+		return ret;
+
+	/* Check if BSM and FEDE already match desired values */
+	if ((val_old & (RV3028_BACKUP_BSM | RV3028_BACKUP_FEDE)) ==
+	    (bsm_bits | RV3028_BACKUP_FEDE)) {
+		dev_dbg(&client->dev,
+			"backup switch mode already set to %u\n", bsm_dt);
+		return 0;
+	}
+
+	dev_info(&client->dev,
+		 "setting backup switch mode to %u (reg 0x37: 0x%02x -> 0x%02x)\n",
+		 bsm_dt, val_old,
+		 (val_old & ~(RV3028_BACKUP_BSM | RV3028_BACKUP_FEDE)) |
+		 bsm_bits | RV3028_BACKUP_FEDE);
+
+	/* Set BSM and always enable FEDE as recommended by datasheet */
+	return rv3028_update_cfg(rv3028, RV3028_BACKUP,
+				 RV3028_BACKUP_BSM | RV3028_BACKUP_FEDE,
+				 bsm_bits | RV3028_BACKUP_FEDE);
+}
+
 static int rv3028_probe(struct i2c_client *client)
 {
 	struct rv3028_data *rv3028;
@@ -1005,11 +999,14 @@ static int rv3028_probe(struct i2c_client *client)
 	if (ret)
 		return ret;
 
-	ret = rtc_add_group(rv3028->rtc, &rv3028_attr_group);
+	/* Configure backup switchover mode from device tree */
+	ret = rv3028_set_bsm_from_dt(rv3028, client);
 	if (ret)
 		return ret;
 
-	set_bit(RTC_FEATURE_BACKUP_SWITCH_MODE, rv3028->rtc->features);
+	ret = rtc_add_group(rv3028->rtc, &rv3028_attr_group);
+	if (ret)
+		return ret;
 
 	rv3028->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
 	rv3028->rtc->range_max = RTC_TIMESTAMP_END_2099;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] rtc: rv3028: configure backup switch mode from device tree
  2026-08-22  9:29 [PATCH] rtc: rv3028: configure backup switch mode from device tree Dhaval Shiroya
@ 2026-08-22 13:09 ` Alexandre Belloni
  2026-08-24 23:05 ` kernel test robot
  2026-08-25  1:34 ` kernel test robot
  2 siblings, 0 replies; 4+ messages in thread
From: Alexandre Belloni @ 2026-08-22 13:09 UTC (permalink / raw)
  To: Dhaval Shiroya; +Cc: linux-rtc, linux-kernel

On 22/08/2026 14:59:11+0530, Dhaval Shiroya wrote:
> Enable and set the backup switch mode directly from the device tree at
> probe, instead of requiring a userspace RTC_PARAM_BACKUP_SWITCH_MODE
> ioctl on every unit.
> 

No, just use the ioctl.

> Signed-off-by: Dhaval Shiroya <dhaval.shiroya@siliconsignals.io>
> 
> diff --git a/drivers/rtc/rtc-rv3028.c b/drivers/rtc/rtc-rv3028.c
> index d96f6bb68850..5dde1aed76dd 100644
> --- a/drivers/rtc/rtc-rv3028.c
> +++ b/drivers/rtc/rtc-rv3028.c
> @@ -80,6 +80,7 @@
>  #define RV3028_EEBUSY_TIMEOUT		100000
>  
>  #define RV3028_BACKUP_TCE		BIT(5)
> +#define RV3028_BACKUP_FEDE		BIT(4)
>  #define RV3028_BACKUP_TCR_MASK		GENMASK(1,0)
>  #define RV3028_BACKUP_BSM		GENMASK(3,2)
>  
> @@ -519,70 +520,6 @@ static int rv3028_set_offset(struct device *dev, long offset)
>  
>  }
>  
> -static int rv3028_param_get(struct device *dev, struct rtc_param *param)
> -{
> -	struct rv3028_data *rv3028 = dev_get_drvdata(dev);
> -	int ret;
> -	u32 value;
> -
> -	switch(param->param) {
> -	case RTC_PARAM_BACKUP_SWITCH_MODE:
> -		ret = regmap_read(rv3028->regmap, RV3028_BACKUP, &value);
> -		if (ret < 0)
> -			return ret;
> -
> -		value = FIELD_GET(RV3028_BACKUP_BSM, value);
> -
> -		switch(value) {
> -		case RV3028_BACKUP_BSM_DSM:
> -			param->uvalue = RTC_BSM_DIRECT;
> -			break;
> -		case RV3028_BACKUP_BSM_LSM:
> -			param->uvalue = RTC_BSM_LEVEL;
> -			break;
> -		default:
> -			param->uvalue = RTC_BSM_DISABLED;
> -		}
> -		break;
> -
> -	default:
> -		return -EINVAL;
> -	}
> -
> -	return 0;
> -}
> -
> -static int rv3028_param_set(struct device *dev, struct rtc_param *param)
> -{
> -	struct rv3028_data *rv3028 = dev_get_drvdata(dev);
> -	u8 mode;
> -
> -	switch(param->param) {
> -	case RTC_PARAM_BACKUP_SWITCH_MODE:
> -		switch (param->uvalue) {
> -		case RTC_BSM_DISABLED:
> -			mode = 0;
> -			break;
> -		case RTC_BSM_DIRECT:
> -			mode = RV3028_BACKUP_BSM_DSM;
> -			break;
> -		case RTC_BSM_LEVEL:
> -			mode = RV3028_BACKUP_BSM_LSM;
> -			break;
> -		default:
> -			return -EINVAL;
> -		}
> -
> -		return rv3028_update_cfg(rv3028, RV3028_BACKUP, RV3028_BACKUP_BSM,
> -					 FIELD_PREP(RV3028_BACKUP_BSM, mode));
> -
> -	default:
> -		return -EINVAL;
> -	}
> -
> -	return 0;
> -}
> -
>  static int rv3028_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
>  {
>  	struct rv3028_data *rv3028 = dev_get_drvdata(dev);
> @@ -852,8 +789,6 @@ static const struct rtc_class_ops rv3028_rtc_ops = {
>  	.read_offset = rv3028_read_offset,
>  	.set_offset = rv3028_set_offset,
>  	.ioctl = rv3028_ioctl,
> -	.param_get = rv3028_param_get,
> -	.param_set = rv3028_param_set,
>  };
>  
>  static const struct regmap_config regmap_config = {
> @@ -920,6 +855,65 @@ static u8 rv3028_set_trickle_charger(struct rv3028_data *rv3028,
>  	return ret;
>  }
>  
> +/*
> + * Configure backup switchover mode from device tree.
> + *   0 = disabled
> + *   1 = DSM (Direct Switching Mode)  - switch when VDD < VBACKUP
> + *   3 = LSM (Level Switching Mode)   - switch when VDD < 2.0V
> + */
> +static int rv3028_set_bsm_from_dt(struct rv3028_data *rv3028,
> +				  struct i2c_client *client)
> +{
> +	u32 val_old, bsm_dt, bsm_bits;
> +	int ret;
> +
> +	if (device_property_read_u32(&client->dev, "backup-switch-mode",
> +				     &bsm_dt))
> +		return 0;
> +
> +	/* Validate and convert DT value to register bits */
> +	switch (bsm_dt) {
> +	case 0:
> +		bsm_bits = 0;
> +		break;
> +	case 1:
> +		bsm_bits = FIELD_PREP(RV3028_BACKUP_BSM, RV3028_BACKUP_BSM_DSM);
> +		break;
> +	case 3:
> +		bsm_bits = FIELD_PREP(RV3028_BACKUP_BSM, RV3028_BACKUP_BSM_LSM);
> +		break;
> +	default:
> +		dev_warn(&client->dev,
> +			 "invalid backup-switch-mode %u (use 0, 1, or 3)\n",
> +			 bsm_dt);
> +		return 0;
> +	}
> +
> +	/* Read current BACKUP register */
> +	ret = regmap_read(rv3028->regmap, RV3028_BACKUP, &val_old);
> +	if (ret < 0)
> +		return ret;
> +
> +	/* Check if BSM and FEDE already match desired values */
> +	if ((val_old & (RV3028_BACKUP_BSM | RV3028_BACKUP_FEDE)) ==
> +	    (bsm_bits | RV3028_BACKUP_FEDE)) {
> +		dev_dbg(&client->dev,
> +			"backup switch mode already set to %u\n", bsm_dt);
> +		return 0;
> +	}
> +
> +	dev_info(&client->dev,
> +		 "setting backup switch mode to %u (reg 0x37: 0x%02x -> 0x%02x)\n",
> +		 bsm_dt, val_old,
> +		 (val_old & ~(RV3028_BACKUP_BSM | RV3028_BACKUP_FEDE)) |
> +		 bsm_bits | RV3028_BACKUP_FEDE);
> +
> +	/* Set BSM and always enable FEDE as recommended by datasheet */
> +	return rv3028_update_cfg(rv3028, RV3028_BACKUP,
> +				 RV3028_BACKUP_BSM | RV3028_BACKUP_FEDE,
> +				 bsm_bits | RV3028_BACKUP_FEDE);
> +}
> +
>  static int rv3028_probe(struct i2c_client *client)
>  {
>  	struct rv3028_data *rv3028;
> @@ -1005,11 +999,14 @@ static int rv3028_probe(struct i2c_client *client)
>  	if (ret)
>  		return ret;
>  
> -	ret = rtc_add_group(rv3028->rtc, &rv3028_attr_group);
> +	/* Configure backup switchover mode from device tree */
> +	ret = rv3028_set_bsm_from_dt(rv3028, client);
>  	if (ret)
>  		return ret;
>  
> -	set_bit(RTC_FEATURE_BACKUP_SWITCH_MODE, rv3028->rtc->features);
> +	ret = rtc_add_group(rv3028->rtc, &rv3028_attr_group);
> +	if (ret)
> +		return ret;
>  
>  	rv3028->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
>  	rv3028->rtc->range_max = RTC_TIMESTAMP_END_2099;
> -- 
> 2.34.1
> 

-- 
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] rtc: rv3028: configure backup switch mode from device tree
  2026-08-22  9:29 [PATCH] rtc: rv3028: configure backup switch mode from device tree Dhaval Shiroya
  2026-08-22 13:09 ` Alexandre Belloni
@ 2026-08-24 23:05 ` kernel test robot
  2026-08-25  1:34 ` kernel test robot
  2 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2026-08-24 23:05 UTC (permalink / raw)
  To: Dhaval Shiroya, alexandre.belloni
  Cc: llvm, oe-kbuild-all, Dhaval Shiroya, linux-rtc, linux-kernel

Hi Dhaval,

kernel test robot noticed the following build warnings:

[auto build test WARNING on abelloni/rtc-next]
[also build test WARNING on linus/master v7.2 next-20260821]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Dhaval-Shiroya/rtc-rv3028-configure-backup-switch-mode-from-device-tree/20260822-145911
base:   https://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git rtc-next
patch link:    https://lore.kernel.org/r/20260822092911.318342-1-dhaval.shiroya%40siliconsignals.io
patch subject: [PATCH] rtc: rv3028: configure backup switch mode from device tree
config: arm64-randconfig-002-20260825 (https://download.01.org/0day-ci/archive/20260825/202608250645.zcZhAAz1-lkp@intel.com/config)
compiler: clang version 24.0.0git (https://github.com/llvm/llvm-project 935bfc708590c60147a79c7df145bb6e68b1d388)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260825/202608250645.zcZhAAz1-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202608250645.zcZhAAz1-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/rtc/rtc-rv3028.c:908:4: warning: format specifies type 'unsigned int' but the argument has type 'unsigned long' [-Wformat]
     906 |                  "setting backup switch mode to %u (reg 0x37: 0x%02x -> 0x%02x)\n",
         |                                                                           ~~~~
         |                                                                           %02lx
     907 |                  bsm_dt, val_old,
     908 |                  (val_old & ~(RV3028_BACKUP_BSM | RV3028_BACKUP_FEDE)) |
         |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     909 |                  bsm_bits | RV3028_BACKUP_FEDE);
         |                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/dev_printk.h:160:67: note: expanded from macro 'dev_info'
     160 |         dev_printk_index_wrap(_dev_info, KERN_INFO, dev, dev_fmt(fmt), ##__VA_ARGS__)
         |                                                                  ~~~     ^~~~~~~~~~~
   include/linux/dev_printk.h:110:23: note: expanded from macro 'dev_printk_index_wrap'
     110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
         |                              ~~~    ^~~~~~~~~~~
   1 warning generated.


vim +908 drivers/rtc/rtc-rv3028.c

   857	
   858	/*
   859	 * Configure backup switchover mode from device tree.
   860	 *   0 = disabled
   861	 *   1 = DSM (Direct Switching Mode)  - switch when VDD < VBACKUP
   862	 *   3 = LSM (Level Switching Mode)   - switch when VDD < 2.0V
   863	 */
   864	static int rv3028_set_bsm_from_dt(struct rv3028_data *rv3028,
   865					  struct i2c_client *client)
   866	{
   867		u32 val_old, bsm_dt, bsm_bits;
   868		int ret;
   869	
   870		if (device_property_read_u32(&client->dev, "backup-switch-mode",
   871					     &bsm_dt))
   872			return 0;
   873	
   874		/* Validate and convert DT value to register bits */
   875		switch (bsm_dt) {
   876		case 0:
   877			bsm_bits = 0;
   878			break;
   879		case 1:
   880			bsm_bits = FIELD_PREP(RV3028_BACKUP_BSM, RV3028_BACKUP_BSM_DSM);
   881			break;
   882		case 3:
   883			bsm_bits = FIELD_PREP(RV3028_BACKUP_BSM, RV3028_BACKUP_BSM_LSM);
   884			break;
   885		default:
   886			dev_warn(&client->dev,
   887				 "invalid backup-switch-mode %u (use 0, 1, or 3)\n",
   888				 bsm_dt);
   889			return 0;
   890		}
   891	
   892		/* Read current BACKUP register */
   893		ret = regmap_read(rv3028->regmap, RV3028_BACKUP, &val_old);
   894		if (ret < 0)
   895			return ret;
   896	
   897		/* Check if BSM and FEDE already match desired values */
   898		if ((val_old & (RV3028_BACKUP_BSM | RV3028_BACKUP_FEDE)) ==
   899		    (bsm_bits | RV3028_BACKUP_FEDE)) {
   900			dev_dbg(&client->dev,
   901				"backup switch mode already set to %u\n", bsm_dt);
   902			return 0;
   903		}
   904	
   905		dev_info(&client->dev,
   906			 "setting backup switch mode to %u (reg 0x37: 0x%02x -> 0x%02x)\n",
   907			 bsm_dt, val_old,
 > 908			 (val_old & ~(RV3028_BACKUP_BSM | RV3028_BACKUP_FEDE)) |
   909			 bsm_bits | RV3028_BACKUP_FEDE);
   910	
   911		/* Set BSM and always enable FEDE as recommended by datasheet */
   912		return rv3028_update_cfg(rv3028, RV3028_BACKUP,
   913					 RV3028_BACKUP_BSM | RV3028_BACKUP_FEDE,
   914					 bsm_bits | RV3028_BACKUP_FEDE);
   915	}
   916	

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] rtc: rv3028: configure backup switch mode from device tree
  2026-08-22  9:29 [PATCH] rtc: rv3028: configure backup switch mode from device tree Dhaval Shiroya
  2026-08-22 13:09 ` Alexandre Belloni
  2026-08-24 23:05 ` kernel test robot
@ 2026-08-25  1:34 ` kernel test robot
  2 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2026-08-25  1:34 UTC (permalink / raw)
  To: Dhaval Shiroya, alexandre.belloni
  Cc: oe-kbuild-all, Dhaval Shiroya, linux-rtc, linux-kernel

Hi Dhaval,

kernel test robot noticed the following build warnings:

[auto build test WARNING on abelloni/rtc-next]
[also build test WARNING on linus/master v7.2 next-20260821]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Dhaval-Shiroya/rtc-rv3028-configure-backup-switch-mode-from-device-tree/20260822-145911
base:   https://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git rtc-next
patch link:    https://lore.kernel.org/r/20260822092911.318342-1-dhaval.shiroya%40siliconsignals.io
patch subject: [PATCH] rtc: rv3028: configure backup switch mode from device tree
config: nios2-allmodconfig (https://download.01.org/0day-ci/archive/20260825/202608250920.y0Rb4vg9-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 11.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260825/202608250920.y0Rb4vg9-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202608250920.y0Rb4vg9-lkp@intel.com/

All warnings (new ones prefixed by >>):

   In file included from include/linux/device.h:15,
                    from include/linux/acpi.h:15,
                    from include/linux/i2c.h:13,
                    from drivers/rtc/rtc-rv3028.c:15:
   drivers/rtc/rtc-rv3028.c: In function 'rv3028_set_bsm_from_dt':
>> drivers/rtc/rtc-rv3028.c:906:18: warning: format '%x' expects argument of type 'unsigned int', but argument 5 has type 'long unsigned int' [-Wformat=]
     906 |                  "setting backup switch mode to %u (reg 0x37: 0x%02x -> 0x%02x)\n",
         |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/dev_printk.h:110:30: note: in definition of macro 'dev_printk_index_wrap'
     110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
         |                              ^~~
   include/linux/dev_printk.h:160:58: note: in expansion of macro 'dev_fmt'
     160 |         dev_printk_index_wrap(_dev_info, KERN_INFO, dev, dev_fmt(fmt), ##__VA_ARGS__)
         |                                                          ^~~~~~~
   drivers/rtc/rtc-rv3028.c:905:9: note: in expansion of macro 'dev_info'
     905 |         dev_info(&client->dev,
         |         ^~~~~~~~
   drivers/rtc/rtc-rv3028.c:906:78: note: format string is defined here
     906 |                  "setting backup switch mode to %u (reg 0x37: 0x%02x -> 0x%02x)\n",
         |                                                                           ~~~^
         |                                                                              |
         |                                                                              unsigned int
         |                                                                           %02lx


vim +906 drivers/rtc/rtc-rv3028.c

   857	
   858	/*
   859	 * Configure backup switchover mode from device tree.
   860	 *   0 = disabled
   861	 *   1 = DSM (Direct Switching Mode)  - switch when VDD < VBACKUP
   862	 *   3 = LSM (Level Switching Mode)   - switch when VDD < 2.0V
   863	 */
   864	static int rv3028_set_bsm_from_dt(struct rv3028_data *rv3028,
   865					  struct i2c_client *client)
   866	{
   867		u32 val_old, bsm_dt, bsm_bits;
   868		int ret;
   869	
   870		if (device_property_read_u32(&client->dev, "backup-switch-mode",
   871					     &bsm_dt))
   872			return 0;
   873	
   874		/* Validate and convert DT value to register bits */
   875		switch (bsm_dt) {
   876		case 0:
   877			bsm_bits = 0;
   878			break;
   879		case 1:
   880			bsm_bits = FIELD_PREP(RV3028_BACKUP_BSM, RV3028_BACKUP_BSM_DSM);
   881			break;
   882		case 3:
   883			bsm_bits = FIELD_PREP(RV3028_BACKUP_BSM, RV3028_BACKUP_BSM_LSM);
   884			break;
   885		default:
   886			dev_warn(&client->dev,
   887				 "invalid backup-switch-mode %u (use 0, 1, or 3)\n",
   888				 bsm_dt);
   889			return 0;
   890		}
   891	
   892		/* Read current BACKUP register */
   893		ret = regmap_read(rv3028->regmap, RV3028_BACKUP, &val_old);
   894		if (ret < 0)
   895			return ret;
   896	
   897		/* Check if BSM and FEDE already match desired values */
   898		if ((val_old & (RV3028_BACKUP_BSM | RV3028_BACKUP_FEDE)) ==
   899		    (bsm_bits | RV3028_BACKUP_FEDE)) {
   900			dev_dbg(&client->dev,
   901				"backup switch mode already set to %u\n", bsm_dt);
   902			return 0;
   903		}
   904	
   905		dev_info(&client->dev,
 > 906			 "setting backup switch mode to %u (reg 0x37: 0x%02x -> 0x%02x)\n",
   907			 bsm_dt, val_old,
   908			 (val_old & ~(RV3028_BACKUP_BSM | RV3028_BACKUP_FEDE)) |
   909			 bsm_bits | RV3028_BACKUP_FEDE);
   910	
   911		/* Set BSM and always enable FEDE as recommended by datasheet */
   912		return rv3028_update_cfg(rv3028, RV3028_BACKUP,
   913					 RV3028_BACKUP_BSM | RV3028_BACKUP_FEDE,
   914					 bsm_bits | RV3028_BACKUP_FEDE);
   915	}
   916	

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-08-25  1:35 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-22  9:29 [PATCH] rtc: rv3028: configure backup switch mode from device tree Dhaval Shiroya
2026-08-22 13:09 ` Alexandre Belloni
2026-08-24 23:05 ` kernel test robot
2026-08-25  1:34 ` kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox