* "Virtual" Interrupts -- Need help please @ 2013-09-08 0:19 Daniel Santos 2013-09-08 0:52 ` Guenter Roeck 2013-09-09 11:06 ` Mark Brown 0 siblings, 2 replies; 14+ messages in thread From: Daniel Santos @ 2013-09-08 0:19 UTC (permalink / raw) To: linux-gpio, linux-usb, linux-spi, Samuel Ortiz, LKML, Thomas Gleixner I've posted a number of requests for aid on this and have gotten very little responses and none that were helpful. I have spent at least 24 hours of research time on this and just a little direction from somebody who knows this subsystem can help me immensely as the IRQ subsystem is new to me. This is for the MCP2210 driver (a USB to SPI/GPIO bridge) and my driver is the first of its class for the Linux kernel, giving me less to look at as an example. I intend to use standard drivers for whatever I have connected at the other end. For this to work, I need to supply interrupts for some of these drivers to work correctly. How do I do this? Every thing else on this driver is ready to go and my handler functions for this are empty and waiting for some code. So do i create an IRQ domain and then call generic_handle_irq() from my URB complete() function? If so, which type of IRQ Domain is appropriate for this? Unlike typical platform devices, these are dynamically added and removed throughout the life of the kernel, adding to the challenge. So, if I understand correctly, my base IRQ number needs to be dynamically generated. How should I manage this? Finally, if you have any example drivers that are doing something similar, that would be SO very helpful as well! I have some secondary (and less important) questions about how to integrate this with device drivers that want a DT / open firmware config (which I know almost nothing about at this time), but that can wait. Any help *greatly* appreciated and thank you in advance! Daniel PS: If interested, my current driver here: https://github.com/daniel-santos/mcp2210-linux. I haven't sought review yet because I want to finish it first. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: "Virtual" Interrupts -- Need help please 2013-09-08 0:19 "Virtual" Interrupts -- Need help please Daniel Santos @ 2013-09-08 0:52 ` Guenter Roeck 2013-09-08 23:50 ` Daniel Santos 2013-09-09 11:06 ` Mark Brown 1 sibling, 1 reply; 14+ messages in thread From: Guenter Roeck @ 2013-09-08 0:52 UTC (permalink / raw) To: Daniel Santos Cc: Daniel Santos, linux-gpio, linux-usb, linux-spi, Samuel Ortiz, LKML, Thomas Gleixner On 09/07/2013 05:19 PM, Daniel Santos wrote: > I've posted a number of requests for aid on this and have gotten very little responses and none that were helpful. I have spent at least 24 hours of research time on this and just a little direction from somebody who knows this subsystem can help me immensely as the IRQ subsystem is new to me. > > This is for the MCP2210 driver (a USB to SPI/GPIO bridge) and my driver is the first of its class for the Linux kernel, giving me less to look at as an example. I intend to use standard drivers for whatever I have connected at the other end. For this to work, I need to supply interrupts for some of these drivers to work correctly. How do I do this? Every thing else on this driver is ready to go and my handler functions for this are empty and waiting for some code. > Not really. Have a look at https://github.com/groeck/diolan even though the SPI part there still isn't working and it is far from being acceptable upstream in its current form. It also doesn't support interrupts. It is modeled as mfd driver, which I think you might want to consider as well. > So do i create an IRQ domain and then call generic_handle_irq() from my URB complete() function? If so, which type of IRQ Domain is appropriate for this? Unlike typical platform devices, these are dynamically added and removed throughout the life of the kernel, adding to the challenge. So, if I understand correctly, my base IRQ number needs to be dynamically generated. How should I manage this? > > Finally, if you have any example drivers that are doing something similar, that would be SO very helpful as well! > There are several drivers in drivers/mfd solving the same problem, ie using irq domains to pass interrupts to client drivers. Look for irq_domain_add_simple(). drivers/mfd/tc3589x.c seems to be a good example. > I have some secondary (and less important) questions about how to integrate this with device drivers that want a DT / open firmware config (which I know almost nothing about at this time), but that can wait. > If you look into the mfd subsystem, you may notice that it handles at least some of the complexity of interrupt handling as well as devicetree integration. One more reason to use it. Guenter > Any help *greatly* appreciated and thank you in advance! > > Daniel > > PS: If interested, my current driver here: https://github.com/daniel-santos/mcp2210-linux. I haven't sought review yet because I want to finish it first. > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > > > > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: "Virtual" Interrupts -- Need help please 2013-09-08 0:52 ` Guenter Roeck @ 2013-09-08 23:50 ` Daniel Santos 2013-09-09 0:35 ` Guenter Roeck 0 siblings, 1 reply; 14+ messages in thread From: Daniel Santos @ 2013-09-08 23:50 UTC (permalink / raw) To: Guenter Roeck Cc: linux-gpio, linux-usb, linux-spi, Samuel Ortiz, LKML, Thomas Gleixner On 09/07/2013 07:52 PM, Guenter Roeck wrote: > On 09/07/2013 05:19 PM, Daniel Santos wrote: >> I've posted a number of requests for aid on this and have gotten very >> little responses and none that were helpful. I have spent at least 24 >> hours of research time on this and just a little direction from >> somebody who knows this subsystem can help me immensely as the IRQ >> subsystem is new to me. >> >> This is for the MCP2210 driver (a USB to SPI/GPIO bridge) and my >> driver is the first of its class for the Linux kernel, giving me less >> to look at as an example. I intend to use standard drivers for >> whatever I have connected at the other end. For this to work, I need >> to supply interrupts for some of these drivers to work correctly. >> How do I do this? Every thing else on this driver is ready to go and >> my handler functions for this are empty and waiting for some code. >> > Not really. Have a look at https://github.com/groeck/diolan even > though the SPI part there > still isn't working and it is far from being acceptable upstream in > its current form. > It also doesn't support interrupts. Oh, this is wonderful to know! While I like breaking new ground, I certainly don't enjoy doing it when I'm trying to write my first device driver and having to learn so many new things. > > It is modeled as mfd driver, which I think you might want to consider > as well. > >> So do i create an IRQ domain and then call generic_handle_irq() from >> my URB complete() function? If so, which type of IRQ Domain is >> appropriate for this? Unlike typical platform devices, these are >> dynamically added and removed throughout the life of the kernel, >> adding to the challenge. So, if I understand correctly, my base IRQ >> number needs to be dynamically generated. How should I manage this? >> >> Finally, if you have any example drivers that are doing something >> similar, that would be SO very helpful as well! >> > There are several drivers in drivers/mfd solving the same problem, ie > using > irq domains to pass interrupts to client drivers. Look for > irq_domain_add_simple(). > drivers/mfd/tc3589x.c seems to be a good example. Ahh, wonderful! I was looking at a lot of the code in mfd, but it contains so many things that I don't understand yet, so it's been harder to be clear on what the driver is doing and why w/o extensive examination & study of the subsystems it's using. This will help! > >> I have some secondary (and less important) questions about how to >> integrate this with device drivers that want a DT / open firmware >> config (which I know almost nothing about at this time), but that can >> wait. >> > If you look into the mfd subsystem, you may notice that it handles at > least some of the complexity > of interrupt handling as well as devicetree integration. One more > reason to use it. > > Guenter Even better, thank you very much!! If this thing had more EEPROM storage I would consider using the OF format for it's settings, but I only have 256 bytes to play with so I'm using a custom compression/encoding. I'm hoping to present this for an initial review in a month or so. I'm sure you guys will shred it, but I'm excited about it anyway! :) Thanks again! Daniel ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: "Virtual" Interrupts -- Need help please 2013-09-08 23:50 ` Daniel Santos @ 2013-09-09 0:35 ` Guenter Roeck 2013-09-09 11:02 ` Mark Brown 0 siblings, 1 reply; 14+ messages in thread From: Guenter Roeck @ 2013-09-09 0:35 UTC (permalink / raw) To: Daniel Santos Cc: Daniel Santos, linux-gpio, linux-usb, linux-spi, Samuel Ortiz, LKML, Thomas Gleixner On 09/08/2013 04:50 PM, Daniel Santos wrote: > On 09/07/2013 07:52 PM, Guenter Roeck wrote: >> On 09/07/2013 05:19 PM, Daniel Santos wrote: >>> I've posted a number of requests for aid on this and have gotten very little responses and none that were helpful. I have spent at least 24 hours of research time on this and just a little direction from somebody who knows this subsystem can help me immensely as the IRQ subsystem is new to me. >>> >>> This is for the MCP2210 driver (a USB to SPI/GPIO bridge) and my driver is the first of its class for the Linux kernel, giving me less to look at as an example. I intend to use standard drivers for whatever I have connected at the other end. For this to work, I need to supply interrupts for some of these drivers to work correctly. How do I do this? Every thing else on this driver is ready to go and my handler functions for this are empty and waiting for some code. >>> >> Not really. Have a look at https://github.com/groeck/diolan even though the SPI part there >> still isn't working and it is far from being acceptable upstream in its current form. >> It also doesn't support interrupts. > > Oh, this is wonderful to know! While I like breaking new ground, I certainly don't enjoy doing it when I'm trying to write my first device driver and having to learn so many new things. > >> >> It is modeled as mfd driver, which I think you might want to consider as well. >> >>> So do i create an IRQ domain and then call generic_handle_irq() from my URB complete() function? If so, which type of IRQ Domain is appropriate for this? Unlike typical platform devices, these are dynamically added and removed throughout the life of the kernel, adding to the challenge. So, if I understand correctly, my base IRQ number needs to be dynamically generated. How should I manage this? >>> >>> Finally, if you have any example drivers that are doing something similar, that would be SO very helpful as well! >>> >> There are several drivers in drivers/mfd solving the same problem, ie using >> irq domains to pass interrupts to client drivers. Look for irq_domain_add_simple(). >> drivers/mfd/tc3589x.c seems to be a good example. > > Ahh, wonderful! I was looking at a lot of the code in mfd, but it contains so many things that I don't understand yet, so it's been harder to be clear on what the driver is doing and why w/o extensive examination & study of the subsystems it's using. This will help! > Yes, one of the issues with mfd is its lack of documentation. I am sure the maintainer will appreciate if you solve that problem by writing it :). >> >>> I have some secondary (and less important) questions about how to integrate this with device drivers that want a DT / open firmware config (which I know almost nothing about at this time), but that can wait. >>> >> If you look into the mfd subsystem, you may notice that it handles at least some of the complexity >> of interrupt handling as well as devicetree integration. One more reason to use it. >> >> Guenter > > Even better, thank you very much!! If this thing had more EEPROM storage I would consider using the OF format for it's settings, but I only have 256 bytes to play with so I'm using a custom compression/encoding. > You should really use devicetree anyway. How you get it loaded on demand is another question. Lack of storage is not a reason. Custom data will likely not be accepted upstream, if you had that in mind. On the other side, we'll need PC/x86 support as well (or at least I do), so support for platform data based initialization data will be necessary as well. > I'm hoping to present this for an initial review in a month or so. I'm sure you guys will shred it, but I'm excited about it anyway! :) > Let me know when you have something to test. I just ordered an evaluation board for that chip, so I'll need it soon ;). Guenter ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: "Virtual" Interrupts -- Need help please 2013-09-09 0:35 ` Guenter Roeck @ 2013-09-09 11:02 ` Mark Brown 2013-09-09 11:18 ` Alexander Holler 0 siblings, 1 reply; 14+ messages in thread From: Mark Brown @ 2013-09-09 11:02 UTC (permalink / raw) To: Guenter Roeck Cc: Daniel Santos, Daniel Santos, linux-gpio, linux-usb, linux-spi, Samuel Ortiz, LKML, Thomas Gleixner [-- Attachment #1: Type: text/plain, Size: 1024 bytes --] On Sun, Sep 08, 2013 at 05:35:56PM -0700, Guenter Roeck wrote: Please fix your mailer to word wrap within paragraphs, not doing this makes your mail very hard to read. It looks like your mailer has also reflowed Daniel's mail. > On 09/08/2013 04:50 PM, Daniel Santos wrote: > >Even better, thank you very much!! If this thing had more EEPROM > >storage I would consider using the OF format for it's settings, but I > >only have 256 bytes to play with so I'm using a custom > >compression/encoding. > You should really use devicetree anyway. How you get it loaded on > demand is another question. Lack of storage is not a reason. Custom > data will likely not be accepted upstream, if you had that in mind. If it's embedded into the device that shouldn't be such a problem - especially for something on a pluggable bus that could be used with any architecture device tree is pretty much a secondary concern. Device tree is far from universal and the main concern where it is used is with avoiding static board files. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: "Virtual" Interrupts -- Need help please 2013-09-09 11:02 ` Mark Brown @ 2013-09-09 11:18 ` Alexander Holler 2013-09-09 11:45 ` Guenter Roeck 2013-09-09 13:45 ` Mark Brown 0 siblings, 2 replies; 14+ messages in thread From: Alexander Holler @ 2013-09-09 11:18 UTC (permalink / raw) To: Mark Brown Cc: Guenter Roeck, Daniel Santos, Daniel Santos, linux-gpio, linux-usb, linux-spi, Samuel Ortiz, LKML, Thomas Gleixner Am 09.09.2013 13:02, schrieb Mark Brown: > On Sun, Sep 08, 2013 at 05:35:56PM -0700, Guenter Roeck wrote: > > Please fix your mailer to word wrap within paragraphs, not doing this > makes your mail very hard to read. It looks like your mailer has also > reflowed Daniel's mail. That's just wrong. Mail readers should wrap lines, not senders. And readers can do this since some decades. The reason is obvious: No sender knows the line width the receiver can display. So, for example, if the sender hard breaks lines every 80 chars, a reader with a device which just displays 60 characters at max. will see every second line with at most 20 characters. I assume you can guess how such does look like. Furthermore there are still a lot of people which do like to read mails with line length as long their display is possible to show, and hard breaking lines on the receiver side does make such impossible. So the correct behaviour is to not hard break lines on the sender side and leave that to the reader on the receiving side, as only the receiving side knows the line width. Alexander Holler ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: "Virtual" Interrupts -- Need help please 2013-09-09 11:18 ` Alexander Holler @ 2013-09-09 11:45 ` Guenter Roeck 2013-09-09 12:00 ` Alexander Holler 2013-09-09 13:45 ` Mark Brown 1 sibling, 1 reply; 14+ messages in thread From: Guenter Roeck @ 2013-09-09 11:45 UTC (permalink / raw) To: Alexander Holler Cc: Mark Brown, Daniel Santos, Daniel Santos, linux-gpio, linux-usb, linux-spi, Samuel Ortiz, LKML, Thomas Gleixner On 09/09/2013 04:18 AM, Alexander Holler wrote: > Am 09.09.2013 13:02, schrieb Mark Brown: >> On Sun, Sep 08, 2013 at 05:35:56PM -0700, Guenter Roeck wrote: >> >> Please fix your mailer to word wrap within paragraphs, not doing this >> makes your mail very hard to read. It looks like your mailer has also >> reflowed Daniel's mail. > > That's just wrong. Mail readers should wrap lines, not senders. And readers can do this since some decades. > > The reason is obvious: No sender knows the line width the receiver can display. So, for example, if the sender hard breaks lines every 80 chars, a reader with a device which just displays 60 characters at max. will see every second line with at most 20 characters. I assume you can guess how such does look like. Furthermore there are still a lot of people which do like to read mails with line length as long their display is possible to show, and hard breaking lines on the receiver side does make such impossible. > > So the correct behaviour is to not hard break lines on the sender side and leave that to the reader on the receiving side, as only the receiving side knows the line width. > I am using thunderbird and/or mutt. I don't think they reflow anything, or at least the logged mail doesn't seem to have been reflowed (nor does the text above). As for what I write myself, I prefer to wrap manually, meaning automatic insertion of newlines is turned off. Guess I can not do it right for everyone. Guenter ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: "Virtual" Interrupts -- Need help please 2013-09-09 11:45 ` Guenter Roeck @ 2013-09-09 12:00 ` Alexander Holler 0 siblings, 0 replies; 14+ messages in thread From: Alexander Holler @ 2013-09-09 12:00 UTC (permalink / raw) To: Guenter Roeck Cc: Mark Brown, Daniel Santos, Daniel Santos, linux-gpio, linux-usb, linux-spi, Samuel Ortiz, LKML, Thomas Gleixner Am 09.09.2013 13:45, schrieb Guenter Roeck: > On 09/09/2013 04:18 AM, Alexander Holler wrote: >> Am 09.09.2013 13:02, schrieb Mark Brown: >>> On Sun, Sep 08, 2013 at 05:35:56PM -0700, Guenter Roeck wrote: >>> >>> Please fix your mailer to word wrap within paragraphs, not doing this >>> makes your mail very hard to read. It looks like your mailer has also >>> reflowed Daniel's mail. >> >> That's just wrong. Mail readers should wrap lines, not senders. And >> readers can do this since some decades. >> >> The reason is obvious: No sender knows the line width the receiver can >> display. So, for example, if the sender hard breaks lines every 80 >> chars, a reader with a device which just displays 60 characters at >> max. will see every second line with at most 20 characters. I assume >> you can guess how such does look like. Furthermore there are still a >> lot of people which do like to read mails with line length as long >> their display is possible to show, and hard breaking lines on the >> receiver side does make such impossible. Uups, sorry, I meant on the sender side here. ;) >> >> So the correct behaviour is to not hard break lines on the sender side >> and leave that to the reader on the receiving side, as only the >> receiving side knows the line width. >> > > I am using thunderbird and/or mutt. I don't think they reflow anything, > or at least the logged mail doesn't seem to have been reflowed (nor > does the text above). > > As for what I write myself, I prefer to wrap manually, meaning automatic > insertion of newlines is turned off. Guess I can not do it right for That just the right thing to do. > everyone. Regards, Alexander Holler ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: "Virtual" Interrupts -- Need help please 2013-09-09 11:18 ` Alexander Holler 2013-09-09 11:45 ` Guenter Roeck @ 2013-09-09 13:45 ` Mark Brown [not found] ` <20130909134558.GY29403-GFdadSzt00ze9xe1eoZjHA@public.gmane.org> 1 sibling, 1 reply; 14+ messages in thread From: Mark Brown @ 2013-09-09 13:45 UTC (permalink / raw) To: Alexander Holler Cc: Guenter Roeck, Daniel Santos, Daniel Santos, linux-gpio, linux-usb, linux-spi, Samuel Ortiz, LKML, Thomas Gleixner [-- Attachment #1: Type: text/plain, Size: 1430 bytes --] On Mon, Sep 09, 2013 at 01:18:01PM +0200, Alexander Holler wrote: > Am 09.09.2013 13:02, schrieb Mark Brown: > >makes your mail very hard to read. It looks like your mailer has also > >reflowed Daniel's mail. > That's just wrong. Mail readers should wrap lines, not senders. And > readers can do this since some decades. There's a specific way for senders to request that if it's desired, set format=flowed in the MIME type to tell the recipient that the formatting isn't important. > The reason is obvious: No sender knows the line width the receiver > can display. So, for example, if the sender hard breaks lines every > 80 chars, a reader with a device which just displays 60 characters > at max. will see every second line with at most 20 characters. I > assume you can guess how such does look like. Furthermore there are > still a lot of people which do like to read mails with line length > as long their display is possible to show, and hard breaking lines > on the receiver side does make such impossible. > So the correct behaviour is to not hard break lines on the sender > side and leave that to the reader on the receiving side, as only the > receiving side knows the line width. This doesn't work well with lots of content (like patches) commonly handled in technical contexts - the line breaks actually mean something and it's hard fo the mail client to figure out what is going on unless someone tells it. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
[parent not found: <20130909134558.GY29403-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>]
* Re: "Virtual" Interrupts -- Need help please [not found] ` <20130909134558.GY29403-GFdadSzt00ze9xe1eoZjHA@public.gmane.org> @ 2013-09-09 14:21 ` Alexander Holler 0 siblings, 0 replies; 14+ messages in thread From: Alexander Holler @ 2013-09-09 14:21 UTC (permalink / raw) To: Mark Brown Cc: Guenter Roeck, Daniel Santos, linux-gpio, linux-usb, linux-spi, Samuel Ortiz, LKML, Thomas Gleixner Am 09.09.2013 15:45, schrieb Mark Brown: > On Mon, Sep 09, 2013 at 01:18:01PM +0200, Alexander Holler wrote: >> Am 09.09.2013 13:02, schrieb Mark Brown: > >>> makes your mail very hard to read. It looks like your mailer has also >>> reflowed Daniel's mail. > >> That's just wrong. Mail readers should wrap lines, not senders. And >> readers can do this since some decades. > > There's a specific way for senders to request that if it's desired, set > format=flowed in the MIME type to tell the recipient that the formatting > isn't important. > >> The reason is obvious: No sender knows the line width the receiver >> can display. So, for example, if the sender hard breaks lines every >> 80 chars, a reader with a device which just displays 60 characters >> at max. will see every second line with at most 20 characters. I >> assume you can guess how such does look like. Furthermore there are >> still a lot of people which do like to read mails with line length >> as long their display is possible to show, and hard breaking lines >> on the receiver side does make such impossible. > >> So the correct behaviour is to not hard break lines on the sender >> side and leave that to the reader on the receiving side, as only the >> receiving side knows the line width. > > This doesn't work well with lots of content (like patches) commonly > handled in technical contexts - the line breaks actually mean something > and it's hard fo the mail client to figure out what is going on unless > someone tells it. I wonder what all the hard line breaks you added to your mail do mean? Hard line breaks in paragraphs, as you've requested, doesn't mean anything. They just make eamils extremly ugly, e.g. your one is displayed here with a whole lot of unused white space because I'm not using a CGA screen. And people who do read your mail on a phone with less than 80 or 75 chars will see it as even more ugly. And imho it just works if hard line breaks are used where they belong too, the code or to end paragraphs or otherwise where they have a meaning, but not just always after 75 or 80 chars. Regards, Alexander Holler -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: "Virtual" Interrupts -- Need help please 2013-09-08 0:19 "Virtual" Interrupts -- Need help please Daniel Santos 2013-09-08 0:52 ` Guenter Roeck @ 2013-09-09 11:06 ` Mark Brown 2013-09-09 21:12 ` Daniel Santos 1 sibling, 1 reply; 14+ messages in thread From: Mark Brown @ 2013-09-09 11:06 UTC (permalink / raw) To: Daniel Santos Cc: linux-gpio, linux-usb, linux-spi, Samuel Ortiz, LKML, Thomas Gleixner [-- Attachment #1: Type: text/plain, Size: 913 bytes --] On Sat, Sep 07, 2013 at 07:19:06PM -0500, Daniel Santos wrote: > So do i create an IRQ domain and then call generic_handle_irq() from > my URB complete() function? If so, which type of IRQ Domain is > appropriate for this? Unlike typical platform devices, these are > dynamically added and removed throughout the life of the kernel, > adding to the challenge. So, if I understand correctly, my base IRQ > number needs to be dynamically generated. How should I manage this? Unless you have a particular reason for using something else you should be using a linear domain - that's the default, it's very simple to work with. > I have some secondary (and less important) questions about how to > integrate this with device drivers that want a DT / open firmware > config (which I know almost nothing about at this time), but that > can wait. Could you be more specific about what you mean by "integrate" here? [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: "Virtual" Interrupts -- Need help please 2013-09-09 11:06 ` Mark Brown @ 2013-09-09 21:12 ` Daniel Santos 2013-09-10 18:01 ` Mark Brown 0 siblings, 1 reply; 14+ messages in thread From: Daniel Santos @ 2013-09-09 21:12 UTC (permalink / raw) To: Mark Brown Cc: linux-gpio, linux-usb, linux-spi, Samuel Ortiz, LKML, Thomas Gleixner On 09/09/2013 06:06 AM, Mark Brown wrote: > On Sat, Sep 07, 2013 at 07:19:06PM -0500, Daniel Santos wrote: > >> So do i create an IRQ domain and then call generic_handle_irq() from >> my URB complete() function? If so, which type of IRQ Domain is >> appropriate for this? Unlike typical platform devices, these are >> dynamically added and removed throughout the life of the kernel, >> adding to the challenge. So, if I understand correctly, my base IRQ >> number needs to be dynamically generated. How should I manage this? > Unless you have a particular reason for using something else you should > be using a linear domain - that's the default, it's very simple to work > with. Cool, thank you. >> I have some secondary (and less important) questions about how to >> integrate this with device drivers that want a DT / open firmware >> config (which I know almost nothing about at this time), but that >> can wait. > Could you be more specific about what you mean by "integrate" here? Hmm. Well one shortcoming of my driver has been lacking a way to tell the spi protocol driver which IRQ to use for interrupts. Yet another oversight on my behalf, as struct spi_device contains an int irq field just for this purpose. *sigh* Well, at least that's one problem put to rest, but I should probably elaborate further on this. Sorry in advance for the long response. One of my original requirements for this driver is that it is reusable for different devices that use the MCP2210, not just my own hardware. There are a number of ways to accomplish this, but I'm still new to Linux device drivers, so I don't know how an "abstract driver" would work other than just making it a library that doesn't register its self as a driver. The theory is that you should be able to specify your own USB vid/pid and have your driver probe on that, then feed the generic MCP2210 driver/library your board wiring information and any parameters your other drivers need (spi or gpio-driven peripherals on the board) and let the MCP2210 driver/library do potentially everything else for you, unless your device has some needs that aren't covered. Another requirement is for my specific device to vary its hardware somewhat, but (possibly) use the same vid/pid for these. Maybe this is some cardinal sin and a unique pid and model number for each variant is called for (like I said, I'm still new to this stuff). None the less, I've dealt with these two problems by creating an encoding scheme (which I've dubbed "Creek", since I figured I was up one if it didn't work) that compresses the data so that it will fit easily in the 256 bytes of user-EEPROM on the chip. At the time I wrote this, I knew very little about the device tree and nothing about this Open Firmware format, so now I want to make sure I'm not re-inventing some wheel or circumventing a standard unnecessarily. Then, as I was working on figuring out how to propagate IRQs, I noticed that the irq_domain_add_linear() accepted a pointer to struct device_node and didn't not accept NULL. This made me think that I was missing something. So basically, it's a can of worms. :) I wanted to get the interrupts working first so I could confront this once I had a fully working driver, but I suppose there's no time like the present. So more specifically, on the EEPROM, I'm now storing the following (basically, everything in my struct board_config: https://github.com/daniel-santos/mcp2210-linux/blob/master/mcp2210.h#L483): * an optional name for the device or pin (for GPIOs, this is the name they get exported with) * an optional modalias for spi devices (defaults to "spidev") -- which of course I know mixes OS with hardware, but should be easily translatable for drivers for lessor operating systems. * for spi devices, mode, min & max bitrate and timing requirements (various delay values) * for gpios and the MCP2210's dedicated "interrupt counter" pin, an optional interrupt offset for producing IRQs * for gpios, the interrupt edge type (the dedicated interrupt counter manages this elsewhere) * how often it wants to have it's gpios and the "interrupt counter" polled (if applicable) * and soon to be added: an interrupt offset for SPI devices that want to consume IRQs (but only those generated by this MCP2210 device) So in summary, I need to make sure that what I'm doing 1.) makes sense, 2.) adheres to standards (unless the standard fails to fulfill the real-world requirements) and 3.) doesn't unnecessarily introduce a new way to do something that's already done better elsewhere. Thanks, Daniel ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: "Virtual" Interrupts -- Need help please 2013-09-09 21:12 ` Daniel Santos @ 2013-09-10 18:01 ` Mark Brown 2013-09-11 17:59 ` Daniel Santos 0 siblings, 1 reply; 14+ messages in thread From: Mark Brown @ 2013-09-10 18:01 UTC (permalink / raw) To: Daniel Santos Cc: linux-gpio, linux-usb, linux-spi, Samuel Ortiz, LKML, Thomas Gleixner [-- Attachment #1: Type: text/plain, Size: 3528 bytes --] On Mon, Sep 09, 2013 at 04:12:21PM -0500, Daniel Santos wrote: > On 09/09/2013 06:06 AM, Mark Brown wrote: > >On Sat, Sep 07, 2013 at 07:19:06PM -0500, Daniel Santos wrote: > >>I have some secondary (and less important) questions about how to > >>integrate this with device drivers that want a DT / open firmware > >>config (which I know almost nothing about at this time), but that > >>can wait. > >Could you be more specific about what you mean by "integrate" here? > One of my original requirements for this driver is that it is > reusable for different devices that use the MCP2210, not just my own > hardware. There are a number of ways to accomplish this, but I'm > still new to Linux device drivers, so I don't know how an "abstract > driver" would work other than just making it a library that doesn't > register its self as a driver. The theory is that you should be > able to specify your own USB vid/pid and have your driver probe on > that, then feed the generic MCP2210 driver/library your board wiring > information and any parameters your other drivers need (spi or > gpio-driven peripherals on the board) and let the MCP2210 > driver/library do potentially everything else for you, unless your > device has some needs that aren't covered. OK, this is a lot like the plugin modules that are fairly common in embedded reference designs. I do have some ideas for how to put an indirection layer in front of them but I'm not sure they're that exciting - I expect what you end up doing will be having tables of child device configurations registered based on the vendor ID, the vendor ID support in the USB subsystem will let you provide either an index into an array or just a pointer to the data for the specific board. > Another requirement is for my specific device to vary its hardware > somewhat, but (possibly) use the same vid/pid for these. Maybe this > is some cardinal sin and a unique pid and model number for each > variant is called for (like I said, I'm still new to this stuff). > None the less, I've dealt with these two problems by creating an > encoding scheme (which I've dubbed "Creek", since I figured I was up > one if it didn't work) that compresses the data so that it will fit > easily in the 256 bytes of user-EEPROM on the chip. That doesn't seem so bad, you can just have the decode of the main VID/PID kick off the decode of the EEPROM contents. > At the time I wrote this, I knew very little about the device tree > and nothing about this Open Firmware format, so now I want to make > sure I'm not re-inventing some wheel or circumventing a standard > unnecessarily. Then, as I was working on figuring out how to > propagate IRQs, I noticed that the irq_domain_add_linear() accepted > a pointer to struct device_node and didn't not accept NULL. This > made me think that I was missing something. Device tree is more applicable on a system level, it's not something it's sensible to mandate for a USB device. The struct device is as much for in kernel usage as anything else, there are helpers to make DT transparent but it all works perfectly fine on systems that don't even have DT support built in. > So in summary, I need to make sure that what I'm doing 1.) makes > sense, 2.) adheres to standards (unless the standard fails to > fulfill the real-world requirements) and 3.) doesn't unnecessarily > introduce a new way to do something that's already done better > elsewhere. It doesn't seem unreasonable to me, though it'd be good to review the specifics of course. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: "Virtual" Interrupts -- Need help please 2013-09-10 18:01 ` Mark Brown @ 2013-09-11 17:59 ` Daniel Santos 0 siblings, 0 replies; 14+ messages in thread From: Daniel Santos @ 2013-09-11 17:59 UTC (permalink / raw) To: Mark Brown Cc: linux-gpio, linux-usb, linux-spi, Samuel Ortiz, LKML, Thomas Gleixner On 09/10/2013 01:01 PM, Mark Brown wrote: > On Mon, Sep 09, 2013 at 04:12:21PM -0500, Daniel Santos wrote: >> One of my original requirements for this driver is that it is >> reusable for different devices that use the MCP2210, not just my own >> hardware. There are a number of ways to accomplish this, but I'm >> still new to Linux device drivers, so I don't know how an "abstract >> driver" would work other than just making it a library that doesn't >> register its self as a driver. The theory is that you should be >> able to specify your own USB vid/pid and have your driver probe on >> that, then feed the generic MCP2210 driver/library your board wiring >> information and any parameters your other drivers need (spi or >> gpio-driven peripherals on the board) and let the MCP2210 >> driver/library do potentially everything else for you, unless your >> device has some needs that aren't covered. > OK, this is a lot like the plugin modules that are fairly common in > embedded reference designs. I do have some ideas for how to put an > indirection layer in front of them but I'm not sure they're that > exciting - I expect what you end up doing will be having tables of child > device configurations registered based on the vendor ID, the vendor ID > support in the USB subsystem will let you provide either an index into > an array or just a pointer to the data for the specific board. Hmm, I guess I was thinking about this in the other direction: A generic mcp2210 and then the new guy's writes a driver for his specific hardware with it's own vid/pid and he loads up mcp2210 and sends it config, but doesn't change mcp2210. Honestly, I forget some of the dynamics of working with the kernel that differ from other projects -- anything can be modified at a later date to accommodate new hardware. Just adding a new vid/pid entry with config would be much easier and lightweight. >> Another requirement is for my specific device to vary its hardware >> somewhat, but (possibly) use the same vid/pid for these. Maybe this >> is some cardinal sin and a unique pid and model number for each >> variant is called for (like I said, I'm still new to this stuff). >> None the less, I've dealt with these two problems by creating an >> encoding scheme (which I've dubbed "Creek", since I figured I was up >> one if it didn't work) that compresses the data so that it will fit >> easily in the 256 bytes of user-EEPROM on the chip. > That doesn't seem so bad, you can just have the decode of the main > VID/PID kick off the decode of the EEPROM contents. Currently, I'm using magic. I read the first 4 bytes of the user-EEPROM and if it's 0xc01df00d then I presume that it will feed me configuration data in the Creek format, after re-heating of course. I left myself a 4 bit format version field as well. >> At the time I wrote this, I knew very little about the device tree >> and nothing about this Open Firmware format, so now I want to make >> sure I'm not re-inventing some wheel or circumventing a standard >> unnecessarily. Then, as I was working on figuring out how to >> propagate IRQs, I noticed that the irq_domain_add_linear() accepted >> a pointer to struct device_node and didn't not accept NULL. This >> made me think that I was missing something. > Device tree is more applicable on a system level, it's not something > it's sensible to mandate for a USB device. The struct device is as much > for in kernel usage as anything else, there are helpers to make DT > transparent but it all works perfectly fine on systems that don't even > have DT support built in. Ahh, well that's fun. I want to learn about it none the less because the hardware that we'll interact with from usb to spi/gpio/i2s/smbus, etc. will typically be devices who's drivers are platform drivers. Thus, I would suspect that at least some of these drivers expect to be fed something DT or OF related? One of my motivations here is to leverage existing drivers for such devices, although I'm having to write fresh ones for all of the chips I'm using in my real-world, actual money-producing project. :) >> So in summary, I need to make sure that what I'm doing 1.) makes >> sense, 2.) adheres to standards (unless the standard fails to >> fulfill the real-world requirements) and 3.) doesn't unnecessarily >> introduce a new way to do something that's already done better >> elsewhere. > It doesn't seem unreasonable to me, though it'd be good to review the > specifics of course. Wonderful! It is certainly a relief and I very much appreciate your time and feedback! When I get things a little more stable and finish putting in the IRQ code, I would be very happy to get your help in reviewing it. :) ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2013-09-11 17:59 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-09-08 0:19 "Virtual" Interrupts -- Need help please Daniel Santos 2013-09-08 0:52 ` Guenter Roeck 2013-09-08 23:50 ` Daniel Santos 2013-09-09 0:35 ` Guenter Roeck 2013-09-09 11:02 ` Mark Brown 2013-09-09 11:18 ` Alexander Holler 2013-09-09 11:45 ` Guenter Roeck 2013-09-09 12:00 ` Alexander Holler 2013-09-09 13:45 ` Mark Brown [not found] ` <20130909134558.GY29403-GFdadSzt00ze9xe1eoZjHA@public.gmane.org> 2013-09-09 14:21 ` Alexander Holler 2013-09-09 11:06 ` Mark Brown 2013-09-09 21:12 ` Daniel Santos 2013-09-10 18:01 ` Mark Brown 2013-09-11 17:59 ` Daniel Santos
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).