staging: comedi: amplc_dio200: store the pci_dev in the comedi_device
PATCH 30/90 staging: comedi: amplc_dio200: store the pci_dev in the comedi_device
Use the hw_dev pointer in the comedi_device struct to hold the pci_dev instead of carrying it in the private data.
Since the pci_dev is no longer held in the provate data, we can also cleanup the detach a bit. Remove the IS_ENABLED() tests in the detach. If the pci_dev is non NULL it's a PCI device otherwise it's an ISA device. Using IS_ENABLED() to omit the code paths makes the code a bit confusing and doesn't save much.
--- drivers/staging/comedi/drivers/amplc_dio200.c | 31 +++++++++++---------------- 1 file changed, 12 insertions(+), 19 deletions(-)
drivers/staging/comedi/drivers/amplc_dio200.c +12 -19
@@ -424,7 +424,6 @@ static const struct dio200_layout_struct dio200_layouts[] = {feel free to suggest moving the variable to the struct comedi_device struct. */ struct dio200_private { -struct pci_dev *pci_dev;/* PCI device */ int intr_sd; };
@@ -1225,7 +1224,7 @@ dio200_subdev_8254_cleanup(struct comedi_device *dev,static void dio200_report_attach (struct comedi_device *dev,unsigned int irq) {const struct dio200_board *thisboard =comedi_board (dev); -struct dio200_private *devpriv = dev->private; +struct pci_dev *pcidev =comedi_to_pci_dev (dev);char tmpbuf[60 ];int tmplen;
@@ -1236,7 +1235,7 @@ static void dio200_report_attach(struct comedi_device *dev, unsigned int irq)else if (IS_ENABLED (CONFIG_COMEDI_AMPLC_DIO200_PCI ) && thisboard->bustype == pci_bustype) tmplen =scnprintf (tmpbuf,sizeof (tmpbuf), -"(pci %s) " ,pci_name (devpriv->pci_dev)); +"(pci %s) " ,pci_name (pcidev));else tmplen =0 ;if (irq)
@@ -1327,11 +1326,11 @@ static int dio200_common_attach(struct comedi_device *dev, unsigned long iobase,static int dio200_pci_common_attach (struct comedi_device *dev,struct pci_dev *pci_dev) { -struct dio200_private *devpriv = dev->private;unsigned long iobase;int ret; - devpriv->pci_dev = pci_dev; +comedi_set_hw_dev (dev, &pci_dev->dev); + ret =comedi_pci_enable (pci_dev,DIO200_DRIVER_NAME );if (ret <0 ) { dev_err(dev->class_dev,
@@ -1419,7 +1418,7 @@ static int __devinit dio200_attach_pci(struct comedi_device *dev,static void dio200_detach (struct comedi_device *dev) {const struct dio200_board *thisboard =comedi_board (dev); -struct dio200_private *devpriv = dev->private; +struct pci_dev *pcidev =comedi_to_pci_dev (dev);const struct dio200_layout_struct *layout;unsigned n;
@@ -1444,19 +1443,13 @@ static void dio200_detach(struct comedi_device *dev) } } } -if (devpriv) { -if (IS_ENABLED (CONFIG_COMEDI_AMPLC_DIO200_PCI ) && - thisboard->bustype == pci_bustype) { -if (devpriv->pci_dev) { -if (dev->iobase) -comedi_pci_disable (devpriv->pci_dev); -pci_dev_put (devpriv->pci_dev); - } - }else if (IS_ENABLED (CONFIG_COMEDI_AMPLC_DIO200_ISA ) && - thisboard->bustype == isa_bustype) { -if (dev->iobase) -release_region (dev->iobase,DIO200_IO_SIZE ); - } +if (pcidev) { +if (dev->iobase) +comedi_pci_disable (pcidev); +pci_dev_put (pcidev); + }else { +if (dev->iobase) +release_region (dev->iobase,DIO200_IO_SIZE ); } }
Signature · 1 line
1.7.11
Quoted 8 lines · H Hartley Sweeten
Use the
hw_devpointer in thecomedi_devicestruct to hold thepci_devinstead of carrying it in the private data.Since the
pci_devis no longer held in the provate data, we can also cleanup the detach a bit. Remove theIS_ENABLED()tests in the detach. If thepci_devis non NULL it's a PCI device otherwise it's an ISA device. UsingIS_ENABLED()to omit the code paths makes the code a bit confusing and doesn't save much.
No, you really need to check thisboard->bustype in the detach() because hw_dev might be NULL for a PCI board if the attach() failed.
Signature · 2 lines
-=( Ian Abbott @ MEV Ltd. E-mail: <[email protected]> )=- -=( Tel: +44 (0)161 477 1898 FAX: +44 (0)161 718 3587 )=-
Quoted 4 lines · Ian Abbott
Quoted 3 lines · H Hartley Sweeten
Use the
hw_devpointer in thecomedi_devicestruct to hold thepci_devinstead of carrying it in the private data.
Quoted 8 lines
Quoted 5 lines
Since the
pci_devis no longer held in the provate data, we can also cleanup the detach a bit. Remove theIS_ENABLED()tests in the detach. If thepci_devis non NULL it's a PCI device otherwise it's an ISA device. UsingIS_ENABLED()to omit the code paths makes the code a bit confusing and doesn't save much.No, you really need to check
thisboard->bustypein thedetach()becausehw_devmight be NULL for a PCI board if theattach()failed.
Actually, your patch wouldn't do any harm as dev->iobase would be 0. It would just go through the "failed ISA device" path instead of the "failed PCI device" path. It would be more robust to check thisboard->bustype though.
Signature · 2 lines
-=( Ian Abbott @ MEV Ltd. E-mail: <[email protected]> )=- -=( Tel: +44 (0)161 477 1898 FAX: +44 (0)161 718 3587 )=-
Quoted 11 lines · Ian Abbott
Quoted 10 lines · Ian Abbott
Quoted 8 lines · H Hartley Sweeten
Use the
hw_devpointer in thecomedi_devicestruct to hold thepci_devinstead of carrying it in the private data.Since the
pci_devis no longer held in the provate data, we can also cleanup the detach a bit. Remove theIS_ENABLED()tests in the detach. If thepci_devis non NULL it's a PCI device otherwise it's an ISA device. UsingIS_ENABLED()to omit the code paths makes the code a bit confusing and doesn't save much.
Quoted 7 lines
Quoted 2 lines
No, you really need to check
thisboard->bustypein thedetach()becausehw_devmight be NULL for a PCI board if theattach()failed.Actually, your patch wouldn't do any harm as
dev->iobasewould be 0. It would just go through the "failed ISA device" path instead of the "failed PCI device" path. It would be more robust to checkthisboard->bustypethough.
I don't mind if your original patch is applied as it does no harm. If so, I'll submit a patch afterwards to check the bus type in the detach().
Signature · 2 lines
-=( Ian Abbott @ MEV Ltd. E-mail: <[email protected]> )=- -=( Tel: +44 (0)161 477 1898 FAX: +44 (0)161 718 3587 )=-
Quoted 11 lines · Ian Abbott
Quoted 10 lines · Ian Abbott
Quoted 8 lines · H Hartley Sweeten
Use the
hw_devpointer in thecomedi_devicestruct to hold thepci_devinstead of carrying it in the private data.Since the
pci_devis no longer held in the provate data, we can also cleanup the detach a bit. Remove theIS_ENABLED()tests in the detach. If thepci_devis non NULL it's a PCI device otherwise it's an ISA device. UsingIS_ENABLED()to omit the code paths makes the code a bit confusing and doesn't save much.
Quoted 7 lines
Quoted 2 lines
No, you really need to check
thisboard->bustypein thedetach()becausehw_devmight be NULL for a PCI board if theattach()failed.Actually, your patch wouldn't do any harm as
dev->iobasewould be 0. It would just go through the "failed ISA device" path instead of the "failed PCI device" path. It would be more robust to checkthisboard->bustypethough.
Would this be cleaner:
If (dev->iobase) {
If (pcidev)
comedi_pci_disable(pcidev);
else
release_region(dev->iobase, DIO200_IO_SIZE);
}
If (pcidev)
pci_dev_put(pcidev);Same number of lines but the i/o disable/release and the put of the pcidev would then be distinctly separate.
Regards,
Hartley
���{.n�+�������+%�����ݶ��w��{.n�+����{��G�����{ay�ʇڙ�,j��f���h��������z_�(�階�ݢj"���m������G������?����&���~��iO��z��v�^�m����������?�I�
Quoted 4 lines · Ian Abbott
Quoted 3 lines · H Hartley Sweeten
Use the
hw_devpointer in thecomedi_devicestruct to hold thepci_devinstead of carrying it in the private data.
Quoted 8 lines
Quoted 5 lines
Since the
pci_devis no longer held in the provate data, we can also cleanup the detach a bit. Remove theIS_ENABLED()tests in the detach. If thepci_devis non NULL it's a PCI device otherwise it's an ISA device. UsingIS_ENABLED()to omit the code paths makes the code a bit confusing and doesn't save much.No, you really need to check
thisboard->bustypein thedetach()becausehw_devmight be NULL for a PCI board if theattach()failed.
Ah, overlooked that.
I still think the IS_ENABLED() stuff should be removed where possible. It just looks confusing in the if().
Regards,
Hartley
���{.n�+�������+%�����ݶ��w��{.n�+����{��G�����{ay�ʇڙ�,j��f���h��������z_�(�階�ݢj"���m������G������?����&���~��iO��z��v�^�m����������?�I�