diff options
| -rw-r--r-- | drivers/ide/pci/it821x.c | 28 | 
1 files changed, 13 insertions, 15 deletions
| diff --git a/drivers/ide/pci/it821x.c b/drivers/ide/pci/it821x.c index 40186f9e56a..e63fdafe18f 100644 --- a/drivers/ide/pci/it821x.c +++ b/drivers/ide/pci/it821x.c @@ -534,8 +534,9 @@ static struct ide_dma_ops it821x_pass_through_dma_ops = {  static void __devinit init_hwif_it821x(ide_hwif_t *hwif)  {  	struct pci_dev *dev = to_pci_dev(hwif->dev); -	struct it821x_dev **itdevs = (struct it821x_dev **)pci_get_drvdata(dev); -	struct it821x_dev *idev = itdevs[hwif->channel]; +	struct ide_host *host = pci_get_drvdata(dev); +	struct it821x_dev *itdevs = host->host_priv; +	struct it821x_dev *idev = itdevs + hwif->channel;  	u8 conf;  	ide_set_hwifdata(hwif, idev); @@ -648,23 +649,20 @@ static const struct ide_port_info it821x_chipsets[] __devinitdata = {  static int __devinit it821x_init_one(struct pci_dev *dev, const struct pci_device_id *id)  { -	struct it821x_dev *itdevs[2] = { NULL, NULL} , *itdev; -	unsigned int i; - -	for (i = 0; i < 2; i++) { -		itdev = kzalloc(sizeof(*itdev), GFP_KERNEL); -		if (itdev == NULL) { -			kfree(itdevs[0]); -			printk(KERN_ERR "it821x: out of memory\n"); -			return -ENOMEM; -		} +	struct it821x_dev *itdevs; +	int rc; -		itdevs[i] = itdev; +	itdevs = kzalloc(2 * sizeof(*itdevs), GFP_KERNEL); +	if (itdevs == NULL) { +		printk(KERN_ERR "it821x: out of memory\n"); +		return -ENOMEM;  	} -	pci_set_drvdata(dev, itdevs); +	rc = ide_pci_init_one(dev, &it821x_chipsets[id->driver_data], itdevs); +	if (rc) +		kfree(itdevs); -	return ide_pci_init_one(dev, &it821x_chipsets[id->driver_data], NULL); +	return rc;  }  static const struct pci_device_id it821x_pci_tbl[] = { | 
