Hi Werner, kernel test robot noticed the following build errors: [auto build test ERROR on lee-leds/for-leds-next] [also build test ERROR on linus/master v6.6-rc6 next-20231016] [cannot apply to pavel-leds/for-next] [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/Werner-Sembach/leds-rgb-Implement-per-key-keyboard-backlight-for-several-TUXEDO-devices/20231012-030206 base: https://git.kernel.org/pub/scm/linux/kernel/git/lee/leds.git for-leds-next patch link: https://lore.kernel.org/r/20231011190017.1230898-1-wse%40tuxedocomputers.com patch subject: [PATCH] leds: rgb: Implement per-key keyboard backlight for several TUXEDO devices config: x86_64-randconfig-122-20231016 (https://download.01.org/0day-ci/archive/20231016/202310161944.966gHsq4-lkp@xxxxxxxxx/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/20231016/202310161944.966gHsq4-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/202310161944.966gHsq4-lkp@xxxxxxxxx/ All errors (new ones prefixed by >>): ld: vmlinux.o: in function `leds_tuxedo_ite8291_hid_feature_report_set': >> drivers/leds/rgb/leds-tuxedo-ite8291.c:89: undefined reference to `hid_hw_raw_request' ld: vmlinux.o: in function `leds_tuxedo_ite8291_write_row': >> drivers/leds/rgb/leds-tuxedo-ite8291.c:130: undefined reference to `hid_hw_output_report' ld: vmlinux.o: in function `hid_parse': >> include/linux/hid.h:1091: undefined reference to `hid_open_report' ld: vmlinux.o: in function `leds_tuxedo_ite8291_start_hw': >> drivers/leds/rgb/leds-tuxedo-ite8291.c:186: undefined reference to `hid_hw_start' >> ld: drivers/leds/rgb/leds-tuxedo-ite8291.c:194: undefined reference to `hid_hw_open' >> ld: drivers/leds/rgb/leds-tuxedo-ite8291.c:203: undefined reference to `hid_hw_stop' >> ld: drivers/leds/rgb/leds-tuxedo-ite8291.c:203: undefined reference to `hid_hw_stop' ld: vmlinux.o: in function `leds_tuxedo_ite8291_stop_hw': >> drivers/leds/rgb/leds-tuxedo-ite8291.c:210: undefined reference to `hid_hw_close' ld: drivers/leds/rgb/leds-tuxedo-ite8291.c:212: undefined reference to `hid_hw_stop' ld: vmlinux.o: in function `leds_tuxedo_ite8291_init': >> drivers/leds/rgb/leds-tuxedo-ite8291.c:447: undefined reference to `__hid_register_driver' ld: vmlinux.o: in function `leds_tuxedo_ite8291_exit': >> drivers/leds/rgb/leds-tuxedo-ite8291.c:447: undefined reference to `hid_unregister_driver' vim +89 drivers/leds/rgb/leds-tuxedo-ite8291.c 77 78 /** 79 * Just a generic helper function to reduce boilerplate code 80 */ 81 static int leds_tuxedo_ite8291_hid_feature_report_set(struct hid_device *hdev, u8 *data, size_t len) 82 { 83 int result; 84 u8 *buf; 85 86 buf = kmemdup(data, len, GFP_KERNEL); 87 if (!buf) 88 return -ENOMEM; > 89 result = hid_hw_raw_request(hdev, buf[0], buf, len, HID_FEATURE_REPORT, HID_REQ_SET_REPORT); 90 kfree(buf); 91 92 return result; 93 } 94 95 /** 96 * Update brightness of the whole keyboard. Only used for initialization as this doesn't allow per 97 * key brightness control. That is implemented with RGB value scaling. 98 */ 99 static int leds_tuxedo_ite8291_write_brightness(struct hid_device *hdev, u8 brightness) 100 { 101 int result; 102 u8 brightness_capped = brightness > LEDS_TUXEDO_ITE8291_GLOBAL_BRIGHTNESS_MAX ? 103 LEDS_TUXEDO_ITE8291_GLOBAL_BRIGHTNESS_MAX : brightness; 104 u8 ctrl_set_brightness[8] = {0x08, 0x02, LEDS_TUXEDO_ITE8291_PARAM_MODE_USER, 0x00, 105 brightness_capped, 0x00, 0x00, 0x00}; 106 107 result = leds_tuxedo_ite8291_hid_feature_report_set(hdev, ctrl_set_brightness, 108 sizeof(ctrl_set_brightness)); 109 if (result < 0) 110 return result; 111 112 return 0; 113 } 114 115 /** 116 * Update color of a singular row from row_data. This is the smallest unit this device allows to 117 * write. Changes are applied when the last row (row_index == 5) is written. 118 */ 119 static int leds_tuxedo_ite8291_write_row(struct hid_device *hdev, row_data_t row_data, 120 int row_index) 121 { 122 int result; 123 u8 ctrl_announce_row_data[8] = {0x16, 0x00, row_index, 0x00, 0x00, 0x00, 0x00, 0x00}; 124 125 result = leds_tuxedo_ite8291_hid_feature_report_set(hdev, ctrl_announce_row_data, 126 sizeof(ctrl_announce_row_data)); 127 if (result < 0) 128 return result; 129 > 130 result = hid_hw_output_report(hdev, row_data[row_index], sizeof(row_data[row_index])); 131 if (result < 0) 132 return result; 133 134 return 0; 135 } 136 137 /** 138 * Write color and brightness to the whole keyboard from row data. Note that per key brightness is 139 * encoded in the RGB values of the row_data and the gobal brightness is a fixed value. 140 */ 141 static int leds_tuxedo_ite8291_write_all(struct hid_device *hdev, row_data_t row_data) 142 { 143 int result, row_index; 144 145 if (hdev == NULL) 146 return -ENODEV; 147 148 result = leds_tuxedo_ite8291_write_brightness(hdev, 149 LEDS_TUXEDO_ITE8291_GLOBAL_BRIGHTNESS_DEFAULT); 150 if (result < 0) 151 return result; 152 153 for (row_index = 0; row_index < LEDS_TUXEDO_ITE8291_ROWS; ++row_index) { 154 result = leds_tuxedo_ite8291_write_row(hdev, row_data, row_index); 155 if (result < 0) 156 return result; 157 } 158 159 return 0; 160 } 161 162 static int leds_tuxedo_ite8291_write_state(struct hid_device *hdev) 163 { 164 struct leds_tuxedo_ite8291_driver_data_t *driver_data = hid_get_drvdata(hdev); 165 166 return leds_tuxedo_ite8291_write_all(hdev, driver_data->row_data); 167 } 168 169 static int leds_tuxedo_ite8291_write_off(struct hid_device *hdev) 170 { 171 int result; 172 u8 ctrl_write_off[8] = {0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 173 174 result = leds_tuxedo_ite8291_hid_feature_report_set(hdev, ctrl_write_off, 175 sizeof(ctrl_write_off)); 176 if (result < 0) 177 return result; 178 179 return 0; 180 } 181 182 static int leds_tuxedo_ite8291_start_hw(struct hid_device *hdev) 183 { 184 int result; 185 > 186 result = hid_hw_start(hdev, HID_CONNECT_DEFAULT); 187 if (result < 0) 188 goto err_start; 189 190 result = hid_hw_power(hdev, PM_HINT_FULLON); 191 if (result < 0) 192 goto err_power; 193 > 194 result = hid_hw_open(hdev); 195 if (result) 196 goto err_open; 197 198 return 0; 199 200 err_open: 201 hid_hw_power(hdev, PM_HINT_NORMAL); 202 err_power: > 203 hid_hw_stop(hdev); 204 err_start: 205 return result; 206 } 207 208 static void leds_tuxedo_ite8291_stop_hw(struct hid_device *hdev) 209 { > 210 hid_hw_close(hdev); 211 hid_hw_power(hdev, PM_HINT_NORMAL); 212 hid_hw_stop(hdev); 213 } 214 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki