Messages in this thread | | | Date | Sat, 1 Mar 2014 16:12:07 -0800 (PST) | From | Chase Southwood <> | Subject | Re: [PATCH 1/2] Staging: comedi: introduce outl_1564_* and inl_1564_* helper functions in hwdrv_apci1564.c |
| |
Hi Dan,
>On Saturday, March 1, 2014 6:46 AM, Dan Carpenter <dan.carpenter@oracle.com> wrote: >>On Sat, Mar 01, 2014 at 04:28:27AM -0600, Chase Southwood wrote: >> This patch introduces a handful of outl and inl helper functions with the >> ultimate goal of improving code readability and allowing several lines >> which violate the character limit to be shortened in a sane way. >> >> Cc: Dan Carpenter <dan.carpenter@oracle.com> >> Signed-off-by: Chase Southwood <chase.southwood@yahoo.com> >> --- >> This patchset serves as a replacement to my previous cleanup patchset for >> hwdrv_apci1564.c >> >> Dan, >> After spending a little bit more time with this and trying out different >> ways of cleaning this up, I decided that making helper functions for all >> of the most common register sets would look the best, but I haven't made >> a helper for a few of the least common inl/outl calls because if I did, >> the sheer number of helper functions would get quite ridiculous. >> Let me know if you think my selections of what to make into helper >> functions seems appropriate. >> > >Yeah. You're right... It's kind of a lot of helper functions. > >I wonder if we could just do something like: > >static void outl_amcc(struct addi_private *devpriv, unsigned int cmd, > unsigned int reg) >{ > outl(cmd, devpriv->i_IobaseAmcc + APCI1564_DIGITAL_IP + reg); >} > >And then change APCI1564_DIGITAL_IP_INTERRUPT_MODE1 to be: > >#define APCI1564_DIGITAL_IP_INTERRUPT_MODE1 (0x4 + 0x4) >
I like this idea. Just to clarify though, basically all of the macros would change to something like
#define APCI1564_DIGITAL_IP 0x4 #define APCI1564_DIGITAL_IP_INTERRUPT_MODE1 (0x4 + 0x4) #define APCI1564_DIGITAL_IP_INTERRUPT_MODE2 (0x4 + 0x8) #define APCI1564_DIGITAL_IP_IRQ (0x4 + 0x10) #define APCI1564_DIGITAL_OP 0x18 #define APCI1564_DIGITAL_OP_RW 0x18 #define APCI1564_DIGITAL_OP_INTERRUPT (0x18 + 0x4) #define APCI1564_DIGITAL_OP_IRQ (0x18 + 0xc) etc... and then we just have the single helper function (the corrected version from your follow up email) and then the calls would be something to the effect of:
outl_amcc(devpriv, cmd, APCI1564_DIGITAL_IP_INTERRUPT_MODE1); or whichever macro is appropriate? It definitely trims down the length of the function calls by removing the dereference of devpriv and the addition to get the proper register...I like that.
> >The only problem with that would be i_APCI1564_Reset(). Is >i_APCI1564_Reset() buggy? Ian or Hartley might know. Take a look at >other comedi drivers as well to see what they do. >
I agree. I'll look into the other addi-data drivers (the layout of each appears pretty similar) or see if Ian or Hartley can shed more light on the reset function, because I have a sneaking suspicion that a good few of the lines in it already are buggy, and it seems like there's a chance that it's not clearing all of the registers that it should be, either. I could be wrong about that though.
At any rate, I'll see what I can do.
Thanks, Chase
> >regards, > >dan carpenter
-- 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/
| |