]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.12-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Dec 2013 20:30:28 +0000 (12:30 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Dec 2013 20:30:28 +0000 (12:30 -0800)
added patches:
staging-comedi-drivers-use-comedi_dio_update_state-for-simple-cases.patch
staging-comedi-ssv_dnp-use-comedi_dio_update_state.patch

queue-3.12/series
queue-3.12/staging-comedi-drivers-use-comedi_dio_update_state-for-simple-cases.patch [new file with mode: 0644]
queue-3.12/staging-comedi-ssv_dnp-use-comedi_dio_update_state.patch [new file with mode: 0644]

index 90ce802d5050b58b3f8263c76bd3a3e64a93316e..377e7219c469b57af3dc4aaea72bcf2b305fc5f6 100644 (file)
@@ -97,3 +97,5 @@ hid-kye-fix-missing-break-in-kye_report_fixup.patch
 nfs-fix-do_div-warning-by-instead-using-sector_div.patch
 cxd2820r_core-fix-sparse-warnings.patch
 sched-avoid-throttle_cfs_rq-racing-with-period_timer-stopping.patch
+staging-comedi-drivers-use-comedi_dio_update_state-for-simple-cases.patch
+staging-comedi-ssv_dnp-use-comedi_dio_update_state.patch
diff --git a/queue-3.12/staging-comedi-drivers-use-comedi_dio_update_state-for-simple-cases.patch b/queue-3.12/staging-comedi-drivers-use-comedi_dio_update_state-for-simple-cases.patch
new file mode 100644 (file)
index 0000000..152bf80
--- /dev/null
@@ -0,0 +1,53 @@
+From 97f4289ad08cffe55de06d4ac4f89ac540450aee Mon Sep 17 00:00:00 2001
+From: H Hartley Sweeten <hsweeten@visionengravers.com>
+Date: Fri, 30 Aug 2013 11:05:58 -0700
+Subject: staging: comedi: drivers: use comedi_dio_update_state() for simple cases
+
+From: H Hartley Sweeten <hsweeten@visionengravers.com>
+
+commit 97f4289ad08cffe55de06d4ac4f89ac540450aee upstream.
+
+[Split from original patch subject: "staging: comedi: drivers: use
+comedi_dio_update_state() for simple cases"]
+
+Use comedi_dio_update_state() to handle the boilerplate code to update
+the subdevice s->state for simple cases where the hardware is updated
+when any channel is modified.
+
+Also, fix a bug in the amplc_pc263 and amplc_pci263 drivers where the
+current state is not returned in data[1].
+
+Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
+Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/staging/comedi/drivers/amplc_pc263.c  |    3 +++
+ drivers/staging/comedi/drivers/amplc_pci263.c |    3 +++
+ 2 files changed, 6 insertions(+)
+
+--- a/drivers/staging/comedi/drivers/amplc_pc263.c
++++ b/drivers/staging/comedi/drivers/amplc_pc263.c
+@@ -68,6 +68,9 @@ static int pc263_do_insn_bits(struct com
+               outb(s->state & 0xFF, dev->iobase);
+               outb(s->state >> 8, dev->iobase + 1);
+       }
++
++      data[1] = s->state;
++
+       return insn->n;
+ }
+--- a/drivers/staging/comedi/drivers/amplc_pci263.c
++++ b/drivers/staging/comedi/drivers/amplc_pci263.c
+@@ -55,6 +55,9 @@ static int pci263_do_insn_bits(struct co
+               outb(s->state & 0xFF, dev->iobase);
+               outb(s->state >> 8, dev->iobase + 1);
+       }
++
++      data[1] = s->state;
++
+       return insn->n;
+ }
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
new file mode 100644 (file)
index 0000000..2c8ed4a
--- /dev/null
@@ -0,0 +1,97 @@
+From f6b316bcd8c421acd6fa5a6e18b4c846ecb9d965 Mon Sep 17 00:00:00 2001
+From: H Hartley Sweeten <hsweeten@visionengravers.com>
+Date: Fri, 30 Aug 2013 11:08:50 -0700
+Subject: staging: comedi: ssv_dnp: use comedi_dio_update_state()
+
+From: H Hartley Sweeten <hsweeten@visionengravers.com>
+
+commit f6b316bcd8c421acd6fa5a6e18b4c846ecb9d965 upstream.
+
+Use comedi_dio_update_state() to handle the boilerplate code to update
+the subdevice s->state.
+
+Also, fix a bug where the state of the channels is returned in data[0].
+The comedi core expects it to be returned in data[1].
+
+Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
+Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/staging/comedi/drivers/ssv_dnp.c |   48 ++++++++++++-------------------
+ 1 file changed, 20 insertions(+), 28 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                      */
+-/* ------------------------------------------------------------------------- */
+-/* 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. */
+       outb(PADR, CSCIR);
+-      data[0] = inb(CSCDR);
++      val = inb(CSCDR);
+       outb(PBDR, CSCIR);
+-      data[0] += inb(CSCDR) << 8;
++      val |= (inb(CSCDR) << 8);
+       outb(PCDR, CSCIR);
+-      data[0] += ((inb(CSCDR) & 0xF0) << 12);
++      val |= ((inb(CSCDR) & 0xf0) << 12);
+-      return insn->n;
++      data[1] = val;
++      return insn->n;
+ }
+ static int dnp_dio_insn_config(struct comedi_device *dev,