public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* drivers/input/misc/iqs626a.c:780:61: warning: '%d' directive output may be truncated writing between 1 and 10 bytes into a region of size 2
@ 2023-10-18 16:34 kernel test robot
  2023-10-26 15:50 ` Jeff LaBundy
  0 siblings, 1 reply; 3+ messages in thread
From: kernel test robot @ 2023-10-18 16:34 UTC (permalink / raw)
  To: Jeff LaBundy; +Cc: oe-kbuild-all, linux-kernel, Dmitry Torokhov

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   06dc10eae55b5ceabfef287a7e5f16ceea204aa0
commit: 4d3d2694e168c542b088eef5059d31498f679020 Input: iqs626a - drop unused device node references
date:   9 months ago
config: x86_64-randconfig-r015-20230901 (https://download.01.org/0day-ci/archive/20231019/202310190041.28bxUK0W-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231019/202310190041.28bxUK0W-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/202310190041.28bxUK0W-lkp@intel.com/

All warnings (new ones prefixed by >>):

   drivers/input/misc/iqs626a.c: In function 'iqs626_parse_trackpad':
>> drivers/input/misc/iqs626a.c:780:61: warning: '%d' directive output may be truncated writing between 1 and 10 bytes into a region of size 2 [-Wformat-truncation=]
     780 |                 snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
         |                                                             ^~
   drivers/input/misc/iqs626a.c:780:52: note: directive argument in the range [0, 2147483646]
     780 |                 snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
         |                                                    ^~~~~~~~~~~~
   drivers/input/misc/iqs626a.c:780:17: note: 'snprintf' output between 10 and 19 bytes into a destination of size 10
     780 |                 snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
         |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


vim +780 drivers/input/misc/iqs626a.c

   712	
   713	static int iqs626_parse_trackpad(struct iqs626_private *iqs626,
   714					 struct fwnode_handle *ch_node,
   715					 enum iqs626_ch_id ch_id)
   716	{
   717		struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg;
   718		struct i2c_client *client = iqs626->client;
   719		u8 *hyst = &sys_reg->tp_grp_reg.hyst;
   720		int error, count, i;
   721		unsigned int val;
   722	
   723		if (!fwnode_property_read_u32(ch_node, "azoteq,lta-update", &val)) {
   724			if (val > IQS626_MISC_A_TPx_LTA_UPDATE_MAX) {
   725				dev_err(&client->dev,
   726					"Invalid %s channel update rate: %u\n",
   727					fwnode_get_name(ch_node), val);
   728				return -EINVAL;
   729			}
   730	
   731			sys_reg->misc_a &= ~IQS626_MISC_A_TPx_LTA_UPDATE_MASK;
   732			sys_reg->misc_a |= (val << IQS626_MISC_A_TPx_LTA_UPDATE_SHIFT);
   733		}
   734	
   735		if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-trackpad",
   736					      &val)) {
   737			if (val > IQS626_FILT_STR_MAX) {
   738				dev_err(&client->dev,
   739					"Invalid %s channel filter strength: %u\n",
   740					fwnode_get_name(ch_node), val);
   741				return -EINVAL;
   742			}
   743	
   744			sys_reg->misc_b &= ~IQS626_MISC_B_FILT_STR_TPx;
   745			sys_reg->misc_b |= val;
   746		}
   747	
   748		if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-np-cnt",
   749					      &val)) {
   750			if (val > IQS626_FILT_STR_MAX) {
   751				dev_err(&client->dev,
   752					"Invalid %s channel filter strength: %u\n",
   753					fwnode_get_name(ch_node), val);
   754				return -EINVAL;
   755			}
   756	
   757			*hyst &= ~IQS626_FILT_STR_NP_TPx_MASK;
   758			*hyst |= (val << IQS626_FILT_STR_NP_TPx_SHIFT);
   759		}
   760	
   761		if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-lp-cnt",
   762					      &val)) {
   763			if (val > IQS626_FILT_STR_MAX) {
   764				dev_err(&client->dev,
   765					"Invalid %s channel filter strength: %u\n",
   766					fwnode_get_name(ch_node), val);
   767				return -EINVAL;
   768			}
   769	
   770			*hyst &= ~IQS626_FILT_STR_LP_TPx_MASK;
   771			*hyst |= (val << IQS626_FILT_STR_LP_TPx_SHIFT);
   772		}
   773	
   774		for (i = 0; i < iqs626_channels[ch_id].num_ch; i++) {
   775			u8 *ati_base = &sys_reg->tp_grp_reg.ch_reg_tp[i].ati_base;
   776			u8 *thresh = &sys_reg->tp_grp_reg.ch_reg_tp[i].thresh;
   777			struct fwnode_handle *tc_node;
   778			char tc_name[10];
   779	
 > 780			snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
   781	
   782			tc_node = fwnode_get_named_child_node(ch_node, tc_name);
   783			if (!tc_node)
   784				continue;
   785	
   786			if (!fwnode_property_read_u32(tc_node, "azoteq,ati-base",
   787						      &val)) {
   788				if (val < IQS626_TPx_ATI_BASE_MIN ||
   789				    val > IQS626_TPx_ATI_BASE_MAX) {
   790					dev_err(&client->dev,
   791						"Invalid %s %s ATI base: %u\n",
   792						fwnode_get_name(ch_node), tc_name, val);
   793					fwnode_handle_put(tc_node);
   794					return -EINVAL;
   795				}
   796	
   797				*ati_base = val - IQS626_TPx_ATI_BASE_MIN;
   798			}
   799	
   800			if (!fwnode_property_read_u32(tc_node, "azoteq,thresh",
   801						      &val)) {
   802				if (val > IQS626_CHx_THRESH_MAX) {
   803					dev_err(&client->dev,
   804						"Invalid %s %s threshold: %u\n",
   805						fwnode_get_name(ch_node), tc_name, val);
   806					fwnode_handle_put(tc_node);
   807					return -EINVAL;
   808				}
   809	
   810				*thresh = val;
   811			}
   812	
   813			fwnode_handle_put(tc_node);
   814		}
   815	
   816		if (!fwnode_property_present(ch_node, "linux,keycodes"))
   817			return 0;
   818	
   819		count = fwnode_property_count_u32(ch_node, "linux,keycodes");
   820		if (count > IQS626_NUM_GESTURES) {
   821			dev_err(&client->dev, "Too many keycodes present\n");
   822			return -EINVAL;
   823		} else if (count < 0) {
   824			dev_err(&client->dev, "Failed to count keycodes: %d\n", count);
   825			return count;
   826		}
   827	
   828		error = fwnode_property_read_u32_array(ch_node, "linux,keycodes",
   829						       iqs626->tp_code, count);
   830		if (error) {
   831			dev_err(&client->dev, "Failed to read keycodes: %d\n", error);
   832			return error;
   833		}
   834	
   835		sys_reg->misc_b &= ~IQS626_MISC_B_TPx_SWIPE;
   836		if (fwnode_property_present(ch_node, "azoteq,gesture-swipe"))
   837			sys_reg->misc_b |= IQS626_MISC_B_TPx_SWIPE;
   838	
   839		if (!fwnode_property_read_u32(ch_node, "azoteq,timeout-tap-ms",
   840					      &val)) {
   841			if (val > IQS626_TIMEOUT_TAP_MS_MAX) {
   842				dev_err(&client->dev,
   843					"Invalid %s channel timeout: %u\n",
   844					fwnode_get_name(ch_node), val);
   845				return -EINVAL;
   846			}
   847	
   848			sys_reg->timeout_tap = val / 16;
   849		}
   850	
   851		if (!fwnode_property_read_u32(ch_node, "azoteq,timeout-swipe-ms",
   852					      &val)) {
   853			if (val > IQS626_TIMEOUT_SWIPE_MS_MAX) {
   854				dev_err(&client->dev,
   855					"Invalid %s channel timeout: %u\n",
   856					fwnode_get_name(ch_node), val);
   857				return -EINVAL;
   858			}
   859	
   860			sys_reg->timeout_swipe = val / 16;
   861		}
   862	
   863		if (!fwnode_property_read_u32(ch_node, "azoteq,thresh-swipe",
   864					      &val)) {
   865			if (val > IQS626_THRESH_SWIPE_MAX) {
   866				dev_err(&client->dev,
   867					"Invalid %s channel threshold: %u\n",
   868					fwnode_get_name(ch_node), val);
   869				return -EINVAL;
   870			}
   871	
   872			sys_reg->thresh_swipe = val;
   873		}
   874	
   875		sys_reg->event_mask &= ~IQS626_EVENT_MASK_GESTURE;
   876	
   877		return 0;
   878	}
   879	

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

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

* Re: drivers/input/misc/iqs626a.c:780:61: warning: '%d' directive output may be truncated writing between 1 and 10 bytes into a region of size 2
  2023-10-18 16:34 drivers/input/misc/iqs626a.c:780:61: warning: '%d' directive output may be truncated writing between 1 and 10 bytes into a region of size 2 kernel test robot
@ 2023-10-26 15:50 ` Jeff LaBundy
  0 siblings, 0 replies; 3+ messages in thread
From: Jeff LaBundy @ 2023-10-26 15:50 UTC (permalink / raw)
  To: kernel test robot; +Cc: oe-kbuild-all, linux-kernel, Dmitry Torokhov

Perhaps the list can let me know if I am missing anything...

On Thu, Oct 19, 2023 at 12:34:52AM +0800, kernel test robot wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head:   06dc10eae55b5ceabfef287a7e5f16ceea204aa0
> commit: 4d3d2694e168c542b088eef5059d31498f679020 Input: iqs626a - drop unused device node references
> date:   9 months ago
> config: x86_64-randconfig-r015-20230901 (https://download.01.org/0day-ci/archive/20231019/202310190041.28bxUK0W-lkp@intel.com/config)
> compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231019/202310190041.28bxUK0W-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/202310190041.28bxUK0W-lkp@intel.com/
> 
> All warnings (new ones prefixed by >>):
> 
>    drivers/input/misc/iqs626a.c: In function 'iqs626_parse_trackpad':
> >> drivers/input/misc/iqs626a.c:780:61: warning: '%d' directive output may be truncated writing between 1 and 10 bytes into a region of size 2 [-Wformat-truncation=]
>      780 |                 snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
>          |                                                             ^~
>    drivers/input/misc/iqs626a.c:780:52: note: directive argument in the range [0, 2147483646]
>      780 |                 snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
>          |                                                    ^~~~~~~~~~~~
>    drivers/input/misc/iqs626a.c:780:17: note: 'snprintf' output between 10 and 19 bytes into a destination of size 10
>      780 |                 snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
>          |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This cannot actually happen during runtime; 'i' is limited to at most 8. The
warning seems bogus.

> 
> 
> vim +780 drivers/input/misc/iqs626a.c
> 
>    712	
>    713	static int iqs626_parse_trackpad(struct iqs626_private *iqs626,
>    714					 struct fwnode_handle *ch_node,
>    715					 enum iqs626_ch_id ch_id)
>    716	{
>    717		struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg;
>    718		struct i2c_client *client = iqs626->client;
>    719		u8 *hyst = &sys_reg->tp_grp_reg.hyst;
>    720		int error, count, i;
>    721		unsigned int val;
>    722	
>    723		if (!fwnode_property_read_u32(ch_node, "azoteq,lta-update", &val)) {
>    724			if (val > IQS626_MISC_A_TPx_LTA_UPDATE_MAX) {
>    725				dev_err(&client->dev,
>    726					"Invalid %s channel update rate: %u\n",
>    727					fwnode_get_name(ch_node), val);
>    728				return -EINVAL;
>    729			}
>    730	
>    731			sys_reg->misc_a &= ~IQS626_MISC_A_TPx_LTA_UPDATE_MASK;
>    732			sys_reg->misc_a |= (val << IQS626_MISC_A_TPx_LTA_UPDATE_SHIFT);
>    733		}
>    734	
>    735		if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-trackpad",
>    736					      &val)) {
>    737			if (val > IQS626_FILT_STR_MAX) {
>    738				dev_err(&client->dev,
>    739					"Invalid %s channel filter strength: %u\n",
>    740					fwnode_get_name(ch_node), val);
>    741				return -EINVAL;
>    742			}
>    743	
>    744			sys_reg->misc_b &= ~IQS626_MISC_B_FILT_STR_TPx;
>    745			sys_reg->misc_b |= val;
>    746		}
>    747	
>    748		if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-np-cnt",
>    749					      &val)) {
>    750			if (val > IQS626_FILT_STR_MAX) {
>    751				dev_err(&client->dev,
>    752					"Invalid %s channel filter strength: %u\n",
>    753					fwnode_get_name(ch_node), val);
>    754				return -EINVAL;
>    755			}
>    756	
>    757			*hyst &= ~IQS626_FILT_STR_NP_TPx_MASK;
>    758			*hyst |= (val << IQS626_FILT_STR_NP_TPx_SHIFT);
>    759		}
>    760	
>    761		if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-lp-cnt",
>    762					      &val)) {
>    763			if (val > IQS626_FILT_STR_MAX) {
>    764				dev_err(&client->dev,
>    765					"Invalid %s channel filter strength: %u\n",
>    766					fwnode_get_name(ch_node), val);
>    767				return -EINVAL;
>    768			}
>    769	
>    770			*hyst &= ~IQS626_FILT_STR_LP_TPx_MASK;
>    771			*hyst |= (val << IQS626_FILT_STR_LP_TPx_SHIFT);
>    772		}
>    773	
>    774		for (i = 0; i < iqs626_channels[ch_id].num_ch; i++) {
>    775			u8 *ati_base = &sys_reg->tp_grp_reg.ch_reg_tp[i].ati_base;
>    776			u8 *thresh = &sys_reg->tp_grp_reg.ch_reg_tp[i].thresh;
>    777			struct fwnode_handle *tc_node;
>    778			char tc_name[10];
>    779	
>  > 780			snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
>    781	
>    782			tc_node = fwnode_get_named_child_node(ch_node, tc_name);
>    783			if (!tc_node)
>    784				continue;
>    785	
>    786			if (!fwnode_property_read_u32(tc_node, "azoteq,ati-base",
>    787						      &val)) {
>    788				if (val < IQS626_TPx_ATI_BASE_MIN ||
>    789				    val > IQS626_TPx_ATI_BASE_MAX) {
>    790					dev_err(&client->dev,
>    791						"Invalid %s %s ATI base: %u\n",
>    792						fwnode_get_name(ch_node), tc_name, val);
>    793					fwnode_handle_put(tc_node);
>    794					return -EINVAL;
>    795				}
>    796	
>    797				*ati_base = val - IQS626_TPx_ATI_BASE_MIN;
>    798			}
>    799	
>    800			if (!fwnode_property_read_u32(tc_node, "azoteq,thresh",
>    801						      &val)) {
>    802				if (val > IQS626_CHx_THRESH_MAX) {
>    803					dev_err(&client->dev,
>    804						"Invalid %s %s threshold: %u\n",
>    805						fwnode_get_name(ch_node), tc_name, val);
>    806					fwnode_handle_put(tc_node);
>    807					return -EINVAL;
>    808				}
>    809	
>    810				*thresh = val;
>    811			}
>    812	
>    813			fwnode_handle_put(tc_node);
>    814		}
>    815	
>    816		if (!fwnode_property_present(ch_node, "linux,keycodes"))
>    817			return 0;
>    818	
>    819		count = fwnode_property_count_u32(ch_node, "linux,keycodes");
>    820		if (count > IQS626_NUM_GESTURES) {
>    821			dev_err(&client->dev, "Too many keycodes present\n");
>    822			return -EINVAL;
>    823		} else if (count < 0) {
>    824			dev_err(&client->dev, "Failed to count keycodes: %d\n", count);
>    825			return count;
>    826		}
>    827	
>    828		error = fwnode_property_read_u32_array(ch_node, "linux,keycodes",
>    829						       iqs626->tp_code, count);
>    830		if (error) {
>    831			dev_err(&client->dev, "Failed to read keycodes: %d\n", error);
>    832			return error;
>    833		}
>    834	
>    835		sys_reg->misc_b &= ~IQS626_MISC_B_TPx_SWIPE;
>    836		if (fwnode_property_present(ch_node, "azoteq,gesture-swipe"))
>    837			sys_reg->misc_b |= IQS626_MISC_B_TPx_SWIPE;
>    838	
>    839		if (!fwnode_property_read_u32(ch_node, "azoteq,timeout-tap-ms",
>    840					      &val)) {
>    841			if (val > IQS626_TIMEOUT_TAP_MS_MAX) {
>    842				dev_err(&client->dev,
>    843					"Invalid %s channel timeout: %u\n",
>    844					fwnode_get_name(ch_node), val);
>    845				return -EINVAL;
>    846			}
>    847	
>    848			sys_reg->timeout_tap = val / 16;
>    849		}
>    850	
>    851		if (!fwnode_property_read_u32(ch_node, "azoteq,timeout-swipe-ms",
>    852					      &val)) {
>    853			if (val > IQS626_TIMEOUT_SWIPE_MS_MAX) {
>    854				dev_err(&client->dev,
>    855					"Invalid %s channel timeout: %u\n",
>    856					fwnode_get_name(ch_node), val);
>    857				return -EINVAL;
>    858			}
>    859	
>    860			sys_reg->timeout_swipe = val / 16;
>    861		}
>    862	
>    863		if (!fwnode_property_read_u32(ch_node, "azoteq,thresh-swipe",
>    864					      &val)) {
>    865			if (val > IQS626_THRESH_SWIPE_MAX) {
>    866				dev_err(&client->dev,
>    867					"Invalid %s channel threshold: %u\n",
>    868					fwnode_get_name(ch_node), val);
>    869				return -EINVAL;
>    870			}
>    871	
>    872			sys_reg->thresh_swipe = val;
>    873		}
>    874	
>    875		sys_reg->event_mask &= ~IQS626_EVENT_MASK_GESTURE;
>    876	
>    877		return 0;
>    878	}
>    879	
> 
> -- 
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki

Kind regards,
Jeff LaBundy

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

* drivers/input/misc/iqs626a.c:780:61: warning: '%d' directive output may be truncated writing between 1 and 10 bytes into a region of size 2
@ 2023-12-04 21:44 kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2023-12-04 21:44 UTC (permalink / raw)
  To: Jeff LaBundy; +Cc: oe-kbuild-all, linux-kernel, Dmitry Torokhov

Hi Jeff,

FYI, the error/warning still remains.

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   33cc938e65a98f1d29d0a18403dbbee050dcad9a
commit: 4d3d2694e168c542b088eef5059d31498f679020 Input: iqs626a - drop unused device node references
date:   10 months ago
config: x86_64-buildonly-randconfig-004-20230906 (https://download.01.org/0day-ci/archive/20231205/202312050442.h4TNpY9h-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231205/202312050442.h4TNpY9h-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/202312050442.h4TNpY9h-lkp@intel.com/

All warnings (new ones prefixed by >>):

   drivers/input/misc/iqs626a.c: In function 'iqs626_parse_trackpad':
>> drivers/input/misc/iqs626a.c:780:61: warning: '%d' directive output may be truncated writing between 1 and 10 bytes into a region of size 2 [-Wformat-truncation=]
     780 |                 snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
         |                                                             ^~
   drivers/input/misc/iqs626a.c:780:52: note: directive argument in the range [0, 2147483646]
     780 |                 snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
         |                                                    ^~~~~~~~~~~~
   drivers/input/misc/iqs626a.c:780:17: note: 'snprintf' output between 10 and 19 bytes into a destination of size 10
     780 |                 snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
         |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


vim +780 drivers/input/misc/iqs626a.c

   712	
   713	static int iqs626_parse_trackpad(struct iqs626_private *iqs626,
   714					 struct fwnode_handle *ch_node,
   715					 enum iqs626_ch_id ch_id)
   716	{
   717		struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg;
   718		struct i2c_client *client = iqs626->client;
   719		u8 *hyst = &sys_reg->tp_grp_reg.hyst;
   720		int error, count, i;
   721		unsigned int val;
   722	
   723		if (!fwnode_property_read_u32(ch_node, "azoteq,lta-update", &val)) {
   724			if (val > IQS626_MISC_A_TPx_LTA_UPDATE_MAX) {
   725				dev_err(&client->dev,
   726					"Invalid %s channel update rate: %u\n",
   727					fwnode_get_name(ch_node), val);
   728				return -EINVAL;
   729			}
   730	
   731			sys_reg->misc_a &= ~IQS626_MISC_A_TPx_LTA_UPDATE_MASK;
   732			sys_reg->misc_a |= (val << IQS626_MISC_A_TPx_LTA_UPDATE_SHIFT);
   733		}
   734	
   735		if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-trackpad",
   736					      &val)) {
   737			if (val > IQS626_FILT_STR_MAX) {
   738				dev_err(&client->dev,
   739					"Invalid %s channel filter strength: %u\n",
   740					fwnode_get_name(ch_node), val);
   741				return -EINVAL;
   742			}
   743	
   744			sys_reg->misc_b &= ~IQS626_MISC_B_FILT_STR_TPx;
   745			sys_reg->misc_b |= val;
   746		}
   747	
   748		if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-np-cnt",
   749					      &val)) {
   750			if (val > IQS626_FILT_STR_MAX) {
   751				dev_err(&client->dev,
   752					"Invalid %s channel filter strength: %u\n",
   753					fwnode_get_name(ch_node), val);
   754				return -EINVAL;
   755			}
   756	
   757			*hyst &= ~IQS626_FILT_STR_NP_TPx_MASK;
   758			*hyst |= (val << IQS626_FILT_STR_NP_TPx_SHIFT);
   759		}
   760	
   761		if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-lp-cnt",
   762					      &val)) {
   763			if (val > IQS626_FILT_STR_MAX) {
   764				dev_err(&client->dev,
   765					"Invalid %s channel filter strength: %u\n",
   766					fwnode_get_name(ch_node), val);
   767				return -EINVAL;
   768			}
   769	
   770			*hyst &= ~IQS626_FILT_STR_LP_TPx_MASK;
   771			*hyst |= (val << IQS626_FILT_STR_LP_TPx_SHIFT);
   772		}
   773	
   774		for (i = 0; i < iqs626_channels[ch_id].num_ch; i++) {
   775			u8 *ati_base = &sys_reg->tp_grp_reg.ch_reg_tp[i].ati_base;
   776			u8 *thresh = &sys_reg->tp_grp_reg.ch_reg_tp[i].thresh;
   777			struct fwnode_handle *tc_node;
   778			char tc_name[10];
   779	
 > 780			snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
   781	
   782			tc_node = fwnode_get_named_child_node(ch_node, tc_name);
   783			if (!tc_node)
   784				continue;
   785	
   786			if (!fwnode_property_read_u32(tc_node, "azoteq,ati-base",
   787						      &val)) {
   788				if (val < IQS626_TPx_ATI_BASE_MIN ||
   789				    val > IQS626_TPx_ATI_BASE_MAX) {
   790					dev_err(&client->dev,
   791						"Invalid %s %s ATI base: %u\n",
   792						fwnode_get_name(ch_node), tc_name, val);
   793					fwnode_handle_put(tc_node);
   794					return -EINVAL;
   795				}
   796	
   797				*ati_base = val - IQS626_TPx_ATI_BASE_MIN;
   798			}
   799	
   800			if (!fwnode_property_read_u32(tc_node, "azoteq,thresh",
   801						      &val)) {
   802				if (val > IQS626_CHx_THRESH_MAX) {
   803					dev_err(&client->dev,
   804						"Invalid %s %s threshold: %u\n",
   805						fwnode_get_name(ch_node), tc_name, val);
   806					fwnode_handle_put(tc_node);
   807					return -EINVAL;
   808				}
   809	
   810				*thresh = val;
   811			}
   812	
   813			fwnode_handle_put(tc_node);
   814		}
   815	
   816		if (!fwnode_property_present(ch_node, "linux,keycodes"))
   817			return 0;
   818	
   819		count = fwnode_property_count_u32(ch_node, "linux,keycodes");
   820		if (count > IQS626_NUM_GESTURES) {
   821			dev_err(&client->dev, "Too many keycodes present\n");
   822			return -EINVAL;
   823		} else if (count < 0) {
   824			dev_err(&client->dev, "Failed to count keycodes: %d\n", count);
   825			return count;
   826		}
   827	
   828		error = fwnode_property_read_u32_array(ch_node, "linux,keycodes",
   829						       iqs626->tp_code, count);
   830		if (error) {
   831			dev_err(&client->dev, "Failed to read keycodes: %d\n", error);
   832			return error;
   833		}
   834	
   835		sys_reg->misc_b &= ~IQS626_MISC_B_TPx_SWIPE;
   836		if (fwnode_property_present(ch_node, "azoteq,gesture-swipe"))
   837			sys_reg->misc_b |= IQS626_MISC_B_TPx_SWIPE;
   838	
   839		if (!fwnode_property_read_u32(ch_node, "azoteq,timeout-tap-ms",
   840					      &val)) {
   841			if (val > IQS626_TIMEOUT_TAP_MS_MAX) {
   842				dev_err(&client->dev,
   843					"Invalid %s channel timeout: %u\n",
   844					fwnode_get_name(ch_node), val);
   845				return -EINVAL;
   846			}
   847	
   848			sys_reg->timeout_tap = val / 16;
   849		}
   850	
   851		if (!fwnode_property_read_u32(ch_node, "azoteq,timeout-swipe-ms",
   852					      &val)) {
   853			if (val > IQS626_TIMEOUT_SWIPE_MS_MAX) {
   854				dev_err(&client->dev,
   855					"Invalid %s channel timeout: %u\n",
   856					fwnode_get_name(ch_node), val);
   857				return -EINVAL;
   858			}
   859	
   860			sys_reg->timeout_swipe = val / 16;
   861		}
   862	
   863		if (!fwnode_property_read_u32(ch_node, "azoteq,thresh-swipe",
   864					      &val)) {
   865			if (val > IQS626_THRESH_SWIPE_MAX) {
   866				dev_err(&client->dev,
   867					"Invalid %s channel threshold: %u\n",
   868					fwnode_get_name(ch_node), val);
   869				return -EINVAL;
   870			}
   871	
   872			sys_reg->thresh_swipe = val;
   873		}
   874	
   875		sys_reg->event_mask &= ~IQS626_EVENT_MASK_GESTURE;
   876	
   877		return 0;
   878	}
   879	

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

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

end of thread, other threads:[~2023-12-04 21:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-18 16:34 drivers/input/misc/iqs626a.c:780:61: warning: '%d' directive output may be truncated writing between 1 and 10 bytes into a region of size 2 kernel test robot
2023-10-26 15:50 ` Jeff LaBundy
  -- strict thread matches above, loose matches on Subject: below --
2023-12-04 21:44 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