CINXE.COM
LKML: Dmitry Torokhov: [patch 12/28] Input: convert onetouch to dynamic input_dev allocation
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>LKML: Dmitry Torokhov: [patch 12/28] Input: convert onetouch to dynamic input_dev allocation</title><link href="/css/message.css" rel="stylesheet" type="text/css" /><link href="/css/wrap.css" rel="alternate stylesheet" type="text/css" title="wrap" /><link href="/css/nowrap.css" rel="stylesheet" type="text/css" title="nowrap" /><link href="/favicon.ico" rel="shortcut icon" /><script src="/js/simple-calendar.js" type="text/javascript"></script><script src="/js/styleswitcher.js" type="text/javascript"></script><link rel="alternate" type="application/rss+xml" title="lkml.org : last 100 messages" href="/rss.php" /><link rel="alternate" type="application/rss+xml" title="lkml.org : last messages by Dmitry Torokhov" href="/groupie.php?aid=10658" /><!--Matomo--><script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(["setDoNotTrack", true]); _paq.push(["disableCookies"]); _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="//m.lkml.org/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '1']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script><!--End Matomo Code--></head><body onload="es.jasper.simpleCalendar.init();" itemscope="itemscope" itemtype="http://schema.org/BlogPosting"><table border="0" cellpadding="0" cellspacing="0"><tr><td width="180" align="center"><a href="/"><img style="border:0;width:135px;height:32px" src="/images/toprowlk.gif" alt="lkml.org" /></a></td><td width="32">聽</td><td class="nb"><div><a class="nb" href="/lkml"> [lkml]</a> 聽 <a class="nb" href="/lkml/2005"> [2005]</a> 聽 <a class="nb" href="/lkml/2005/9"> [Sep]</a> 聽 <a class="nb" href="/lkml/2005/9/15"> [15]</a> 聽 <a class="nb" href="/lkml/last100"> [last100]</a> 聽 <a href="/rss.php"><img src="/images/rss-or.gif" border="0" alt="RSS Feed" /></a></div><div>Views: <a href="#" class="nowrap" onclick="setActiveStyleSheet('wrap');return false;">[wrap]</a><a href="#" class="wrap" onclick="setActiveStyleSheet('nowrap');return false;">[no wrap]</a> 聽 <a class="nb" href="/lkml/mheaders/2005/9/15/94" onclick="this.href='/lkml/headers'+'/2005/9/15/94';">[headers]</a>聽 <a href="/lkml/bounce/2005/9/15/94">[forward]</a>聽 </div></td><td width="32">聽</td></tr><tr><td valign="top"><div class="es-jasper-simpleCalendar" baseurl="/lkml/"></div><div class="threadlist">Messages in this thread</div><ul class="threadlist"><li class="root"><a href="/lkml/2005/9/15/58">First message in thread</a></li><li><a href="/lkml/2005/9/15/58">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/9/15/54">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/55">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/56">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/57">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/59">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/60">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/61">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/9/27/26">Greg KH</a><ul><li><a href="/lkml/2005/9/27/45">Markus Lidel</a></li></ul></li></ul></li><li><a href="/lkml/2005/9/15/63">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/9/15/101">Marcel Holtmann</a><ul><li><a href="/lkml/2005/9/15/200">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/9/15/206">Marcel Holtmann</a></li></ul></li></ul></li></ul></li><li><a href="/lkml/2005/9/15/64">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/65">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/9/27/29">Greg KH</a></li></ul></li><li><a href="/lkml/2005/9/15/66">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/67">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/68">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/70">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/71">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/72">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/89">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/90">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/91">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/92">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/93">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/10/5/315">Greg KH</a><ul><li><a href="/lkml/2005/10/5/317">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/10/5/330">Greg KH</a></li></ul></li></ul></li></ul></li><li class="origin"><a href="">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/95">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/96">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/104">Marcel Holtmann</a><ul><li><a href="/lkml/2005/9/15/201">Dmitry Torokhov</a></li></ul></li><li><a href="/lkml/2005/9/15/106">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/107">Dmitry Torokhov</a></li><li><a href="/lkml/2005/9/15/388">Andrew Morton</a><ul><li><a href="/lkml/2005/9/15/389">Dmitry Torokhov</a><ul><li><a href="/lkml/2005/9/16/2">Andrew Morton</a><ul><li><a href="/lkml/2005/9/16/3">Dmitry Torokhov</a></li></ul></li></ul></li></ul></li></ul></li></ul><div class="threadlist">Patch in this message</div><ul class="threadlist"><li><a href="/lkml/diff/2005/9/15/94/1">Get diff 1</a></li></ul></td><td width="32" rowspan="2" class="c" valign="top"><img src="/images/icornerl.gif" width="32" height="32" alt="/" /></td><td class="c" rowspan="2" valign="top" style="padding-top: 1em"><table><tr><td><table><tr><td class="lp">Date</td><td class="rp" itemprop="datePublished">Thu, 15 Sep 2005 02:01:43 -0500</td></tr><tr><td class="lp">From</td><td class="rp" itemprop="author">Dmitry Torokhov <></td></tr><tr><td class="lp">Subject</td><td class="rp" itemprop="name">[patch 12/28] Input: convert onetouch to dynamic input_dev allocation</td></tr></table></td><td></td></tr></table><pre itemprop="articleBody">Input: convert onetouch to dynamic input_dev allocation<br /><br />This is required for input_dev sysfs integration<br /><br />Signed-off-by: Dmitry Torokhov <dtor@mail.ru><br />---<br /><br /> drivers/usb/storage/onetouch.c | 105 ++++++++++++++++++++---------------------<br /> 1 files changed, 53 insertions(+), 52 deletions(-)<br /><br />Index: work/drivers/usb/storage/onetouch.c<br />===================================================================<br />--- work.orig/drivers/usb/storage/onetouch.c<br />+++ work/drivers/usb/storage/onetouch.c<br />@@ -5,7 +5,7 @@<br /> * Copyright (c) 2005 Nick Sillik <n.sillik@temple.edu><br /> *<br /> * Initial work by:<br />- * Copyright (c) 2003 Erik Thyren <erth7411@student.uu.se><br />+ * Copyright (c) 2003 Erik Thyren <erth7411@student.uu.se><br /> *<br /> * Based on usbmouse.c (Vojtech Pavlik) and xpad.c (Marko Friedemann)<br /> *<br />@@ -46,7 +46,7 @@ void onetouch_release_input(void *onetou<br /> struct usb_onetouch {<br /> char name[128];<br /> char phys[64];<br />- struct input_dev dev; /* input device interface */<br />+ struct input_dev *dev; /* input device interface */<br /> struct usb_device *udev; /* usb device */<br /> <br /> struct urb *irq; /* urb for interrupt in report */<br />@@ -58,7 +58,7 @@ static void usb_onetouch_irq(struct urb <br /> {<br /> struct usb_onetouch *onetouch = urb->context;<br /> signed char *data = onetouch->data;<br />- struct input_dev *dev = &onetouch->dev;<br />+ struct input_dev *dev = onetouch->dev;<br /> int status;<br /> <br /> switch (urb->status) {<br />@@ -74,11 +74,9 @@ static void usb_onetouch_irq(struct urb <br /> }<br /> <br /> input_regs(dev, regs);<br />-<br />- input_report_key(&onetouch->dev, ONETOUCH_BUTTON,<br />- data[0] & 0x02);<br />-<br />+ input_report_key(dev, ONETOUCH_BUTTON, data[0] & 0x02);<br /> input_sync(dev);<br />+<br /> resubmit:<br /> status = usb_submit_urb (urb, SLAB_ATOMIC);<br /> if (status)<br />@@ -113,8 +111,8 @@ int onetouch_connect_input(struct us_dat<br /> struct usb_host_interface *interface;<br /> struct usb_endpoint_descriptor *endpoint;<br /> struct usb_onetouch *onetouch;<br />+ struct input_dev *input_dev;<br /> int pipe, maxp;<br />- char path[64];<br /> <br /> interface = ss->pusb_intf->cur_altsetting;<br /> <br />@@ -122,62 +120,62 @@ int onetouch_connect_input(struct us_dat<br /> return -ENODEV;<br /> <br /> endpoint = &interface->endpoint[2].desc;<br />- if(!(endpoint->bEndpointAddress & USB_DIR_IN))<br />+ if (!(endpoint->bEndpointAddress & USB_DIR_IN))<br /> return -ENODEV;<br />- if((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)<br />+ if ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)<br /> != USB_ENDPOINT_XFER_INT)<br /> return -ENODEV;<br /> <br /> pipe = usb_rcvintpipe(udev, endpoint->bEndpointAddress);<br /> maxp = usb_maxpacket(udev, pipe, usb_pipeout(pipe));<br /> <br />- if (!(onetouch = kcalloc(1, sizeof(struct usb_onetouch), GFP_KERNEL)))<br />- return -ENOMEM;<br />+ onetouch = kzalloc(sizeof(struct usb_onetouch), GFP_KERNEL);<br />+ input_dev = input_allocate_device();<br />+ if (!onetouch || !input_dev)<br />+ goto fail1;<br /> <br /> onetouch->data = usb_buffer_alloc(udev, ONETOUCH_PKT_LEN,<br /> SLAB_ATOMIC, &onetouch->data_dma);<br />- if (!onetouch->data){<br />- kfree(onetouch);<br />- return -ENOMEM;<br />- }<br />+ if (!onetouch->data)<br />+ goto fail1;<br /> <br /> onetouch->irq = usb_alloc_urb(0, GFP_KERNEL);<br />- if (!onetouch->irq){<br />- kfree(onetouch);<br />- usb_buffer_free(udev, ONETOUCH_PKT_LEN,<br />- onetouch->data, onetouch->data_dma);<br />- return -ENODEV;<br />- }<br />-<br />+ if (!onetouch->irq)<br />+ goto fail2;<br /> <br /> onetouch->udev = udev;<br />-<br />- set_bit(EV_KEY, onetouch->dev.evbit);<br />- set_bit(ONETOUCH_BUTTON, onetouch->dev.keybit);<br />- clear_bit(0, onetouch->dev.keybit);<br />-<br />- onetouch->dev.private = onetouch;<br />- onetouch->dev.open = usb_onetouch_open;<br />- onetouch->dev.close = usb_onetouch_close;<br />-<br />- usb_make_path(udev, path, sizeof(path));<br />- sprintf(onetouch->phys, "%s/input0", path);<br />-<br />- onetouch->dev.name = onetouch->name;<br />- onetouch->dev.phys = onetouch->phys;<br />-<br />- usb_to_input_id(udev, &onetouch->dev.id);<br />-<br />- onetouch->dev.dev = &udev->dev;<br />+ onetouch->dev = input_dev;<br /> <br /> if (udev->manufacturer)<br />- strcat(onetouch->name, udev->manufacturer);<br />- if (udev->product)<br />- sprintf(onetouch->name, "%s %s", onetouch->name,<br />- udev->product);<br />+ strlcpy(onetouch->name, udev->manufacturer,<br />+ sizeof(onetouch->name));<br />+ if (udev->product) {<br />+ if (udev->manufacturer)<br />+ strlcat(onetouch->name, " ", sizeof(onetouch->name));<br />+ strlcat(onetouch->name, udev->product, sizeof(onetouch->name));<br />+ }<br />+<br /> if (!strlen(onetouch->name))<br />- sprintf(onetouch->name, "Maxtor Onetouch %04x:%04x",<br />- onetouch->dev.id.vendor, onetouch->dev.id.product);<br />+ snprintf(onetouch->name, sizeof(onetouch->name),<br />+ "Maxtor Onetouch %04x:%04x",<br />+ le16_to_cpu(udev->descriptor.idVendor),<br />+ le16_to_cpu(udev->descriptor.idProduct));<br />+<br />+ usb_make_path(udev, onetouch->phys, sizeof(onetouch->phys));<br />+ strlcat(onetouch->phys, "/input0", sizeof(onetouch->phys));<br />+<br />+ input_dev->name = onetouch->name;<br />+ input_dev->phys = onetouch->phys;<br />+ usb_to_input_id(udev, &input_dev->id);<br />+ input_dev->cdev.dev = &udev->dev;<br />+<br />+ set_bit(EV_KEY, input_dev->evbit);<br />+ set_bit(ONETOUCH_BUTTON, input_dev->keybit);<br />+ clear_bit(0, input_dev->keybit);<br />+<br />+ input_dev->private = onetouch;<br />+ input_dev->open = usb_onetouch_open;<br />+ input_dev->close = usb_onetouch_close;<br /> <br /> usb_fill_int_urb(onetouch->irq, udev, pipe, onetouch->data,<br /> (maxp > 8 ? 8 : maxp),<br />@@ -188,10 +186,15 @@ int onetouch_connect_input(struct us_dat<br /> ss->extra_destructor = onetouch_release_input;<br /> ss->extra = onetouch;<br /> <br />- input_register_device(&onetouch->dev);<br />- printk(KERN_INFO "usb-input: %s on %s\n", onetouch->dev.name, path);<br />+ input_register_device(onetouch->dev);<br /> <br /> return 0;<br />+<br />+ fail2: usb_buffer_free(udev, ONETOUCH_PKT_LEN,<br />+ onetouch->data, onetouch->data_dma);<br />+ fail1: kfree(onetouch);<br />+ input_free_device(input_dev);<br />+ return -ENOMEM;<br /> }<br /> <br /> void onetouch_release_input(void *onetouch_)<br />@@ -200,11 +203,9 @@ void onetouch_release_input(void *onetou<br /> <br /> if (onetouch) {<br /> usb_kill_urb(onetouch->irq);<br />- input_unregister_device(&onetouch->dev);<br />+ input_unregister_device(onetouch->dev);<br /> usb_free_urb(onetouch->irq);<br /> usb_buffer_free(onetouch->udev, ONETOUCH_PKT_LEN,<br /> onetouch->data, onetouch->data_dma);<br />- printk(KERN_INFO "usb-input: deregistering %s\n",<br />- onetouch->dev.name);<br /> }<br /> }<br />-<br />To unsubscribe from this list: send the line "unsubscribe linux-kernel" in<br />the body of a message to majordomo@vger.kernel.org<br />More majordomo info at <a href="http://vger.kernel.org/majordomo-info.html">http://vger.kernel.org/majordomo-info.html</a><br />Please read the FAQ at <a href="http://www.tux.org/lkml/">http://www.tux.org/lkml/</a><br /><br /></pre></td><td width="32" rowspan="2" class="c" valign="top"><img src="/images/icornerr.gif" width="32" height="32" alt="\" /></td></tr><tr><td align="right" valign="bottom"> 聽 </td></tr><tr><td align="right" valign="bottom">聽</td><td class="c" valign="bottom" style="padding-bottom: 0px"><img src="/images/bcornerl.gif" width="32" height="32" alt="\" /></td><td class="c">聽</td><td class="c" valign="bottom" style="padding-bottom: 0px"><img src="/images/bcornerr.gif" width="32" height="32" alt="/" /></td></tr><tr><td align="right" valign="top" colspan="2"> 聽 </td><td class="lm">Last update: 2005-09-15 09:36 聽聽 [from the cache]<br />漏2003-2020 <a href="http://blog.jasper.es/"><span itemprop="editor">Jasper Spaans</span></a>|hosted at <a href="https://www.digitalocean.com/?refcode=9a8e99d24cf9">Digital Ocean</a> and my Meterkast|<a href="http://blog.jasper.es/categories.html#lkml-ref">Read the blog</a></td><td>聽</td></tr></table><script language="javascript" src="/js/styleswitcher.js" type="text/javascript"></script></body></html>