From: H Hartley Sweeten Date: Wed, 18 Sep 2013 18:50:05 +0000 (-0700) Subject: staging: comedi: adl_pci6208: use comedi_offset_munge() X-Git-Tag: v3.13-rc1~170^2~689 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8a6573a875dea244a5b6ca27174f1a3f3898d8ee;p=platform%2Fkernel%2Flinux-exynos.git staging: comedi: adl_pci6208: use comedi_offset_munge() Use comedi_offset_munge() to munge the offset binary values from the comedi core into the two's complement form that the hardware expects. This removes the hard coded assumption that the analog outputs are 16-bits and instead does the munging based on the s->maxdata. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/comedi/drivers/adl_pci6208.c b/drivers/staging/comedi/drivers/adl_pci6208.c index 059d7ea..db808733 100644 --- a/drivers/staging/comedi/drivers/adl_pci6208.c +++ b/drivers/staging/comedi/drivers/adl_pci6208.c @@ -104,7 +104,6 @@ static int pci6208_ao_winsn(struct comedi_device *dev, { struct pci6208_private *devpriv = dev->private; int chan = CR_CHAN(insn->chanspec); - unsigned int invert = 1 << (16 - 1); unsigned int val = devpriv->ao_readback[chan]; int ret; int i; @@ -117,7 +116,9 @@ static int pci6208_ao_winsn(struct comedi_device *dev, if (ret) return ret; - outw(val ^ invert, dev->iobase + PCI6208_AO_CONTROL(chan)); + /* the hardware expects two's complement values */ + outw(comedi_offset_munge(s, val), + dev->iobase + PCI6208_AO_CONTROL(chan)); } devpriv->ao_readback[chan] = val;