lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <202312170304.CFHNHgBa-lkp@intel.com>
Date: Sun, 17 Dec 2023 04:10:42 +0800
From: kernel test robot <lkp@...el.com>
To: yang.guang5@....com.cn, lee@...nel.org
Cc: llvm@...ts.linux.dev, oe-kbuild-all@...ts.linux.dev,
	jiang.xuexin@....com.cn, chen.haonan2@....com.cn,
	cgel.zte@...il.com, patches@...nsource.cirrus.com,
	linux-kernel@...r.kernel.org
Subject: Re: [PATCH linux-next] mfd: wm8994: Switch to use dev_err_probe()
 helper

Hi,

kernel test robot noticed the following build warnings:

[auto build test WARNING on next-20231214]

url:    https://github.com/intel-lab-lkp/linux/commits/yang-guang5-zte-com-cn/mfd-wm8994-Switch-to-use-dev_err_probe-helper/20231214-200907
base:   next-20231214
patch link:    https://lore.kernel.org/r/202312142004599156569%40zte.com.cn
patch subject: [PATCH linux-next] mfd: wm8994: Switch to use dev_err_probe() helper
config: i386-buildonly-randconfig-003-20231217 (https://download.01.org/0day-ci/archive/20231217/202312170304.CFHNHgBa-lkp@intel.com/config)
compiler: clang version 16.0.4 (https://github.com/llvm/llvm-project.git ae42196bc493ffe877a7e3dff8be32035dea4d07)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231217/202312170304.CFHNHgBa-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@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202312170304.CFHNHgBa-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/mfd/wm8994-core.c:382:61: warning: more '%' conversions than data arguments [-Wformat-insufficient-args]
                   dev_err_probe(wm8994->dev, ret, "Failed to get supplies: %d\n");
                                                                            ~^
   1 warning generated.


vim +382 drivers/mfd/wm8994-core.c

   299	
   300	/*
   301	 * Instantiate the generic non-control parts of the device.
   302	 */
   303	static int wm8994_device_init(struct wm8994 *wm8994, int irq)
   304	{
   305		struct wm8994_pdata *pdata;
   306		struct regmap_config *regmap_config;
   307		const struct reg_sequence *regmap_patch = NULL;
   308		const char *devname;
   309		int ret, i, patch_regs = 0;
   310		int pulls = 0;
   311	
   312		if (dev_get_platdata(wm8994->dev)) {
   313			pdata = dev_get_platdata(wm8994->dev);
   314			wm8994->pdata = *pdata;
   315		}
   316		pdata = &wm8994->pdata;
   317	
   318		ret = wm8994_set_pdata_from_of(wm8994);
   319		if (ret != 0)
   320			return ret;
   321	
   322		/* Add the on-chip regulators first for bootstrapping */
   323		ret = mfd_add_devices(wm8994->dev, 0,
   324				      wm8994_regulator_devs,
   325				      ARRAY_SIZE(wm8994_regulator_devs),
   326				      NULL, 0, NULL);
   327		if (ret != 0) {
   328			dev_err(wm8994->dev, "Failed to add children: %d\n", ret);
   329			goto err;
   330		}
   331	
   332		switch (wm8994->type) {
   333		case WM1811:
   334			wm8994->num_supplies = ARRAY_SIZE(wm1811_main_supplies);
   335			break;
   336		case WM8994:
   337			wm8994->num_supplies = ARRAY_SIZE(wm8994_main_supplies);
   338			break;
   339		case WM8958:
   340			wm8994->num_supplies = ARRAY_SIZE(wm8958_main_supplies);
   341			break;
   342		default:
   343			BUG();
   344			goto err;
   345		}
   346	
   347		wm8994->supplies = devm_kcalloc(wm8994->dev,
   348						wm8994->num_supplies,
   349						sizeof(struct regulator_bulk_data),
   350						GFP_KERNEL);
   351		if (!wm8994->supplies) {
   352			ret = -ENOMEM;
   353			goto err;
   354		}
   355	
   356		switch (wm8994->type) {
   357		case WM1811:
   358			for (i = 0; i < ARRAY_SIZE(wm1811_main_supplies); i++)
   359				wm8994->supplies[i].supply = wm1811_main_supplies[i];
   360			break;
   361		case WM8994:
   362			for (i = 0; i < ARRAY_SIZE(wm8994_main_supplies); i++)
   363				wm8994->supplies[i].supply = wm8994_main_supplies[i];
   364			break;
   365		case WM8958:
   366			for (i = 0; i < ARRAY_SIZE(wm8958_main_supplies); i++)
   367				wm8994->supplies[i].supply = wm8958_main_supplies[i];
   368			break;
   369		default:
   370			BUG();
   371			goto err;
   372		}
   373	
   374		/*
   375		 * Can't use devres helper here as some of the supplies are provided by
   376		 * wm8994->dev's children (regulators) and those regulators are
   377		 * unregistered by the devres core before the supplies are freed.
   378		 */
   379		ret = regulator_bulk_get(wm8994->dev, wm8994->num_supplies,
   380					 wm8994->supplies);
   381		if (ret != 0) {
 > 382			dev_err_probe(wm8994->dev, ret, "Failed to get supplies: %d\n");
   383			goto err;
   384		}
   385	
   386		ret = regulator_bulk_enable(wm8994->num_supplies, wm8994->supplies);
   387		if (ret != 0) {
   388			dev_err(wm8994->dev, "Failed to enable supplies: %d\n", ret);
   389			goto err_regulator_free;
   390		}
   391	
   392		ret = wm8994_reg_read(wm8994, WM8994_SOFTWARE_RESET);
   393		if (ret < 0) {
   394			dev_err(wm8994->dev, "Failed to read ID register\n");
   395			goto err_enable;
   396		}
   397		switch (ret) {
   398		case 0x1811:
   399			devname = "WM1811";
   400			if (wm8994->type != WM1811)
   401				dev_warn(wm8994->dev, "Device registered as type %d\n",
   402					 wm8994->type);
   403			wm8994->type = WM1811;
   404			break;
   405		case 0x8994:
   406			devname = "WM8994";
   407			if (wm8994->type != WM8994)
   408				dev_warn(wm8994->dev, "Device registered as type %d\n",
   409					 wm8994->type);
   410			wm8994->type = WM8994;
   411			break;
   412		case 0x8958:
   413			devname = "WM8958";
   414			if (wm8994->type != WM8958)
   415				dev_warn(wm8994->dev, "Device registered as type %d\n",
   416					 wm8994->type);
   417			wm8994->type = WM8958;
   418			break;
   419		default:
   420			dev_err(wm8994->dev, "Device is not a WM8994, ID is %x\n",
   421				ret);
   422			ret = -EINVAL;
   423			goto err_enable;
   424		}
   425	
   426		ret = wm8994_reg_read(wm8994, WM8994_CHIP_REVISION);
   427		if (ret < 0) {
   428			dev_err(wm8994->dev, "Failed to read revision register: %d\n",
   429				ret);
   430			goto err_enable;
   431		}
   432		wm8994->revision = ret & WM8994_CHIP_REV_MASK;
   433		wm8994->cust_id = (ret & WM8994_CUST_ID_MASK) >> WM8994_CUST_ID_SHIFT;
   434	
   435		switch (wm8994->type) {
   436		case WM8994:
   437			switch (wm8994->revision) {
   438			case 0:
   439			case 1:
   440				dev_warn(wm8994->dev,
   441					 "revision %c not fully supported\n",
   442					 'A' + wm8994->revision);
   443				break;
   444			case 2:
   445			case 3:
   446			default:
   447				regmap_patch = wm8994_revc_patch;
   448				patch_regs = ARRAY_SIZE(wm8994_revc_patch);
   449				break;
   450			}
   451			break;
   452	
   453		case WM8958:
   454			switch (wm8994->revision) {
   455			case 0:
   456				regmap_patch = wm8958_reva_patch;
   457				patch_regs = ARRAY_SIZE(wm8958_reva_patch);
   458				break;
   459			default:
   460				break;
   461			}
   462			break;
   463	
   464		case WM1811:
   465			/* Revision C did not change the relevant layer */
   466			if (wm8994->revision > 1)
   467				wm8994->revision++;
   468	
   469			regmap_patch = wm1811_reva_patch;
   470			patch_regs = ARRAY_SIZE(wm1811_reva_patch);
   471			break;
   472	
   473		default:
   474			break;
   475		}
   476	
   477		dev_info(wm8994->dev, "%s revision %c CUST_ID %02x\n", devname,
   478			 'A' + wm8994->revision, wm8994->cust_id);
   479	
   480		switch (wm8994->type) {
   481		case WM1811:
   482			regmap_config = &wm1811_regmap_config;
   483			break;
   484		case WM8994:
   485			regmap_config = &wm8994_regmap_config;
   486			break;
   487		case WM8958:
   488			regmap_config = &wm8958_regmap_config;
   489			break;
   490		default:
   491			dev_err(wm8994->dev, "Unknown device type %d\n", wm8994->type);
   492			ret = -EINVAL;
   493			goto err_enable;
   494		}
   495	
   496		ret = regmap_reinit_cache(wm8994->regmap, regmap_config);
   497		if (ret != 0) {
   498			dev_err(wm8994->dev, "Failed to reinit register cache: %d\n",
   499				ret);
   500			goto err_enable;
   501		}
   502	
   503		/* Explicitly put the device into reset in case regulators
   504		 * don't get disabled in order to ensure we know the device
   505		 * state.
   506		 */
   507		ret = wm8994_reg_write(wm8994, WM8994_SOFTWARE_RESET,
   508				       wm8994_reg_read(wm8994, WM8994_SOFTWARE_RESET));
   509		if (ret != 0) {
   510			dev_err(wm8994->dev, "Failed to reset device: %d\n", ret);
   511			goto err_enable;
   512		}
   513	
   514		if (regmap_patch) {
   515			ret = regmap_register_patch(wm8994->regmap, regmap_patch,
   516						    patch_regs);
   517			if (ret != 0) {
   518				dev_err(wm8994->dev, "Failed to register patch: %d\n",
   519					ret);
   520				goto err_enable;
   521			}
   522		}
   523	
   524		wm8994->irq_base = pdata->irq_base;
   525		wm8994->gpio_base = pdata->gpio_base;
   526	
   527		/* GPIO configuration is only applied if it's non-zero */
   528		for (i = 0; i < ARRAY_SIZE(pdata->gpio_defaults); i++) {
   529			if (pdata->gpio_defaults[i]) {
   530				wm8994_set_bits(wm8994, WM8994_GPIO_1 + i,
   531						0xffff, pdata->gpio_defaults[i]);
   532			}
   533		}
   534	
   535		wm8994->ldo_ena_always_driven = pdata->ldo_ena_always_driven;
   536	
   537		if (pdata->spkmode_pu)
   538			pulls |= WM8994_SPKMODE_PU;
   539		if (pdata->csnaddr_pd)
   540			pulls |= WM8994_CSNADDR_PD;
   541	
   542		/* Disable unneeded pulls */
   543		wm8994_set_bits(wm8994, WM8994_PULL_CONTROL_2,
   544				WM8994_LDO1ENA_PD | WM8994_LDO2ENA_PD |
   545				WM8994_SPKMODE_PU | WM8994_CSNADDR_PD,
   546				pulls);
   547	
   548		/* In some system designs where the regulators are not in use,
   549		 * we can achieve a small reduction in leakage currents by
   550		 * floating LDO outputs.  This bit makes no difference if the
   551		 * LDOs are enabled, it only affects cases where the LDOs were
   552		 * in operation and are then disabled.
   553		 */
   554		for (i = 0; i < WM8994_NUM_LDO_REGS; i++) {
   555			if (wm8994_ldo_in_use(pdata, i))
   556				wm8994_set_bits(wm8994, WM8994_LDO_1 + i,
   557						WM8994_LDO1_DISCH, WM8994_LDO1_DISCH);
   558			else
   559				wm8994_set_bits(wm8994, WM8994_LDO_1 + i,
   560						WM8994_LDO1_DISCH, 0);
   561		}
   562	
   563		wm8994_irq_init(wm8994);
   564	
   565		ret = mfd_add_devices(wm8994->dev, -1,
   566				      wm8994_devs, ARRAY_SIZE(wm8994_devs),
   567				      NULL, 0, NULL);
   568		if (ret != 0) {
   569			dev_err(wm8994->dev, "Failed to add children: %d\n", ret);
   570			goto err_irq;
   571		}
   572	
   573		pm_runtime_set_active(wm8994->dev);
   574		pm_runtime_enable(wm8994->dev);
   575		pm_runtime_idle(wm8994->dev);
   576	
   577		return 0;
   578	
   579	err_irq:
   580		wm8994_irq_exit(wm8994);
   581	err_enable:
   582		regulator_bulk_disable(wm8994->num_supplies,
   583				       wm8994->supplies);
   584	err_regulator_free:
   585		regulator_bulk_free(wm8994->num_supplies, wm8994->supplies);
   586	err:
   587		mfd_remove_devices(wm8994->dev);
   588		return ret;
   589	}
   590	

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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ