From: Greg Kroah-Hartman Date: Wed, 18 Dec 2013 20:30:28 +0000 (-0800) Subject: 3.12-stable patches X-Git-Tag: v3.4.75~14 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=af9bc8d9d8243e970f050e92cb1a5b45b951876d;p=thirdparty%2Fkernel%2Fstable-queue.git 3.12-stable patches added patches: 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/series b/queue-3.12/series index 90ce802d505..377e7219c46 100644 --- a/queue-3.12/series +++ b/queue-3.12/series @@ -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 index 00000000000..152bf8000d6 --- /dev/null +++ b/queue-3.12/staging-comedi-drivers-use-comedi_dio_update_state-for-simple-cases.patch @@ -0,0 +1,53 @@ +From 97f4289ad08cffe55de06d4ac4f89ac540450aee Mon Sep 17 00:00:00 2001 +From: H Hartley Sweeten +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 + +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 +Reviewed-by: Ian Abbott +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..2c8ed4a39fb --- /dev/null +++ b/queue-3.12/staging-comedi-ssv_dnp-use-comedi_dio_update_state.patch @@ -0,0 +1,97 @@ +From f6b316bcd8c421acd6fa5a6e18b4c846ecb9d965 Mon Sep 17 00:00:00 2001 +From: H Hartley Sweeten +Date: Fri, 30 Aug 2013 11:08:50 -0700 +Subject: staging: comedi: ssv_dnp: use comedi_dio_update_state() + +From: H Hartley Sweeten + +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 +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(-) + +--- 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,