Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09567cb4 authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman
Browse files

staging: comedi: initialize subdevice s->io_bits in postconfig



The subdevice 'io_bits' is a bit mask of the i/o configuration for
digital subdevices. '0' values indicate that a channel is configured
as an input and '1' values that the channel is an output. Since the
subdevice data is kzalloc()'d, all channels default as inputs.

Modify __comedi_device_postconfig() so that 'io_bits' is correctly
initialized for Digital Output subdevices.

Remove all the unnecessary initializations of 's->io_bits' from the
drivers. Also, remove the unnecessary initialization of the 's->state'.

Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent cb30fc50
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -285,6 +285,13 @@ static int __comedi_device_postconfig(struct comedi_device *dev)
		if (s->type == COMEDI_SUBD_UNUSED)
		if (s->type == COMEDI_SUBD_UNUSED)
			continue;
			continue;


		if (s->type == COMEDI_SUBD_DO) {
			if (s->n_chan < 32)
				s->io_bits = (1 << s->n_chan) - 1;
			else
				s->io_bits = 0xffffffff;
		}

		if (s->len_chanlist == 0)
		if (s->len_chanlist == 0)
			s->len_chanlist = 1;
			s->len_chanlist = 1;


+0 −3
Original line number Original line Diff line number Diff line
@@ -288,9 +288,6 @@ int subdev_8255_init(struct comedi_device *dev, struct comedi_subdevice *s,
	s->insn_bits	= subdev_8255_insn;
	s->insn_bits	= subdev_8255_insn;
	s->insn_config	= subdev_8255_insn_config;
	s->insn_config	= subdev_8255_insn_config;


	s->state	= 0;
	s->io_bits	= 0;

	subdev_8255_do_config(dev, s);
	subdev_8255_do_config(dev, s);


	return 0;
	return 0;
+0 −2
Original line number Original line Diff line number Diff line
@@ -204,7 +204,6 @@ static int addi_auto_attach(struct comedi_device *dev,
		s->len_chanlist =
		s->len_chanlist =
			devpriv->s_EeParameters.i_NbrDiChannel;
			devpriv->s_EeParameters.i_NbrDiChannel;
		s->range_table = &range_digital;
		s->range_table = &range_digital;
		s->io_bits = 0;	/* all bits input */
		s->insn_config = this_board->di_config;
		s->insn_config = this_board->di_config;
		s->insn_read = this_board->di_read;
		s->insn_read = this_board->di_read;
		s->insn_write = this_board->di_write;
		s->insn_write = this_board->di_write;
@@ -223,7 +222,6 @@ static int addi_auto_attach(struct comedi_device *dev,
		s->len_chanlist =
		s->len_chanlist =
			devpriv->s_EeParameters.i_NbrDoChannel;
			devpriv->s_EeParameters.i_NbrDoChannel;
		s->range_table = &range_digital;
		s->range_table = &range_digital;
		s->io_bits = 0xf;	/* all bits output */


		/* insn_config - for digital output memory */
		/* insn_config - for digital output memory */
		s->insn_config = this_board->do_config;
		s->insn_config = this_board->do_config;
+0 −2
Original line number Original line Diff line number Diff line
@@ -164,7 +164,6 @@ static int apci3120_auto_attach(struct comedi_device *dev,
	s->maxdata = 1;
	s->maxdata = 1;
	s->len_chanlist = this_board->i_NbrDiChannel;
	s->len_chanlist = this_board->i_NbrDiChannel;
	s->range_table = &range_digital;
	s->range_table = &range_digital;
	s->io_bits = 0;	/* all bits input */
	s->insn_bits = apci3120_di_insn_bits;
	s->insn_bits = apci3120_di_insn_bits;


	/*  Allocate and Initialise DO Subdevice Structures */
	/*  Allocate and Initialise DO Subdevice Structures */
@@ -176,7 +175,6 @@ static int apci3120_auto_attach(struct comedi_device *dev,
	s->maxdata = this_board->i_DoMaxdata;
	s->maxdata = this_board->i_DoMaxdata;
	s->len_chanlist = this_board->i_NbrDoChannel;
	s->len_chanlist = this_board->i_NbrDoChannel;
	s->range_table = &range_digital;
	s->range_table = &range_digital;
	s->io_bits = 0xf;	/* all bits output */
	s->insn_bits = apci3120_do_insn_bits;
	s->insn_bits = apci3120_do_insn_bits;


	/*  Allocate and Initialise Timer Subdevice Structures */
	/*  Allocate and Initialise Timer Subdevice Structures */
+0 −1
Original line number Original line Diff line number Diff line
@@ -221,7 +221,6 @@ static int pci6208_auto_attach(struct comedi_device *dev,
	val = inw(dev->iobase + PCI6208_DIO);
	val = inw(dev->iobase + PCI6208_DIO);
	val = (val & PCI6208_DIO_DO_MASK) >> PCI6208_DIO_DO_SHIFT;
	val = (val & PCI6208_DIO_DO_MASK) >> PCI6208_DIO_DO_SHIFT;
	s->state	= val;
	s->state	= val;
	s->io_bits	= 0x0f;


	dev_info(dev->class_dev, "%s: %s, I/O base=0x%04lx\n",
	dev_info(dev->class_dev, "%s: %s, I/O base=0x%04lx\n",
		dev->driver->driver_name, dev->board_name, dev->iobase);
		dev->driver->driver_name, dev->board_name, dev->iobase);
Loading