Re: [PATCH-3.4.y-3.5.y] staging: comedi: cb_pcidio: fix for newer PCI-DIO48H

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jan 20, 2014 at 04:32:43PM +0000, Ian Abbott wrote:
> based on upstream commit 0283f7a100882684ad32b768f9f1ad81658a0b92
> 
> At some point, Measurement Computing / ComputerBoards redesigned the
> PCI-DIO48H to use a PLX PCI interface chip instead of an AMCC chip.
> This meant they had to put their hardware registers in the PCI BAR 2
> region instead of PCI BAR 1.  Unfortunately, they kept the same PCI
> device ID for the new design.  This means the driver recognizes the
> newer cards, but doesn't work (and is likely to screw up the local
> configuration registers of the PLX chip) because it's using the wrong
> region.
> 
> Since all the supported boards have the DIO registers in the PCI BAR 2
> region except for older PCI-DIO48H boards which have an empty PCI BAR 2
> region and the DIO registers in PCI BAR 1, determine which PCI BAR
> region to use based on whether the PCI BAR 2 region is empty or not.
> 
> This change makes the `dioregs_badrindex` member of `struct
> pcidio_board` redundant.  The `pcicontroler_badrindex` member is also
> unused, so remove both members.
> 
> Signed-off-by: Ian Abbott <abbotti@xxxxxxxxx>
> Cc: kernel-team@xxxxxxxxxxxxxxxx
> ---
> Applies to 3.4.y and 3.5.y (Ubuntu Extended Stable).
> 
> Note that other changes make this patch somewhat different to the
> upstream commit, but it fixes the same problem.

Thanks Ian, I'll queue this for the 3.5 kernel.

Cheers,
--
Luis


> ---
>  drivers/staging/comedi/drivers/cb_pcidio.c | 21 ++++++++-------------
>  1 file changed, 8 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/staging/comedi/drivers/cb_pcidio.c b/drivers/staging/comedi/drivers/cb_pcidio.c
> index 8f32152..453ea2d 100644
> --- a/drivers/staging/comedi/drivers/cb_pcidio.c
> +++ b/drivers/staging/comedi/drivers/cb_pcidio.c
> @@ -56,10 +56,6 @@ struct pcidio_board {
>  	const char *name;	/*  name of the board */
>  	int dev_id;
>  	int n_8255;		/*  number of 8255 chips on board */
> -
> -	/*  indices of base address regions */
> -	int pcicontroler_badrindex;
> -	int dioregs_badrindex;
>  };
>  
>  static const struct pcidio_board pcidio_boards[] = {
> @@ -67,22 +63,16 @@ static const struct pcidio_board pcidio_boards[] = {
>  	 .name = "pci-dio24",
>  	 .dev_id = 0x0028,
>  	 .n_8255 = 1,
> -	 .pcicontroler_badrindex = 1,
> -	 .dioregs_badrindex = 2,
>  	 },
>  	{
>  	 .name = "pci-dio24h",
>  	 .dev_id = 0x0014,
>  	 .n_8255 = 1,
> -	 .pcicontroler_badrindex = 1,
> -	 .dioregs_badrindex = 2,
>  	 },
>  	{
>  	 .name = "pci-dio48h",
>  	 .dev_id = 0x000b,
>  	 .n_8255 = 2,
> -	 .pcicontroler_badrindex = 0,
> -	 .dioregs_badrindex = 1,
>  	 },
>  };
>  
> @@ -239,10 +229,15 @@ found:
>  	if (comedi_pci_enable(pcidev, thisboard->name))
>  		return -EIO;
>  
> -	devpriv->dio_reg_base
> -	    =
> +	/*
> +	 * Use PCI BAR 2 region if non-zero length, else use PCI BAR 1 region.
> +	 * PCI BAR 1 is only used for older PCI-DIO48H boards.  At some point
> +	 * the PCI-DIO48H was redesigned to use the same PCI interface chip
> +	 * (and same PCI BAR region) as the other boards.
> +	 */
> +	devpriv->dio_reg_base =
>  	    pci_resource_start(devpriv->pci_dev,
> -			       pcidio_boards[index].dioregs_badrindex);
> +			       (pci_resource_len(pcidev, 2) ? 2 : 1));
>  
>  /*
>   * Allocate the subdevice structures.  alloc_subdevice() is a
> -- 
> 1.8.5.3
> 
> --
> To unsubscribe from this list: send the line "unsubscribe stable" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]