staging: comedi: add pci_dev pointer to comedi_device
PATCH 1/30 staging: comedi: add pci_dev pointer to comedi_device
The pci_dev pointer in the private driver data is used by every comedi pci driver. Some of them only have the need for the private data because of this pointer.
Introduce the pci_dev pointer in the comedi_device struct so it can be used instead of needing it in the private data.
--- drivers/staging/comedi/comedidev.h | 2 ++ 1 file changed, 2 insertions(+)
drivers/staging/comedi/comedidev.h +2 -0
@@ -212,6 +212,8 @@ struct comedi_device {* DMA_NONE */ struct device *hw_dev; +struct pci_dev *pcidev; +const char *board_name;const void *board_ptr;int attached;
Signature · 1 line
1.7.11
Greg KH
maintainerQuoted 19 lines · H Hartley Sweeten
The
pci_devpointer in the private driver data is used by every comedi pci driver. Some of them only have the need for the private data because of this pointer.Introduce the
pci_devpointer in thecomedi_devicestruct so it can be used instead of needing it in the private data.Signed-off-by H Hartley Sweeten <[email protected]>Cc Ian Abbott <[email protected]>Cc Greg Kroah-Hartman <[email protected]>--- drivers/staging/comedi/comedidev.h | 2 ++ 1 file changed, 2 insertions(+)drivers/staging/comedi/comedidev.h +0
-0
drivers/staging/comedi/comedidev.h struct comedi_device { · line 215
Quoted 4 lines
drivers/staging/comedi/comedidev.h +1
-0@@ -212,6 +212,8 @@ struct comedi_device {* DMA_NONE */ struct device *hw_dev; +struct pci_dev *pcidev;
No, the field above this, hw_dev, should be used instead here, as that's what it is there for, right?
Care to rework this series with that change instead?
thanks,
greg k-h
Quoted 23 lines · Greg KH
Quoted 22 lines · H Hartley Sweeten
The
pci_devpointer in the private driver data is used by every comedi pci driver. Some of them only have the need for the private data because of this pointer.Introduce the
pci_devpointer in thecomedi_devicestruct so it can be used instead of needing it in the private data.Signed-off-by H Hartley Sweeten <[email protected]>Cc Ian Abbott <[email protected]>Cc Greg Kroah-Hartman <[email protected]>--- drivers/staging/comedi/comedidev.h | 2 ++ 1 file changed, 2 insertions(+)drivers/staging/comedi/comedidev.h +0
-0@@ -212,6 +212,8 @@ struct comedi_device {* DMA_NONE */ struct device *hw_dev;
Quoted 4 lines
drivers/staging/comedi/comedidev.h struct comedi_device { · line 215
Quoted 1 line
drivers/staging/comedi/comedidev.h +1
-0+struct pci_dev *pcidev;No, the field above this,
hw_dev, should be used instead here, as that's what it is there for, right?
The hw_dev pointer is currently only used for something dealing with dma. I have not dug into it yet to see what exactly it's used for. The comment says:
/* hw_dev is passed to dma_alloc_coherent when allocating async buffers
* for subdevices that have async_dma_dir set to something other than
* DMA_NONE */
Quoted 1 line
Care to rework this series with that change instead?
It could probably be used with some sort of container_of but I'm not sure.
Regards,
Hartley
Greg KH
maintainerQuoted 29 lines · H Hartley Sweeten
Quoted 23 lines · Greg KH
Quoted 22 lines · H Hartley Sweeten
The
pci_devpointer in the private driver data is used by every comedi pci driver. Some of them only have the need for the private data because of this pointer.Introduce the
pci_devpointer in thecomedi_devicestruct so it can be used instead of needing it in the private data.Signed-off-by H Hartley Sweeten <[email protected]>Cc Ian Abbott <[email protected]>Cc Greg Kroah-Hartman <[email protected]>--- drivers/staging/comedi/comedidev.h | 2 ++ 1 file changed, 2 insertions(+)drivers/staging/comedi/comedidev.h +0
-0@@ -212,6 +212,8 @@ struct comedi_device {* DMA_NONE */ struct device *hw_dev;Quoted 4 lines
drivers/staging/comedi/comedidev.h struct comedi_device { · line 215
Quoted 1 line
drivers/staging/comedi/comedidev.h +1
-0+struct pci_dev *pcidev;No, the field above this,
hw_dev, should be used instead here, as that's what it is there for, right?
Quoted 7 lines
The
hw_devpointer is currently only used for something dealing with dma. I have not dug into it yet to see what exactly it's used for. The comment says:/*
hw_devis passed todma_alloc_coherentwhen allocating async buffers
* for subdevices that haveasync_dma_dirset to something other than
*DMA_NONE*/
Which is exactly what the pci device should be used for, it knows this information :)
Quoted 3 lines
Quoted 1 line
Care to rework this series with that change instead?
It could probably be used with some sort of
container_ofbut I'm not sure.
Yes it can.
To set the field:
hw_dev = &pci_dev->dev;
to get it back:
pci_dev = container_of(hw_dev, struct pci_device, struct device);
I think. That's off the top of my head, please try it out first.
And use a macro for the container_of stuff, that makes it easier to understand.
thanks,
greg k-h
Quoted 26 lines · Greg KH
Quoted 11 lines · H Hartley Sweeten
Quoted 2 lines · Greg KH
No, the field above this,
hw_dev, should be used instead here, as that's what it is there for, right?The
hw_devpointer is currently only used for something dealing with dma. I have not dug into it yet to see what exactly it's used for. The comment says:/*
hw_devis passed todma_alloc_coherentwhen allocating async buffers
* for subdevices that haveasync_dma_dirset to something other than
*DMA_NONE*/Which is exactly what the pci device should be used for, it knows this information :)
Quoted 3 lines
Quoted 1 line
Care to rework this series with that change instead?
It could probably be used with some sort of
container_ofbut I'm not sure.Yes it can.
To set the field:
hw_dev = &pci_dev->dev;
Quoted 7 lines
to get it back:
pci_dev = container_of(hw_dev, struct pci_device, struct device);I think. That's off the top of my head, please try it out first.
And use a macro for the
container_ofstuff, that makes it easier to understand.
Greg,
I'm posting a patch to the adl_pci6208 driver right now. It compiles fine but could you look it over and see if it looks right.
Thanks,
Hartley