Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7f1ac8c4 authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz
Browse files

rz1000: apply chipset quirks early (v2)



* Use pci_name(dev) instead of hwif->name in init_hwif_rz1000().

* init_hwif_rz1000() -> rz1000_init_chipset().  Update rz1000_init_one()
  to use rz1000_init_chipset() and add now required rz1000_remove().

* Remove superfluous ide_rz1000 chipset type.

v2:
* unsigned int rz1000_init_chipset() -> int rz1000_disable_readahead()
  per Sergei's suggestion.

Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent f58c1ab8
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -46,7 +46,6 @@ static int proc_ide_read_imodel
	case ide_qd65xx:	name = "qd65xx";	break;
	case ide_qd65xx:	name = "qd65xx";	break;
	case ide_umc8672:	name = "umc8672";	break;
	case ide_umc8672:	name = "umc8672";	break;
	case ide_ht6560b:	name = "ht6560b";	break;
	case ide_ht6560b:	name = "ht6560b";	break;
	case ide_rz1000:	name = "rz1000";	break;
	case ide_trm290:	name = "trm290";	break;
	case ide_trm290:	name = "trm290";	break;
	case ide_cy82c693:	name = "cy82c693";	break;
	case ide_cy82c693:	name = "cy82c693";	break;
	case ide_4drives:	name = "4drives";	break;
	case ide_4drives:	name = "4drives";	break;
+25 −11
Original line number Original line Diff line number Diff line
@@ -22,34 +22,48 @@


#define DRV_NAME "rz1000"
#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;
	u16 reg;


	if (!pci_read_config_word (dev, 0x40, &reg) &&
	if (!pci_read_config_word (dev, 0x40, &reg) &&
	    !pci_write_config_word(dev, 0x40, reg & 0xdfff)) {
	    !pci_write_config_word(dev, 0x40, reg & 0xdfff)) {
		printk(KERN_INFO "%s: disabled chipset read-ahead "
		printk(KERN_INFO "%s: disabled chipset read-ahead "
			"(buggy RZ1000/RZ1001)\n", hwif->name);
			"(buggy RZ1000/RZ1001)\n", pci_name(dev));
		return 0;
	} else {
	} 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 "
		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 = {
static const struct ide_port_info rz1000_chipset __devinitdata = {
	.name		= DRV_NAME,
	.name		= DRV_NAME,
	.init_hwif	= init_hwif_rz1000,
	.chipset	= ide_rz1000,
	.host_flags	= IDE_HFLAG_NO_DMA,
	.host_flags	= IDE_HFLAG_NO_DMA,
};
};


static int __devinit rz1000_init_one(struct pci_dev *dev, const struct pci_device_id *id)
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[] = {
static const struct pci_device_id rz1000_pci_tbl[] = {
@@ -63,7 +77,7 @@ static struct pci_driver rz1000_pci_driver = {
	.name		= "RZ1000_IDE",
	.name		= "RZ1000_IDE",
	.id_table	= rz1000_pci_tbl,
	.id_table	= rz1000_pci_tbl,
	.probe		= rz1000_init_one,
	.probe		= rz1000_init_one,
	.remove		= ide_pci_remove,
	.remove		= rz1000_remove,
};
};


static int __init rz1000_ide_init(void)
static int __init rz1000_ide_init(void)
+1 −2
Original line number Original line Diff line number Diff line
@@ -170,8 +170,7 @@ typedef int (ide_ack_intr_t)(struct hwif_s *);
enum {		ide_unknown,	ide_generic,	ide_pci,
enum {		ide_unknown,	ide_generic,	ide_pci,
		ide_cmd640,	ide_dtc2278,	ide_ali14xx,
		ide_cmd640,	ide_dtc2278,	ide_ali14xx,
		ide_qd65xx,	ide_umc8672,	ide_ht6560b,
		ide_qd65xx,	ide_umc8672,	ide_ht6560b,
		ide_rz1000,	ide_trm290,
		ide_trm290,	ide_cy82c693,	ide_4drives,
		ide_cy82c693,	ide_4drives,
		ide_pmac,	ide_acorn,
		ide_pmac,	ide_acorn,
		ide_au1xxx,	ide_palm3710
		ide_au1xxx,	ide_palm3710
};
};