patch "staging: comedi: adv_pci1710: Fix endian problem for AI command data" added to staging-linus
Subsystems (2)
This is a note to let you know that I've just added the patch titled
staging: comedi: adv_pci1710: Fix endian problem for AI command data
to my staging git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
in the staging-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From 9f17114aa8324c61eda74668d56b7dba8c56d049 Mon Sep 17 00:00:00 2001
From: Ian Abbott <[email protected]>
Date: Tue, 23 Feb 2021 14:30:44 +0000
Subject: staging: comedi: adv_pci1710: Fix endian problem for AI command data
The analog input subdevice supports Comedi asynchronous commands that use Comedi's 16-bit sample format. However, the calls to comedi_buf_write_samples() are passing the address of a 32-bit integer variable. On bigendian machines, this will copy 2 bytes from the wrong end of the 32-bit value. Fix it by changing the type of the variables holding the sample value to unsigned short. The type of the val parameter of pci1710_ai_read_sample() is changed to unsigned short * accordingly. The type of the val variable in pci1710_ai_insn_read() is also changed to unsigned short since its address is passed to pci1710_ai_read_sample().
--- drivers/staging/comedi/drivers/adv_pci1710.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/staging/comedi/drivers/adv_pci1710.c +5 -5
@@ -300,11 +300,11 @@ static int pci1710_ai_eoc(struct comedi_device *dev,static int pci1710_ai_read_sample (struct comedi_device *dev,struct comedi_subdevice *s,unsigned int cur_chan, -unsigned int *val) +unsigned short *val) {const struct boardtype *board = dev->board_ptr;struct pci1710_private *devpriv = dev->private; -unsigned int sample; +unsigned short sample;unsigned int chan; sample =inw (dev->iobase +PCI171X_AD_DATA_REG );
@@ -345,7 +345,7 @@ static int pci1710_ai_insn_read(struct comedi_device *dev,pci1710_ai_setup_chanlist (dev, s, &insn->chanspec,1 ,1 );for (i =0 ; i < insn->n; i++) { -unsigned int val; +unsigned short val;/* start conversion */ outw (0 , dev->iobase +PCI171X_SOFTTRG_REG );
@@ -395,7 +395,7 @@ static void pci1710_handle_every_sample(struct comedi_device *dev, {struct comedi_cmd *cmd = &s->async->cmd;unsigned int status; -unsigned int val; +unsigned short val;int ret; status =inw (dev->iobase +PCI171X_STATUS_REG );
@@ -455,7 +455,7 @@ static void pci1710_handle_fifo(struct comedi_device *dev, }for (i =0 ; i < devpriv->max_samples; i++) { -unsigned int val; +unsigned short val;int ret; ret =pci1710_ai_read_sample (dev, s, s->async->cur_chan, &val);
Signature · 1 line
2.30.1