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 &lt;&gt;</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 &lt;dtor&#64;mail.ru&gt;<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 />&#64;&#64; -5,7 +5,7 &#64;&#64;<br /> * Copyright (c) 2005 Nick Sillik &lt;n.sillik&#64;temple.edu&gt;<br /> *<br /> * Initial work by:<br />- * Copyright (c) 2003 Erik Thyren &lt;erth7411&#64;student.uu.se&gt;<br />+ * Copyright (c) 2003 Erik Thyren &lt;erth7411&#64;student.uu.se&gt;<br /> *<br /> * Based on usbmouse.c (Vojtech Pavlik) and xpad.c (Marko Friedemann)<br /> *<br />&#64;&#64; -46,7 +46,7 &#64;&#64; 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 />&#64;&#64; -58,7 +58,7 &#64;&#64; static void usb_onetouch_irq(struct urb <br /> {<br /> struct usb_onetouch *onetouch = urb-&gt;context;<br /> signed char *data = onetouch-&gt;data;<br />- struct input_dev *dev = &amp;onetouch-&gt;dev;<br />+ struct input_dev *dev = onetouch-&gt;dev;<br /> int status;<br /> <br /> switch (urb-&gt;status) {<br />&#64;&#64; -74,11 +74,9 &#64;&#64; static void usb_onetouch_irq(struct urb <br /> }<br /> <br /> input_regs(dev, regs);<br />-<br />- input_report_key(&amp;onetouch-&gt;dev, ONETOUCH_BUTTON,<br />- data[0] &amp; 0x02);<br />-<br />+ input_report_key(dev, ONETOUCH_BUTTON, data[0] &amp; 0x02);<br /> input_sync(dev);<br />+<br /> resubmit:<br /> status = usb_submit_urb (urb, SLAB_ATOMIC);<br /> if (status)<br />&#64;&#64; -113,8 +111,8 &#64;&#64; 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-&gt;pusb_intf-&gt;cur_altsetting;<br /> <br />&#64;&#64; -122,62 +120,62 &#64;&#64; int onetouch_connect_input(struct us_dat<br /> return -ENODEV;<br /> <br /> endpoint = &amp;interface-&gt;endpoint[2].desc;<br />- if(!(endpoint-&gt;bEndpointAddress &amp; USB_DIR_IN))<br />+ if (!(endpoint-&gt;bEndpointAddress &amp; USB_DIR_IN))<br /> return -ENODEV;<br />- if((endpoint-&gt;bmAttributes &amp; USB_ENDPOINT_XFERTYPE_MASK)<br />+ if ((endpoint-&gt;bmAttributes &amp; USB_ENDPOINT_XFERTYPE_MASK)<br /> != USB_ENDPOINT_XFER_INT)<br /> return -ENODEV;<br /> <br /> pipe = usb_rcvintpipe(udev, endpoint-&gt;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-&gt;data = usb_buffer_alloc(udev, ONETOUCH_PKT_LEN,<br /> SLAB_ATOMIC, &amp;onetouch-&gt;data_dma);<br />- if (!onetouch-&gt;data){<br />- kfree(onetouch);<br />- return -ENOMEM;<br />- }<br />+ if (!onetouch-&gt;data)<br />+ goto fail1;<br /> <br /> onetouch-&gt;irq = usb_alloc_urb(0, GFP_KERNEL);<br />- if (!onetouch-&gt;irq){<br />- kfree(onetouch);<br />- usb_buffer_free(udev, ONETOUCH_PKT_LEN,<br />- onetouch-&gt;data, onetouch-&gt;data_dma);<br />- return -ENODEV;<br />- }<br />-<br />+ if (!onetouch-&gt;irq)<br />+ goto fail2;<br /> <br /> onetouch-&gt;udev = udev;<br />-<br />- set_bit(EV_KEY, onetouch-&gt;dev.evbit);<br />- set_bit(ONETOUCH_BUTTON, onetouch-&gt;dev.keybit);<br />- clear_bit(0, onetouch-&gt;dev.keybit);<br />-<br />- onetouch-&gt;dev.private = onetouch;<br />- onetouch-&gt;dev.open = usb_onetouch_open;<br />- onetouch-&gt;dev.close = usb_onetouch_close;<br />-<br />- usb_make_path(udev, path, sizeof(path));<br />- sprintf(onetouch-&gt;phys, "%s/input0", path);<br />-<br />- onetouch-&gt;dev.name = onetouch-&gt;name;<br />- onetouch-&gt;dev.phys = onetouch-&gt;phys;<br />-<br />- usb_to_input_id(udev, &amp;onetouch-&gt;dev.id);<br />-<br />- onetouch-&gt;dev.dev = &amp;udev-&gt;dev;<br />+ onetouch-&gt;dev = input_dev;<br /> <br /> if (udev-&gt;manufacturer)<br />- strcat(onetouch-&gt;name, udev-&gt;manufacturer);<br />- if (udev-&gt;product)<br />- sprintf(onetouch-&gt;name, "%s %s", onetouch-&gt;name,<br />- udev-&gt;product);<br />+ strlcpy(onetouch-&gt;name, udev-&gt;manufacturer,<br />+ sizeof(onetouch-&gt;name));<br />+ if (udev-&gt;product) {<br />+ if (udev-&gt;manufacturer)<br />+ strlcat(onetouch-&gt;name, " ", sizeof(onetouch-&gt;name));<br />+ strlcat(onetouch-&gt;name, udev-&gt;product, sizeof(onetouch-&gt;name));<br />+ }<br />+<br /> if (!strlen(onetouch-&gt;name))<br />- sprintf(onetouch-&gt;name, "Maxtor Onetouch %04x:%04x",<br />- onetouch-&gt;dev.id.vendor, onetouch-&gt;dev.id.product);<br />+ snprintf(onetouch-&gt;name, sizeof(onetouch-&gt;name),<br />+ "Maxtor Onetouch %04x:%04x",<br />+ le16_to_cpu(udev-&gt;descriptor.idVendor),<br />+ le16_to_cpu(udev-&gt;descriptor.idProduct));<br />+<br />+ usb_make_path(udev, onetouch-&gt;phys, sizeof(onetouch-&gt;phys));<br />+ strlcat(onetouch-&gt;phys, "/input0", sizeof(onetouch-&gt;phys));<br />+<br />+ input_dev-&gt;name = onetouch-&gt;name;<br />+ input_dev-&gt;phys = onetouch-&gt;phys;<br />+ usb_to_input_id(udev, &amp;input_dev-&gt;id);<br />+ input_dev-&gt;cdev.dev = &amp;udev-&gt;dev;<br />+<br />+ set_bit(EV_KEY, input_dev-&gt;evbit);<br />+ set_bit(ONETOUCH_BUTTON, input_dev-&gt;keybit);<br />+ clear_bit(0, input_dev-&gt;keybit);<br />+<br />+ input_dev-&gt;private = onetouch;<br />+ input_dev-&gt;open = usb_onetouch_open;<br />+ input_dev-&gt;close = usb_onetouch_close;<br /> <br /> usb_fill_int_urb(onetouch-&gt;irq, udev, pipe, onetouch-&gt;data,<br /> (maxp &gt; 8 ? 8 : maxp),<br />&#64;&#64; -188,10 +186,15 &#64;&#64; int onetouch_connect_input(struct us_dat<br /> ss-&gt;extra_destructor = onetouch_release_input;<br /> ss-&gt;extra = onetouch;<br /> <br />- input_register_device(&amp;onetouch-&gt;dev);<br />- printk(KERN_INFO "usb-input: %s on %s\n", onetouch-&gt;dev.name, path);<br />+ input_register_device(onetouch-&gt;dev);<br /> <br /> return 0;<br />+<br />+ fail2: usb_buffer_free(udev, ONETOUCH_PKT_LEN,<br />+ onetouch-&gt;data, onetouch-&gt;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 />&#64;&#64; -200,11 +203,9 &#64;&#64; void onetouch_release_input(void *onetou<br /> <br /> if (onetouch) {<br /> usb_kill_urb(onetouch-&gt;irq);<br />- input_unregister_device(&amp;onetouch-&gt;dev);<br />+ input_unregister_device(onetouch-&gt;dev);<br /> usb_free_urb(onetouch-&gt;irq);<br /> usb_buffer_free(onetouch-&gt;udev, ONETOUCH_PKT_LEN,<br /> onetouch-&gt;data, onetouch-&gt;data_dma);<br />- printk(KERN_INFO "usb-input: deregistering %s\n",<br />- onetouch-&gt;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&#64;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>

Pages: 1 2 3 4 5 6 7 8 9 10