diff options
| -rw-r--r-- | drivers/ide/ide-proc.c | 1 | ||||
| -rw-r--r-- | drivers/ide/rz1000.c | 36 | ||||
| -rw-r--r-- | include/linux/ide.h | 3 | 
3 files changed, 26 insertions, 14 deletions
diff --git a/drivers/ide/ide-proc.c b/drivers/ide/ide-proc.c index e41669eec2c..c2e6b8927bd 100644 --- a/drivers/ide/ide-proc.c +++ b/drivers/ide/ide-proc.c @@ -46,7 +46,6 @@ static int proc_ide_read_imodel  	case ide_qd65xx:	name = "qd65xx";	break;  	case ide_umc8672:	name = "umc8672";	break;  	case ide_ht6560b:	name = "ht6560b";	break; -	case ide_rz1000:	name = "rz1000";	break;  	case ide_trm290:	name = "trm290";	break;  	case ide_cy82c693:	name = "cy82c693";	break;  	case ide_4drives:	name = "4drives";	break; diff --git a/drivers/ide/rz1000.c b/drivers/ide/rz1000.c index 7daf0135cba..a6414a884eb 100644 --- a/drivers/ide/rz1000.c +++ b/drivers/ide/rz1000.c @@ -22,34 +22,48 @@  #define DRV_NAME "rz1000" -static void __devinit init_hwif_rz1000 (ide_hwif_t *hwif) +static int __devinit rz1000_disable_readahead(struct pci_dev *dev)  { -	struct pci_dev *dev = to_pci_dev(hwif->dev);  	u16 reg;  	if (!pci_read_config_word (dev, 0x40, ®) &&  	    !pci_write_config_word(dev, 0x40, reg & 0xdfff)) {  		printk(KERN_INFO "%s: disabled chipset read-ahead " -			"(buggy RZ1000/RZ1001)\n", hwif->name); +			"(buggy RZ1000/RZ1001)\n", pci_name(dev)); +		return 0;  	} else { -		if (hwif->mate) -			hwif->mate->serialized = hwif->serialized = 1; -		hwif->host_flags |= IDE_HFLAG_NO_UNMASK_IRQS;  		printk(KERN_INFO "%s: serialized, disabled unmasking " -			"(buggy RZ1000/RZ1001)\n", hwif->name); +			"(buggy RZ1000/RZ1001)\n", pci_name(dev)); +		return 1;  	}  }  static const struct ide_port_info rz1000_chipset __devinitdata = {  	.name		= DRV_NAME, -	.init_hwif	= init_hwif_rz1000, -	.chipset	= ide_rz1000,  	.host_flags	= IDE_HFLAG_NO_DMA,  };  static int __devinit rz1000_init_one(struct pci_dev *dev, const struct pci_device_id *id)  { -	return ide_pci_init_one(dev, &rz1000_chipset, NULL); +	struct ide_port_info d = rz1000_chipset; +	int rc; + +	rc = pci_enable_device(dev); +	if (rc) +		return rc; + +	if (rz1000_disable_readahead(dev)) { +		d.host_flags |= IDE_HFLAG_SERIALIZE; +		d.host_flags |= IDE_HFLAG_NO_UNMASK_IRQS; +	} + +	return ide_pci_init_one(dev, &d, NULL); +} + +static void rz1000_remove(struct pci_dev *dev) +{ +	ide_pci_remove(dev); +	pci_disable_device(dev);  }  static const struct pci_device_id rz1000_pci_tbl[] = { @@ -63,7 +77,7 @@ static struct pci_driver rz1000_pci_driver = {  	.name		= "RZ1000_IDE",  	.id_table	= rz1000_pci_tbl,  	.probe		= rz1000_init_one, -	.remove		= ide_pci_remove, +	.remove		= rz1000_remove,  };  static int __init rz1000_ide_init(void) diff --git a/include/linux/ide.h b/include/linux/ide.h index 1d28006aec6..fc1a966c7b7 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h @@ -170,8 +170,7 @@ typedef int (ide_ack_intr_t)(struct hwif_s *);  enum {		ide_unknown,	ide_generic,	ide_pci,  		ide_cmd640,	ide_dtc2278,	ide_ali14xx,  		ide_qd65xx,	ide_umc8672,	ide_ht6560b, -		ide_rz1000,	ide_trm290, -		ide_cy82c693,	ide_4drives, +		ide_trm290,	ide_cy82c693,	ide_4drives,  		ide_pmac,	ide_acorn,  		ide_au1xxx,	ide_palm3710  };  |