Re: [PATCH 10/18] mfd: adp5585: add support for key events

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Nuno,

kernel test robot noticed the following build errors:

[auto build test ERROR on 4d395cb071a343196ca524d3694790f06978fe91]

url:    https://github.com/intel-lab-lkp/linux/commits/Nuno-S-via-B4-Relay/dt-bindings-mfd-adp5585-ease-on-the-required-properties/20250313-222511
base:   4d395cb071a343196ca524d3694790f06978fe91
patch link:    https://lore.kernel.org/r/20250313-dev-adp5589-fw-v1-10-20e80d4bd4ea%40analog.com
patch subject: [PATCH 10/18] mfd: adp5585: add support for key events
config: sparc-randconfig-001-20250314 (https://download.01.org/0day-ci/archive/20250314/202503141730.dPtGWqXX-lkp@xxxxxxxxx/config)
compiler: sparc-linux-gcc (GCC) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250314/202503141730.dPtGWqXX-lkp@xxxxxxxxx/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@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202503141730.dPtGWqXX-lkp@xxxxxxxxx/

All errors (new ones prefixed by >>):

   drivers/mfd/adp5585.c: In function 'adp5585_keys_reset_parse':
>> drivers/mfd/adp5585.c:485:47: error: implicit declaration of function 'FIELD_PREP' [-Wimplicit-function-declaration]
     485 |                         adp5585->reset_cfg |= FIELD_PREP(ADP5585_RESET1_POL, 1);
         |                                               ^~~~~~~~~~
   drivers/mfd/adp5585.c: In function 'adp5585_report_events':
>> drivers/mfd/adp5585.c:654:27: error: implicit declaration of function 'FIELD_GET' [-Wimplicit-function-declaration]
     654 |                 key_val = FIELD_GET(ADP5585_KEY_EVENT_MASK, key);
         |                           ^~~~~~~~~
   drivers/mfd/adp5585.c: At top level:
   drivers/mfd/adp5585.c:271:34: warning: 'adp5585_02_info' defined but not used [-Wunused-const-variable=]
     271 | static const struct adp5585_info adp5585_02_info = {
         |                                  ^~~~~~~~~~~~~~~
   drivers/mfd/adp5585.c:258:34: warning: 'adp5585_01_info' defined but not used [-Wunused-const-variable=]
     258 | static const struct adp5585_info adp5585_01_info = {
         |                                  ^~~~~~~~~~~~~~~
   drivers/mfd/adp5585.c:246:34: warning: 'adp5585_info' defined but not used [-Wunused-const-variable=]
     246 | static const struct adp5585_info adp5585_info = {
         |                                  ^~~~~~~~~~~~
   drivers/mfd/adp5585.c:49:41: warning: 'adp5589_volatile_regs' defined but not used [-Wunused-const-variable=]
      49 | static const struct regmap_access_table adp5589_volatile_regs = {
         |                                         ^~~~~~~~~~~~~~~~~~~~~


vim +/FIELD_PREP +485 drivers/mfd/adp5585.c

   464	
   465	static int adp5585_keys_reset_parse(struct adp5585_dev *adp5585)
   466	{
   467		const struct adp5585_info *info = adp5585->info;
   468		struct device *dev = adp5585->dev;
   469		u32 prop_val;
   470		int ret;
   471	
   472		ret = adp5585_keys_parse_array(adp5585, "adi,reset1-keys",
   473					       adp5585->reset1_keys,
   474					       &adp5585->nkeys_reset1,
   475					       ARRAY_SIZE(adp5585->reset1_keys), true);
   476		if (ret)
   477			return ret;
   478	
   479		if (adp5585->nkeys_reset1 > 0) {
   480			if (test_bit(ADP5585_ROW4, adp5585->keypad))
   481				return dev_err_probe(dev, -EINVAL,
   482						     "Invalid reset1 output(R4) being used in the keypad\n");
   483	
   484			if (device_property_read_bool(dev, "adi,reset1-active-high"))
 > 485				adp5585->reset_cfg |= FIELD_PREP(ADP5585_RESET1_POL, 1);
   486		}
   487	
   488		ret = adp5585_keys_parse_array(adp5585, "adi,reset2-keys",
   489					       adp5585->reset2_keys,
   490					       &adp5585->nkeys_reset2,
   491					       ARRAY_SIZE(adp5585->reset2_keys), true);
   492		if (ret)
   493			return ret;
   494	
   495		if (adp5585->nkeys_reset2 > 0) {
   496			if (test_bit(info->max_rows + ADP5585_COL4, adp5585->keypad))
   497				return dev_err_probe(dev, -EINVAL,
   498						     "Invalid reset2 output(C4) being used in the keypad\n");
   499	
   500			if (device_property_read_bool(dev, "adi,reset2-active-high"))
   501				adp5585->reset_cfg |= FIELD_PREP(ADP5585_RESET2_POL, 1);
   502		}
   503	
   504		if (!adp5585->nkeys_reset1 && !adp5585->nkeys_reset2)
   505			return 0;
   506	
   507		if (device_property_read_bool(dev, "adi,rst-passtrough-enable"))
   508			adp5585->reset_cfg |= FIELD_PREP(ADP5585_RST_PASSTHRU_EN, 1);
   509	
   510		ret = device_property_read_u32(dev, "adi,reset-trigger-ms", &prop_val);
   511		if (!ret) {
   512			switch (prop_val) {
   513			case 0:
   514				adp5585->reset_cfg |= FIELD_PREP(ADP5585_RESET_TRIG_TIME, 0);
   515				break;
   516			case 1000:
   517				adp5585->reset_cfg |= FIELD_PREP(ADP5585_RESET_TRIG_TIME, 1);
   518				break;
   519			case 1500:
   520				adp5585->reset_cfg |= FIELD_PREP(ADP5585_RESET_TRIG_TIME, 2);
   521				break;
   522			case 2000:
   523				adp5585->reset_cfg |= FIELD_PREP(ADP5585_RESET_TRIG_TIME, 3);
   524				break;
   525			case 2500:
   526				adp5585->reset_cfg |= FIELD_PREP(ADP5585_RESET_TRIG_TIME, 4);
   527				break;
   528			case 3000:
   529				adp5585->reset_cfg |= FIELD_PREP(ADP5585_RESET_TRIG_TIME, 5);
   530				break;
   531			case 3500:
   532				adp5585->reset_cfg |= FIELD_PREP(ADP5585_RESET_TRIG_TIME, 6);
   533				break;
   534			case 4000:
   535				adp5585->reset_cfg |= FIELD_PREP(ADP5585_RESET_TRIG_TIME, 7);
   536				break;
   537			default:
   538				return dev_err_probe(dev, -EINVAL,
   539						     "Invalid value(%u) for adi,reset-trigger-ms\n",
   540						     prop_val);
   541			}
   542		}
   543	
   544		ret = device_property_read_u32(dev, "adi,reset-pulse-width-us",
   545					       &prop_val);
   546		if (!ret) {
   547			switch (prop_val) {
   548			case 500:
   549				adp5585->reset_cfg |= FIELD_PREP(ADP5585_PULSE_WIDTH, 0);
   550				break;
   551			case 1000:
   552				adp5585->reset_cfg |= FIELD_PREP(ADP5585_PULSE_WIDTH, 1);
   553				break;
   554			case 2000:
   555				adp5585->reset_cfg |= FIELD_PREP(ADP5585_PULSE_WIDTH, 2);
   556				break;
   557			case 10000:
   558				adp5585->reset_cfg |= FIELD_PREP(ADP5585_PULSE_WIDTH, 3);
   559				break;
   560			default:
   561				return dev_err_probe(dev, -EINVAL,
   562						     "Invalid value(%u) for adi,reset-pulse-width-us\n",
   563						     prop_val);
   564			}
   565		}
   566	
   567		return 0;
   568	}
   569	
   570	static int adp5585_parse_fw(struct device *dev, struct adp5585_dev *adp5585)
   571	{
   572		const struct adp5585_info *info = adp5585->info;
   573		unsigned int n_pins = info->max_cols + info->max_rows;
   574		unsigned int *keypad_pins;
   575		unsigned int prop_val;
   576		int n_keys, key, ret;
   577	
   578		adp5585->keypad = devm_bitmap_zalloc(dev, n_pins, GFP_KERNEL);
   579		if (!adp5585->keypad)
   580			return -ENOMEM;
   581	
   582		if (device_property_present(dev, "#pwm-cells"))
   583			adp5585->has_pwm = true;
   584	
   585		n_keys = device_property_count_u32(dev, "adi,keypad-pins");
   586		if (n_keys <= 0)
   587			goto no_keypad;
   588		if (n_keys > n_pins)
   589			return -EINVAL;
   590	
   591		keypad_pins = devm_kcalloc(dev, n_keys, sizeof(*keypad_pins),
   592					   GFP_KERNEL);
   593		if (!keypad_pins)
   594			return -ENOMEM;
   595	
   596		ret = device_property_read_u32_array(dev, "adi,keypad-pins",
   597						     keypad_pins, n_keys);
   598		if (ret)
   599			return ret;
   600	
   601		for (key = 0; key < n_keys; key++) {
   602			if (keypad_pins[key] >= n_pins)
   603				return -EINVAL;
   604			if (adp5585->has_pwm && keypad_pins[key] == ADP5585_ROW3)
   605				return dev_err_probe(dev, -EINVAL,
   606						     "Invalid PWM pin being used in the keypad\n");
   607			if (!info->has_row5 && keypad_pins[key] == ADP5585_ROW5)
   608				return dev_err_probe(dev, -EINVAL,
   609						     "Invalid row5 being used in the keypad\n");
   610			__set_bit(keypad_pins[key], adp5585->keypad);
   611		}
   612	
   613	no_keypad:
   614		ret = device_property_read_u32(dev, "adi,key-poll-ms", &prop_val);
   615		if (!ret) {
   616			switch (prop_val) {
   617			case 10:
   618				fallthrough;
   619			case 20:
   620				fallthrough;
   621			case 30:
   622				fallthrough;
   623			case 40:
   624				adp5585->key_poll_time = prop_val / 10 - 1;
   625				break;
   626			default:
   627				return dev_err_probe(dev, -EINVAL,
   628						     "Invalid value(%u) for adi,key-poll-ms\n",
   629						     prop_val);
   630			}
   631		}
   632	
   633		ret = adp5585_keys_unlock_parse(adp5585);
   634		if (ret)
   635			return ret;
   636	
   637		return adp5585_keys_reset_parse(adp5585);
   638	}
   639	
   640	static void adp5585_report_events(struct adp5585_dev *adp5585, int ev_cnt)
   641	{
   642		unsigned int i;
   643	
   644		guard(mutex)(&adp5585->ev_lock);
   645	
   646		for (i = 0; i < ev_cnt; i++) {
   647			unsigned int key, key_val, key_press;
   648			int ret;
   649	
   650			ret = regmap_read(adp5585->regmap, ADP5585_FIFO_1 + i, &key);
   651			if (ret)
   652				return;
   653	
 > 654			key_val = FIELD_GET(ADP5585_KEY_EVENT_MASK, key);
   655			key_press = FIELD_GET(ADP5585_KEV_EV_PRESS_MASK, key);
   656	
   657			if (key_val >= adp5585->info->gpi_ev_base &&
   658			    key_val <= adp5585->info->gpi_ev_end) {
   659				unsigned int gpi = key_val - adp5585->info->gpi_ev_base;
   660	
   661				if (adp5585->gpio_irq_handle)
   662					adp5585->gpio_irq_handle(adp5585->gpio_dev, gpi,
   663								 key_press);
   664			} else if (adp5585->keys_irq_handle) {
   665				adp5585->keys_irq_handle(adp5585->input_dev, key_val,
   666							 key_press);
   667			}
   668		}
   669	}
   670	

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




[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux