From a8fcffbde4cedf319f7009cec21baddf9422685e Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 2 Sep 2009 21:29:37 -0700 Subject: Staging: meilhaus: remove the drivers The comedi drivers should be used instead, no need to have these in here as well. Cc: David Kiliani Cc: Meilhaus Support Signed-off-by: Greg Kroah-Hartman --- drivers/staging/Kconfig | 2 - drivers/staging/Makefile | 1 - drivers/staging/meilhaus/Kconfig | 128 - drivers/staging/meilhaus/Makefile | 43 - drivers/staging/meilhaus/TODO | 10 - drivers/staging/meilhaus/me0600_device.c | 213 - drivers/staging/meilhaus/me0600_device.h | 97 - drivers/staging/meilhaus/me0600_dio.c | 415 -- drivers/staging/meilhaus/me0600_dio.h | 68 - drivers/staging/meilhaus/me0600_dio_reg.h | 41 - drivers/staging/meilhaus/me0600_ext_irq.c | 469 -- drivers/staging/meilhaus/me0600_ext_irq.h | 58 - drivers/staging/meilhaus/me0600_ext_irq_reg.h | 18 - drivers/staging/meilhaus/me0600_optoi.c | 243 - drivers/staging/meilhaus/me0600_optoi.h | 58 - drivers/staging/meilhaus/me0600_optoi_reg.h | 35 - drivers/staging/meilhaus/me0600_relay.c | 359 -- drivers/staging/meilhaus/me0600_relay.h | 63 - drivers/staging/meilhaus/me0600_relay_reg.h | 36 - drivers/staging/meilhaus/me0600_ttli.c | 238 - drivers/staging/meilhaus/me0600_ttli.h | 58 - drivers/staging/meilhaus/me0600_ttli_reg.h | 35 - drivers/staging/meilhaus/me0900_device.c | 178 - drivers/staging/meilhaus/me0900_device.h | 92 - drivers/staging/meilhaus/me0900_di.c | 245 - drivers/staging/meilhaus/me0900_di.h | 65 - drivers/staging/meilhaus/me0900_do.c | 314 -- drivers/staging/meilhaus/me0900_do.h | 68 - drivers/staging/meilhaus/me0900_reg.h | 40 - drivers/staging/meilhaus/me1000_device.c | 206 - drivers/staging/meilhaus/me1000_device.h | 59 - drivers/staging/meilhaus/me1000_dio.c | 438 -- drivers/staging/meilhaus/me1000_dio.h | 71 - drivers/staging/meilhaus/me1000_dio_reg.h | 50 - drivers/staging/meilhaus/me1400_device.c | 253 -- drivers/staging/meilhaus/me1400_device.h | 108 - drivers/staging/meilhaus/me1400_ext_irq.c | 507 --- drivers/staging/meilhaus/me1400_ext_irq.h | 62 - drivers/staging/meilhaus/me1400_ext_irq_reg.h | 56 - drivers/staging/meilhaus/me1600_ao.c | 1017 ----- drivers/staging/meilhaus/me1600_ao.h | 128 - drivers/staging/meilhaus/me1600_ao_reg.h | 66 - drivers/staging/meilhaus/me1600_device.c | 259 -- drivers/staging/meilhaus/me1600_device.h | 101 - drivers/staging/meilhaus/me4600_ai.c | 3405 -------------- drivers/staging/meilhaus/me4600_ai.h | 175 - drivers/staging/meilhaus/me4600_ai_reg.h | 107 - drivers/staging/meilhaus/me4600_ao.c | 5974 ------------------------- drivers/staging/meilhaus/me4600_ao.h | 259 -- drivers/staging/meilhaus/me4600_ao_reg.h | 113 - drivers/staging/meilhaus/me4600_device.c | 371 -- drivers/staging/meilhaus/me4600_device.h | 151 - drivers/staging/meilhaus/me4600_di.c | 256 -- drivers/staging/meilhaus/me4600_di.h | 64 - drivers/staging/meilhaus/me4600_dio.c | 510 --- drivers/staging/meilhaus/me4600_dio.h | 69 - drivers/staging/meilhaus/me4600_dio_reg.h | 63 - drivers/staging/meilhaus/me4600_do.c | 433 -- drivers/staging/meilhaus/me4600_do.h | 65 - drivers/staging/meilhaus/me4600_ext_irq.c | 457 -- drivers/staging/meilhaus/me4600_ext_irq.h | 78 - drivers/staging/meilhaus/me4600_ext_irq_reg.h | 41 - drivers/staging/meilhaus/me4600_reg.h | 46 - drivers/staging/meilhaus/me6000_ao.c | 3709 --------------- drivers/staging/meilhaus/me6000_ao.h | 195 - drivers/staging/meilhaus/me6000_ao_reg.h | 177 - drivers/staging/meilhaus/me6000_device.c | 209 - drivers/staging/meilhaus/me6000_device.h | 149 - drivers/staging/meilhaus/me6000_dio.c | 415 -- drivers/staging/meilhaus/me6000_dio.h | 68 - drivers/staging/meilhaus/me6000_dio_reg.h | 43 - drivers/staging/meilhaus/me6000_reg.h | 35 - drivers/staging/meilhaus/me8100_device.c | 185 - drivers/staging/meilhaus/me8100_device.h | 97 - drivers/staging/meilhaus/me8100_di.c | 684 --- drivers/staging/meilhaus/me8100_di.h | 89 - drivers/staging/meilhaus/me8100_di_reg.h | 47 - drivers/staging/meilhaus/me8100_do.c | 391 -- drivers/staging/meilhaus/me8100_do.h | 70 - drivers/staging/meilhaus/me8100_do_reg.h | 36 - drivers/staging/meilhaus/me8100_reg.h | 41 - drivers/staging/meilhaus/me8200_device.c | 192 - drivers/staging/meilhaus/me8200_device.h | 97 - drivers/staging/meilhaus/me8200_di.c | 832 ---- drivers/staging/meilhaus/me8200_di.h | 92 - drivers/staging/meilhaus/me8200_di_reg.h | 75 - drivers/staging/meilhaus/me8200_dio.c | 418 -- drivers/staging/meilhaus/me8200_dio.h | 68 - drivers/staging/meilhaus/me8200_dio_reg.h | 43 - drivers/staging/meilhaus/me8200_do.c | 591 --- drivers/staging/meilhaus/me8200_do.h | 75 - drivers/staging/meilhaus/me8200_do_reg.h | 40 - drivers/staging/meilhaus/me8200_reg.h | 46 - drivers/staging/meilhaus/me8254.c | 1176 ----- drivers/staging/meilhaus/me8254.h | 80 - drivers/staging/meilhaus/me8254_reg.h | 172 - drivers/staging/meilhaus/me8255.c | 462 -- drivers/staging/meilhaus/me8255.h | 59 - drivers/staging/meilhaus/me8255_reg.h | 50 - drivers/staging/meilhaus/mecirc_buf.h | 131 - drivers/staging/meilhaus/mecommon.h | 26 - drivers/staging/meilhaus/medebug.h | 125 - drivers/staging/meilhaus/medefines.h | 449 -- drivers/staging/meilhaus/medevice.c | 1740 ------- drivers/staging/meilhaus/medevice.h | 304 -- drivers/staging/meilhaus/medlist.c | 127 - drivers/staging/meilhaus/medlist.h | 91 - drivers/staging/meilhaus/medlock.c | 195 - drivers/staging/meilhaus/medlock.h | 76 - drivers/staging/meilhaus/medriver.h | 350 -- drivers/staging/meilhaus/medummy.c | 1264 ------ drivers/staging/meilhaus/medummy.h | 40 - drivers/staging/meilhaus/meerror.h | 100 - drivers/staging/meilhaus/mefirmware.c | 137 - drivers/staging/meilhaus/mefirmware.h | 57 - drivers/staging/meilhaus/meids.h | 31 - drivers/staging/meilhaus/meinternal.h | 363 -- drivers/staging/meilhaus/meioctl.h | 515 --- drivers/staging/meilhaus/memain.c | 2084 --------- drivers/staging/meilhaus/memain.h | 266 -- drivers/staging/meilhaus/meplx_reg.h | 53 - drivers/staging/meilhaus/meslist.c | 173 - drivers/staging/meilhaus/meslist.h | 108 - drivers/staging/meilhaus/meslock.c | 136 - drivers/staging/meilhaus/meslock.h | 73 - drivers/staging/meilhaus/mesubdevice.c | 317 -- drivers/staging/meilhaus/mesubdevice.h | 197 - drivers/staging/meilhaus/metempl_device.c | 135 - drivers/staging/meilhaus/metempl_device.h | 92 - drivers/staging/meilhaus/metempl_sub.c | 149 - drivers/staging/meilhaus/metempl_sub.h | 64 - drivers/staging/meilhaus/metempl_sub_reg.h | 35 - drivers/staging/meilhaus/metypes.h | 95 - 133 files changed, 41014 deletions(-) delete mode 100644 drivers/staging/meilhaus/Kconfig delete mode 100644 drivers/staging/meilhaus/Makefile delete mode 100644 drivers/staging/meilhaus/TODO delete mode 100644 drivers/staging/meilhaus/me0600_device.c delete mode 100644 drivers/staging/meilhaus/me0600_device.h delete mode 100644 drivers/staging/meilhaus/me0600_dio.c delete mode 100644 drivers/staging/meilhaus/me0600_dio.h delete mode 100644 drivers/staging/meilhaus/me0600_dio_reg.h delete mode 100644 drivers/staging/meilhaus/me0600_ext_irq.c delete mode 100644 drivers/staging/meilhaus/me0600_ext_irq.h delete mode 100644 drivers/staging/meilhaus/me0600_ext_irq_reg.h delete mode 100644 drivers/staging/meilhaus/me0600_optoi.c delete mode 100644 drivers/staging/meilhaus/me0600_optoi.h delete mode 100644 drivers/staging/meilhaus/me0600_optoi_reg.h delete mode 100644 drivers/staging/meilhaus/me0600_relay.c delete mode 100644 drivers/staging/meilhaus/me0600_relay.h delete mode 100644 drivers/staging/meilhaus/me0600_relay_reg.h delete mode 100644 drivers/staging/meilhaus/me0600_ttli.c delete mode 100644 drivers/staging/meilhaus/me0600_ttli.h delete mode 100644 drivers/staging/meilhaus/me0600_ttli_reg.h delete mode 100644 drivers/staging/meilhaus/me0900_device.c delete mode 100644 drivers/staging/meilhaus/me0900_device.h delete mode 100644 drivers/staging/meilhaus/me0900_di.c delete mode 100644 drivers/staging/meilhaus/me0900_di.h delete mode 100644 drivers/staging/meilhaus/me0900_do.c delete mode 100644 drivers/staging/meilhaus/me0900_do.h delete mode 100644 drivers/staging/meilhaus/me0900_reg.h delete mode 100644 drivers/staging/meilhaus/me1000_device.c delete mode 100644 drivers/staging/meilhaus/me1000_device.h delete mode 100644 drivers/staging/meilhaus/me1000_dio.c delete mode 100644 drivers/staging/meilhaus/me1000_dio.h delete mode 100644 drivers/staging/meilhaus/me1000_dio_reg.h delete mode 100644 drivers/staging/meilhaus/me1400_device.c delete mode 100644 drivers/staging/meilhaus/me1400_device.h delete mode 100644 drivers/staging/meilhaus/me1400_ext_irq.c delete mode 100644 drivers/staging/meilhaus/me1400_ext_irq.h delete mode 100644 drivers/staging/meilhaus/me1400_ext_irq_reg.h delete mode 100644 drivers/staging/meilhaus/me1600_ao.c delete mode 100644 drivers/staging/meilhaus/me1600_ao.h delete mode 100644 drivers/staging/meilhaus/me1600_ao_reg.h delete mode 100644 drivers/staging/meilhaus/me1600_device.c delete mode 100644 drivers/staging/meilhaus/me1600_device.h delete mode 100644 drivers/staging/meilhaus/me4600_ai.c delete mode 100644 drivers/staging/meilhaus/me4600_ai.h delete mode 100644 drivers/staging/meilhaus/me4600_ai_reg.h delete mode 100644 drivers/staging/meilhaus/me4600_ao.c delete mode 100644 drivers/staging/meilhaus/me4600_ao.h delete mode 100644 drivers/staging/meilhaus/me4600_ao_reg.h delete mode 100644 drivers/staging/meilhaus/me4600_device.c delete mode 100644 drivers/staging/meilhaus/me4600_device.h delete mode 100644 drivers/staging/meilhaus/me4600_di.c delete mode 100644 drivers/staging/meilhaus/me4600_di.h delete mode 100644 drivers/staging/meilhaus/me4600_dio.c delete mode 100644 drivers/staging/meilhaus/me4600_dio.h delete mode 100644 drivers/staging/meilhaus/me4600_dio_reg.h delete mode 100644 drivers/staging/meilhaus/me4600_do.c delete mode 100644 drivers/staging/meilhaus/me4600_do.h delete mode 100644 drivers/staging/meilhaus/me4600_ext_irq.c delete mode 100644 drivers/staging/meilhaus/me4600_ext_irq.h delete mode 100644 drivers/staging/meilhaus/me4600_ext_irq_reg.h delete mode 100644 drivers/staging/meilhaus/me4600_reg.h delete mode 100644 drivers/staging/meilhaus/me6000_ao.c delete mode 100644 drivers/staging/meilhaus/me6000_ao.h delete mode 100644 drivers/staging/meilhaus/me6000_ao_reg.h delete mode 100644 drivers/staging/meilhaus/me6000_device.c delete mode 100644 drivers/staging/meilhaus/me6000_device.h delete mode 100644 drivers/staging/meilhaus/me6000_dio.c delete mode 100644 drivers/staging/meilhaus/me6000_dio.h delete mode 100644 drivers/staging/meilhaus/me6000_dio_reg.h delete mode 100644 drivers/staging/meilhaus/me6000_reg.h delete mode 100644 drivers/staging/meilhaus/me8100_device.c delete mode 100644 drivers/staging/meilhaus/me8100_device.h delete mode 100644 drivers/staging/meilhaus/me8100_di.c delete mode 100644 drivers/staging/meilhaus/me8100_di.h delete mode 100644 drivers/staging/meilhaus/me8100_di_reg.h delete mode 100644 drivers/staging/meilhaus/me8100_do.c delete mode 100644 drivers/staging/meilhaus/me8100_do.h delete mode 100644 drivers/staging/meilhaus/me8100_do_reg.h delete mode 100644 drivers/staging/meilhaus/me8100_reg.h delete mode 100644 drivers/staging/meilhaus/me8200_device.c delete mode 100644 drivers/staging/meilhaus/me8200_device.h delete mode 100644 drivers/staging/meilhaus/me8200_di.c delete mode 100644 drivers/staging/meilhaus/me8200_di.h delete mode 100644 drivers/staging/meilhaus/me8200_di_reg.h delete mode 100644 drivers/staging/meilhaus/me8200_dio.c delete mode 100644 drivers/staging/meilhaus/me8200_dio.h delete mode 100644 drivers/staging/meilhaus/me8200_dio_reg.h delete mode 100644 drivers/staging/meilhaus/me8200_do.c delete mode 100644 drivers/staging/meilhaus/me8200_do.h delete mode 100644 drivers/staging/meilhaus/me8200_do_reg.h delete mode 100644 drivers/staging/meilhaus/me8200_reg.h delete mode 100644 drivers/staging/meilhaus/me8254.c delete mode 100644 drivers/staging/meilhaus/me8254.h delete mode 100644 drivers/staging/meilhaus/me8254_reg.h delete mode 100644 drivers/staging/meilhaus/me8255.c delete mode 100644 drivers/staging/meilhaus/me8255.h delete mode 100644 drivers/staging/meilhaus/me8255_reg.h delete mode 100644 drivers/staging/meilhaus/mecirc_buf.h delete mode 100644 drivers/staging/meilhaus/mecommon.h delete mode 100644 drivers/staging/meilhaus/medebug.h delete mode 100644 drivers/staging/meilhaus/medefines.h delete mode 100644 drivers/staging/meilhaus/medevice.c delete mode 100644 drivers/staging/meilhaus/medevice.h delete mode 100644 drivers/staging/meilhaus/medlist.c delete mode 100644 drivers/staging/meilhaus/medlist.h delete mode 100644 drivers/staging/meilhaus/medlock.c delete mode 100644 drivers/staging/meilhaus/medlock.h delete mode 100644 drivers/staging/meilhaus/medriver.h delete mode 100644 drivers/staging/meilhaus/medummy.c delete mode 100644 drivers/staging/meilhaus/medummy.h delete mode 100644 drivers/staging/meilhaus/meerror.h delete mode 100644 drivers/staging/meilhaus/mefirmware.c delete mode 100644 drivers/staging/meilhaus/mefirmware.h delete mode 100644 drivers/staging/meilhaus/meids.h delete mode 100644 drivers/staging/meilhaus/meinternal.h delete mode 100644 drivers/staging/meilhaus/meioctl.h delete mode 100644 drivers/staging/meilhaus/memain.c delete mode 100644 drivers/staging/meilhaus/memain.h delete mode 100644 drivers/staging/meilhaus/meplx_reg.h delete mode 100644 drivers/staging/meilhaus/meslist.c delete mode 100644 drivers/staging/meilhaus/meslist.h delete mode 100644 drivers/staging/meilhaus/meslock.c delete mode 100644 drivers/staging/meilhaus/meslock.h delete mode 100644 drivers/staging/meilhaus/mesubdevice.c delete mode 100644 drivers/staging/meilhaus/mesubdevice.h delete mode 100644 drivers/staging/meilhaus/metempl_device.c delete mode 100644 drivers/staging/meilhaus/metempl_device.h delete mode 100644 drivers/staging/meilhaus/metempl_sub.c delete mode 100644 drivers/staging/meilhaus/metempl_sub.h delete mode 100644 drivers/staging/meilhaus/metempl_sub_reg.h delete mode 100644 drivers/staging/meilhaus/metypes.h diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index d76f6b356de..982e9445606 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -47,8 +47,6 @@ source "drivers/staging/slicoss/Kconfig" source "drivers/staging/sxg/Kconfig" -source "drivers/staging/meilhaus/Kconfig" - source "drivers/staging/go7007/Kconfig" source "drivers/staging/usbip/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 01bf2284520..4eabb440a18 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -6,7 +6,6 @@ obj-$(CONFIG_STAGING) += staging.o obj-$(CONFIG_ET131X) += et131x/ obj-$(CONFIG_SLICOSS) += slicoss/ obj-$(CONFIG_SXG) += sxg/ -obj-$(CONFIG_MEILHAUS) += meilhaus/ obj-$(CONFIG_VIDEO_GO7007) += go7007/ obj-$(CONFIG_USB_IP_COMMON) += usbip/ obj-$(CONFIG_W35UND) += winbond/ diff --git a/drivers/staging/meilhaus/Kconfig b/drivers/staging/meilhaus/Kconfig deleted file mode 100644 index 923af22a468..00000000000 --- a/drivers/staging/meilhaus/Kconfig +++ /dev/null @@ -1,128 +0,0 @@ -# -# Meilhaus configuration -# - -menuconfig MEILHAUS - tristate "Meilhaus support" - depends on m - ---help--- - If you have a Meilhaus card, say Y (or M) here. - - You need both this driver, and the driver for the particular - data collection card. - - To compile this driver as a module, choose M here. The module will - be called memain. - -if MEILHAUS - -config ME0600 - tristate "Meilhaus ME-600 support" - default n - depends on PCI && m - help - This driver supports the Meilhaus ME-600 family of boards - that do data collection and multipurpose I/O. - - To compile this driver as a module, choose M here: the module - will be called me0600. - -config ME0900 - tristate "Meilhaus ME-900 support" - default n - depends on PCI && m - help - This driver supports the Meilhaus ME-900 family of boards - that do data collection and multipurpose I/O. - - To compile this driver as a module, choose M here: the module - will be called me0900. - -config ME1000 - tristate "Meilhaus ME-1000 support" - default n - depends on PCI && m - help - This driver supports the Meilhaus ME-1000 family of boards - that do data collection and multipurpose I/O. - - To compile this driver as a module, choose M here: the module - will be called me1000. - -config ME1400 - tristate "Meilhaus ME-1400 support" - default n - depends on PCI && m - help - This driver supports the Meilhaus ME-1400 family of boards - that do data collection and multipurpose I/O. - - To compile this driver as a module, choose M here: the module - will be called me1400. - -config ME1600 - tristate "Meilhaus ME-1600 support" - default n - depends on PCI && m - help - This driver supports the Meilhaus ME-1600 family of boards - that do data collection and multipurpose I/O. - - To compile this driver as a module, choose M here: the module - will be called me1600. - -config ME4600 - tristate "Meilhaus ME-4600 support" - default n - depends on PCI && m - help - This driver supports the Meilhaus ME-4600 family of boards - that do data collection and multipurpose I/O. - - To compile this driver as a module, choose M here: the module - will be called me4600. - -config ME6000 - tristate "Meilhaus ME-6000 support" - default n - depends on PCI && m - help - This driver supports the Meilhaus ME-6000 family of boards - that do data collection and multipurpose I/O. - - To compile this driver as a module, choose M here: the module - will be called me6000. - -config ME8100 - tristate "Meilhaus ME-8100 support" - default n - depends on PCI && m - help - This driver supports the Meilhaus ME-8100 family of boards - that do data collection and multipurpose I/O. - - To compile this driver as a module, choose M here: the module - will be called me8100. - -config ME8200 - tristate "Meilhaus ME-8200 support" - default n - depends on PCI && m - help - This driver supports the Meilhaus ME-8200 family of boards - that do data collection and multipurpose I/O. - - To compile this driver as a module, choose M here: the module - will be called me8200. - -config MEDUMMY - tristate "Meilhaus dummy driver" - default n - depends on PCI && m - help - This provides a dummy driver for the Meilhaus driver package - - To compile this driver as a module, choose M here: the module - will be called medummy. - -endif # MEILHAUS diff --git a/drivers/staging/meilhaus/Makefile b/drivers/staging/meilhaus/Makefile deleted file mode 100644 index 5ab2c1c9c86..00000000000 --- a/drivers/staging/meilhaus/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# -# Makefile for Meilhaus linux driver system -# - -obj-$(CONFIG_MEILHAUS) += memain.o -obj-$(CONFIG_ME1600) += me1600.o -obj-$(CONFIG_ME1000) += me1000.o -obj-$(CONFIG_ME1400) += me1400.o -obj-$(CONFIG_ME4600) += me4600.o -obj-$(CONFIG_ME6000) += me6000.o -obj-$(CONFIG_ME0600) += me0600.o -obj-$(CONFIG_ME8100) += me8100.o -obj-$(CONFIG_ME8200) += me8200.o -obj-$(CONFIG_ME0900) += me0900.o -obj-$(CONFIG_MEDUMMY) += medummy.o - - -me1600-objs := medevice.o medlist.o medlock.o me1600_device.o -me1600-objs += mesubdevice.o meslist.o meslock.o me1600_ao.o - -me1000-objs := medevice.o medlist.o medlock.o me1000_device.o -me1000-objs += mesubdevice.o meslist.o meslock.o me1000_dio.o - -me1400-objs := medevice.o medlist.o medlock.o me1400_device.o -me1400-objs += mesubdevice.o meslist.o meslock.o me8254.o me8255.o me1400_ext_irq.o - -me4600-objs := medevice.o medlist.o medlock.o mefirmware.o me4600_device.o -me4600-objs += mesubdevice.o meslist.o meslock.o me4600_do.o me4600_di.o me4600_dio.o me8254.o me4600_ai.o me4600_ao.o me4600_ext_irq.o - -me6000-objs := medevice.o medlist.o medlock.o mefirmware.o me6000_device.o -me6000-objs += mesubdevice.o meslist.o meslock.o me6000_dio.o me6000_ao.o - -me0600-objs := medevice.o medlist.o medlock.o me0600_device.o -me0600-objs += mesubdevice.o meslist.o meslock.o me0600_relay.o me0600_ttli.o me0600_optoi.o me0600_dio.o me0600_ext_irq.o - -me8100-objs := medevice.o medlist.o medlock.o me8100_device.o -me8100-objs += mesubdevice.o meslist.o meslock.o me8100_di.o me8100_do.o me8254.o - -me8200-objs := medevice.o medlist.o medlock.o me8200_device.o -me8200-objs += mesubdevice.o meslist.o meslock.o me8200_di.o me8200_do.o me8200_dio.o - -me0900-objs := medevice.o medlist.o medlock.o me0900_device.o -me0900-objs += mesubdevice.o meslist.o meslock.o me0900_do.o me0900_di.o diff --git a/drivers/staging/meilhaus/TODO b/drivers/staging/meilhaus/TODO deleted file mode 100644 index d6ce39823de..00000000000 --- a/drivers/staging/meilhaus/TODO +++ /dev/null @@ -1,10 +0,0 @@ -TODO: - - checkpatch.pl cleanups - - sparse issues - - Lindent - - audit userspace interface - - handle firmware properly - - possible comedi merge - -Please send cleanup patches to Greg Kroah-Hartman -and CC: David Kiliani and Meilhaus Support diff --git a/drivers/staging/meilhaus/me0600_device.c b/drivers/staging/meilhaus/me0600_device.c deleted file mode 100644 index bae17d26416..00000000000 --- a/drivers/staging/meilhaus/me0600_device.c +++ /dev/null @@ -1,213 +0,0 @@ -/** - * @file me0600_device.c - * - * @brief ME-630 device class implementation. - * @note Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) - * @author Guenter Gebhardt - * @author Krzysztof Gantzke (k.gantzke@meilhaus.de) - */ - -/* - * Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) - * - * This file is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef __KERNEL__ -# define __KERNEL__ -#endif - -#ifndef MODULE -# define MODULE -#endif - -#include - -#include -#include - -#include "meids.h" -#include "meerror.h" -#include "mecommon.h" -#include "meinternal.h" - -#include "medebug.h" -#include "medevice.h" -#include "me0600_device.h" -#include "mesubdevice.h" -#include "me0600_relay.h" -#include "me0600_ttli.h" -#include "me0600_optoi.h" -#include "me0600_dio.h" -#include "me0600_ext_irq.h" - -me_device_t *me0600_pci_constructor(struct pci_dev *pci_device) -{ - me0600_device_t *me0600_device; - me_subdevice_t *subdevice; - unsigned int version_idx; - int err; - int i; - - PDEBUG("executed.\n"); - - // Allocate structure for device instance. - me0600_device = kmalloc(sizeof(me0600_device_t), GFP_KERNEL); - - if (!me0600_device) { - PERROR("Cannot get memory for device instance.\n"); - return NULL; - } - - memset(me0600_device, 0, sizeof(me0600_device_t)); - - // Initialize base class structure. - err = me_device_pci_init((me_device_t *) me0600_device, pci_device); - - if (err) { - kfree(me0600_device); - PERROR("Cannot initialize device base class.\n"); - return NULL; - } - - /* Get the index in the device version information table. */ - version_idx = - me0600_versions_get_device_index(me0600_device->base.info.pci. - device_id); - - // Initialize spin lock . - spin_lock_init(&me0600_device->dio_ctrl_reg_lock); - spin_lock_init(&me0600_device->intcsr_lock); - - // Create subdevice instances. - - for (i = 0; i < me0600_versions[version_idx].optoi_subdevices; i++) { - subdevice = - (me_subdevice_t *) me0600_optoi_constructor(me0600_device-> - base.info.pci. - reg_bases[2]); - - if (!subdevice) { - me_device_deinit((me_device_t *) me0600_device); - kfree(me0600_device); - PERROR("Cannot get memory for subdevice.\n"); - return NULL; - } - - me_slist_add_subdevice_tail(&me0600_device->base.slist, - subdevice); - } - - for (i = 0; i < me0600_versions[version_idx].relay_subdevices; i++) { - subdevice = - (me_subdevice_t *) me0600_relay_constructor(me0600_device-> - base.info.pci. - reg_bases[2]); - - if (!subdevice) { - me_device_deinit((me_device_t *) me0600_device); - kfree(me0600_device); - PERROR("Cannot get memory for subdevice.\n"); - return NULL; - } - - me_slist_add_subdevice_tail(&me0600_device->base.slist, - subdevice); - } - - for (i = 0; i < me0600_versions[version_idx].ttli_subdevices; i++) { - subdevice = - (me_subdevice_t *) me0600_ttli_constructor(me0600_device-> - base.info.pci. - reg_bases[2]); - - if (!subdevice) { - me_device_deinit((me_device_t *) me0600_device); - kfree(me0600_device); - PERROR("Cannot get memory for subdevice.\n"); - return NULL; - } - - me_slist_add_subdevice_tail(&me0600_device->base.slist, - subdevice); - } - - for (i = 0; i < me0600_versions[version_idx].dio_subdevices; i++) { - subdevice = - (me_subdevice_t *) me0600_dio_constructor(me0600_device-> - base.info.pci. - reg_bases[2], i, - &me0600_device-> - dio_ctrl_reg_lock); - - if (!subdevice) { - me_device_deinit((me_device_t *) me0600_device); - kfree(me0600_device); - PERROR("Cannot get memory for subdevice.\n"); - return NULL; - } - - me_slist_add_subdevice_tail(&me0600_device->base.slist, - subdevice); - } - - for (i = 0; i < me0600_versions[version_idx].ext_irq_subdevices; i++) { - subdevice = - (me_subdevice_t *) - me0600_ext_irq_constructor(me0600_device->base.info.pci. - reg_bases[1], - me0600_device->base.info.pci. - reg_bases[2], - &me0600_device->intcsr_lock, i, - me0600_device->base.irq); - - if (!subdevice) { - me_device_deinit((me_device_t *) me0600_device); - kfree(me0600_device); - PERROR("Cannot get memory for subdevice.\n"); - return NULL; - } - - me_slist_add_subdevice_tail(&me0600_device->base.slist, - subdevice); - } - - return (me_device_t *) me0600_device; -} -EXPORT_SYMBOL(me0600_pci_constructor); - -// Init and exit of module. - -static int __init me0600_init(void) -{ - PDEBUG("executed.\n"); - return 0; -} - -static void __exit me0600_exit(void) -{ - PDEBUG("executed.\n"); -} - -module_init(me0600_init); - -module_exit(me0600_exit); - -// Administrative stuff for modinfo. -MODULE_AUTHOR - ("Guenter Gebhardt & Krzysztof Gantzke "); -MODULE_DESCRIPTION("Device Driver Module for ME-6xx Device"); -MODULE_SUPPORTED_DEVICE("Meilhaus ME-6xx Devices"); -MODULE_LICENSE("GPL"); diff --git a/drivers/staging/meilhaus/me0600_device.h b/drivers/staging/meilhaus/me0600_device.h deleted file mode 100644 index 75bd3b7351d..00000000000 --- a/drivers/staging/meilhaus/me0600_device.h +++ /dev/null @@ -1,97 +0,0 @@ -/** - * @file me0600_device.h - * - * @brief ME-630 device class. - * @note Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) - * @author Guenter Gebhardt - */ - -/* - * Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) - * - * This file is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _ME0600_DEVICE_H -#define _ME0600_DEVICE_H - -#include -#include - -#include "medevice.h" - -#ifdef __KERNEL__ - -/** - * @brief Structure holding ME-630 device capabilities. - */ -typedef struct me0600_version { - uint16_t device_id; - unsigned int relay_subdevices; - unsigned int ttli_subdevices; - unsigned int optoi_subdevices; - unsigned int dio_subdevices; - unsigned int ext_irq_subdevices; -} me0600_version_t; - -/** - * @brief Device capabilities. - */ -static me0600_version_t me0600_versions[] = { - {PCI_DEVICE_ID_MEILHAUS_ME0630, 1, 1, 1, 2, 2}, - {0}, -}; - -#define ME0600_DEVICE_VERSIONS (ARRAY_SIZE(me0600_versions) - 1) /**< Returns the number of entries in #me0600_versions. */ - -/** - * @brief Returns the index of the device entry in #me0600_versions. - * - * @param device_id The PCI device id of the device to query. - * @return The index of the device in #me0600_versions. - */ -static inline unsigned int me0600_versions_get_device_index(uint16_t device_id) -{ - unsigned int i; - for (i = 0; i < ME0600_DEVICE_VERSIONS; i++) - if (me0600_versions[i].device_id == device_id) - break; - return i; -} - -/** - * @brief The ME-630 device class structure. - */ -typedef struct me0600_device { - me_device_t base; /**< The Meilhaus device base class. */ - - /* Child class attributes. */ - spinlock_t dio_ctrl_reg_lock; - spinlock_t intcsr_lock; -} me0600_device_t; - -/** - * @brief The ME-630 device class constructor. - * - * @param pci_device The pci device structure given by the PCI subsystem. - * - * @return On succes a new ME-630 device instance. \n - * NULL on error. - */ -me_device_t *me0600_pci_constructor(struct pci_dev *pci_device) - __attribute__ ((weak)); - -#endif -#endif diff --git a/drivers/staging/meilhaus/me0600_dio.c b/drivers/staging/meilhaus/me0600_dio.c deleted file mode 100644 index d29303518be..00000000000 --- a/drivers/staging/meilhaus/me0600_dio.c +++ /dev/null @@ -1,415 +0,0 @@ -/** - * @file me0600_dio.c - * - * @brief ME-630 digital input/output subdevice instance. - * @note Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) - * @author Guenter Gebhardt - * @author Krzysztof Gantzke (k.gantzke@meilhaus.de) - */ - -/* - * Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) - * - * This file is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef __KERNEL__ -# define __KERNEL__ -#endif - -/* - * Includes - */ -#include - -#include -#include -#include -#include - -#include "medefines.h" -#include "meinternal.h" -#include "meerror.h" - -#include "medebug.h" -#include "me0600_dio_reg.h" -#include "me0600_dio.h" - -/* - * Defines - */ - -/* - * Functions - */ - -static int me0600_dio_io_reset_subdevice(struct me_subdevice *subdevice, - struct file *filep, int flags) -{ - me0600_dio_subdevice_t *instance; - uint8_t mode; - - PDEBUG("executed.\n"); - - instance = (me0600_dio_subdevice_t *) subdevice; - - if (flags) { - PERROR("Invalid flag specified.\n"); - return ME_ERRNO_INVALID_FLAGS; - } - - ME_SUBDEVICE_ENTER; - - spin_lock(&instance->subdevice_lock); - spin_lock(instance->ctrl_reg_lock); - mode = inb(instance->ctrl_reg); - mode &= ~(0x3 << (instance->dio_idx * 2)); - outb(mode, instance->ctrl_reg); - PDEBUG_REG("ctrl_reg outl(0x%lX+0x%lX)=0x%x\n", instance->reg_base, - instance->ctrl_reg - instance->reg_base, mode); - spin_unlock(instance->ctrl_reg_lock); - - outb(0x00, instance->port_reg); - PDEBUG_REG("port_reg outl(0x%lX+0x%lX)=0x%x\n", instance->reg_base, - instance->port_reg - instance->reg_base, 0x00); - spin_unlock(&instance->subdevice_lock); - - ME_SUBDEVICE_EXIT; - - return ME_ERRNO_SUCCESS; -} - -static int me0600_dio_io_single_config(me_subdevice_t *subdevice, - struct file *filep, - int channel, - int single_config, - int ref, - int trig_chan, - int trig_type, int trig_edge, int flags) -{ - me0600_dio_subdevice_t *instance; - int err = ME_ERRNO_SUCCESS; - uint8_t mode; - int size = - flags & (ME_IO_SINGLE_CONFIG_DIO_BIT | ME_IO_SINGLE_CONFIG_DIO_BYTE - | ME_IO_SINGLE_CONFIG_DIO_WORD | - ME_IO_SINGLE_CONFIG_DIO_DWORD); - - PDEBUG("executed.\n"); - - instance = (me0600_dio_subdevice_t *) subdevice; - - ME_SUBDEVICE_ENTER; - - spin_lock(&instance->subdevice_lock); - spin_lock(instance->ctrl_reg_lock); - mode = inb(instance->ctrl_reg); - switch (size) { - case ME_IO_SINGLE_CONFIG_NO_FLAGS: - case ME_IO_SINGLE_CONFIG_DIO_BYTE: - if (channel == 0) { - if (single_config == ME_SINGLE_CONFIG_DIO_INPUT) { - mode &= - ~((ME0600_DIO_CONFIG_BIT_OUT_0) << - (instance->dio_idx * 2)); - } else if (single_config == ME_SINGLE_CONFIG_DIO_OUTPUT) { - mode &= - ~((ME0600_DIO_CONFIG_BIT_OUT_0) << - (instance->dio_idx * 2)); - mode |= - ME0600_DIO_CONFIG_BIT_OUT_0 << (instance-> - dio_idx * - 2); - } else { - PERROR - ("Invalid port configuration specified.\n"); - err = ME_ERRNO_INVALID_SINGLE_CONFIG; - } - } else { - PERROR("Invalid channel number.\n"); - err = ME_ERRNO_INVALID_CHANNEL; - } - break; - - default: - PERROR("Invalid flags.\n"); - err = ME_ERRNO_INVALID_FLAGS; - } - - if (!err) { - outb(mode, instance->ctrl_reg); - PDEBUG_REG("ctrl_reg outl(0x%lX+0x%lX)=0x%x\n", - instance->reg_base, - instance->ctrl_reg - instance->reg_base, mode); - } - spin_unlock(instance->ctrl_reg_lock); - spin_unlock(&instance->subdevice_lock); - - ME_SUBDEVICE_EXIT; - - return err; -} - -static int me0600_dio_io_single_read(me_subdevice_t *subdevice, - struct file *filep, - int channel, - int *value, int time_out, int flags) -{ - me0600_dio_subdevice_t *instance; - int err = ME_ERRNO_SUCCESS; - uint8_t mode; - - PDEBUG("executed.\n"); - - instance = (me0600_dio_subdevice_t *) subdevice; - - ME_SUBDEVICE_ENTER; - - spin_lock(&instance->subdevice_lock); - spin_lock(instance->ctrl_reg_lock); - switch (flags) { - case ME_IO_SINGLE_TYPE_DIO_BIT: - if ((channel >= 0) && (channel < 8)) { - mode = - inb(instance-> - ctrl_reg) & ((ME0600_DIO_CONFIG_BIT_OUT_0) << - (instance->dio_idx * 2)); - - if ((mode == - (ME0600_DIO_CONFIG_BIT_OUT_0 << - (instance->dio_idx * 2))) || !mode) { - *value = - inb(instance-> - port_reg) & (0x0001 << channel); - } else { - PERROR("Port not in output or input mode.\n"); - err = ME_ERRNO_PREVIOUS_CONFIG; - } - } else { - PERROR("Invalid bit number specified.\n"); - err = ME_ERRNO_INVALID_CHANNEL; - } - - break; - - case ME_IO_SINGLE_NO_FLAGS: - case ME_IO_SINGLE_TYPE_DIO_BYTE: - if (channel == 0) { - mode = - inb(instance-> - ctrl_reg) & ((ME0600_DIO_CONFIG_BIT_OUT_0) << - (instance->dio_idx * 2)); - - if ((mode == - (ME0600_DIO_CONFIG_BIT_OUT_0 << - (instance->dio_idx * 2))) || !mode) { - *value = inb(instance->port_reg) & 0x00FF; - } else { - PERROR("Port not in output or input mode.\n"); - err = ME_ERRNO_PREVIOUS_CONFIG; - } - } else { - PERROR("Invalid byte number specified.\n"); - err = ME_ERRNO_INVALID_CHANNEL; - } - - break; - - default: - PERROR("Invalid flags specified.\n"); - - err = ME_ERRNO_INVALID_FLAGS; - - break; - } - spin_unlock(instance->ctrl_reg_lock); - spin_unlock(&instance->subdevice_lock); - - ME_SUBDEVICE_EXIT; - - return err; -} - -static int me0600_dio_io_single_write(me_subdevice_t *subdevice, - struct file *filep, - int channel, - int value, int time_out, int flags) -{ - me0600_dio_subdevice_t *instance; - int err = ME_ERRNO_SUCCESS; - uint8_t mode; - uint8_t byte; - - PDEBUG("executed.\n"); - - instance = (me0600_dio_subdevice_t *) subdevice; - - ME_SUBDEVICE_ENTER; - - spin_lock(&instance->subdevice_lock); - spin_lock(instance->ctrl_reg_lock); - switch (flags) { - - case ME_IO_SINGLE_TYPE_DIO_BIT: - if ((channel >= 0) && (channel < 8)) { - mode = - inb(instance-> - ctrl_reg) & ((ME0600_DIO_CONFIG_BIT_OUT_0) << - (instance->dio_idx * 2)); - - if (mode == - (ME0600_DIO_CONFIG_BIT_OUT_0 << - (instance->dio_idx * 2))) { - byte = inb(instance->port_reg); - - if (value) - byte |= 0x1 << channel; - else - byte &= ~(0x1 << channel); - - outb(byte, instance->port_reg); - } else { - PERROR("Port not in output or input mode.\n"); - err = ME_ERRNO_PREVIOUS_CONFIG; - } - } else { - PERROR("Invalid bit number specified.\n"); - err = ME_ERRNO_INVALID_CHANNEL; - } - - break; - - case ME_IO_SINGLE_NO_FLAGS: - case ME_IO_SINGLE_TYPE_DIO_BYTE: - if (channel == 0) { - mode = - inb(instance-> - ctrl_reg) & ((ME0600_DIO_CONFIG_BIT_OUT_0) << - (instance->dio_idx * 2)); - - if (mode == - (ME0600_DIO_CONFIG_BIT_OUT_0 << - (instance->dio_idx * 2))) { - outb(value, instance->port_reg); - } else { - PERROR("Port not in output or input mode.\n"); - err = ME_ERRNO_PREVIOUS_CONFIG; - } - } else { - PERROR("Invalid byte number specified.\n"); - err = ME_ERRNO_INVALID_CHANNEL; - } - - break; - - default: - PERROR("Invalid flags specified.\n"); - - err = ME_ERRNO_INVALID_FLAGS; - - break; - } - spin_unlock(instance->ctrl_reg_lock); - spin_unlock(&instance->subdevice_lock); - - ME_SUBDEVICE_EXIT; - - return err; -} - -static int me0600_dio_query_number_channels(me_subdevice_t *subdevice, - int *number) -{ - PDEBUG("executed.\n"); - *number = 8; - return ME_ERRNO_SUCCESS; -} - -static int me0600_dio_query_subdevice_type(me_subdevice_t *subdevice, - int *type, int *subtype) -{ - PDEBUG("executed.\n"); - *type = ME_TYPE_DIO; - *subtype = ME_SUBTYPE_SINGLE; - return ME_ERRNO_SUCCESS; -} - -static int me0600_dio_query_subdevice_caps(me_subdevice_t *subdevice, - int *caps) -{ - PDEBUG("executed.\n"); - *caps = ME_CAPS_DIO_DIR_BYTE; - return ME_ERRNO_SUCCESS; -} - -me0600_dio_subdevice_t *me0600_dio_constructor(uint32_t reg_base, - unsigned int dio_idx, - spinlock_t *ctrl_reg_lock) -{ - me0600_dio_subdevice_t *subdevice; - int err; - - PDEBUG("executed.\n"); - - /* Allocate memory for subdevice instance */ - subdevice = kmalloc(sizeof(me0600_dio_subdevice_t), GFP_KERNEL); - - if (!subdevice) { - PERROR("Cannot get memory for subdevice instance.\n"); - return NULL; - } - - memset(subdevice, 0, sizeof(me0600_dio_subdevice_t)); - - /* Initialize subdevice base class */ - err = me_subdevice_init(&subdevice->base); - - if (err) { - PERROR("Cannot initialize subdevice base class instance.\n"); - kfree(subdevice); - return NULL; - } - /* Initialize spin locks. */ - spin_lock_init(&subdevice->subdevice_lock); - - subdevice->ctrl_reg_lock = ctrl_reg_lock; - - /* Save digital i/o index */ - subdevice->dio_idx = dio_idx; - - /* Save the subdevice index */ - subdevice->ctrl_reg = reg_base + ME0600_DIO_CONFIG_REG; - subdevice->port_reg = reg_base + ME0600_DIO_PORT_REG + dio_idx; -#ifdef MEDEBUG_DEBUG_REG - subdevice->reg_base = reg_base; -#endif - - /* Overload base class methods. */ - subdevice->base.me_subdevice_io_reset_subdevice = - me0600_dio_io_reset_subdevice; - subdevice->base.me_subdevice_io_single_config = - me0600_dio_io_single_config; - subdevice->base.me_subdevice_io_single_read = me0600_dio_io_single_read; - subdevice->base.me_subdevice_io_single_write = - me0600_dio_io_single_write; - subdevice->base.me_subdevice_query_number_channels = - me0600_dio_query_number_channels; - subdevice->base.me_subdevice_query_subdevice_type = - me0600_dio_query_subdevice_type; - subdevice->base.me_subdevice_query_subdevice_caps = - me0600_dio_query_subdevice_caps; - - return subdevice; -} diff --git a/drivers/staging/meilhaus/me0600_dio.h b/drivers/staging/meilhaus/me0600_dio.h deleted file mode 100644 index 5d075c7d688..00000000000 --- a/drivers/staging/meilhaus/me0600_dio.h +++ /dev/null @@ -1,68 +0,0 @@ -/** - * @file me0600_dio.h - * - * @brief ME-630 digital input/output subdevice class. - * @note Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) - * @author Guenter Gebhardt - */ - -/* - * Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) - * - * This file is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _ME0600_DIO_H_ -#define _ME0600_DIO_H_ - -#include "mesubdevice.h" - -#ifdef __KERNEL__ - -/** - * @brief The template subdevice class. - */ -typedef struct me0600_dio_subdevice { - /* Inheritance */ - me_subdevice_t base; /**< The subdevice base class. */ - - /* Attributes */ - spinlock_t subdevice_lock; /**< Spin lock to protect the subdevice from concurrent access. */ - spinlock_t *ctrl_reg_lock; /**< Spin lock to protect #ctrl_reg from concurrent access. */ - unsigned int dio_idx; /**< The index of the digital i/o on the device. */ - - unsigned long port_reg; /**< Register holding the port status. */ - unsigned long ctrl_reg; /**< Register to configure the port direction. */ -#ifdef MEDEBUG_DEBUG_REG - unsigned long reg_base; -#endif -} me0600_dio_subdevice_t; - -/** - * @brief The constructor to generate a ME-630 digital input/ouput subdevice instance. - * - * @param reg_base The register base address of the device as returned by the PCI BIOS. - * @param dio_idx The index of the digital i/o port on the device. - * @param ctrl_reg_lock Spin lock protecting the control register. - * - * @return Pointer to new instance on success.\n - * NULL on error. - */ -me0600_dio_subdevice_t *me0600_dio_constructor(uint32_t reg_base, - unsigned int dio_idx, - spinlock_t * ctrl_reg_lock); - -#endif -#endif diff --git a/drivers/staging/meilhaus/me0600_dio_reg.h b/drivers/staging/meilhaus/me0600_dio_reg.h deleted file mode 100644 index f116ea3b79d..00000000000 --- a/drivers/staging/meilhaus/me0600_dio_reg.h +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @file me0600_dio_reg.h - * - * @brief ME-630 digital input/output subdevice register definitions. - * @note Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) - * @author Guenter Gebhardt - */ - -/* - * Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) - * - * This file is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _ME0600_DIO_REG_H_ -#define _ME0600_DIO_REG_H_ - -#ifdef __KERNEL__ - -#define ME0600_DIO_CONFIG_REG 0x0007 -#define ME0600_DIO_PORT_0_REG 0x0008 -#define ME0600_DIO_PORT_1_REG 0x0009 -#define ME0600_DIO_PORT_REG ME0600_DIO_PORT_0_REG - -#define ME0600_DIO_CONFIG_BIT_OUT_0 0x0001 -#define ME0600_DIO_CONFIG_BIT_OUT_1 0x0004 - -#endif -#endif diff --git a/drivers/staging/meilhaus/me0600_ext_irq.c b/drivers/staging/meilhaus/me0600_ext_irq.c deleted file mode 100644 index 1d098420a54..00000000000 --- a/drivers/staging/meilhaus/me0600_ext_irq.c +++ /dev/null @@ -1,469 +0,0 @@ -/** - * @file me0600_ext_irq.c - * - * @brief ME-630 external interrupt subdevice instance. - * @note Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) - * @author Guenter Gebhardt - * @author Krzysztof Gantzke (k.gantzke@meilhaus.de) - */ - -/* - * Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) - * - * This file is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef __KERNEL__ -# define __KERNEL__ -#endif - -/* - * Includes - */ -#include - -#include -#include -#include -#include -#include - -#include "medefines.h" -#include "meinternal.h" -#include "meerror.h" -#include "meids.h" -#include "medebug.h" - -#include "meplx_reg.h" -#include "me0600_ext_irq_reg.h" -#include "me0600_ext_irq.h" - -/* - * Functions - */ - -static int me0600_ext_irq_io_irq_start(struct me_subdevice *subdevice, - struct file *filep, - int channel, - int irq_source, - int irq_edge, int irq_arg, int flags) -{ - me0600_ext_irq_subdevice_t *instance; - uint32_t tmp; - unsigned long cpu_flags; - - PDEBUG("executed.\n"); - - instance = (me0600_ext_irq_subdevice_t *) subdevice; - - if (flags & ~ME_IO_IRQ_START_DIO_BIT) { - PERROR("Invalid flag specified.\n"); - return ME_ERRNO_INVALID_FLAGS; - } - - if (instance->lintno > 1) { - PERROR("Wrong idx=%d.\n", instance->lintno); - return ME_ERRNO_INVALID_SUBDEVICE; - } - - if (channel) { - PERROR("Invalid channel specified.\n"); - return ME_ERRNO_INVALID_CHANNEL; - } - - if (irq_source != ME_IRQ_SOURCE_DIO_LINE) { - PERROR("Invalid irq source specified.\n"); - return ME_ERRNO_INVALID_IRQ_SOURCE; - } - - if (irq_edge != ME_IRQ_EDGE_RISING) { - PERROR("Invalid irq edge specified.\n"); - return ME_ERRNO_INVALID_IRQ_EDGE; - } - - ME_SUBDEVICE_ENTER; - - spin_lock_irqsave(&instance->subdevice_lock, cpu_flags); - spin_lock(instance->intcsr_lock); - tmp = inl(instance->intcsr); - switch (instance->lintno) { - case 0: - tmp |= - PLX_INTCSR_LOCAL_INT1_EN | PLX_INTCSR_LOCAL_INT1_POL | - PLX_INTCSR_PCI_INT_EN; - break; - case 1: - tmp |= - PLX_INTCSR_LOCAL_INT2_EN | PLX_INTCSR_LOCAL_INT2_POL | - PLX_INTCSR_PCI_INT_EN; - break; - } - outl(tmp, instance->intcsr); - PDEBUG_REG("intcsr outl(plx:0x%X)=0x%x\n", instance->intcsr, tmp); - spin_unlock(instance->intcsr_lock); - instance->rised = 0; - spin_unlock_irqrestore(&instance->subdevice_lock, cpu_flags); - - ME_SUBDEVICE_EXIT; - - return ME_ERRNO_SUCCESS; -} - -static int me0600_ext_irq_io_irq_wait(struct me_subdevice *subdevice, - struct file *filep, - int channel, - int *irq_count, - int *value, int time_out, int flags) -{ - me0600_ext_irq_subdevice_t *instance; - int err = ME_ERRNO_SUCCESS; - long t = 0; - unsigned long cpu_flags; - - PDEBUG("executed.\n"); - - instance = (me0600_ext_irq_subdevice_t *) subdevice; - - if (flags) { - PERROR("Invalid flag specified.\n"); - return ME_ERRNO_INVALID_FLAGS; - } - - if (channel) { - PERROR("Invalid channel specified.\n"); - return ME_ERRNO_INVALID_CHANNEL; - } - - if (time_out < 0) { - PERROR("Invalid time_out specified.\n"); - return ME_ERRNO_INVALID_TIMEOUT; - } - - if (time_out) { - t = (time_out * HZ) / 1000; - - if (t == 0) - t = 1; - } - - ME_SUBDEVICE_ENTER; - - if (instance->rised <= 0) { - instance->rised = 0; - - if (time_out) { - t = wait_event_interruptible_timeout(instance-> - wait_queue, - (instance->rised != - 0), t); - - if (t == 0) { - PERROR("Wait on interrupt timed out.\n"); - err = ME_ERRNO_TIMEOUT; - } - } else { - wait_event_interruptible(instance->wait_queue, - (instance->rised != 0)); - } - - if (instance->rised < 0) { - PERROR("Wait on interrupt aborted by user.\n"); - err = ME_ERRNO_CANCELLED; - } - } - - if (signal_pending(current)) { - PERROR("Wait on interrupt aborted by signal.\n"); - err = ME_ERRNO_SIGNAL; - } - - spin_lock_irqsave(&instance->subdevice_lock, cpu_flags); - instance->rised = 0; - *irq_count = instance->n; - *value = 1; - spin_unlock_irqrestore(&instance->subdevice_lock, cpu_flags); - - ME_SUBDEVICE_EXIT; - - return err; -} - -static int me0600_ext_irq_io_irq_stop(struct me_subdevice *subdevice, - struct file *filep, - int channel, int flags) -{ - me0600_ext_irq_subdevice_t *instance; - int err = ME_ERRNO_SUCCESS; - uint32_t tmp; - unsigned long cpu_flags; - - PDEBUG("executed.\n"); - - instance = (me0600_ext_irq_subdevice_t *) subdevice; - - if (flags) { - PERROR("Invalid flag specified.\n"); - return ME_ERRNO_INVALID_FLAGS; - } - - if (instance->lintno > 1) { - PERROR("Wrong idx=%d.\n", instance->lintno); - return ME_ERRNO_INVALID_SUBDEVICE; - } - - if (channel) { - PERROR("Invalid channel specified.\n"); - return ME_ERRNO_INVALID_CHANNEL; - } - - ME_SUBDEVICE_ENTER; - - spin_lock_irqsave(&instance->subdevice_lock, cpu_flags); - spin_lock(instance->intcsr_lock); - tmp = inl(instance->intcsr); - switch (instance->lintno) { - case 0: - tmp &= ~PLX_INTCSR_LOCAL_INT1_EN; - break; - case 1: - tmp &= ~PLX_INTCSR_LOCAL_INT2_EN; - break; - } - outl(tmp, instance->intcsr); - PDEBUG_REG("intcsr outl(plx:0x%X)=0x%x\n", instance->intcsr, tmp); - spin_unlock(instance->intcsr_lock); - instance->rised = -1; - spin_unlock_irqrestore(&instance->subdevice_lock, cpu_flags); - wake_up_interruptible_all(&instance->wait_queue); - - ME_SUBDEVICE_EXIT; - - return err; -} - -static int me0600_ext_irq_io_reset_subdevice(struct me_subdevice *subdevice, - struct file *filep, int flags) -{ - me0600_ext_irq_subdevice_t *instance; - uint32_t tmp; - unsigned long cpu_flags; - - PDEBUG("executed.\n"); - - instance = (me0600_ext_irq_subdevice_t *) subdevice; - - if (flags) { - PERROR("Invalid flag specified.\n"); - return ME_ERRNO_INVALID_FLAGS; - } - - ME_SUBDEVICE_ENTER; - - spin_lock_irqsave(&instance->subdevice_lock, cpu_flags); - spin_lock(instance->intcsr_lock); - tmp = inl(instance->intcsr); - switch (instance->lintno) { - case 0: - tmp |= PLX_INTCSR_LOCAL_INT1_POL | PLX_INTCSR_PCI_INT_EN; - tmp &= ~PLX_INTCSR_LOCAL_INT1_EN; - break; - case 1: - tmp |= PLX_INTCSR_LOCAL_INT2_POL | PLX_INTCSR_PCI_INT_EN; - tmp &= ~PLX_INTCSR_LOCAL_INT2_EN; - break; - } - outl(tmp, instance->intcsr); - PDEBUG_REG("intcsr outl(plx:0x%X)=0x%x\n", instance->intcsr, tmp); - spin_unlock(instance->intcsr_lock); - - instance->rised = -1; - instance->n = 0; - spin_unlock_irqrestore(&instance->subdevice_lock, cpu_flags); - wake_up_interruptible_all(&instance->wait_queue); - - ME_SUBDEVICE_EXIT; - - return ME_ERRNO_SUCCESS; -} - -static int me0600_ext_irq_query_number_channels(struct me_subdevice *subdevice, - int *number) -{ - PDEBUG("executed.\n"); - *number = 1; - return ME_ERRNO_SUCCESS; -} - -static int me0600_ext_irq_query_subdevice_type(struct me_subdevice *subdevice, - int *type, int *subtype) -{ - PDEBUG("executed.\n"); - *type = ME_TYPE_EXT_IRQ; - *subtype = ME_SUBTYPE_SINGLE; - return ME_ERRNO_SUCCESS; -} - -static int me0600_ext_irq_query_subdevice_caps(struct me_subdevice *subdevice, - int *caps) -{ - PDEBUG("executed.\n"); - *caps = ME_CAPS_EXT_IRQ_EDGE_RISING; - return ME_ERRNO_SUCCESS; -} - -static void me0600_ext_irq_destructor(struct me_subdevice *subdevice) -{ - me0600_ext_irq_subdevice_t *instance; - - PDEBUG("executed.\n"); - - instance = (me0600_ext_irq_subdevice_t *) subdevice; - - free_irq(instance->irq, (void *)instance); - me_subdevice_deinit(&instance->base); - kfree(instance); -} - -static irqreturn_t me0600_isr(int irq, void *dev_id) -{ - me0600_ext_irq_subdevice_t *instance; - uint32_t status; - uint32_t mask = PLX_INTCSR_PCI_INT_EN; - irqreturn_t ret = IRQ_HANDLED; - - instance = (me0600_ext_irq_subdevice_t *) dev_id; - - if (irq != instance->irq) { - PERROR("Incorrect interrupt num: %d.\n", irq); - return IRQ_NONE; - } - - PDEBUG("executed.\n"); - - if (instance->lintno > 1) { - PERROR_CRITICAL - ("%s():Wrong subdevice index=%d plx:irq_status_reg=0x%04X.\n", - __func__, instance->lintno, inl(instance->intcsr)); - return IRQ_NONE; - } - - spin_lock(&instance->subdevice_lock); - spin_lock(instance->intcsr_lock); - status = inl(instance->intcsr); - switch (instance->lintno) { - case 0: - mask |= PLX_INTCSR_LOCAL_INT1_STATE | PLX_INTCSR_LOCAL_INT1_EN; - break; - case 1: - mask |= PLX_INTCSR_LOCAL_INT2_STATE | PLX_INTCSR_LOCAL_INT2_EN; - break; - } - - if ((status & mask) == mask) { - instance->rised = 1; - instance->n++; - inb(instance->reset_reg); - PDEBUG("Interrupt detected.\n"); - } else { - PINFO - ("%ld Shared interrupt. %s(): idx=0 plx:irq_status_reg=0x%04X\n", - jiffies, __func__, status); - ret = IRQ_NONE; - } - spin_unlock(instance->intcsr_lock); - spin_unlock(&instance->subdevice_lock); - - wake_up_interruptible_all(&instance->wait_queue); - - return ret; -} - -me0600_ext_irq_subdevice_t *me0600_ext_irq_constructor(uint32_t plx_reg_base, - uint32_t me0600_reg_base, - spinlock_t *intcsr_lock, - unsigned ext_irq_idx, - int irq) -{ - me0600_ext_irq_subdevice_t *subdevice; - int err; - - PDEBUG("executed.\n"); - - /* Allocate memory for subdevice instance */ - subdevice = kmalloc(sizeof(me0600_ext_irq_subdevice_t), GFP_KERNEL); - - if (!subdevice) { - PERROR("Cannot get memory for 630_ext_irq instance.\n"); - return NULL; - } - - memset(subdevice, 0, sizeof(me0600_ext_irq_subdevice_t)); - - /* Initialize subdevice base class */ - err = me_subdevice_init(&subdevice->base); - - if (err) { - PERROR("Cannot initialize subdevice base class instance.\n"); - kfree(subdevice); - return NULL; - } - // Initialize spin locks. - spin_lock_init(&subdevice->subdevice_lock); - - subdevice->intcsr_lock = intcsr_lock; - - /* Initialize wait queue */ - init_waitqueue_head(&subdevice->wait_queue); - - subdevice->lintno = ext_irq_idx; - - /* Request interrupt line */ - subdevice->irq = irq; - - err = request_irq(subdevice->irq, me0600_isr, - IRQF_DISABLED | IRQF_SHARED, - ME0600_NAME, (void *)subdevice); - - if (err) { - PERROR("Cannot get interrupt line.\n"); - kfree(subdevice); - return NULL; - } - PINFO("Registered irq=%d.\n", subdevice->irq); - - /* Initialize registers */ - subdevice->intcsr = plx_reg_base + PLX_INTCSR; - subdevice->reset_reg = - me0600_reg_base + ME0600_INT_0_RESET_REG + ext_irq_idx; - - /* Initialize the subdevice methods */ - subdevice->base.me_subdevice_io_irq_start = me0600_ext_irq_io_irq_start; - subdevice->base.me_subdevice_io_irq_wait = me0600_ext_irq_io_irq_wait; - subdevice->base.me_subdevice_io_irq_stop = me0600_ext_irq_io_irq_stop; - subdevice->base.me_subdevice_io_reset_subdevice = - me0600_ext_irq_io_reset_subdevice; - subdevice->base.me_subdevice_query_number_channels = - me0600_ext_irq_query_number_channels; - subdevice->base.me_subdevice_query_subdevice_type = - me0600_ext_irq_query_subdevice_type; - subdevice->base.me_subdevice_query_subdevice_caps = - me0600_ext_irq_query_subdevice_caps; - subdevice->base.me_subdevice_destructor = me0600_ext_irq_destructor; - - subdevice->rised = 0; - subdevice->n = 0; - - return subdevice; -} diff --git a/drivers/staging/meilhaus/me0600_ext_irq.h b/drivers/staging/meilhaus/me0600_ext_irq.h deleted file mode 100644 index f5f2204b49a..00000000000 --- a/drivers/staging/meilhaus/me0600_ext_irq.h +++ /dev/null @@ -1,58 +0,0 @@ -/** - * @file me0600_ext_irq.h - * - * @brief ME-630 external interrupt implementation. - * @note Copyright (C) 2006 Meilhaus Electronic GmbH (support@meilhaus.de) - * @author Guenter Gebhardt - */ - -#ifndef _ME0600_EXT_IRQ_H_ -#define _ME0600_EXT_IRQ_H_ - -#include - -#include "mesubdevice.h" -#include "meslock.h" - -#ifdef __KERNEL__ - -/** - * @brief The ME-630 external interrupt subdevice class. - */ -typedef struct me0600_ext_irq_subdevice { - /* Inheritance */ - me_subdevice_t base; /**< The subdevice base class. */ - - /* Attributes */ - spinlock_t subdevice_lock; /**< Spin lock to protect the subdevice from concurrent access. */ - spinlock_t *intcsr_lock; /**< Spin lock to protect #intcsr. */ - - wait_queue_head_t wait_queue; /**< Queue to put on threads waiting for an interrupt. */ - - int irq; /**< The irq number assigned by PCI BIOS. */ - int rised; /**< If true an interrupt has occured. */ - unsigned int n; /**< The number of interrupt since the driver was loaded. */ - unsigned int lintno; /**< The number of the local PCI interrupt. */ - - uint32_t intcsr; /**< The PLX interrupt control and status register. */ - uint32_t reset_reg; /**< The control register. */ -} me0600_ext_irq_subdevice_t; - -/** - * @brief The constructor to generate a ME-630 external interrupt instance. - * - * @param plx_reg_base The register base address of the PLX chip as returned by the PCI BIOS. - * @param me0600_reg_base The register base address of the ME-630 device as returned by the PCI BIOS. - * @param irq The irq assigned by the PCI BIOS. - * - * @return Pointer to new instance on success.\n - * NULL on error. - */ -me0600_ext_irq_subdevice_t *me0600_ext_irq_constructor(uint32_t plx_reg_base, - uint32_t me0600_reg_base, - spinlock_t * intcsr_lock, - unsigned int ext_irq_idx, - int irq); - -#endif -#endif diff --git a/drivers/staging/meilhaus/me0600_ext_irq_reg.h b/drivers/staging/meilhaus/me0600_ext_irq_reg.h deleted file mode 100644 index f6198fa6d2b..00000000000 --- a/drivers/staging/meilhaus/me0600_ext_irq_reg.h +++ /dev/null @@ -1,18 +0,0 @@ -/** - * @file me0600_ext_irq_reg.h - * - * @brief ME-630 external interrupt register definitions. - * @note Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) - * @author Guenter Gebhardt - */ - -#ifndef _ME0600_EXT_IRQ_REG_H_ -#define _ME0600_EXT_IRQ_REG_H_ - -#ifdef __KERNEL__ - -#define ME0600_INT_0_RESET_REG 0x0005 -#define ME0600_INT_1_RESET_REG 0x0006 - -#endif -#endif diff --git a/drivers/staging/meilhaus/me0600_optoi.c b/drivers/staging/meilhaus/me0600_optoi.c deleted file mode 100644 index 43f710ffd27..00000000000 --- a/drivers/staging/meilhaus/me0600_optoi.c +++ /dev/null @@ -1,243 +0,0 @@ -/** - * @file me0600_optoi.c - * - * @brief ME-630 Optoisolated input subdevice instance. - * @note Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) - * @author Guenter Gebhardt - * @author Krzysztof Gantzke (k.gantzke@meilhaus.de) - */ - -/* - * Copyright (C) 2007 Meilhaus Electronic GmbH (support@meilhaus.de) - * - * This file is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef __KERNEL__ -# define __KERNEL__ -#endif - -/* - * Includes - */ -#include - -#include -#include -#include -#include - -#include "medefines.h" -#include "meinternal.h" -#include "meerror.h" - -#include "medebug.h" -#include "me0600_optoi_reg.h" -#include "me0600_optoi.h" - -/* - * Defines - */ - -/* - * Functions - */ - -static int me0600_optoi_io_reset_subdevice(struct me_subdevice *subdevice, - struct file *filep, int flags) -{ - - if (flags) { - PERROR("Invalid flag specified.\n"); - return ME_ERRNO_INVALID_FLAGS; - } - - PDEBUG("executed.\n"); - return ME_ERRNO_SUCCESS; -} - -static int me0600_optoi_io_single_config(me_subdevice_t *subdevice, - struct file *filep, - int channel, - int single_config, - int ref, - int trig_chan, - int trig_type, - int trig_edge, int flags) -{ - me0600_optoi_subdevice_t *instance; - int err = ME_ERRNO_SUCCESS; - - PDEBUG("executed.\n"); - - instance = (me0600_optoi_subdevice_t *) subdevice; - - ME_SUBDEVICE_ENTER; - - spin_lock(&instance->subdevice_lock); - - switch (flags) { - case ME_IO_SINGLE_CONFIG_NO_FLAGS: - case ME_IO_SINGLE_CONFIG_DIO_BYTE: - if (channel == 0) { - if (single_config != ME_SINGLE_CONFIG_DIO_INPUT) { - PERROR("Invalid port direction specified.\n"); - err = ME_ERRNO_INVALID_SINGLE_CONFIG; - } - } else { - PERROR("Invalid channel specified.\n"); - err = ME_ERRNO_INVALID_CHANNEL; - } - - break; - - default: - PERROR("Invalid flags specified.\n"); - - err = ME_ERRNO_INVALID_FLAGS; - - break; - } - - spin_unlock(&instance->subdevice_lock); - - ME_SUBDEVICE_EXIT; - - return err; -} - -static int me0600_optoi_io_single_read(me_subdevice_t *subdevice, - struct file *filep, - int channel, - int *value, int time_out, int flags) -{ - me0600_optoi_subdevice_t *instance; - int err = ME_ERRNO_SUCCESS; - - PDEBUG("executed.\n"); - - instance = (me0600_optoi_subdevice_t *) subdevice; - - ME_SUBDEVICE_ENTER; - - spin_lock(&instance->subdevice_lock); - - switch (flags) { - case ME_IO_SINGLE_TYPE_DIO_BIT: - if ((channel >= 0) && (channel < 8)) { - *value = inb(instance->port_reg) & (0x1 << channel); - } else { - PERROR("Invalid bit number specified.\n"); - err = ME_ERRNO_INVALID_CHANNEL; - } - - break; - - case ME_IO_SINGLE_NO_FLAGS: - case ME_I