From: Greg Kroah-Hartman Date: Thu, 19 Dec 2013 03:21:02 +0000 (-0800) Subject: fix up queue-3.12/staging-comedi-ssv_dnp-use-comedi_dio_update_state.patch X-Git-Tag: v3.4.75~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f36ca52b1d2f486a4bd05146fbfa50ffca69c93d;p=thirdparty%2Fkernel%2Fstable-queue.git fix up queue-3.12/staging-comedi-ssv_dnp-use-comedi_dio_update_state.patch --- diff --git a/queue-3.12/staging-comedi-ssv_dnp-use-comedi_dio_update_state.patch b/queue-3.12/staging-comedi-ssv_dnp-use-comedi_dio_update_state.patch index 2c8ed4a39fb..505d2504944 100644 --- a/queue-3.12/staging-comedi-ssv_dnp-use-comedi_dio_update_state.patch +++ b/queue-3.12/staging-comedi-ssv_dnp-use-comedi_dio_update_state.patch @@ -18,80 +18,23 @@ Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- - drivers/staging/comedi/drivers/ssv_dnp.c | 48 ++++++++++++------------------- - 1 file changed, 20 insertions(+), 28 deletions(-) + drivers/staging/comedi/drivers/ssv_dnp.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) --- a/drivers/staging/comedi/drivers/ssv_dnp.c +++ b/drivers/staging/comedi/drivers/ssv_dnp.c -@@ -46,51 +46,43 @@ Status: unknown - #define PCMR 0xa3 /* Port C Mode Register */ - #define PCDR 0xa7 /* Port C Data Register */ +@@ -83,11 +83,11 @@ static int dnp_dio_insn_bits(struct come --/* ------------------------------------------------------------------------- */ --/* The insn_bits interface allows packed reading/writing of DIO channels. */ --/* The comedi core can convert between insn_bits and insn_read/write, so you */ --/* are able to use these instructions as well. */ --/* ------------------------------------------------------------------------- */ -- - static int dnp_dio_insn_bits(struct comedi_device *dev, - struct comedi_subdevice *s, -- struct comedi_insn *insn, unsigned int *data) -+ struct comedi_insn *insn, -+ unsigned int *data) - { -- /* The insn data is a mask in data[0] and the new data in data[1], */ -- /* each channel cooresponding to a bit. */ -- -- /* Ports A and B are straight forward: each bit corresponds to an */ -- /* output pin with the same order. Port C is different: bits 0...3 */ -- /* correspond to bits 4...7 of the output register (PCDR). */ -+ unsigned int mask; -+ unsigned int val; - -- if (data[0]) { -+ /* -+ * Ports A and B are straight forward: each bit corresponds to an -+ * output pin with the same order. Port C is different: bits 0...3 -+ * correspond to bits 4...7 of the output register (PCDR). -+ */ - -+ mask = comedi_dio_update_state(s, data); -+ if (mask) { - outb(PADR, CSCIR); -- outb((inb(CSCDR) -- & ~(u8) (data[0] & 0x0000FF)) -- | (u8) (data[1] & 0x0000FF), CSCDR); -+ outb(s->state & 0xff, CSCDR); - - outb(PBDR, CSCIR); -- outb((inb(CSCDR) -- & ~(u8) ((data[0] & 0x00FF00) >> 8)) -- | (u8) ((data[1] & 0x00FF00) >> 8), CSCDR); -+ outb((s->state >> 8) & 0xff, CSCDR); - - outb(PCDR, CSCIR); -- outb((inb(CSCDR) -- & ~(u8) ((data[0] & 0x0F0000) >> 12)) -- | (u8) ((data[1] & 0x0F0000) >> 12), CSCDR); -+ val = inb(CSCDR) & 0x0f; -+ outb(((s->state >> 12) & 0xf0) | val, CSCDR); - } - -- /* on return, data[1] contains the value of the digital input lines. */ + /* on return, data[1] contains the value of the digital input lines. */ outb(PADR, CSCIR); - data[0] = inb(CSCDR); -+ val = inb(CSCDR); ++ data[1] = inb(CSCDR); outb(PBDR, CSCIR); - data[0] += inb(CSCDR) << 8; -+ val |= (inb(CSCDR) << 8); ++ data[1] += inb(CSCDR) << 8; outb(PCDR, CSCIR); - data[0] += ((inb(CSCDR) & 0xF0) << 12); -+ val |= ((inb(CSCDR) & 0xf0) << 12); - -- return insn->n; -+ data[1] = val; ++ data[1] += ((inb(CSCDR) & 0xF0) << 12); -+ return insn->n; - } + return insn->n; - static int dnp_dio_insn_config(struct comedi_device *dev,