[hid:for-6.14/lenovo 1/1] drivers/hid/hid-lenovo.c:727:73: sparse: sparse: incompatible types in conditional expression (different base types):

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

 



tree:   https://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git for-6.14/lenovo
head:   84c9d2a968c8276f1ceddaa1526c803263eae2b4
commit: 84c9d2a968c8276f1ceddaa1526c803263eae2b4 [1/1] HID: lenovo: Support for ThinkPad-X12-TAB-1/2 Kbd Fn keys
config: i386-randconfig-062-20250110 (https://download.01.org/0day-ci/archive/20250110/202501101635.qJrwAOwf-lkp@xxxxxxxxx/config)
compiler: clang version 19.1.3 (https://github.com/llvm/llvm-project ab51eccf88f5321e7c60591c5546b254b6afab99)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250110/202501101635.qJrwAOwf-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/202501101635.qJrwAOwf-lkp@xxxxxxxxx/

sparse warnings: (new ones prefixed by >>)
>> drivers/hid/hid-lenovo.c:727:73: sparse: sparse: incompatible types in conditional expression (different base types):
   drivers/hid/hid-lenovo.c:727:73: sparse:    void
   drivers/hid/hid-lenovo.c:727:73: sparse:    int
>> drivers/hid/hid-lenovo.c:776:58: sparse: sparse: cast to restricted __le32
   drivers/hid/hid-lenovo.c: note: in included file (through include/linux/mmzone.h, include/linux/gfp.h, include/linux/umh.h, include/linux/kmod.h, ...):
   include/linux/page-flags.h:237:46: sparse: sparse: self-comparison always evaluates to false
   include/linux/page-flags.h:237:46: sparse: sparse: self-comparison always evaluates to false

vim +727 drivers/hid/hid-lenovo.c

   702	
   703	/* Function to handle Lenovo Thinkpad TAB X12's HID raw inputs for fn keys*/
   704	static int lenovo_raw_event_TP_X12_tab(struct hid_device *hdev, u32 raw_data)
   705	{
   706		struct hid_input *hidinput;
   707		struct input_dev *input = NULL;
   708	
   709		/* Iterate through all associated input devices */
   710		list_for_each_entry(hidinput, &hdev->inputs, list) {
   711			input = hidinput->input;
   712			if (!input)
   713				continue;
   714	
   715			switch (raw_data) {
   716				/* fn-F20 being used here for MIC mute*/
   717			case TP_X12_RAW_HOTKEY_FN_F4:
   718				report_key_event(input, LENOVO_KEY_MICMUTE);
   719				return 1;
   720			/* Power-mode or Airplane mode will be called based on the device*/
   721			case TP_X12_RAW_HOTKEY_FN_F8:
   722				/*
   723				 * TP X12 TAB uses Fn-F8 calls Airplanemode
   724				 * Whereas TP X12 TAB2 uses Fn-F8 for toggling
   725				 * Power modes
   726				 */
 > 727				(hdev->product == USB_DEVICE_ID_LENOVO_X12_TAB) ?
   728					report_key_event(input, KEY_RFKILL) :
   729					platform_profile_cycle();
   730				return 1;
   731			case TP_X12_RAW_HOTKEY_FN_F10:
   732				/* TAB1 has PICKUP Phone and TAB2 use Snipping tool*/
   733				(hdev->product == USB_DEVICE_ID_LENOVO_X12_TAB) ?
   734				report_key_event(input, KEY_PICKUP_PHONE) :
   735				report_key_event(input, KEY_SELECTIVE_SCREENSHOT);
   736				return 1;
   737			case TP_X12_RAW_HOTKEY_FN_F12:
   738				/* BookMarks/STAR key*/
   739				report_key_event(input, KEY_BOOKMARKS);
   740				return 1;
   741			case TP_X12_RAW_HOTKEY_FN_SPACE:
   742				/* Keyboard LED backlight toggle*/
   743				report_key_event(input, KEY_KBDILLUMTOGGLE);
   744				return 1;
   745			default:
   746				break;
   747			}
   748		}
   749		return 0;
   750	}
   751	
   752	static int lenovo_raw_event(struct hid_device *hdev,
   753				struct hid_report *report, u8 *data, int size)
   754	{
   755		/*
   756		 * Compact USB keyboard's Fn-F12 report holds down many other keys, and
   757		 * its own key is outside the usage page range. Remove extra
   758		 * keypresses and remap to inside usage page.
   759		 */
   760		if (unlikely(hdev->product == USB_DEVICE_ID_LENOVO_CUSBKBD
   761				&& size == 3
   762				&& data[0] == 0x15
   763				&& data[1] == 0x94
   764				&& data[2] == 0x01)) {
   765			data[1] = 0x00;
   766			data[2] = 0x01;
   767		}
   768	
   769		/*
   770		 * Lenovo TP X12 Tab KBD's Fn+XX is HID raw data defined. Report ID is 0x03
   771		 * e.g.: Raw data received for MIC mute is 0x00020003.
   772		 */
   773		if (unlikely((hdev->product == USB_DEVICE_ID_LENOVO_X12_TAB
   774				|| hdev->product == USB_DEVICE_ID_LENOVO_X12_TAB2)
   775				&& size >= 3 && report->id == 0x03))
 > 776			return lenovo_raw_event_TP_X12_tab(hdev, le32_to_cpu(*(u32 *)data));
   777	
   778		return 0;
   779	}
   780	

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




[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux