<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-gb">
	<link rel="self" type="application/atom+xml" href="https://forums.obdev.at/app.php/feed/topic/1030" />

	<title>Objective Development Forums</title>
	
	<link href="https://forums.obdev.at/index.php" />
	<updated>2012-02-16T23:42:29+02:00</updated>

	<author><name><![CDATA[Objective Development Forums]]></name></author>
	<id>https://forums.obdev.at/app.php/feed/topic/1030</id>

		<entry>
		<author><name><![CDATA[avion23]]></name></author>
		<updated>2012-02-16T23:42:29+02:00</updated>

		<published>2012-02-16T23:42:29+02:00</published>
		<id>https://forums.obdev.at/viewtopic.php?t=1030&amp;p=20967#p20967</id>
		<link href="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=20967#p20967"/>
		<title type="html"><![CDATA[Re: Linux kernel patch for CDC problems]]></title>

		
		<content type="html" xml:base="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=20967#p20967"><![CDATA[
Are there any news with this?<br /><br />My kernel version is 3.2.2. It still doesn't work, and i suspect that i've run into the same problem.<br />debug messages are:<br /><div class="codebox"><p>Code: </p><pre><code>1d: 80 06 00 01 00 00 40 00 dd 94<br />20: 4b 12 01 10 01 02 00 00 08 10 cf<br />20: c3 c0 16 e1 05 00 01 01 02 ce 45<br />20: 4b 00 01 3f 8f<br />ff:<br />1d: 00 05 41 00 00 00 00 00 e5 e5<br />20: 4b 00 00<br />1d: 80 06 00 01 00 00 12 00 e0 f4<br />20: 4b 12 01 10 01 02 00 00 08 10 cf<br />20: c3 c0 16 e1 05 00 01 01 02 ce 45<br />20: 4b 00 01 3f 8f<br />1d: 80 06 00 02 00 00 09 00 ae 04<br />20: 4b 09 02 43 00 02 01 00 80 03 75<br />20: c3 fa c0 fc<br />1d: 80 06 00 02 00 00 43 00 99 64<br />20: 4b 09 02 43 00 02 01 00 80 03 75<br />20: c3 fa 09 04 00 00 01 02 02 79 2a<br />20: 4b 01 00 05 24 00 10 01 04 0f fc<br />20: c3 24 02 02 05 24 06 00 01 79 0c<br />20: 4b 05 24 01 03 01 07 05 83 ac d4<br />20: c3 03 08 00 ff 09 04 01 00 21 f8<br />20: 4b 02 0a 00 00 00 07 05 01 e7 7c<br />20: c3 02 08 00 00 07 05 81 02 47 09<br />20: 4b 08 00 00 0f fd<br />1d: 80 06 00 03 00 00 ff 00 d4 64<br />20: 4b 04 03 09 04 09 78<br />1d: 80 06 02 03 09 04 ff 00 97 db<br />20: 4b 10 03 55 00 53 00 42 00 a0 19<br />20: c3 2d 00 50 00 49 00 4f 00 52 49<br />20: 4b 00 00<br />1d: 80 06 01 03 09 04 ff 00 97 e8<br />20: 4b 22 03 77 00 77 00 77 00 39 f6<br />20: c3 2e 00 72 00 65 00 63 00 00 8e<br />20: 4b 75 00 72 00 73 00 69 00 46 e9<br />20: c3 6f 00 6e 00 2e 00 6a 00 d6 9a<br />20: 4b 70 00 db 8f<br />1d: 00 09 01 00 00 00 00 00 27 25<br />20: 4b 00 00<br />1d: 21 22 00 00 00 00 00 00 7e 22<br />20: 4b 00 00<br />1d: 21 20 00 00 00 00 07 00 5f d2<br />11: 80 25 00 00 00 00 08 63 c4<br />20: 4b 00 00<br />1d: 21 22 03 00 00 00 00 00 7e 11<br />20: 4b 00 00<br />1d: 21 22 00 00 00 00 00 00 7e 22<br />20: 4b 00 00<br />1d: 21 22 03 00 00 00 00 00 7e 11<br />20: 4b 00 00<br />1d: 21 22 00 00 00 00 00 00 7e 22<br />20: 4b 00 00<br /></code></pre></div><br /><br />The last ones from sending '@' to the device.<p>Statistics: Posted by <a href="https://forums.obdev.at/memberlist.php?mode=viewprofile&amp;u=6384">avion23</a> — Thu Feb 16, 2012 11:42 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Anonymous]]></name></author>
		<updated>2008-10-30T22:33:35+02:00</updated>

		<published>2008-10-30T22:33:35+02:00</published>
		<id>https://forums.obdev.at/viewtopic.php?t=1030&amp;p=6545#p6545</id>
		<link href="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=6545#p6545"/>
		<title type="html"><![CDATA[Thanks!]]></title>

		
		<content type="html" xml:base="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=6545#p6545"><![CDATA[
Hello,<br /><br />until I found this page I was trying night and day to get the f...... AVR-USB working...<br /><br />After I applied the &quot;Kernel-Patch&quot; the AVR-USB-Thing is working perfect and I have a lot of fun playing around with it.<br /><br />Right now I'm using the Vanilla Kernel 2.6.27.<br /><br />Here's a little Overview of the two steps i did to get it running:<br /><br /><div class="codebox"><p>Code: </p><pre><code>1. in /usr/src/linux/drivers/usb/host/uhci-q.c:<br />&#91;Column ~1050&#93;<br /><br />static int uhci_submit_bulk&#40;struct uhci_hcd *uhci, struct urb *urb, struct uhci_qh *qh&#41;<br />&#123;<br />   int ret;<br /><br />   /* Can't have low-speed bulk transfers */<br />//   if &#40;urb-&gt;dev-&gt;speed == USB_SPEED_LOW&#41;<br />//      return -EINVAL;<br /><br />   if &#40;qh-&gt;state != QH_STATE_ACTIVE&#41;<br />//      qh-&gt;skel = SKEL_BULK;<br />      qh-&gt;skel = &#40;urb-&gt;dev-&gt;speed == USB_SPEED_LOW ? SKEL_LS_CONTROL : SKEL_BULK&#41;; <br />   ret = uhci_submit_common&#40;uhci, urb, qh&#41;;<br />//   if &#40;ret == 0&#41;<br />   if &#40;ret == 0 &amp;&amp; urb-&gt;dev-&gt;speed != USB_SPEED_LOW&#41;<br />      uhci_add_fsbr&#40;uhci, urb&#41;;<br />   return ret;<br />&#125;<br /><br />2. in /usr/src/linux/drivers/usb/core/config.c in der Funktion usb_parse_endpoint&#40;...&#41;:<br />&#91;Column ~140&#93;<br /><br />   /* Some buggy low-speed devices have Bulk endpoints, which is<br />    * explicitly forbidden by the USB spec.  In an attempt to make<br />    * them usable, we will try treating them as Interrupt endpoints.<br />    */<br />   if &#40;to_usb_device&#40;ddev&#41;-&gt;speed == USB_SPEED_LOW &amp;&amp;<br />         usb_endpoint_xfer_bulk&#40;d&#41;&#41; &#123;<br />             dev_warn&#40;ddev, &quot;config %d interface %d altsetting %d &quot;<br />                      &quot;endpoint 0x%X is Bulk; this violates USB spec for &quot;<br />                      &quot;low speed devices.\n&quot;,<br />                      cfgno, inum, asnum, d-&gt;bEndpointAddress&#41;;<br />//               dev_warn&#40;ddev, &quot;config %d interface %d altsetting %d &quot;<br />//                  &quot;endpoint 0x%X is Bulk; changing to Interrupt\n&quot;,<br />//                  cfgno, inum, asnum, d-&gt;bEndpointAddress&#41;;<br />//               endpoint-&gt;desc.bmAttributes = USB_ENDPOINT_XFER_INT;<br />//               endpoint-&gt;desc.bInterval = 1;<br />//               if &#40;le16_to_cpu&#40;endpoint-&gt;desc.wMaxPacketSize&#41; &gt; 8&#41;<br />//                       endpoint-&gt;desc.wMaxPacketSize = cpu_to_le16&#40;8&#41;; <br />   &#125;<br /></code></pre></div><p>Statistics: Posted by Guest — Thu Oct 30, 2008 10:33 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[christian]]></name></author>
		<updated>2008-04-15T10:01:54+02:00</updated>

		<published>2008-04-15T10:01:54+02:00</published>
		<id>https://forums.obdev.at/viewtopic.php?t=1030&amp;p=5049#p5049</id>
		<link href="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=5049#p5049"/>
		<title type="html"><![CDATA[Linux kernel patch for CDC problems]]></title>

		
		<content type="html" xml:base="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=5049#p5049"><![CDATA[
The problem is not only with cdc_acm, but with all host side software. Libusb has different API functions for bulk and interrupt endpoints. Software which is written for one type of endpoint won't accept the other.<p>Statistics: Posted by <a href="https://forums.obdev.at/memberlist.php?mode=viewprofile&amp;u=8">christian</a> — Tue Apr 15, 2008 10:01 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Anonymous]]></name></author>
		<updated>2008-04-15T08:15:45+02:00</updated>

		<published>2008-04-15T08:15:45+02:00</published>
		<id>https://forums.obdev.at/viewtopic.php?t=1030&amp;p=5047#p5047</id>
		<link href="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=5047#p5047"/>
		<title type="html"><![CDATA[Linux kernel patch for CDC problems]]></title>

		
		<content type="html" xml:base="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=5047#p5047"><![CDATA[
Thanks for your fast reply!<br /><br /><blockquote><div><cite>christian wrote:</cite>Converting the bulk endpoint to an interrupt endpoint implicitly would be a great idea, if a reasonable poll interval is chosen. Unfortunately, the implementation of this conversion seems to be broken: The host side driver still searches for a bulk endpoint, of course, since the interface descriptor of the device lists one.<br /></div></blockquote><br /><br />Hm, i think the interface descriptor is changed also by the code:<br /><br /><div class="codebox"><p>Code: </p><pre><code>              dev_warn&#40;ddev, &quot;config %d interface %d altsetting %d &quot;<br />                  &quot;endpoint 0x%X is Bulk; changing to Interrupt\n&quot;,<br />                  cfgno, inum, asnum, d-&gt;bEndpointAddress&#41;;<br />              endpoint-&gt;desc.bmAttributes = USB_ENDPOINT_XFER_INT;<br />              endpoint-&gt;desc.bInterval = 1;<br />              if &#40;le16_to_cpu&#40;endpoint-&gt;desc.wMaxPacketSize&#41; &gt; 8&#41;<br />                      endpoint-&gt;desc.wMaxPacketSize = cpu_to_le16&#40;8&#41;;<br /></code></pre></div><br /><br />I suppose the problem is that config.c out of the usb core is maintained by different people than the cdc_acm module. And the cdc_acm module still insists on bulk endpoints. Therefore it fails.<br /><br /><blockquote class="uncited"><div>For the moment, it's probably best to remove all this &quot;intelligence&quot; and simply allow the bulk endpoint in the kernel driver. That's what all other operating systems to, after all.</div></blockquote><br /><br />Yes, i think so too.<br /><br /><br />Kind regards,<br />Klaus<p>Statistics: Posted by Guest — Tue Apr 15, 2008 8:15 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[christian]]></name></author>
		<updated>2008-04-14T18:01:45+02:00</updated>

		<published>2008-04-14T18:01:45+02:00</published>
		<id>https://forums.obdev.at/viewtopic.php?t=1030&amp;p=5035#p5035</id>
		<link href="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=5035#p5035"/>
		<title type="html"><![CDATA[Linux kernel patch for CDC problems]]></title>

		
		<content type="html" xml:base="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=5035#p5035"><![CDATA[
Yes, Bulk endpoints are not allowed for low speed devices. There is no particular reason for this (at least not these days with USB 2.0 hubs), but the standard defines it this way. [For USB 1.0 hubs, this was a performance problem since polling blocks the bus for a long time.]<br /><br />Since it's additional work to do this check, most operating systems don't care whether there is a bulk endpoint in a low speed device. I don't think it's a good idea to police things which don't harm just to make sure others conform to the standard.<br /><br />Converting the bulk endpoint to an interrupt endpoint implicitly would be a great idea, if a reasonable poll interval is chosen. Unfortunately, the implementation of this conversion seems to be broken: The host side driver still searches for a bulk endpoint, of course, since the interface descriptor of the device lists one. The automatic conversion should redirect accesses to the bulk endpoint to the interrupt endpoint which is actually used so that the host software does not need to know about the conversion.<br /><br />AVR-USB does not need to know about any conversions, at the device end there's really no difference between bulk and interrupt.<br /><br />For the moment, it's probably best to remove all this &quot;intelligence&quot; and simply allow the bulk endpoint in the kernel driver. That's what all other operating systems to, after all.<p>Statistics: Posted by <a href="https://forums.obdev.at/memberlist.php?mode=viewprofile&amp;u=8">christian</a> — Mon Apr 14, 2008 6:01 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Anonymous]]></name></author>
		<updated>2008-04-14T17:04:18+02:00</updated>

		<published>2008-04-14T17:04:18+02:00</published>
		<id>https://forums.obdev.at/viewtopic.php?t=1030&amp;p=5034#p5034</id>
		<link href="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=5034#p5034"/>
		<title type="html"><![CDATA[Linux kernel patch for CDC problems]]></title>

		
		<content type="html" xml:base="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=5034#p5034"><![CDATA[
Hello Christian, floe, Guest et al.<br /><br />After several weeks i investigated the AVR-CDC problem in conjunction<br />with the linux kernel again. I think there is no good news but i have to<br />admit again that i don't have any clue of all this usb stuff.<br />So everything i write is a suggestion. But since there are no better<br />explanations i think it's justified and i try to abstract my cognitions.<br /><br />Several times was noticed that CDC does not work with low-speed USB<br />transfer according to the USB spec. I'm not sure whether this is true<br />directly.<br />As far as i have seen there are no bulk-endpoints in the spec for<br />low-speed USB devices but CDC expects bulk-endpoints according to<br />the spec. This leads indeed into the situation that CDC should not<br />work on low-speed USB.<br /><br />The linux kernel reflects this exactly. However in a few steps:<br /><br />Up to Kernel Version 2.6.23 there was a small code snippet in<br />drivers/usb/host/uhci-q.c:<br /><div class="codebox"><p>Code: </p><pre><code>     if &#40;urb-&gt;dev-&gt;speed == USB_SPEED_LOW&#41;<br />        return -EINVAL;<br /></code></pre></div><br />it is executed for bulk endpoints and therefore they are<br />ignored at low speed.<br /><br />Since this is at quite low-level in the uhci code it leads to the<br />interesting situation that the AVR-CDC Device works nevertheless if<br />connected to an High-Speed USB2.0 Hub. Because on Host side it is<br />handled by ehci driver then and the code above will never be executed.<br /><br />It's easy to use the already mentioned patch for<br />&quot;drivers/usb/host/uhci-q.c&quot;:<br /><div class="codebox"><p>Code: </p><pre><code>1045,1046c1045,1046<br />&lt;       if &#40;urb-&gt;dev-&gt;speed == USB_SPEED_LOW&#41;<br />&lt;               return -EINVAL;<br />---<br />&gt; //    if &#40;urb-&gt;dev-&gt;speed == USB_SPEED_LOW&#41;<br />&gt; //            return -EINVAL;<br /></code></pre></div><br />Then AVR-CDC works even on direct connected USB Ports using uhci.<br /><br />Unfortunately with Kernel 2.6.24 there appeared a more generic<br />solution for the low-speed bulk endpoints in drivers/usb/core/config.c.<br />It's commented like this:<br /><div class="codebox"><p>Code: </p><pre><code>  /* Some buggy low-speed devices have Bulk endpoints, which is<br />   * explicitly forbidden by the USB spec.  In an attempt to make<br />   * them usable, we will try treating them as Interrupt endpoints.<br />   */<br /></code></pre></div><br />It leads to the following Kernel messages if i plug in my AVR-CDC:<br /><div class="codebox"><p>Code: </p><pre><code> usb 3-4.7: USB disconnect, address 41<br /> usb 3-4.7: new low speed USB device using ehci_hcd and address 42<br /> usb 3-4.7: config 1 interface 1 altsetting 0 endpoint 0x1 is Bulk; changing to Interrupt<br /> usb 3-4.7: config 1 interface 1 altsetting 0 endpoint 0x81 is Bulk; changing to Interrupt<br /> usb 3-4.7: configuration #1 chosen from 1 choice<br /> cdc_acm 3-4.7:1.0: ttyACM0: USB ACM device<br /></code></pre></div><br />This is bad for AVR-CDC because it does not support interrupt<br />endpoints. At first i wondered if this would be necessarry at all<br />because the kernel changes the endpoint from bulk to interrupt already.<br />Christian mentioned that there is not much difference between bulk and<br />interrupt endpoints too. Somebody else suggested an adjustment in<br />AVR-CDC.<br /><br />So i simply changed the endpoint in the AVR-CDC Code from bulk to<br />interrupt. The kernel warning disappeared but it still doesn't work.<br /><br />Then i discovered that there is a generic serial usb driver in the<br />kernel tree which is derived from the cdc_acm module and i thought it<br />should work with AVR-CDC too. With the interrupt endpoint enabled<br />AVR-CDC device the kernel says this:<br /><div class="codebox"><p>Code: </p><pre><code>usbcore: registered new interface driver usbserial<br />drivers/usb/serial/usb-serial.c: USB Serial support registered for generic<br />usbserial_generic 3-4.7:1.0: Generic device with no bulk out, not allowed.<br />usbserial_generic: probe of 3-4.7:1.0 failed with error -5<br />usbserial_generic 3-4.7:1.1: Generic device with no bulk out, not allowed.<br />usbserial_generic: probe of 3-4.7:1.1 failed with error -5<br />usbcore: registered new interface driver usbserial_generic<br />drivers/usb/serial/usb-serial.c: USB Serial Driver core<br /></code></pre></div><br />After having a look at usb-serial.c and cdc-acm.c i found that the<br />driver insists on bulk endpoints but don't get it because the kernel<br />changed them to interrupt endpoints before or interrupt endpoints are<br />already introduced by my changed AVR-CDC firmware.<br /><br />All this conforms very well with the USB specification and therefore<br />doesn't work.<br /><br />So i think there is no chance to get the AVR-CDC device with<br />an unpatched linux kernel newer than 2.4.23 running. And i don't think<br />that this could ever be fixed by the AVR-CDC firmware since it is a<br />problem as a matter of principle.<br /><br />Maybe the most reasonable solution would be to write a driver or a<br />fixed version of the cdc_acm or usbserial_generic module which can deal<br />with interrupt endpoints.<br /><br />But the easiest way is to patch &quot;drivers/usb/core/config.c&quot;<br />like this:<br /><div class="codebox"><p>Code: </p><pre><code>139,145c139,149<br />&lt;               dev_warn&#40;ddev, &quot;config %d interface %d altsetting %d &quot;<br />&lt;                   &quot;endpoint 0x%X is Bulk; changing to Interrupt\n&quot;,<br />&lt;                   cfgno, inum, asnum, d-&gt;bEndpointAddress&#41;;<br />&lt;               endpoint-&gt;desc.bmAttributes = USB_ENDPOINT_XFER_INT;<br />&lt;               endpoint-&gt;desc.bInterval = 1;<br />&lt;               if &#40;le16_to_cpu&#40;endpoint-&gt;desc.wMaxPacketSize&#41; &gt; 8&#41;<br />&lt;                       endpoint-&gt;desc.wMaxPacketSize = cpu_to_le16&#40;8&#41;;<br />---<br />&gt;          dev_warn&#40;ddev, &quot;config %d interface %d altsetting %d &quot;<br />&gt;               &quot;endpoint 0x%X is Bulk; this violates USB spec for &quot;<br />&gt;               &quot;low speed devices.\n&quot;,<br />&gt;               cfgno, inum, asnum, d-&gt;bEndpointAddress&#41;;<br />&gt; //            dev_warn&#40;ddev, &quot;config %d interface %d altsetting %d &quot;<br />&gt; //                &quot;endpoint 0x%X is Bulk; changing to Interrupt\n&quot;,<br />&gt; //                cfgno, inum, asnum, d-&gt;bEndpointAddress&#41;;<br />&gt; //            endpoint-&gt;desc.bmAttributes = USB_ENDPOINT_XFER_INT;<br />&gt; //            endpoint-&gt;desc.bInterval = 1;<br />&gt; //            if &#40;le16_to_cpu&#40;endpoint-&gt;desc.wMaxPacketSize&#41; &gt; 8&#41;<br />&gt; //                    endpoint-&gt;desc.wMaxPacketSize = cpu_to_le16&#40;8&#41;;<br /></code></pre></div><br />I have posted this already in the forum a few weeks ago. But i assume<br />in most situations both patches are necessary.<br /><br /><br />It would be very nice if one of the usb experts would write a short<br />comment whether my ideas could be true.<br /><br />And sorry for my weak english!<br /><br />Kind regards,<br />Klaus<p>Statistics: Posted by Guest — Mon Apr 14, 2008 5:04 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[jschmelzer]]></name></author>
		<updated>2008-04-06T10:00:04+02:00</updated>

		<published>2008-04-06T10:00:04+02:00</published>
		<id>https://forums.obdev.at/viewtopic.php?t=1030&amp;p=4915#p4915</id>
		<link href="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=4915#p4915"/>
		<title type="html"><![CDATA[Linux kernel patch for CDC problems]]></title>

		
		<content type="html" xml:base="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=4915#p4915"><![CDATA[
Finally, I managed to compile the kernel with the modified USB-driver (like in my previous post). Data is now received by my Linux PC. But there is a high failure rate. 70% of the data is corrupted. I double checked already with a XP PC, that the controller board is OK. What can I do now?<p>Statistics: Posted by <a href="https://forums.obdev.at/memberlist.php?mode=viewprofile&amp;u=956">jschmelzer</a> — Sun Apr 06, 2008 10:00 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[jschmelzer]]></name></author>
		<updated>2008-03-26T20:18:59+02:00</updated>

		<published>2008-03-26T20:18:59+02:00</published>
		<id>https://forums.obdev.at/viewtopic.php?t=1030&amp;p=4788#p4788</id>
		<link href="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=4788#p4788"/>
		<title type="html"><![CDATA[Linux kernel patch for CDC problems]]></title>

		
		<content type="html" xml:base="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=4788#p4788"><![CDATA[
OK, I decided to try to fix my problem by building a kernel with modified USB driver. When I understood the posting from Florian right, the code should be looking like this (removed the lines with a &quot;-&quot; and add the lines with &quot;+&quot;):<br /><br /><div class="codebox"><p>Code: </p><pre><code>static int uhci_submit_bulk&#40;struct uhci_hcd *uhci, struct urb *urb,<br />      struct uhci_qh *qh&#41;<br />&#123;<br />   int ret;<br /><br />   /* Can't have low-speed bulk transfers */<br />   /*if &#40;urb-&gt;dev-&gt;speed == USB_SPEED_LOW&#41;<br />      return -EINVAL;*/<br /><br />   if &#40;qh-&gt;state != QH_STATE_ACTIVE&#41;<br />      qh-&gt;skel = &#40;urb-&gt;dev-&gt;speed == USB_SPEED_LOW ? SKEL_LS_CONTROL : SKEL_BULK&#41;;<br />   ret = uhci_submit_common&#40;uhci, urb, qh&#41;;<br />   if &#40;ret == 0 &amp;&amp; urb-&gt;dev-&gt;speed != USB_SPEED_LOW&#41; <br />      uhci_add_fsbr&#40;uhci, urb&#41;;<br />   return ret;<br />&#125; </code></pre></div><br /><br />I downloaded the sources and modified the USB driver. Now I want to compile a new kernel out of that sources. Could somebody just confirm, that I am on the right way?<br /><br />BR,<br />Joerg<p>Statistics: Posted by <a href="https://forums.obdev.at/memberlist.php?mode=viewprofile&amp;u=956">jschmelzer</a> — Wed Mar 26, 2008 8:18 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[jschmelzer]]></name></author>
		<updated>2008-03-25T20:07:03+02:00</updated>

		<published>2008-03-25T20:07:03+02:00</published>
		<id>https://forums.obdev.at/viewtopic.php?t=1030&amp;p=4776#p4776</id>
		<link href="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=4776#p4776"/>
		<title type="html"><![CDATA[Linux kernel patch for CDC problems]]></title>

		
		<content type="html" xml:base="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=4776#p4776"><![CDATA[
Hello everybody!<br /><br />I am facing the same problem with Kernel 2.6 and an Intel chipset. I want to use my Asus EeePC (Xandros with Kernel 2.6.21.4) to communicate with the &quot;Experimentierboard &quot; from Ulrich Radig. You can find the project under this Link:<br /><br /><!-- m --><a class="postlink" href="http://www.ulrichradig.de/home/index.php/avr/atmega8-experimentierboard">http://www.ulrichradig.de/home/index.ph ... ntierboard</a><!-- m --><br /><br />There is a Tiny2313 used with the CDC-2313 firmware.<br /><br />The circuit is running fine with Windows XP and also with a different PC with nVidia MCP55 chipset running gOS. I tried a third PC with gOS and Intel chipset. There, I was able to duplicate the issue again.<br /><br />As I am just a beginner with Linux AND AVR C-programming, is there an easy way to solve the problem, or do I need to patch and compile my own Kernel? I would like to stay with my current installation on the EeePC. It was quite a tough job for me to compile and install the AVR-GCC toolchain...<br /><br />dmesg is reporting this:<br /><br />usb 2-2: new low speed USB device using uhci_hcd and address 12<br />usb 2-2: configuration #1 chosen from 1 choice<br />cdc_acm 2-2:1.0: ttyACM0: USB ACM device <br /><br />Anybody has an idea for me to get ahead?<br /><br />Thanks in advance.<br />BR,<br />Joerg<p>Statistics: Posted by <a href="https://forums.obdev.at/memberlist.php?mode=viewprofile&amp;u=956">jschmelzer</a> — Tue Mar 25, 2008 8:07 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[christian]]></name></author>
		<updated>2008-02-14T00:19:46+02:00</updated>

		<published>2008-02-14T00:19:46+02:00</published>
		<id>https://forums.obdev.at/viewtopic.php?t=1030&amp;p=4216#p4216</id>
		<link href="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=4216#p4216"/>
		<title type="html"><![CDATA[Linux kernel patch for CDC problems]]></title>

		
		<content type="html" xml:base="https://forums.obdev.at/viewtopic.php?t=1030&amp;p=4216#p4216"><![CDATA[
USB is a host driven serial bus. Real interrupts are therefore not possible, all interrupt-like semantics are implemented with polling.<br /><br />I don't understand why this change should break anything. There is no difference between interrupt- and bulk-endpoints in AVR-USB. Only the timing of the API calls should differ. This may trigger a bug.<p>Statistics: Posted by <a href="https://forums.obdev.at/memberlist.php?mode=viewprofile&amp;u=8">christian</a> — Thu Feb 14, 2008 12:19 am</p><hr />
]]></content>
	</entry>
	</feed>
