Re: [PATCH v2] Drivers: input: misc: Add driver touchscreen-buttons to support physically labeled buttons on touch screen surfaces

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

 



Hi Carl,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on input/next]
[also build test WARNING on v5.10-rc2 next-20201102]
[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]

url:    https://github.com/0day-ci/linux/commits/Carl-Philipp-Klemm/Drivers-input-misc-Add-driver-touchscreen-buttons-to-support-physically-labeled-buttons-on-touch-screen-surfaces/20201030-010622
base:   https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git next
config: mips-allyesconfig (attached as .config)
compiler: mips-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/00fd93a32ffbfc2ce311ed11e49a596eae970933
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Carl-Philipp-Klemm/Drivers-input-misc-Add-driver-touchscreen-buttons-to-support-physically-labeled-buttons-on-touch-screen-surfaces/20201030-010622
        git checkout 00fd93a32ffbfc2ce311ed11e49a596eae970933
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=mips 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>):

   drivers/input/misc/touchscreen-buttons.c: In function 'touchscreen_buttons_input_event':
   drivers/input/misc/touchscreen-buttons.c:179:85: warning: comparison of unsigned expression >= 0 is always true [-Wtype-limits]
     179 |  } else if (buttons->queue.lastindex < EVENT_QUEUE_SIZE && buttons->queue.lastindex >= 0) {
         |                                                                                     ^~
   drivers/input/misc/touchscreen-buttons.c: At top level:
>> drivers/input/misc/touchscreen-buttons.c:230:6: warning: no previous prototype for 'merge_task_handler' [-Wmissing-prototypes]
     230 | void merge_task_handler(struct work_struct *work)
         |      ^~~~~~~~~~~~~~~~~~
>> drivers/input/misc/touchscreen-buttons.c:240:6: warning: no previous prototype for 'close_task_handler' [-Wmissing-prototypes]
     240 | void close_task_handler(struct work_struct *work)
         |      ^~~~~~~~~~~~~~~~~~
>> drivers/input/misc/touchscreen-buttons.c:250:6: warning: no previous prototype for 'open_task_handler' [-Wmissing-prototypes]
     250 | void open_task_handler(struct work_struct *work)
         |      ^~~~~~~~~~~~~~~~~
>> drivers/input/misc/touchscreen-buttons.c:382:5: warning: no previous prototype for 'touchscreen_buttons_idev_opened' [-Wmissing-prototypes]
     382 | int touchscreen_buttons_idev_opened(struct input_dev *idev)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/input/misc/touchscreen-buttons.c:405:6: warning: no previous prototype for 'touchscreen_buttons_idev_closed' [-Wmissing-prototypes]
     405 | void touchscreen_buttons_idev_closed(struct input_dev *idev)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

vim +/merge_task_handler +230 drivers/input/misc/touchscreen-buttons.c

   229	
 > 230	void merge_task_handler(struct work_struct *work)
   231	{
   232		struct touchscreen_buttons *buttons = container_of(work, struct touchscreen_buttons, merge_task);
   233	
   234		mutex_lock(&buttons->mutex);
   235		if (buttons->ts_handle && buttons->ts_handle->dev)
   236			touchscreen_buttons_merge_capabilitys(buttons->filtered_ts_idev, buttons->ts_handle->dev);
   237		mutex_unlock(&buttons->mutex);
   238	}
   239	
 > 240	void close_task_handler(struct work_struct *work)
   241	{
   242		struct touchscreen_buttons *buttons = container_of(work, struct touchscreen_buttons, close_task);
   243	
   244		mutex_lock(&buttons->mutex);
   245		if (buttons && buttons->ts_handle && buttons->ts_handle->open != 0)
   246			input_close_device(buttons->ts_handle);
   247		mutex_unlock(&buttons->mutex);
   248	}
   249	
 > 250	void open_task_handler(struct work_struct *work)
   251	{
   252		struct touchscreen_buttons *buttons = container_of(work, struct touchscreen_buttons, open_task);
   253		int error;
   254	
   255		mutex_lock(&buttons->mutex);
   256		if (buttons && buttons->ts_handle) {
   257			error = input_open_device(buttons->ts_handle);
   258			if (error) {
   259				dev_err(buttons->dev, "Failed to open input device, error %d\n", error);
   260				input_unregister_handle(buttons->ts_handle);
   261				kfree(buttons->ts_handle);
   262				buttons->ts_handle = NULL;
   263			}
   264		}
   265		mutex_unlock(&buttons->mutex);
   266	}
   267	
   268	static int touchscreen_buttons_input_connect(struct input_handler *handler,
   269						     struct input_dev *dev, const struct input_device_id *id)
   270	{
   271		struct touchscreen_buttons *buttons;
   272	
   273		buttons = handler->private;
   274	
   275		mutex_lock(&buttons->mutex);
   276	
   277		if ((!buttons->ts_handle && device_match_of_node(&dev->dev, buttons->map->ts_node)) ||
   278			(dev->dev.parent && device_match_of_node(dev->dev.parent, buttons->map->ts_node))) {
   279			int error;
   280	
   281			dev_info(buttons->dev, "Binding to device: %s\n", dev_name(&dev->dev));
   282	
   283			buttons->ts_handle = kzalloc(sizeof(*buttons->ts_handle), GFP_KERNEL);
   284			if (!buttons->ts_handle) {
   285				mutex_unlock(&buttons->mutex);
   286				return -ENOMEM;
   287			}
   288	
   289			buttons->ts_handle->dev = dev;
   290			buttons->ts_handle->handler = handler;
   291			buttons->ts_handle->name = "touchscreen-buttons";
   292			buttons->ts_handle->private = handler->private;
   293			buttons->queue.lastindex = 0;
   294	
   295			error = input_register_handle(buttons->ts_handle);
   296			if (error) {
   297				dev_err(buttons->dev, "Failed to register input handler, error %d\n", error);
   298				kfree(buttons->ts_handle);
   299				buttons->ts_handle = NULL;
   300				mutex_unlock(&buttons->mutex);
   301				return error;
   302			}
   303	
   304			queue_work(buttons->workqueue, &buttons->merge_task);
   305	
   306			if (buttons->filtered_ts_idev->users > 0 && buttons->ts_handle->open == 0)
   307				queue_work(buttons->workqueue, &buttons->open_task);
   308		}
   309	
   310		mutex_unlock(&buttons->mutex);
   311		return 0;
   312	}
   313	
   314	static void touchscreen_buttons_input_disconnect(struct input_handle *handle)
   315	{
   316		struct touchscreen_buttons *buttons;
   317	
   318		buttons = handle->private;
   319	
   320		mutex_lock(&buttons->mutex);
   321		if (handle == buttons->ts_handle) {
   322			input_close_device(handle);
   323			input_unregister_handle(handle);
   324			kfree(handle);
   325			buttons->ts_handle = NULL;
   326			dev_info(buttons->dev, "Touchscreen device disconnected buttons disabled\n");
   327		} else {
   328			dev_err(buttons->dev, "Unknown device disconnected, %p should be %p", handle,
   329				buttons->ts_handle);
   330		}
   331		mutex_unlock(&buttons->mutex);
   332	}
   333	
   334	static struct touchscreen_button_map
   335	*touchscreen_buttons_get_devtree_pdata(struct device *dev)
   336	{
   337		struct touchscreen_button_map *map;
   338		struct fwnode_handle *child_node;
   339		struct device_node *node;
   340		int i;
   341	
   342		map = kzalloc(sizeof(*map), GFP_KERNEL);
   343		if (!map)
   344			return ERR_PTR(-ENOMEM);
   345	
   346		map->count = device_get_child_node_count(dev);
   347		if (map->count == 0)
   348			return ERR_PTR(-ENODEV);
   349	
   350		map->buttons = kcalloc(map->count, sizeof(*map->buttons), GFP_KERNEL);
   351		if (!map->buttons)
   352			return ERR_PTR(-ENOMEM);
   353	
   354		node = dev->of_node;
   355		map->ts_node = of_parse_phandle(node, "touchscreen_phandle", 0);
   356		if (!map->ts_node) {
   357			dev_err(dev, "touchscreen_phandle node missing\n");
   358			return ERR_PTR(-ENODEV);
   359		}
   360	
   361		dev_info(dev, "Device_node name: %s\n", map->ts_node->name);
   362	
   363		i = 0;
   364		device_for_each_child_node(dev, child_node) {
   365			struct touchscreen_button *button;
   366	
   367			button = &map->buttons[i];
   368	
   369			fwnode_property_read_u32(child_node, "x-position", &button->x);
   370			fwnode_property_read_u32(child_node, "y-position", &button->y);
   371			fwnode_property_read_u32(child_node, "x-size", &button->width);
   372			fwnode_property_read_u32(child_node, "y-size", &button->height);
   373			fwnode_property_read_u32(child_node, "keycode", &button->keycode);
   374			dev_info(dev,
   375				 "Adding button at x=%u y=%u size %u x %u keycode=%u\n",
   376				 button->x, button->y, button->width, button->height, button->keycode);
   377			++i;
   378		}
   379		return map;
   380	}
   381	
 > 382	int touchscreen_buttons_idev_opened(struct input_dev *idev)
   383	{
   384		struct touchscreen_buttons *buttons;
   385	
   386		buttons = dev_get_drvdata(idev->dev.parent);
   387	
   388		mutex_lock(&buttons->mutex);
   389		if (buttons && buttons->ts_handle) {
   390			if (buttons->ts_handle->open == 0) {
   391				queue_work(buttons->workqueue, &buttons->open_task);
   392				dev_dbg(idev->dev.parent, "idev opened\n");
   393			} else {
   394				dev_info(idev->dev.parent, "idev allready opened\n");
   395			}
   396		} else {
   397			dev_warn(idev->dev.parent,
   398				 "Input device opend but touchscreen not opened. %p %p\n", buttons,
   399				 buttons->ts_handle);
   400		}
   401		mutex_unlock(&buttons->mutex);
   402		return 0;
   403	}
   404	
 > 405	void touchscreen_buttons_idev_closed(struct input_dev *idev)
   406	{
   407		struct touchscreen_buttons *buttons;
   408	
   409		buttons = dev_get_drvdata(idev->dev.parent);
   410	
   411		mutex_lock(&buttons->mutex);
   412		if (buttons && buttons->ts_handle && buttons->ts_handle->open != 0) {
   413			queue_work(buttons->workqueue, &buttons->close_task);
   414			dev_dbg(idev->dev.parent, "idev closed\n");
   415		}
   416		mutex_unlock(&buttons->mutex);
   417	}
   418	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux