{
printk("comedi%d: pci6208: remove\n",dev->minor);
- pci_release_regions(devpriv->pci_dev);
+ if(devpriv && devpriv->pci_dev){
+ pci_release_regions(devpriv->pci_dev);
+ pci_dev_put(devpriv->pci_dev);
+ }
return 0;
}
struct pci_dev *pci_dev;
int i;
- for(pci_dev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pci_dev != NULL ;
- pci_dev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pci_dev)) {
+ for(pci_dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pci_dev != NULL ;
+ pci_dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pci_dev)) {
if (pci_dev->vendor == PCI_VENDOR_ID_ADLINK)
{
for (i= 0; i< pci6208_board_nbr; i++)
printk("comedi%d: " PCI9111_DRIVER_NAME " driver\n",dev->minor);
- for(pci_device = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pci_device != NULL ;
- pci_device = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pci_device))
+ for(pci_device = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pci_device != NULL ;
+ pci_device = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pci_device))
{
if (pci_device->vendor == PCI_VENDOR_ID_ADLINK)
{
if(pci_request_regions(pci_device, PCI9111_DRIVER_NAME))
{
printk("comedi%d: I/O port conflict\n",dev->minor);
+ pci_dev_put(pci_device);
return -EIO;
}
dev->board_name = board->name;
if(alloc_private(dev,sizeof(pci9111_private_data_struct))<0)
+ {
+ pci_release_regions(pci_device);
+ pci_dev_put(pci_device);
return -ENOMEM;
+ }
dev_private->pci_device = pci_device;
dev_private->io_range = io_range;
comedi_free_irq(dev->irq,dev);
}
- pci_release_regions(dev_private->pci_device);
+ if (dev_private!=0 && dev_private->pci_device!=0)
+ {
+ pci_release_regions(dev_private->pci_device);
+ pci_dev_put(dev_private->pci_device);
+ }
return 0;
}
return -ENOMEM;
}
- for(pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
- pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
+ for(pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
+ pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
if ((pcidev->vendor!=this_board->vendor_id)||
(pcidev->device!=this_board->device_id))
continue;
if (ret==1) { found=1; break; }
if (ret>1) {
pci_dio_detach(dev);
+ pci_dev_put(pcidev);
return -EIO;
}
}
if (pci_request_regions(pcidev, driver_pci_dio.driver_name)) {
pci_dio_detach(dev);
+ pci_dev_put(pcidev);
rt_printk(", Error: Cann't allocate PCI device!\n");
return -EIO;
}
if (devpriv->enabled)
pci_disable_device(devpriv->pcidev);
- if (devpriv->pcidev)
+ if (devpriv->pcidev) {
pci_release_regions(devpriv->pcidev);
+ pci_dev_put(devpriv->pcidev);
+ }
if (devpriv->prev) { devpriv->prev->next=devpriv->next; }
{ pci_priv=devpriv->next; }
amcc_devices=NULL;
last=NULL;
- for(pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
- pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
+ for(pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
+ pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
if(pcidev->vendor==pci_vendor){
amcc=kmalloc(sizeof(*amcc),GFP_KERNEL);
+ if (!amcc) {
+ printk("amcc_s5933: allocation failed\n");
+ pci_dev_put(pcidev);
+ break;
+ }
memset(amcc,0,sizeof(*amcc));
- amcc->pcidev=pcidev;
+ amcc->pcidev=pci_dev_get(pcidev);
if (last) { last->next=amcc; }
else { amcc_devices=amcc; }
last=amcc;
struct pcilst_struct *amcc,*next;
for(amcc=amcc_devices;amcc;amcc=next){
+ pci_dev_put(amcc->pcidev);
next=amcc->next;
kfree(amcc);
}
}
/* Look for matching PCI device. */
- for(pci_dev = pci_find_device(pci_id->vendor, pci_id->device, NULL);
+ for(pci_dev = pci_get_device(pci_id->vendor, pci_id->device, NULL);
pci_dev != NULL ;
- pci_dev = pci_find_device(pci_id->vendor,
+ pci_dev = pci_get_device(pci_id->vendor,
pci_id->device, pci_dev)) {
/* If bus/slot specified, check them. */
if (bus || slot) {
dio200_attach(comedi_device *dev,comedi_devconfig *it)
{
comedi_subdevice *s;
- struct pci_dev *pci_dev;
+ struct pci_dev *pci_dev = NULL;
int iobase = 0, irq = 0;
int bus = 0, slot = 0;
dio200_layout *layout;
if ((ret=pci_enable_device(pci_dev)) < 0) {
printk(KERN_ERR "comedi%d: error! cannot enable PCI device!\n",
dev->minor);
+ pci_dev_put(pci_dev);
return ret;
}
iobase = pci_resource_start(pci_dev, 2);
if ((ret=alloc_private(dev,sizeof(dio200_private))) < 0) {
printk(KERN_ERR "comedi%d: error! out of memory!\n", dev->minor);
+ if (pci_dev) {
+ pci_dev_put(pci_dev);
+ }
return ret;
}
if (dev->iobase) {
release_region(dev->iobase, DIO200_IO_SIZE);
}
+ if (devpriv && devpriv->pci_dev) {
+ pci_dev_put(devpriv->pci_dev);
+ }
if (dev->board_name) {
printk(KERN_INFO "comedi%d: %s removed\n",
dev->minor, dev->board_name);
}
/* Look for matching PCI device. */
- for(pci_dev = pci_find_device(pci_id->vendor, pci_id->device,
+ for(pci_dev = pci_get_device(pci_id->vendor, pci_id->device,
NULL); pci_dev != NULL;
- pci_dev = pci_find_device(pci_id->vendor,
+ pci_dev = pci_get_device(pci_id->vendor,
pci_id->device, pci_dev)) {
/* If bus/slot specified, check them. */
if (bus || slot) {
}
if ((ret=pci_enable_device(pci_dev)) < 0) {
printk("error enabling PCI device!\n");
+ pci_dev_put(pci_dev);
return ret;
}
lcr_iobase = pci_resource_start(pci_dev, 1);
*/
if ((ret=alloc_private(dev,sizeof(pc236_private))) < 0) {
printk("out of memory!\n");
+ if (pci_dev)
+ pci_dev_put(pci_dev);
return ret;
}
if (dev->subdevices) {
subdev_8255_cleanup(dev, dev->subdevices+0);
}
+ if (dev->iobase) {
+ release_region(dev->iobase, PC236_IO_SIZE);
+ }
if (devpriv) {
if (devpriv->lcr_iobase)
release_region(devpriv->lcr_iobase, PC236_LCR_IO_SIZE);
+ if (devpriv->pci_dev)
+ pci_dev_put(devpriv->pci_dev);
}
- if (dev->iobase) release_region(dev->iobase, PC236_IO_SIZE);
return 0;
}
}
if ((ret=pci_enable_device(pci_dev)) < 0) {
printk("error enabling PCI device!\n");
+ pci_dev_put(pci_dev);
return ret;
}
iobase = pci_resource_start(pci_dev, 2);
*/
if ((ret=alloc_private(dev,sizeof(pc263_private))) < 0) {
printk("out of memory!\n");
+ if (pci_dev)
+ pci_dev_put(pci_dev);
return ret;
}
if (dev->iobase)
release_region(dev->iobase, PC263_IO_SIZE);
+ if (devpriv && devpriv->pci_dev)
+ pci_dev_put(devpriv->pci_dev);
return 0;
}
printk("comedi%d: amplc_pci230\n",dev->minor);
/* Find card */
- for(pci_dev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pci_dev != NULL ;
- pci_dev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pci_dev)) {
+ for(pci_dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pci_dev != NULL ;
+ pci_dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pci_dev)) {
if(pci_dev->vendor != PCI_VENDOR_ID_AMPLICON)
continue;
for(i=0;i<n_pci230_boards;i++){
dev->board_ptr = pci230_boards+i;
/* Read base addressses of the PCI230's two I/O regions from PCI configuration register. */
- if(pci_enable_device(pci_dev)<0)return -EIO;
+ if(pci_enable_device(pci_dev)<0){
+ pci_dev_put(pci_dev);
+ return -EIO;
+ }
pci_iobase = pci_resource_start(pci_dev, 2);
iobase = pci_resource_start(pci_dev, 3);
/* Allocate the private structure area using alloc_private().
* Macro defined in comedidev.h - memsets struct fields to 0. */
- if((alloc_private(dev,sizeof(struct pci230_private)))<0)
+ if((alloc_private(dev,sizeof(struct pci230_private)))<0){
+ pci_dev_put(pci_dev);
return -ENOMEM;
+ }
devpriv->pci_dev = pci_dev;
/* Reserve I/O space 1. */
if(devpriv->pci_iobase){
release_region(devpriv->pci_iobase, PCI230_IO1_SIZE);
}
+ if(devpriv->pci_dev){
+ pci_dev_put(devpriv->pci_dev);
+ }
}
return 0;
comedi_free_irq(dev->irq, dev);
if(dev->subdevices)
subdev_8255_cleanup(dev,dev->subdevices + 2);
+ if(devpriv && devpriv->pci_dev)
+ pci_dev_put(devpriv->pci_dev);
return 0;
}
* Probe the device to determine what device in the series it is.
*/
- for(pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
- pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pcidev))
+ for(pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
+ pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev))
{
// is it not a computer boards card?
if( pcidev->vendor != PCI_VENDOR_ID_COMPUTERBOARDS )
pcidev->bus->number, PCI_SLOT(pcidev->devfn));
if( pci_enable_device( pcidev ) )
+ {
+ pci_dev_put( pcidev );
return -EIO;
+ }
pci_set_master( pcidev );
priv(dev)->hw_dev = pcidev;
pci_free_consistent(priv(dev)->hw_dev, sizeof(struct plx_dma_desc) * AO_DMA_RING_COUNT,
priv(dev)->ao_dma_desc, priv(dev)->ao_dma_desc_bus_addr );
pci_disable_device(priv(dev)->hw_dev);
+ pci_dev_put(priv(dev)->hw_dev);
}
}
if(dev->subdevices)
*/
printk("\n");
- for(pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
- pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
+ for(pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
+ pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
if(pcidev->vendor==PCI_VENDOR_ID_CB){
if(it->options[0] || it->options[1]){
if(pcidev->bus->number==it->options[0] &&
}
printk("Not a supported ComputerBoards/MeasurementComputing card on "
"requested position\n");
+ pci_dev_put(pcidev);
return -EIO;
found:
release_region(devpriv->digitalio, DIGITALIO_SIZE);
if(devpriv->dac)
release_region(devpriv->dac, 8 + thisboard->ao_chans*2);
+ if(devpriv->pci_dev)
+ pci_dev_put(devpriv->pci_dev);
}
// cleanup 8255
if(dev->subdevices)
*/
printk("\n");
- for(pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
- pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pcidev))
+ for(pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
+ pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev))
{
// is it not a computer boards card?
if(pcidev->vendor != PCI_VENDOR_ID_COMPUTERBOARDS)
static int cb_pcimdas_detach(comedi_device *dev)
{
#ifdef CBPCIMDAS_DEBUG
- printk("devpriv->BADR0 = %d\n",devpriv->BADR0);
- printk("devpriv->BADR1 = %d\n",devpriv->BADR1);
- printk("devpriv->BADR2 = %d\n",devpriv->BADR2);
- printk("devpriv->BADR3 = %d\n",devpriv->BADR3);
- printk("devpriv->BADR4 = %d\n",devpriv->BADR4);
+ if(devpriv)
+ {
+ printk("devpriv->BADR0 = %d\n",devpriv->BADR0);
+ printk("devpriv->BADR1 = %d\n",devpriv->BADR1);
+ printk("devpriv->BADR2 = %d\n",devpriv->BADR2);
+ printk("devpriv->BADR3 = %d\n",devpriv->BADR3);
+ printk("devpriv->BADR4 = %d\n",devpriv->BADR4);
+ }
#endif
printk("comedi%d: cb_pcimdas: remove\n",dev->minor);
+ if(devpriv)
+ {
if(devpriv->BADR0)
release_mem_region(devpriv->BADR0, BADR0_SIZE);
if(devpriv->BADR1)
release_region(devpriv->BADR3, BADR3_SIZE);
if(devpriv->BADR4)
release_region(devpriv->BADR4, BADR4_SIZE);
+ if(devpriv->pci_dev)
+ pci_dev_put(devpriv->pci_dev);
+ }
if(dev->irq)
comedi_free_irq(dev->irq, dev);
devpriv->attached_to_8255 = 0;
}
+ if (devpriv->pci_dev) {
+ pci_dev_put(devpriv->pci_dev);
+ }
+
if (devpriv->attached_successfully && thisboard)
printk("comedi%d: %s: detached\n", dev->minor, thisboard->name);
struct pci_dev *pcidev;
int index, registers;
- for(pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
- pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pcidev))
+ for(pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
+ pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev))
{
// is it not a computer boards card?
if(pcidev->vendor != PCI_VENDOR_ID_COMPUTERBOARDS)
if(alloc_subdevices(dev, 2)<0)
return -ENOMEM;
- for(pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
- pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
+ for(pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
+ pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
if ( pcidev->vendor == PCI_VENDOR_ID_CONTEC &&
pcidev->device == PCI_DEVICE_ID_PIO1616L ) {
+ devpriv->pci_dev = pcidev;
dev->iobase = pci_resource_start ( pcidev, 0 );
printk ( " base addr %lx ", dev->iobase );
static int contec_detach(comedi_device *dev)
{
printk("comedi%d: contec: remove\n",dev->minor);
+
+ if (devpriv && devpriv->pci_dev)
+ pci_dev_put(devpriv->pci_dev);
return 0;
}
enum {
card_daqboard_2000
} card;
+ struct pci_dev *pci_dev;
void *daq;
void *plx;
lsampl_t ao_readback[2];
/* FIXME: we should handle multiple cards, have to make David decide
how, so we will be consistent among all PCI card drivers... */
- card = pci_find_device(0x1616, 0x0409, NULL);
+ card = pci_get_device(0x1616, 0x0409, NULL);
if (!card) {
printk(" no daqboard2000 found\n");
}
if((result = pci_enable_device(card))<0){
+ pci_dev_put(card);
goto out;
}
}else{
printk(" abnormal pci header type !?!?\n");
result=-EIO;
+ pci_dev_put(card);
goto out;
}
result = alloc_private(dev,sizeof(daqboard2000_private));
- if(result<0)goto out;
+ if(result<0){
+ pci_dev_put(card);
+ goto out;
+ }
+
+ devpriv->pci_dev = card;
result = alloc_subdevices(dev, 3);
if(result<0)goto out;
if (dev->irq) {
free_irq(dev->irq, dev);
}
+ if (devpriv && devpriv->pci_dev) {
+ pci_dev_put(devpriv->pci_dev);
+ }
return 0;
}
do_nchan: 3,
i8255_offset: 0,
i8254_offset: 0,
- iosize: 16, // unchecked
+ iosize: 16,
},
// duplicate so driver name can be used also
{
do_nchan: 3,
i8255_offset: 0,
i8254_offset: 0,
- iosize: 16, // unchecked
+ iosize: 16,
},
};
}
printk("\n");
// find card
- for(pdev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pdev != NULL ;
- pdev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pdev)) {
+ for(pdev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pdev != NULL ;
+ pdev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pdev)) {
if(pdev->vendor == PCI_VENDOR_ID_COMPUTERBOARDS &&
pdev->device == PCI_DEVICE_ID_PCIDAS08){
if(it->options[0] || it->options[1]){
if(devpriv->pci_iobase){
release_region(devpriv->pci_iobase, PCIDAS08_SIZE);
}
+ if(devpriv->pdev){
+ pci_dev_put(devpriv->pdev);
+ }
}
return 0;
{
if(dev->irq)comedi_free_irq(dev->irq,dev);
+ if(devpriv && devpriv->pci_dev) pci_dev_put(devpriv->pci_dev);
+
/* XXX */
return 0;
{
int i;
- for(from=pci_find_device(PCI_VENDOR_ID_DT,PCI_ANY_ID,from); from!=NULL;
- from=pci_find_device(PCI_VENDOR_ID_DT,PCI_ANY_ID,from)){
+ for(from=pci_get_device(PCI_VENDOR_ID_DT,PCI_ANY_ID,from); from!=NULL;
+ from=pci_get_device(PCI_VENDOR_ID_DT,PCI_ANY_ID,from)){
for(i=0;i<n_dt3k_boards;i++){
if(from->device == dt3k_boardtypes[i].device_id){
*board=i;
pcidev->bus->number, PCI_SLOT(pcidev->devfn));
if( pci_enable_device( pcidev ) )
+ {
+ pci_dev_put( pcidev );
return -EIO;
+ }
pci_set_master( pcidev );
priv(dev)->hw_dev = pcidev;
#define cnt_board_nbr (sizeof(cnt_boards)/sizeof(cnt_board_struct))
+/*-- device private structure -----------------------------------------------*/
+
+typedef struct
+{
+ struct pci_dev *pcidev;
+} cnt_device_private;
+
+#define devpriv ((cnt_device_private *)dev->private)
+
static comedi_driver cnt_driver =
{
driver_name: CNT_DRIVER_NAME,
int error, i;
/* Probe the device to determine what device in the series it is. */
- for(pci_device = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pci_device != NULL ;
- pci_device = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pci_device))
+ for(pci_device = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pci_device != NULL ;
+ pci_device = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pci_device))
{
if(pci_device->vendor == PCI_VENDOR_ID_KOLTER)
{
request_region(io_base & PCI_BASE_ADDRESS_IO_MASK, 0x08, CNT_DRIVER_NAME);
dev->iobase = io_base & PCI_BASE_ADDRESS_IO_MASK;
+ /* allocate device private structure */
+ if((error = alloc_private(dev, sizeof(cnt_device_private))) < 0)
+ {
+ pci_dev_put(pci_device);
+ return error;
+ }
+
+ devpriv->pcidev = pci_device;
+
/* allocate the subdevice structures */
if((error = alloc_subdevices(dev, 1)) < 0)
{
{
release_region(dev->iobase, 0x08);
}
+ if (devpriv->pcidev)
+ {
+ pci_dev_put(devpriv->pcidev);
+ }
printk("comedi%d: " CNT_DRIVER_NAME " remove\n",dev->minor);
return 0;
/*
* Probe the device to determine what device in the series it is.
*/
- for(pci_device = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pci_device != NULL ;
- pci_device = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pci_device)) {
+ for(pci_device = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pci_device != NULL ;
+ pci_device = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pci_device)) {
if(pci_device->vendor == PCI_VENDOR_ID_MEILHAUS){
for(i = 0; i < ME4000_BOARD_VERSIONS; i++){
if(me4000_boards[i].device_id == pci_device->device){
pci_device->bus->number, PCI_SLOT(pci_device->devfn));
/* Allocate private memory */
- if(alloc_private(dev, sizeof(me4000_info_t)) < 0)
+ if(alloc_private(dev, sizeof(me4000_info_t)) < 0){
+ pci_dev_put(pci_device);
return -ENOMEM;
+ }
/* Set data in device structure */
dev->board_name = board->name;
pci_release_regions(pci_device);
PROBE_ERROR_1:
- kfree(info);
return result;
}
static int me4000_detach(comedi_device *dev){
CALL_PDEBUG("In me4000_detach()\n");
- reset_board(dev);
-
- pci_release_regions(info->pci_dev_p);
+ if(info){
+ reset_board(dev);
- kfree(info);
+ if(info->pci_dev_p) {
+ pci_release_regions(info->pci_dev_p);
+ pci_dev_put(info->pci_dev_p);
+ }
+ }
return 0;
}
//
// Probe the device to determine what device in the series it is.
//
- for(pci_device = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pci_device != NULL ;
- pci_device = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pci_device))
+ for(pci_device = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pci_device != NULL ;
+ pci_device = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pci_device))
{
if(pci_device->vendor == PCI_VENDOR_ID_MEILHAUS)
{
// Allocate private memory
if(alloc_private(dev,sizeof(me_private_data_struct)) < 0)
+ {
+ pci_dev_put(pci_device);
return -ENOMEM;
+ }
// Set data in device structure
static int me_detach(comedi_device *dev)
{
- me_reset(dev);
+ if(dev_private)
+ {
+ me_reset(dev);
+
+ if(dev_private->pci_device)
+ {
+ pci_dev_put(dev_private->pci_device);
+ }
+ }
return 0;
}
struct pci_dev *pcidev;
struct mite_struct *mite;
- for(pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
- pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
+ for(pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
+ pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
if(pcidev->vendor==PCI_VENDOR_ID_NATINST){
mite=kmalloc(sizeof(*mite),GFP_KERNEL);
if(!mite){
printk("mite: allocation failed\n");
+ pci_dev_put(pcidev);
return;
}
memset(mite,0,sizeof(*mite));
- mite->pcidev=pcidev;
+ mite->pcidev=pci_dev_get(pcidev);
mite->next=mite_devices;
mite_devices=mite;
struct mite_struct *mite,*next;
for(mite=mite_devices;mite;mite=next){
+ pci_dev_put(mite->pcidev);
next=mite->next;
kfree(mite);
}
/*
* Probe the device to determine what device in the series it is.
*/
- for(pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
- pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
+ for(pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ;
+ pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
if (pcidev->vendor == PCI_VENDOR_ID_RTD) {
if (it->options[0] || it->options[1]) {
if (pcidev->bus->number == it->options[0]
return -EIO;
}
+ devpriv->pci_dev = pcidev;
if (pcidev->device != thisboard->device_id) {
printk ("Found an RTD card, but not the supported type (%x).\n",
pcidev->device);
return -EIO;
}
- devpriv->pci_dev = pcidev;
dev->board_name = thisboard->name;
if((ret=pci_enable_device(pcidev))<0){
return 1;
+#if 0
/* hit an error, clean up memory and return ret */
//rtd_attach_die_error:
#ifdef USE_DMA
if (devpriv->lcfg) {
iounmap (devpriv->lcfg);
}
+ if (devpriv->pci_dev) {
+ pci_dev_put(devpriv->pci_dev);
+ }
return ret;
+#endif
}
/*
if (devpriv->lcfg) {
iounmap (devpriv->lcfg);
}
+ if (devpriv->pci_dev) {
+ pci_dev_put(devpriv->pci_dev);
+ }
}
printk("comedi%d: rtd520: removed.\n",dev->minor);