CINXE.COM

LKML: Dmitry Torokhov: [patch 22/28] drivers/media: convert 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 22/28] drivers/media: convert 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/60" onclick="this.href='/lkml/headers'+'/2005/9/15/60';">[headers]</a>聽 <a href="/lkml/bounce/2005/9/15/60">[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 class="origin"><a href="">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><a href="/lkml/2005/9/15/94">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/60/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:53 -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 22/28] drivers/media: convert to dynamic input_dev allocation</td></tr></table></td><td></td></tr></table><pre itemprop="articleBody">Input: convert drivers/media 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/media/common/ir-common.c | 1 <br /> drivers/media/dvb/cinergyT2/cinergyT2.c | 108 ++++++++++++++++++----------<br /> drivers/media/dvb/dvb-usb/dvb-usb-remote.c | 50 +++++++-----<br /> drivers/media/dvb/dvb-usb/dvb-usb.h | 3 <br /> drivers/media/dvb/ttpci/av7110_ir.c | 37 +++++----<br /> drivers/media/dvb/ttpci/budget-ci.c | 24 +++---<br /> drivers/media/dvb/ttusb-dec/ttusb_dec.c | 51 ++++++++-----<br /> drivers/media/video/bttvp.h | 2 <br /> drivers/media/video/cx88/cx88-input.c | 58 ++++++++-------<br /> drivers/media/video/ir-kbd-gpio.c | 52 +++++++------<br /> drivers/media/video/ir-kbd-i2c.c | 33 ++++----<br /> drivers/media/video/saa7134/saa7134-input.c | 39 +++++-----<br /> drivers/media/video/saa7134/saa7134.h | 2 <br /> 13 files changed, 268 insertions(+), 192 deletions(-)<br /><br />Index: work/drivers/media/video/ir-kbd-i2c.c<br />===================================================================<br />--- work.orig/drivers/media/video/ir-kbd-i2c.c<br />+++ work/drivers/media/video/ir-kbd-i2c.c<br />&#64;&#64; -121,10 +121,9 &#64;&#64; static IR_KEYTAB_TYPE ir_codes_purpletv[<br /> <br /> };<br /> <br />-struct IR;<br /> struct IR {<br /> struct i2c_client c;<br />- struct input_dev input;<br />+ struct input_dev *input;<br /> struct ir_input_state ir;<br /> <br /> struct work_struct work;<br />&#64;&#64; -271,9 +270,9 &#64;&#64; static void ir_key_poll(struct IR *ir)<br /> }<br /> <br /> if (0 == rc) {<br />- ir_input_nokey(&amp;ir-&gt;input,&amp;ir-&gt;ir);<br />+ ir_input_nokey(ir-&gt;input, &amp;ir-&gt;ir);<br /> } else {<br />- ir_input_keydown(&amp;ir-&gt;input,&amp;ir-&gt;ir, ir_key, ir_raw);<br />+ ir_input_keydown(ir-&gt;input, &amp;ir-&gt;ir, ir_key, ir_raw);<br /> }<br /> }<br /> <br />&#64;&#64; -318,11 +317,18 &#64;&#64; static int ir_attach(struct i2c_adapter <br /> char *name;<br /> int ir_type;<br /> struct IR *ir;<br />+ struct input_dev *input_dev;<br /> <br />- if (NULL == (ir = kmalloc(sizeof(struct IR),GFP_KERNEL)))<br />+ ir = kzalloc(sizeof(struct IR), GFP_KERNEL);<br />+ input_dev = input_allocate_device();<br />+ if (!ir || !input_dev) {<br />+ kfree(ir);<br />+ input_free_device(input_dev);<br /> return -ENOMEM;<br />- memset(ir,0,sizeof(*ir));<br />+ }<br />+<br /> ir-&gt;c = client_template;<br />+ ir-&gt;input = input_dev;<br /> <br /> i2c_set_clientdata(&amp;ir-&gt;c, ir);<br /> ir-&gt;c.adapter = adap;<br />&#64;&#64; -375,13 +381,12 &#64;&#64; static int ir_attach(struct i2c_adapter <br /> ir-&gt;c.dev.bus_id);<br /> <br /> /* init + register input device */<br />- ir_input_init(&amp;ir-&gt;input,&amp;ir-&gt;ir,ir_type,ir_codes);<br />- ir-&gt;input.id.bustype = BUS_I2C;<br />- ir-&gt;input.name = ir-&gt;c.name;<br />- ir-&gt;input.phys = ir-&gt;phys;<br />- input_register_device(&amp;ir-&gt;input);<br />- printk(DEVNAME ": %s detected at %s [%s]\n",<br />- ir-&gt;input.name,ir-&gt;input.phys,adap-&gt;name);<br />+ ir_input_init(input_dev, &amp;ir-&gt;ir, ir_type, ir_codes);<br />+ input_dev-&gt;id.bustype = BUS_I2C;<br />+ input_dev-&gt;name = ir-&gt;c.name;<br />+ input_dev-&gt;phys = ir-&gt;phys;<br />+<br />+ input_register_device(ir-&gt;input);<br /> <br /> /* start polling via eventd */<br /> INIT_WORK(&amp;ir-&gt;work, ir_work, ir);<br />&#64;&#64; -402,7 +407,7 &#64;&#64; static int ir_detach(struct i2c_client *<br /> flush_scheduled_work();<br /> <br /> /* unregister devices */<br />- input_unregister_device(&amp;ir-&gt;input);<br />+ input_unregister_device(ir-&gt;input);<br /> i2c_detach_client(&amp;ir-&gt;c);<br /> <br /> /* free memory */<br />Index: work/drivers/media/video/ir-kbd-gpio.c<br />===================================================================<br />--- work.orig/drivers/media/video/ir-kbd-gpio.c<br />+++ work/drivers/media/video/ir-kbd-gpio.c<br />&#64;&#64; -158,7 +158,7 &#64;&#64; static IR_KEYTAB_TYPE ir_codes_apac_view<br /> <br /> struct IR {<br /> struct bttv_sub_device *sub;<br />- struct input_dev input;<br />+ struct input_dev *input;<br /> struct ir_input_state ir;<br /> char name[32];<br /> char phys[32];<br />&#64;&#64; -217,23 +217,23 &#64;&#64; static void ir_handle_key(struct IR *ir)<br /> if (ir-&gt;mask_keydown) {<br /> /* bit set on keydown */<br /> if (gpio &amp; ir-&gt;mask_keydown) {<br />- ir_input_keydown(&amp;ir-&gt;input,&amp;ir-&gt;ir,data,data);<br />+ ir_input_keydown(ir-&gt;input, &amp;ir-&gt;ir, data, data);<br /> } else {<br />- ir_input_nokey(&amp;ir-&gt;input,&amp;ir-&gt;ir);<br />+ ir_input_nokey(ir-&gt;input, &amp;ir-&gt;ir);<br /> }<br /> <br /> } else if (ir-&gt;mask_keyup) {<br /> /* bit cleared on keydown */<br /> if (0 == (gpio &amp; ir-&gt;mask_keyup)) {<br />- ir_input_keydown(&amp;ir-&gt;input,&amp;ir-&gt;ir,data,data);<br />+ ir_input_keydown(ir-&gt;input, &amp;ir-&gt;ir, data, data);<br /> } else {<br />- ir_input_nokey(&amp;ir-&gt;input,&amp;ir-&gt;ir);<br />+ ir_input_nokey(ir-&gt;input, &amp;ir-&gt;ir);<br /> }<br /> <br /> } else {<br /> /* can't disturgissh keydown/up :-/ */<br />- ir_input_keydown(&amp;ir-&gt;input,&amp;ir-&gt;ir,data,data);<br />- ir_input_nokey(&amp;ir-&gt;input,&amp;ir-&gt;ir);<br />+ ir_input_keydown(ir-&gt;input, &amp;ir-&gt;ir, data, data);<br />+ ir_input_nokey(ir-&gt;input, &amp;ir-&gt;ir);<br /> }<br /> }<br /> <br />&#64;&#64; -268,13 +268,17 &#64;&#64; static int ir_probe(struct device *dev)<br /> {<br /> struct bttv_sub_device *sub = to_bttv_sub_dev(dev);<br /> struct IR *ir;<br />+ struct input_dev *input_dev;<br /> IR_KEYTAB_TYPE *ir_codes = NULL;<br /> int ir_type = IR_TYPE_OTHER;<br /> <br />- ir = kmalloc(sizeof(*ir),GFP_KERNEL);<br />- if (NULL == ir)<br />+ ir = kzalloc(sizeof(*ir), GFP_KERNEL);<br />+ input_dev = input_allocate_device();<br />+ if (!ir || !input_dev) {<br />+ kfree(ir);<br />+ input_free_device(input_dev);<br /> return -ENOMEM;<br />- memset(ir,0,sizeof(*ir));<br />+ }<br /> <br /> /* detect &amp; configure */<br /> switch (sub-&gt;core-&gt;type) {<br />&#64;&#64; -328,6 +332,7 &#64;&#64; static int ir_probe(struct device *dev)<br /> }<br /> if (NULL == ir_codes) {<br /> kfree(ir);<br />+ input_free_device(input_dev);<br /> return -ENODEV;<br /> }<br /> <br />&#64;&#64; -341,19 +346,19 &#64;&#64; static int ir_probe(struct device *dev)<br /> snprintf(ir-&gt;phys, sizeof(ir-&gt;phys), "pci-%s/ir0",<br /> pci_name(sub-&gt;core-&gt;pci));<br /> <br />- ir_input_init(&amp;ir-&gt;input, &amp;ir-&gt;ir, ir_type, ir_codes);<br />- ir-&gt;input.name = ir-&gt;name;<br />- ir-&gt;input.phys = ir-&gt;phys;<br />- ir-&gt;input.id.bustype = BUS_PCI;<br />- ir-&gt;input.id.version = 1;<br />+ ir_input_init(input_dev, &amp;ir-&gt;ir, ir_type, ir_codes);<br />+ input_dev-&gt;name = ir-&gt;name;<br />+ input_dev-&gt;phys = ir-&gt;phys;<br />+ input_dev-&gt;id.bustype = BUS_PCI;<br />+ input_dev-&gt;id.version = 1;<br /> if (sub-&gt;core-&gt;pci-&gt;subsystem_vendor) {<br />- ir-&gt;input.id.vendor = sub-&gt;core-&gt;pci-&gt;subsystem_vendor;<br />- ir-&gt;input.id.product = sub-&gt;core-&gt;pci-&gt;subsystem_device;<br />+ input_dev-&gt;id.vendor = sub-&gt;core-&gt;pci-&gt;subsystem_vendor;<br />+ input_dev-&gt;id.product = sub-&gt;core-&gt;pci-&gt;subsystem_device;<br /> } else {<br />- ir-&gt;input.id.vendor = sub-&gt;core-&gt;pci-&gt;vendor;<br />- ir-&gt;input.id.product = sub-&gt;core-&gt;pci-&gt;device;<br />+ input_dev-&gt;id.vendor = sub-&gt;core-&gt;pci-&gt;vendor;<br />+ input_dev-&gt;id.product = sub-&gt;core-&gt;pci-&gt;device;<br /> }<br />- ir-&gt;input.dev = &amp;sub-&gt;core-&gt;pci-&gt;dev;<br />+ input_dev-&gt;cdev.dev = &amp;sub-&gt;core-&gt;pci-&gt;dev;<br /> <br /> if (ir-&gt;polling) {<br /> INIT_WORK(&amp;ir-&gt;work, ir_work, ir);<br />&#64;&#64; -364,9 +369,8 &#64;&#64; static int ir_probe(struct device *dev)<br /> }<br /> <br /> /* all done */<br />- dev_set_drvdata(dev,ir);<br />- input_register_device(&amp;ir-&gt;input);<br />- printk(DEVNAME ": %s detected at %s\n",ir-&gt;input.name,ir-&gt;input.phys);<br />+ dev_set_drvdata(dev, ir);<br />+ input_register_device(ir-&gt;input);<br /> <br /> return 0;<br /> }<br />&#64;&#64; -380,7 +384,7 &#64;&#64; static int ir_remove(struct device *dev)<br /> flush_scheduled_work();<br /> }<br /> <br />- input_unregister_device(&amp;ir-&gt;input);<br />+ input_unregister_device(ir-&gt;input);<br /> kfree(ir);<br /> return 0;<br /> }<br />Index: work/drivers/media/video/saa7134/saa7134.h<br />===================================================================<br />--- work.orig/drivers/media/video/saa7134/saa7134.h<br />+++ work/drivers/media/video/saa7134/saa7134.h<br />&#64;&#64; -351,7 +351,7 &#64;&#64; struct saa7134_oss {<br /> <br /> /* IR input */<br /> struct saa7134_ir {<br />- struct input_dev dev;<br />+ struct input_dev *dev;<br /> struct ir_input_state ir;<br /> char name[32];<br /> char phys[32];<br />Index: work/drivers/media/video/saa7134/saa7134-input.c<br />===================================================================<br />--- work.orig/drivers/media/video/saa7134/saa7134-input.c<br />+++ work/drivers/media/video/saa7134/saa7134-input.c<br />&#64;&#64; -425,9 +425,9 &#64;&#64; static int build_key(struct saa7134_dev <br /> <br /> if ((ir-&gt;mask_keydown &amp;&amp; (0 != (gpio &amp; ir-&gt;mask_keydown))) ||<br /> (ir-&gt;mask_keyup &amp;&amp; (0 == (gpio &amp; ir-&gt;mask_keyup)))) {<br />- ir_input_keydown(&amp;ir-&gt;dev,&amp;ir-&gt;ir,data,data);<br />+ ir_input_keydown(ir-&gt;dev, &amp;ir-&gt;ir, data, data);<br /> } else {<br />- ir_input_nokey(&amp;ir-&gt;dev,&amp;ir-&gt;ir);<br />+ ir_input_nokey(ir-&gt;dev, &amp;ir-&gt;ir);<br /> }<br /> return 0;<br /> }<br />&#64;&#64; -456,6 +456,7 &#64;&#64; static void saa7134_input_timer(unsigned<br /> int saa7134_input_init1(struct saa7134_dev *dev)<br /> {<br /> struct saa7134_ir *ir;<br />+ struct input_dev *input_dev;<br /> IR_KEYTAB_TYPE *ir_codes = NULL;<br /> u32 mask_keycode = 0;<br /> u32 mask_keydown = 0;<br />&#64;&#64; -535,10 +536,13 &#64;&#64; int saa7134_input_init1(struct saa7134_d<br /> return -ENODEV;<br /> }<br /> <br />- ir = kmalloc(sizeof(*ir),GFP_KERNEL);<br />- if (NULL == ir)<br />+ ir = kzalloc(sizeof(*ir), GFP_KERNEL);<br />+ input_dev = input_allocate_device();<br />+ if (!ir || !input_dev) {<br />+ kfree(ir);<br />+ input_free_device(input_dev);<br /> return -ENOMEM;<br />- memset(ir,0,sizeof(*ir));<br />+ }<br /> <br /> /* init hardware-specific stuff */<br /> ir-&gt;mask_keycode = mask_keycode;<br />&#64;&#64; -552,19 +556,19 &#64;&#64; int saa7134_input_init1(struct saa7134_d<br /> snprintf(ir-&gt;phys, sizeof(ir-&gt;phys), "pci-%s/ir0",<br /> pci_name(dev-&gt;pci));<br /> <br />- ir_input_init(&amp;ir-&gt;dev, &amp;ir-&gt;ir, ir_type, ir_codes);<br />- ir-&gt;dev.name = ir-&gt;name;<br />- ir-&gt;dev.phys = ir-&gt;phys;<br />- ir-&gt;dev.id.bustype = BUS_PCI;<br />- ir-&gt;dev.id.version = 1;<br />+ ir_input_init(input_dev, &amp;ir-&gt;ir, ir_type, ir_codes);<br />+ input_dev-&gt;name = ir-&gt;name;<br />+ input_dev-&gt;phys = ir-&gt;phys;<br />+ input_dev-&gt;id.bustype = BUS_PCI;<br />+ input_dev-&gt;id.version = 1;<br /> if (dev-&gt;pci-&gt;subsystem_vendor) {<br />- ir-&gt;dev.id.vendor = dev-&gt;pci-&gt;subsystem_vendor;<br />- ir-&gt;dev.id.product = dev-&gt;pci-&gt;subsystem_device;<br />+ input_dev-&gt;id.vendor = dev-&gt;pci-&gt;subsystem_vendor;<br />+ input_dev-&gt;id.product = dev-&gt;pci-&gt;subsystem_device;<br /> } else {<br />- ir-&gt;dev.id.vendor = dev-&gt;pci-&gt;vendor;<br />- ir-&gt;dev.id.product = dev-&gt;pci-&gt;device;<br />+ input_dev-&gt;id.vendor = dev-&gt;pci-&gt;vendor;<br />+ input_dev-&gt;id.product = dev-&gt;pci-&gt;device;<br /> }<br />- ir-&gt;dev.dev = &amp;dev-&gt;pci-&gt;dev;<br />+ input_dev-&gt;cdev.dev = &amp;dev-&gt;pci-&gt;dev;<br /> <br /> /* all done */<br /> dev-&gt;remote = ir;<br />&#64;&#64; -576,8 +580,7 &#64;&#64; int saa7134_input_init1(struct saa7134_d<br /> add_timer(&amp;ir-&gt;timer);<br /> }<br /> <br />- input_register_device(&amp;dev-&gt;remote-&gt;dev);<br />- printk("%s: registered input device for IR\n",dev-&gt;name);<br />+ input_register_device(ir-&gt;dev);<br /> return 0;<br /> }<br /> <br />&#64;&#64; -586,9 +589,9 &#64;&#64; void saa7134_input_fini(struct saa7134_d<br /> if (NULL == dev-&gt;remote)<br /> return;<br /> <br />- input_unregister_device(&amp;dev-&gt;remote-&gt;dev);<br /> if (dev-&gt;remote-&gt;polling)<br /> del_timer_sync(&amp;dev-&gt;remote-&gt;timer);<br />+ input_unregister_device(dev-&gt;remote-&gt;dev);<br /> kfree(dev-&gt;remote);<br /> dev-&gt;remote = NULL;<br /> }<br />Index: work/drivers/media/video/bttvp.h<br />===================================================================<br />--- work.orig/drivers/media/video/bttvp.h<br />+++ work/drivers/media/video/bttvp.h<br />&#64;&#64; -240,7 +240,7 &#64;&#64; struct bttv_pll_info {<br /> <br /> /* for gpio-connected remote control */<br /> struct bttv_input {<br />- struct input_dev dev;<br />+ struct input_dev *dev;<br /> struct ir_input_state ir;<br /> char name[32];<br /> char phys[32];<br />Index: work/drivers/media/dvb/ttpci/budget-ci.c<br />===================================================================<br />--- work.orig/drivers/media/dvb/ttpci/budget-ci.c<br />+++ work/drivers/media/dvb/ttpci/budget-ci.c<br />&#64;&#64; -64,7 +64,7 &#64;&#64;<br /> <br /> struct budget_ci {<br /> struct budget budget;<br />- struct input_dev input_dev;<br />+ struct input_dev *input_dev;<br /> struct tasklet_struct msp430_irq_tasklet;<br /> struct tasklet_struct ciintf_irq_tasklet;<br /> int slot_status;<br />&#64;&#64; -145,7 +145,7 &#64;&#64; static void msp430_ir_debounce(unsigned <br /> static void msp430_ir_interrupt(unsigned long data)<br /> {<br /> struct budget_ci *budget_ci = (struct budget_ci *) data;<br />- struct input_dev *dev = &amp;budget_ci-&gt;input_dev;<br />+ struct input_dev *dev = budget_ci-&gt;input_dev;<br /> unsigned int code =<br /> ttpci_budget_debiread(&amp;budget_ci-&gt;budget, DEBINOSWAP, DEBIADDR_IR, 2, 1, 0) &gt;&gt; 8;<br /> <br />&#64;&#64; -181,25 +181,27 &#64;&#64; static void msp430_ir_interrupt(unsigned<br /> static int msp430_ir_init(struct budget_ci *budget_ci)<br /> {<br /> struct saa7146_dev *saa = budget_ci-&gt;budget.dev;<br />+ struct input_dev *input_dev;<br /> int i;<br /> <br />- memset(&amp;budget_ci-&gt;input_dev, 0, sizeof(struct input_dev));<br />+ budget_ci-&gt;input_dev = input_dev = input_allocate_device();<br />+ if (!input_dev)<br />+ return -ENOMEM;<br /> <br /> sprintf(budget_ci-&gt;ir_dev_name, "Budget-CI dvb ir receiver %s", saa-&gt;name);<br />- budget_ci-&gt;input_dev.name = budget_ci-&gt;ir_dev_name;<br /> <br />- set_bit(EV_KEY, budget_ci-&gt;input_dev.evbit);<br />+ input_dev-&gt;name = budget_ci-&gt;ir_dev_name;<br /> <br />- for (i = 0; i &lt; sizeof(key_map) / sizeof(*key_map); i++)<br />+ set_bit(EV_KEY, input_dev-&gt;evbit);<br />+ for (i = 0; i &lt; ARRAY_SIZE(key_map); i++)<br /> if (key_map[i])<br />- set_bit(key_map[i], budget_ci-&gt;input_dev.keybit);<br />+ set_bit(key_map[i], input_dev-&gt;keybit);<br /> <br />- input_register_device(&amp;budget_ci-&gt;input_dev);<br />+ input_register_device(budget_ci-&gt;input_dev);<br /> <br />- budget_ci-&gt;input_dev.timer.function = msp430_ir_debounce;<br />+ input_dev-&gt;timer.function = msp430_ir_debounce;<br /> <br /> saa7146_write(saa, IER, saa7146_read(saa, IER) | MASK_06);<br />-<br /> saa7146_setgpio(saa, 3, SAA7146_GPIO_IRQHI);<br /> <br /> return 0;<br />&#64;&#64; -208,7 +210,7 &#64;&#64; static int msp430_ir_init(struct budget_<br /> static void msp430_ir_deinit(struct budget_ci *budget_ci)<br /> {<br /> struct saa7146_dev *saa = budget_ci-&gt;budget.dev;<br />- struct input_dev *dev = &amp;budget_ci-&gt;input_dev;<br />+ struct input_dev *dev = budget_ci-&gt;input_dev;<br /> <br /> saa7146_write(saa, IER, saa7146_read(saa, IER) &amp; ~MASK_06);<br /> saa7146_setgpio(saa, 3, SAA7146_GPIO_INPUT);<br />Index: work/drivers/media/dvb/cinergyT2/cinergyT2.c<br />===================================================================<br />--- work.orig/drivers/media/dvb/cinergyT2/cinergyT2.c<br />+++ work/drivers/media/dvb/cinergyT2/cinergyT2.c<br />&#64;&#64; -137,7 +137,8 &#64;&#64; struct cinergyt2 {<br /> struct urb *stream_urb [STREAM_URB_COUNT];<br /> <br /> #ifdef ENABLE_RC<br />- struct input_dev rc_input_dev;<br />+ struct input_dev *rc_input_dev;<br />+ char phys[64];<br /> struct work_struct rc_query_work;<br /> int rc_input_event;<br /> u32 rc_last_code;<br />&#64;&#64; -683,6 +684,7 &#64;&#64; static struct dvb_device cinergyt2_fe_te<br /> };<br /> <br /> #ifdef ENABLE_RC<br />+<br /> static void cinergyt2_query_rc (void *data)<br /> {<br /> struct cinergyt2 *cinergyt2 = data;<br />&#64;&#64; -703,7 +705,7 &#64;&#64; static void cinergyt2_query_rc (void *da<br /> /* stop key repeat */<br /> if (cinergyt2-&gt;rc_input_event != KEY_MAX) {<br /> dprintk(1, "rc_input_event=%d Up\n", cinergyt2-&gt;rc_input_event);<br />- input_report_key(&amp;cinergyt2-&gt;rc_input_dev,<br />+ input_report_key(cinergyt2-&gt;rc_input_dev,<br /> cinergyt2-&gt;rc_input_event, 0);<br /> cinergyt2-&gt;rc_input_event = KEY_MAX;<br /> }<br />&#64;&#64; -722,7 +724,7 &#64;&#64; static void cinergyt2_query_rc (void *da<br /> /* keyrepeat bit -&gt; just repeat last rc_input_event */<br /> } else {<br /> cinergyt2-&gt;rc_input_event = KEY_MAX;<br />- for (i = 0; i &lt; sizeof(rc_keys) / sizeof(rc_keys[0]); i += 3) {<br />+ for (i = 0; i &lt; ARRAY_SIZE(rc_keys); i += 3) {<br /> if (rc_keys[i + 0] == rc_events[n].type &amp;&amp;<br /> rc_keys[i + 1] == le32_to_cpu(rc_events[n].value)) {<br /> cinergyt2-&gt;rc_input_event = rc_keys[i + 2];<br />&#64;&#64; -736,11 +738,11 &#64;&#64; static void cinergyt2_query_rc (void *da<br /> cinergyt2-&gt;rc_last_code != ~0) {<br /> /* emit a key-up so the double event is recognized */<br /> dprintk(1, "rc_input_event=%d UP\n", cinergyt2-&gt;rc_input_event);<br />- input_report_key(&amp;cinergyt2-&gt;rc_input_dev,<br />+ input_report_key(cinergyt2-&gt;rc_input_dev,<br /> cinergyt2-&gt;rc_input_event, 0);<br /> }<br /> dprintk(1, "rc_input_event=%d\n", cinergyt2-&gt;rc_input_event);<br />- input_report_key(&amp;cinergyt2-&gt;rc_input_dev,<br />+ input_report_key(cinergyt2-&gt;rc_input_dev,<br /> cinergyt2-&gt;rc_input_event, 1);<br /> cinergyt2-&gt;rc_last_code = rc_events[n].value;<br /> }<br />&#64;&#64; -752,7 +754,59 &#64;&#64; out:<br /> <br /> up(&amp;cinergyt2-&gt;sem);<br /> }<br />-#endif<br />+<br />+static int cinergyt2_register_rc(struct cinergyt2 *cinergyt2)<br />+{<br />+ struct input_dev *input_dev;<br />+ int i;<br />+<br />+ cinergyt2-&gt;rc_input_dev = input_dev = input_allocate_device();<br />+ if (!input_dev)<br />+ return -ENOMEM;<br />+<br />+ usb_make_path(cinergyt2-&gt;udev, cinergyt2-&gt;phys, sizeof(cinergyt2-&gt;phys));<br />+ strlcat(cinergyt2-&gt;phys, "/input0", sizeof(cinergyt2-&gt;phys));<br />+ cinergyt2-&gt;rc_input_event = KEY_MAX;<br />+ cinergyt2-&gt;rc_last_code = ~0;<br />+ INIT_WORK(&amp;cinergyt2-&gt;rc_query_work, cinergyt2_query_rc, cinergyt2);<br />+<br />+ input_dev-&gt;name = DRIVER_NAME " remote control";<br />+ input_dev-&gt;phys = cinergyt2-&gt;phys;<br />+ input_dev-&gt;evbit[0] = BIT(EV_KEY) | BIT(EV_REP);<br />+ for (i = 0; ARRAY_SIZE(rc_keys); i += 3)<br />+ set_bit(rc_keys[i + 2], input_dev-&gt;keybit);<br />+ input_dev-&gt;keycodesize = 0;<br />+ input_dev-&gt;keycodemax = 0;<br />+<br />+ input_register_device(cinergyt2-&gt;rc_input_dev);<br />+ schedule_delayed_work(&amp;cinergyt2-&gt;rc_query_work, HZ/2);<br />+}<br />+<br />+static void cinergyt2_unregister_rc(struct cinergyt2 *cinergyt2)<br />+{<br />+ cancel_delayed_work(&amp;cinergyt2-&gt;rc_query_work);<br />+ flush_scheduled_work();<br />+ input_unregister_device(cinergyt2-&gt;rc_input_dev);<br />+}<br />+<br />+static inline void cinergyt2_suspend_rc(struct cinergyt2 *cinergyt2)<br />+{<br />+ cancel_delayed_work(&amp;cinergyt2-&gt;rc_query_work);<br />+}<br />+<br />+static inline void cinergyt2_resume_rc(struct cinergyt2 *cinergyt2)<br />+{<br />+ schedule_delayed_work(&amp;cinergyt2-&gt;rc_query_work, HZ/2);<br />+}<br />+<br />+#else<br />+<br />+static inline int cinergyt2_register_rc(struct cinergyt2 *cinergyt2) { return 0; }<br />+static inline void cinergyt2_unregister_rc(struct cinergyt2 *cinergyt2) { }<br />+static inline void cinergyt2_suspend_rc(struct cinergyt2 *cinergyt2) { }<br />+static inline void cinergyt2_resume_rc(struct cinergyt2 *cinergyt2) { }<br />+<br />+#endif /* ENABLE_RC */<br /> <br /> static void cinergyt2_query (void *data)<br /> {<br />&#64;&#64; -789,9 +843,6 &#64;&#64; static int cinergyt2_probe (struct usb_i<br /> {<br /> struct cinergyt2 *cinergyt2;<br /> int err;<br />-#ifdef ENABLE_RC<br />- int i;<br />-#endif<br /> <br /> if (!(cinergyt2 = kmalloc (sizeof(struct cinergyt2), GFP_KERNEL))) {<br /> dprintk(1, "out of memory?!?\n");<br />&#64;&#64; -846,30 +897,17 &#64;&#64; static int cinergyt2_probe (struct usb_i<br /> &amp;cinergyt2_fe_template, cinergyt2,<br /> DVB_DEVICE_FRONTEND);<br /> <br />-#ifdef ENABLE_RC<br />- cinergyt2-&gt;rc_input_dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REP);<br />- cinergyt2-&gt;rc_input_dev.keycodesize = 0;<br />- cinergyt2-&gt;rc_input_dev.keycodemax = 0;<br />- cinergyt2-&gt;rc_input_dev.name = DRIVER_NAME " remote control";<br />-<br />- for (i = 0; i &lt; sizeof(rc_keys) / sizeof(rc_keys[0]); i += 3)<br />- set_bit(rc_keys[i + 2], cinergyt2-&gt;rc_input_dev.keybit);<br />-<br />- input_register_device(&amp;cinergyt2-&gt;rc_input_dev);<br />-<br />- cinergyt2-&gt;rc_input_event = KEY_MAX;<br />- cinergyt2-&gt;rc_last_code = ~0;<br />+ err = cinergyt2_register_rc(cinergyt2);<br />+ if (err)<br />+ goto bailout;<br /> <br />- INIT_WORK(&amp;cinergyt2-&gt;rc_query_work, cinergyt2_query_rc, cinergyt2);<br />- schedule_delayed_work(&amp;cinergyt2-&gt;rc_query_work, HZ/2);<br />-#endif<br /> return 0;<br /> <br /> bailout:<br /> dvb_dmxdev_release(&amp;cinergyt2-&gt;dmxdev);<br /> dvb_dmx_release(&amp;cinergyt2-&gt;demux);<br />- dvb_unregister_adapter (&amp;cinergyt2-&gt;adapter);<br />- cinergyt2_free_stream_urbs (cinergyt2);<br />+ dvb_unregister_adapter(&amp;cinergyt2-&gt;adapter);<br />+ cinergyt2_free_stream_urbs(cinergyt2);<br /> kfree(cinergyt2);<br /> return -ENOMEM;<br /> }<br />&#64;&#64; -881,11 +919,7 &#64;&#64; static void cinergyt2_disconnect (struct<br /> if (down_interruptible(&amp;cinergyt2-&gt;sem))<br /> return;<br /> <br />-#ifdef ENABLE_RC<br />- cancel_delayed_work(&amp;cinergyt2-&gt;rc_query_work);<br />- flush_scheduled_work();<br />- input_unregister_device(&amp;cinergyt2-&gt;rc_input_dev);<br />-#endif<br />+ cinergyt2_unregister_rc(cinergyt2);<br /> <br /> cinergyt2-&gt;demux.dmx.close(&amp;cinergyt2-&gt;demux.dmx);<br /> dvb_net_release(&amp;cinergyt2-&gt;dvbnet);<br />&#64;&#64; -908,9 +942,8 &#64;&#64; static int cinergyt2_suspend (struct usb<br /> <br /> if (state.event &gt; PM_EVENT_ON) {<br /> struct cinergyt2 *cinergyt2 = usb_get_intfdata (intf);<br />-#ifdef ENABLE_RC<br />- cancel_delayed_work(&amp;cinergyt2-&gt;rc_query_work);<br />-#endif<br />+<br />+ cinergyt2_suspend_rc(cinergyt2);<br /> cancel_delayed_work(&amp;cinergyt2-&gt;query_work);<br /> if (cinergyt2-&gt;streaming)<br /> cinergyt2_stop_stream_xfer(cinergyt2);<br />&#64;&#64; -938,9 +971,8 &#64;&#64; static int cinergyt2_resume (struct usb_<br /> schedule_delayed_work(&amp;cinergyt2-&gt;query_work, HZ/2);<br /> }<br /> <br />-#ifdef ENABLE_RC<br />- schedule_delayed_work(&amp;cinergyt2-&gt;rc_query_work, HZ/2);<br />-#endif<br />+ cinergyt2_resume_rc(cinergyt2);<br />+<br /> up(&amp;cinergyt2-&gt;sem);<br /> return 0;<br /> }<br />Index: work/drivers/media/common/ir-common.c<br />===================================================================<br />--- work.orig/drivers/media/common/ir-common.c<br />+++ work/drivers/media/common/ir-common.c<br />&#64;&#64; -252,7 +252,6 &#64;&#64; void ir_input_init(struct input_dev *dev<br /> if (ir_codes)<br /> memcpy(ir-&gt;ir_codes, ir_codes, sizeof(ir-&gt;ir_codes));<br /> <br />- init_input_dev(dev);<br /> dev-&gt;keycode = ir-&gt;ir_codes;<br /> dev-&gt;keycodesize = sizeof(IR_KEYTAB_TYPE);<br /> dev-&gt;keycodemax = IR_KEYTAB_SIZE;<br />Index: work/drivers/media/dvb/dvb-usb/dvb-usb-remote.c<br />===================================================================<br />--- work.orig/drivers/media/dvb/dvb-usb/dvb-usb-remote.c<br />+++ work/drivers/media/dvb/dvb-usb/dvb-usb-remote.c<br />&#64;&#64; -39,9 +39,9 &#64;&#64; static void dvb_usb_read_remote_control(<br /> d-&gt;last_event = event;<br /> case REMOTE_KEY_REPEAT:<br /> deb_rc("key repeated\n");<br />- input_event(&amp;d-&gt;rc_input_dev, EV_KEY, d-&gt;last_event, 1);<br />- input_event(&amp;d-&gt;rc_input_dev, EV_KEY, d-&gt;last_event, 0);<br />- input_sync(&amp;d-&gt;rc_input_dev);<br />+ input_event(d-&gt;rc_input_dev, EV_KEY, event, 1);<br />+ input_event(d-&gt;rc_input_dev, EV_KEY, d-&gt;last_event, 0);<br />+ input_sync(d-&gt;rc_input_dev);<br /> break;<br /> default:<br /> break;<br />&#64;&#64; -53,8 +53,8 &#64;&#64; static void dvb_usb_read_remote_control(<br /> deb_rc("NO KEY PRESSED\n");<br /> if (d-&gt;last_state != REMOTE_NO_KEY_PRESSED) {<br /> deb_rc("releasing event %d\n",d-&gt;last_event);<br />- input_event(&amp;d-&gt;rc_input_dev, EV_KEY, d-&gt;last_event, 0);<br />- input_sync(&amp;d-&gt;rc_input_dev);<br />+ input_event(d-&gt;rc_input_dev, EV_KEY, d-&gt;last_event, 0);<br />+ input_sync(d-&gt;rc_input_dev);<br /> }<br /> d-&gt;last_state = REMOTE_NO_KEY_PRESSED;<br /> d-&gt;last_event = 0;<br />&#64;&#64; -63,8 +63,8 &#64;&#64; static void dvb_usb_read_remote_control(<br /> deb_rc("KEY PRESSED\n");<br /> deb_rc("pressing event %d\n",event);<br /> <br />- input_event(&amp;d-&gt;rc_input_dev, EV_KEY, event, 1);<br />- input_sync(&amp;d-&gt;rc_input_dev);<br />+ input_event(d-&gt;rc_input_dev, EV_KEY, event, 1);<br />+ input_sync(d-&gt;rc_input_dev);<br /> <br /> d-&gt;last_event = event;<br /> d-&gt;last_state = REMOTE_KEY_PRESSED;<br />&#64;&#64; -73,8 +73,8 &#64;&#64; static void dvb_usb_read_remote_control(<br /> deb_rc("KEY_REPEAT\n");<br /> if (d-&gt;last_state != REMOTE_NO_KEY_PRESSED) {<br /> deb_rc("repeating event %d\n",d-&gt;last_event);<br />- input_event(&amp;d-&gt;rc_input_dev, EV_KEY, d-&gt;last_event, 2);<br />- input_sync(&amp;d-&gt;rc_input_dev);<br />+ input_event(d-&gt;rc_input_dev, EV_KEY, d-&gt;last_event, 2);<br />+ input_sync(d-&gt;rc_input_dev);<br /> d-&gt;last_state = REMOTE_KEY_REPEAT;<br /> }<br /> default:<br />&#64;&#64; -89,24 +89,30 &#64;&#64; schedule:<br /> int dvb_usb_remote_init(struct dvb_usb_device *d)<br /> {<br /> int i;<br />+<br /> if (d-&gt;props.rc_key_map == NULL ||<br /> d-&gt;props.rc_query == NULL ||<br /> dvb_usb_disable_rc_polling)<br /> return 0;<br /> <br />- /* Initialise the remote-control structures.*/<br />- init_input_dev(&amp;d-&gt;rc_input_dev);<br />+ usb_make_path(d-&gt;udev, d-&gt;rc_phys, sizeof(d-&gt;rc_phys));<br />+ strlcpy(d-&gt;rc_phys, "/ir0", sizeof(d-&gt;rc_phys));<br /> <br />- d-&gt;rc_input_dev.evbit[0] = BIT(EV_KEY);<br />- d-&gt;rc_input_dev.keycodesize = sizeof(unsigned char);<br />- d-&gt;rc_input_dev.keycodemax = KEY_MAX;<br />- d-&gt;rc_input_dev.name = "IR-receiver inside an USB DVB receiver";<br />+ d-&gt;rc_input_dev = input_allocate_device();<br />+ if (!d-&gt;rc_input_dev)<br />+ return -ENOMEM;<br />+<br />+ d-&gt;rc_input_dev-&gt;evbit[0] = BIT(EV_KEY);<br />+ d-&gt;rc_input_dev-&gt;keycodesize = sizeof(unsigned char);<br />+ d-&gt;rc_input_dev-&gt;keycodemax = KEY_MAX;<br />+ d-&gt;rc_input_dev-&gt;name = "IR-receiver inside an USB DVB receiver";<br />+ d-&gt;rc_input_dev-&gt;phys = d-&gt;rc_phys;<br /> <br /> /* set the bits for the keys */<br />- deb_rc("key map size: %d\n",d-&gt;props.rc_key_map_size);<br />+ deb_rc("key map size: %d\n", d-&gt;props.rc_key_map_size);<br /> for (i = 0; i &lt; d-&gt;props.rc_key_map_size; i++) {<br /> deb_rc("setting bit for event %d item %d\n",d-&gt;props.rc_key_map[i].event, i);<br />- set_bit(d-&gt;props.rc_key_map[i].event, d-&gt;rc_input_dev.keybit);<br />+ set_bit(d-&gt;props.rc_key_map[i].event, d-&gt;rc_input_dev-&gt;keybit);<br /> }<br /> <br /> /* Start the remote-control polling. */<br />&#64;&#64; -114,14 +120,14 &#64;&#64; int dvb_usb_remote_init(struct dvb_usb_d<br /> d-&gt;props.rc_interval = 100; /* default */<br /> <br /> /* setting these two values to non-zero, we have to manage key repeats */<br />- d-&gt;rc_input_dev.rep[REP_PERIOD] = d-&gt;props.rc_interval;<br />- d-&gt;rc_input_dev.rep[REP_DELAY] = d-&gt;props.rc_interval + 150;<br />+ d-&gt;rc_input_dev-&gt;rep[REP_PERIOD] = d-&gt;props.rc_interval;<br />+ d-&gt;rc_input_dev-&gt;rep[REP_DELAY] = d-&gt;props.rc_interval + 150;<br /> <br />- input_register_device(&amp;d-&gt;rc_input_dev);<br />+ input_register_device(d-&gt;rc_input_dev);<br /> <br /> INIT_WORK(&amp;d-&gt;rc_query_work, dvb_usb_read_remote_control, d);<br /> <br />- info("schedule remote query interval to %d msecs.",d-&gt;props.rc_interval);<br />+ info("schedule remote query interval to %d msecs.", d-&gt;props.rc_interval);<br /> schedule_delayed_work(&amp;d-&gt;rc_query_work,msecs_to_jiffies(d-&gt;props.rc_interval));<br /> <br /> d-&gt;state |= DVB_USB_STATE_REMOTE;<br />&#64;&#64; -134,7 +140,7 &#64;&#64; int dvb_usb_remote_exit(struct dvb_usb_d<br /> if (d-&gt;state &amp; DVB_USB_STATE_REMOTE) {<br /> cancel_delayed_work(&amp;d-&gt;rc_query_work);<br /> flush_scheduled_work();<br />- input_unregister_device(&amp;d-&gt;rc_input_dev);<br />+ input_unregister_device(d-&gt;rc_input_dev);<br /> }<br /> d-&gt;state &amp;= ~DVB_USB_STATE_REMOTE;<br /> return 0;<br />Index: work/drivers/media/dvb/dvb-usb/dvb-usb.h<br />===================================================================<br />--- work.orig/drivers/media/dvb/dvb-usb/dvb-usb.h<br />+++ work/drivers/media/dvb/dvb-usb/dvb-usb.h<br />&#64;&#64; -300,7 +300,8 &#64;&#64; struct dvb_usb_device {<br /> int (*fe_init) (struct dvb_frontend *);<br /> <br /> /* remote control */<br />- struct input_dev rc_input_dev;<br />+ struct input_dev *rc_input_dev;<br />+ char rc_phys[64];<br /> struct work_struct rc_query_work;<br /> u32 last_event;<br /> int last_state;<br />Index: work/drivers/media/dvb/ttpci/av7110_ir.c<br />===================================================================<br />--- work.orig/drivers/media/dvb/ttpci/av7110_ir.c<br />+++ work/drivers/media/dvb/ttpci/av7110_ir.c<br />&#64;&#64; -15,7 +15,7 &#64;&#64;<br /> <br /> static int av_cnt;<br /> static struct av7110 *av_list[4];<br />-static struct input_dev input_dev;<br />+static struct input_dev *input_dev;<br /> <br /> static u16 key_map [256] = {<br /> KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7,<br />&#64;&#64; -43,10 +43,10 &#64;&#64; static u16 key_map [256] = {<br /> <br /> static void av7110_emit_keyup(unsigned long data)<br /> {<br />- if (!data || !test_bit(data, input_dev.key))<br />+ if (!data || !test_bit(data, input_dev-&gt;key))<br /> return;<br /> <br />- input_event(&amp;input_dev, EV_KEY, data, !!0);<br />+ input_event(input_dev, EV_KEY, data, !!0);<br /> }<br /> <br /> <br />&#64;&#64; -112,13 +112,13 &#64;&#64; static void av7110_emit_key(unsigned lon<br /> if (timer_pending(&amp;keyup_timer)) {<br /> del_timer(&amp;keyup_timer);<br /> if (keyup_timer.data != keycode || new_toggle != old_toggle) {<br />- input_event(&amp;input_dev, EV_KEY, keyup_timer.data, !!0);<br />- input_event(&amp;input_dev, EV_KEY, keycode, !0);<br />+ input_event(input_dev, EV_KEY, keyup_timer.data, !!0);<br />+ input_event(input_dev, EV_KEY, keycode, !0);<br /> } else<br />- input_event(&amp;input_dev, EV_KEY, keycode, 2);<br />+ input_event(input_dev, EV_KEY, keycode, 2);<br /> <br /> } else<br />- input_event(&amp;input_dev, EV_KEY, keycode, !0);<br />+ input_event(input_dev, EV_KEY, keycode, !0);<br /> <br /> keyup_timer.expires = jiffies + UP_TIMEOUT;<br /> keyup_timer.data = keycode;<br />&#64;&#64; -132,13 +132,13 &#64;&#64; static void input_register_keys(void)<br /> {<br /> int i;<br /> <br />- memset(input_dev.keybit, 0, sizeof(input_dev.keybit));<br />+ memset(input_dev-&gt;keybit, 0, sizeof(input_dev-&gt;keybit));<br /> <br />- for (i = 0; i &lt; sizeof(key_map) / sizeof(key_map[0]); i++) {<br />+ for (i = 0; i &lt; ARRAY_SIZE(key_map); i++) {<br /> if (key_map[i] &gt; KEY_MAX)<br /> key_map[i] = 0;<br /> else if (key_map[i] &gt; KEY_RESERVED)<br />- set_bit(key_map[i], input_dev.keybit);<br />+ set_bit(key_map[i], input_dev-&gt;keybit);<br /> }<br /> }<br /> <br />&#64;&#64; -216,12 +216,17 &#64;&#64; int __init av7110_ir_init(struct av7110 <br /> init_timer(&amp;keyup_timer);<br /> keyup_timer.data = 0;<br /> <br />- input_dev.name = "DVB on-card IR receiver";<br />- set_bit(EV_KEY, input_dev.evbit);<br />- set_bit(EV_REP, input_dev.evbit);<br />+ input_dev = input_allocate_device();<br />+ if (!input_dev)<br />+ return -ENOMEM;<br />+<br />+ input_dev-&gt;name = "DVB on-card IR receiver";<br />+<br />+ set_bit(EV_KEY, input_dev-&gt;evbit);<br />+ set_bit(EV_REP, input_dev-&gt;evbit);<br /> input_register_keys();<br />- input_register_device(&amp;input_dev);<br />- input_dev.timer.function = input_repeat_key;<br />+ input_register_device(input_dev);<br />+ input_dev-&gt;timer.function = input_repeat_key;<br /> <br /> e = create_proc_entry("av7110_ir", S_IFREG | S_IRUGO | S_IWUSR, NULL);<br /> if (e) {<br />&#64;&#64; -256,7 +261,7 &#64;&#64; void __exit av7110_ir_exit(struct av7110<br /> if (av_cnt == 1) {<br /> del_timer_sync(&amp;keyup_timer);<br /> remove_proc_entry("av7110_ir", NULL);<br />- input_unregister_device(&amp;input_dev);<br />+ input_unregister_device(input_dev);<br /> }<br /> <br /> av_cnt--;<br />Index: work/drivers/media/dvb/ttusb-dec/ttusb_dec.c<br />===================================================================<br />--- work.orig/drivers/media/dvb/ttusb-dec/ttusb_dec.c<br />+++ work/drivers/media/dvb/ttusb-dec/ttusb_dec.c<br />&#64;&#64; -152,7 +152,8 &#64;&#64; struct ttusb_dec {<br /> struct list_head filter_info_list;<br /> spinlock_t filter_info_list_lock;<br /> <br />- struct input_dev rc_input_dev;<br />+ struct input_dev *rc_input_dev;<br />+ char rc_phys[64];<br /> <br /> int active; /* Loaded successfully */<br /> };<br />&#64;&#64; -235,9 +236,9 &#64;&#64; static void ttusb_dec_handle_irq( struct<br /> * this should/could be added later ...<br /> * for now lets report each signal as a key down and up*/<br /> dprintk("%s:rc signal:%d\n", __FUNCTION__, buffer[4]);<br />- input_report_key(&amp;dec-&gt;rc_input_dev,rc_keys[buffer[4]-1],1);<br />- input_report_key(&amp;dec-&gt;rc_input_dev,rc_keys[buffer[4]-1],0);<br />- input_sync(&amp;dec-&gt;rc_input_dev);<br />+ input_report_key(dec-&gt;rc_input_dev, rc_keys[buffer[4] - 1], 1);<br />+ input_report_key(dec-&gt;rc_input_dev, rc_keys[buffer[4] - 1], 0);<br />+ input_sync(dec-&gt;rc_input_dev);<br /> }<br /> <br /> exit: retval = usb_submit_urb(urb, GFP_ATOMIC);<br />&#64;&#64; -1181,29 +1182,38 &#64;&#64; static void ttusb_dec_init_tasklet(struc<br /> (unsigned long)dec);<br /> }<br /> <br />-static void ttusb_init_rc( struct ttusb_dec *dec)<br />+static int ttusb_init_rc(struct ttusb_dec *dec)<br /> {<br />+ struct input_dev *input_dev;<br /> u8 b[] = { 0x00, 0x01 };<br /> int i;<br /> <br />- init_input_dev(&amp;dec-&gt;rc_input_dev);<br />+ usb_make_path(dec-&gt;udev, dec-&gt;rc_phys, sizeof(dec-&gt;rc_phys));<br />+ strlcpy(dec-&gt;rc_phys, "/input0", sizeof(dec-&gt;rc_phys));<br /> <br />- dec-&gt;rc_input_dev.name = "ttusb_dec remote control";<br />- dec-&gt;rc_input_dev.evbit[0] = BIT(EV_KEY);<br />- dec-&gt;rc_input_dev.keycodesize = sizeof(u16);<br />- dec-&gt;rc_input_dev.keycodemax = 0x1a;<br />- dec-&gt;rc_input_dev.keycode = rc_keys;<br />+ dec-&gt;rc_input_dev = input_dev = input_allocate_device();<br />+ if (!input_dev)<br />+ return -ENOMEM;<br />+<br />+ input_dev-&gt;name = "ttusb_dec remote control";<br />+ input_dev-&gt;phys = dec-&gt;rc_phys;<br />+ input_dev-&gt;evbit[0] = BIT(EV_KEY);<br />+ input_dev-&gt;keycodesize = sizeof(u16);<br />+ input_dev-&gt;keycodemax = 0x1a;<br />+ input_dev-&gt;keycode = rc_keys;<br /> <br />- for (i = 0; i &lt; sizeof(rc_keys)/sizeof(rc_keys[0]); i++)<br />- set_bit(rc_keys[i], dec-&gt;rc_input_dev.keybit);<br />+ for (i = 0; i &lt; ARRAY_SIZE(rc_keys); i++)<br />+ set_bit(rc_keys[i], input_dev-&gt;keybit);<br /> <br />- input_register_device(&amp;dec-&gt;rc_input_dev);<br />+ input_register_device(input_dev);<br /> <br />- if(usb_submit_urb(dec-&gt;irq_urb,GFP_KERNEL)) {<br />+ if (usb_submit_urb(dec-&gt;irq_urb, GFP_KERNEL))<br /> printk("%s: usb_submit_urb failed\n",__FUNCTION__);<br />- }<br />+<br /> /* enable irq pipe */<br /> ttusb_dec_send_command(dec,0xb0,sizeof(b),b,NULL,NULL);<br />+<br />+ return 0;<br /> }<br /> <br /> static void ttusb_dec_init_v_pes(struct ttusb_dec *dec)<br />&#64;&#64; -1513,7 +1523,7 &#64;&#64; static void ttusb_dec_exit_rc(struct ttu<br /> * As the irq is submitted after the interface is changed,<br /> * this is the best method i figured out.<br /> * Any others?*/<br />- if(dec-&gt;interface == TTUSB_DEC_INTERFACE_IN)<br />+ if (dec-&gt;interface == TTUSB_DEC_INTERFACE_IN)<br /> usb_kill_urb(dec-&gt;irq_urb);<br /> <br /> usb_free_urb(dec-&gt;irq_urb);<br />&#64;&#64; -1521,7 +1531,10 &#64;&#64; static void ttusb_dec_exit_rc(struct ttu<br /> usb_buffer_free(dec-&gt;udev,IRQ_PACKET_SIZE,<br /> dec-&gt;irq_buffer, dec-&gt;irq_dma_handle);<br /> <br />- input_unregister_device(&amp;dec-&gt;rc_input_dev);<br />+ if (dec-&gt;rc_input_dev) {<br />+ input_unregister_device(dec-&gt;rc_input_dev);<br />+ dec-&gt;rc_input_dev = NULL;<br />+ }<br /> }<br /> <br /> <br />&#64;&#64; -1659,7 +1672,7 &#64;&#64; static int ttusb_dec_probe(struct usb_in<br /> <br /> ttusb_dec_set_interface(dec, TTUSB_DEC_INTERFACE_IN);<br /> <br />- if(enable_rc)<br />+ if (enable_rc)<br /> ttusb_init_rc(dec);<br /> <br /> return 0;<br />Index: work/drivers/media/video/cx88/cx88-input.c<br />===================================================================<br />--- work.orig/drivers/media/video/cx88/cx88-input.c<br />+++ work/drivers/media/video/cx88/cx88-input.c<br />&#64;&#64; -260,7 +260,7 &#64;&#64; static IR_KEYTAB_TYPE ir_codes_cinergy_1<br /> <br /> struct cx88_IR {<br /> struct cx88_core *core;<br />- struct input_dev input;<br />+ struct input_dev *input;<br /> struct ir_input_state ir;<br /> char name[32];<br /> char phys[32];<br />&#64;&#64; -315,23 +315,23 &#64;&#64; static void cx88_ir_handle_key(struct cx<br /> if (ir-&gt;mask_keydown) {<br /> /* bit set on keydown */<br /> if (gpio &amp; ir-&gt;mask_keydown) {<br />- ir_input_keydown(&amp;ir-&gt;input, &amp;ir-&gt;ir, data, data);<br />+ ir_input_keydown(ir-&gt;input, &amp;ir-&gt;ir, data, data);<br /> } else {<br />- ir_input_nokey(&amp;ir-&gt;input, &amp;ir-&gt;ir);<br />+ ir_input_nokey(ir-&gt;input, &amp;ir-&gt;ir);<br /> }<br /> <br /> } else if (ir-&gt;mask_keyup) {<br /> /* bit cleared on keydown */<br /> if (0 == (gpio &amp; ir-&gt;mask_keyup)) {<br />- ir_input_keydown(&amp;ir-&gt;input, &amp;ir-&gt;ir, data, data);<br />+ ir_input_keydown(ir-&gt;input, &amp;ir-&gt;ir, data, data);<br /> } else {<br />- ir_input_nokey(&amp;ir-&gt;input, &amp;ir-&gt;ir);<br />+ ir_input_nokey(ir-&gt;input, &amp;ir-&gt;ir);<br /> }<br /> <br /> } else {<br /> /* can't distinguish keydown/up :-/ */<br />- ir_input_keydown(&amp;ir-&gt;input, &amp;ir-&gt;ir, data, data);<br />- ir_input_nokey(&amp;ir-&gt;input, &amp;ir-&gt;ir);<br />+ ir_input_keydown(ir-&gt;input, &amp;ir-&gt;ir, data, data);<br />+ ir_input_nokey(ir-&gt;input, &amp;ir-&gt;ir);<br /> }<br /> }<br /> <br />&#64;&#64; -357,13 +357,19 &#64;&#64; static void cx88_ir_work(void *data)<br /> int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci)<br /> {<br /> struct cx88_IR *ir;<br />+ struct input_dev *input_dev;<br /> IR_KEYTAB_TYPE *ir_codes = NULL;<br /> int ir_type = IR_TYPE_OTHER;<br /> <br />- ir = kmalloc(sizeof(*ir), GFP_KERNEL);<br />- if (NULL == ir)<br />+ ir = kzalloc(sizeof(*ir), GFP_KERNEL);<br />+ input_dev = input_allocate_device();<br />+ if (!ir || !input_dev) {<br />+ kfree(ir);<br />+ input_free_device(input_dev);<br /> return -ENOMEM;<br />- memset(ir, 0, sizeof(*ir));<br />+ }<br />+<br />+ ir-&gt;input = input_dev;<br /> <br /> /* detect &amp; configure */<br /> switch (core-&gt;board) {<br />&#64;&#64; -425,6 +431,7 &#64;&#64; int cx88_ir_init(struct cx88_core *core,<br /> <br /> if (NULL == ir_codes) {<br /> kfree(ir);<br />+ input_free_device(input_dev);<br /> return -ENODEV;<br /> }<br /> <br />&#64;&#64; -433,19 +440,19 &#64;&#64; int cx88_ir_init(struct cx88_core *core,<br /> cx88_boards[core-&gt;board].name);<br /> snprintf(ir-&gt;phys, sizeof(ir-&gt;phys), "pci-%s/ir0", pci_name(pci));<br /> <br />- ir_input_init(&amp;ir-&gt;input, &amp;ir-&gt;ir, ir_type, ir_codes);<br />- ir-&gt;input.name = ir-&gt;name;<br />- ir-&gt;input.phys = ir-&gt;phys;<br />- ir-&gt;input.id.bustype = BUS_PCI;<br />- ir-&gt;input.id.version = 1;<br />+ ir_input_init(input_dev, &amp;ir-&gt;ir, ir_type, ir_codes);<br />+ input_dev-&gt;name = ir-&gt;name;<br />+ input_dev-&gt;phys = ir-&gt;phys;<br />+ input_dev-&gt;id.bustype = BUS_PCI;<br />+ input_dev-&gt;id.version = 1;<br /> if (pci-&gt;subsystem_vendor) {<br />- ir-&gt;input.id.vendor = pci-&gt;subsystem_vendor;<br />- ir-&gt;input.id.product = pci-&gt;subsystem_device;<br />+ input_dev-&gt;id.vendor = pci-&gt;subsystem_vendor;<br />+ input_dev-&gt;id.product = pci-&gt;subsystem_device;<br /> } else {<br />- ir-&gt;input.id.vendor = pci-&gt;vendor;<br />- ir-&gt;input.id.product = pci-&gt;device;<br />+ input_dev-&gt;id.vendor = pci-&gt;vendor;<br />+ input_dev-&gt;id.product = pci-&gt;device;<br /> }<br />- ir-&gt;input.dev = &amp;pci-&gt;dev;<br />+ input_dev-&gt;cdev.dev = &amp;pci-&gt;dev;<br /> <br /> /* record handles to ourself */<br /> ir-&gt;core = core;<br />&#64;&#64; -465,8 +472,7 &#64;&#64; int cx88_ir_init(struct cx88_core *core,<br /> }<br /> <br /> /* all done */<br />- input_register_device(&amp;ir-&gt;input);<br />- printk("%s: registered IR remote control\n", core-&gt;name);<br />+ input_register_device(ir-&gt;input);<br /> <br /> return 0;<br /> }<br />&#64;&#64; -484,7 +490,7 &#64;&#64; int cx88_ir_fini(struct cx88_core *core)<br /> flush_scheduled_work();<br /> }<br /> <br />- input_unregister_device(&amp;ir-&gt;input);<br />+ input_unregister_device(ir-&gt;input);<br /> kfree(ir);<br /> <br /> /* done */<br />&#64;&#64; -515,7 +521,7 &#64;&#64; void cx88_ir_irq(struct cx88_core *core)<br /> if (!ir-&gt;scount) {<br /> /* nothing to sample */<br /> if (ir-&gt;ir.keypressed &amp;&amp; time_after(jiffies, ir-&gt;release))<br />- ir_input_nokey(&amp;ir-&gt;input, &amp;ir-&gt;ir);<br />+ ir_input_nokey(ir-&gt;input, &amp;ir-&gt;ir);<br /> return;<br /> }<br /> <br />&#64;&#64; -557,7 +563,7 &#64;&#64; void cx88_ir_irq(struct cx88_core *core)<br /> <br /> ir_dprintk("Key Code: %x\n", (ircode &gt;&gt; 16) &amp; 0x7f);<br /> <br />- ir_input_keydown(&amp;ir-&gt;input, &amp;ir-&gt;ir, (ircode &gt;&gt; 16) &amp; 0x7f, (ircode &gt;&gt; 16) &amp; 0xff);<br />+ ir_input_keydown(ir-&gt;input, &amp;ir-&gt;ir, (ircode &gt;&gt; 16) &amp; 0x7f, (ircode &gt;&gt; 16) &amp; 0xff);<br /> ir-&gt;release = jiffies + msecs_to_jiffies(120);<br /> break;<br /> case CX88_BOARD_HAUPPAUGE:<br />&#64;&#64; -566,7 +572,7 &#64;&#64; void cx88_ir_irq(struct cx88_core *core)<br /> ir_dprintk("biphase decoded: %x\n", ircode);<br /> if ((ircode &amp; 0xfffff000) != 0x3000)<br /> break;<br />- ir_input_keydown(&amp;ir-&gt;input, &amp;ir-&gt;ir, ircode &amp; 0x3f, ircode);<br />+ ir_input_keydown(ir-&gt;input, &amp;ir-&gt;ir, ircode &amp; 0x3f, ircode);<br /> ir-&gt;release = jiffies + msecs_to_jiffies(120);<br /> break;<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:09 聽聽 [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