[ added Linus to Cc: ] On Monday 24 December 2007, Bartlomiej Zolnierkiewicz wrote: > > cmd64x regression bugfix, few obvious ide-cd fixes from the "redux" patch > peries and ide-cd MAINTAINERS entry update (Borislav, welcome on board!). > > Oh yes, I would forget... > > Merry Christmas! Well, I forgot to send this to Linus instead... :-) > Linus, please pull from: > > master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6.git/ > > to receive the following updates: > > MAINTAINERS | 4 ++- > drivers/ide/ide-cd.c | 66 +++++++++++++++++++++++---------------------- > drivers/ide/ide-cd.h | 3 +- > drivers/ide/pci/cmd64x.c | 4 +- > drivers/ide/pci/cs5535.c | 2 +- > 5 files changed, 42 insertions(+), 37 deletions(-) > > > Bartlomiej Zolnierkiewicz (10): > ide-cd: fix SAMSUNG CD-ROM SCR-3231 quirk > ide-cd: fix ACER/AOpen 24X CDROM speed reporting on big-endian machines > ide-cd: use ide_cd_release() in ide_cd_probe() > ide-cd: fix error messages in cdrom_{read,write}_check_ireason() > ide-cd: add missing 'ireason' masking to cdrom_write_intr() > ide-cd: fix error messages in cdrom_write_intr() > ide-cd: add error message for DMA error to cdrom_read_intr() > ide-cd: fix error message in cdrom_pc_intr() > ide-cd: fix 'ireason' reporting in cdrom_pc_intr() > cmd64x: fix hwif->chipset setup > > Borislav Petkov (1): > MAINTAINERS: update ide-cd entry > > Joe Perches (1): > drivers/ide/: Spelling fixes > > > diff --git a/MAINTAINERS b/MAINTAINERS > index 3d567fd..79c711e 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -1870,8 +1870,10 @@ T: quilt kernel.org/pub/linux/kernel/people/bart/pata-2.6/ > S: Maintained > > IDE/ATAPI CDROM DRIVER > +P: Borislav Petkov > +M: bbpetkov@xxxxxxxx > L: linux-ide@xxxxxxxxxxxxxxx > -S: Unmaintained > +S: Maintained > > IDE/ATAPI FLOPPY DRIVERS > P: Paul Bristow > diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c > index 92ac658..c7d77f0 100644 > --- a/drivers/ide/ide-cd.c > +++ b/drivers/ide/ide-cd.c > @@ -1068,8 +1068,8 @@ int cdrom_read_check_ireason (ide_drive_t *drive, int len, int ireason) > return 0; > else if (ireason == 0) { > /* Whoops... The drive is expecting to receive data from us! */ > - printk(KERN_ERR "%s: read_intr: Drive wants to transfer data the " > - "wrong way!\n", drive->name); > + printk(KERN_ERR "%s: %s: wrong transfer direction!\n", > + drive->name, __FUNCTION__); > > /* Throw some data at the drive so it doesn't hang > and quit this request. */ > @@ -1086,8 +1086,8 @@ int cdrom_read_check_ireason (ide_drive_t *drive, int len, int ireason) > return 0; > } else { > /* Drive wants a command packet, or invalid ireason... */ > - printk(KERN_ERR "%s: read_intr: bad interrupt reason %x\n", drive->name, > - ireason); > + printk(KERN_ERR "%s: %s: bad interrupt reason 0x%02x\n", > + drive->name, __FUNCTION__, ireason); > } > > cdrom_end_request(drive, 0); > @@ -1112,8 +1112,11 @@ static ide_startstop_t cdrom_read_intr (ide_drive_t *drive) > */ > if (dma) { > info->dma = 0; > - if ((dma_error = HWIF(drive)->ide_dma_end(drive))) > + dma_error = HWIF(drive)->ide_dma_end(drive); > + if (dma_error) { > + printk(KERN_ERR "%s: DMA read error\n", drive->name); > ide_dma_off(drive); > + } > } > > if (cdrom_decode_status(drive, 0, &stat)) > @@ -1443,7 +1446,7 @@ static ide_startstop_t cdrom_pc_intr (ide_drive_t *drive) > return ide_stopped; > > /* Read the interrupt reason and the transfer length. */ > - ireason = HWIF(drive)->INB(IDE_IREASON_REG); > + ireason = HWIF(drive)->INB(IDE_IREASON_REG) & 0x3; > lowcyl = HWIF(drive)->INB(IDE_BCOUNTL_REG); > highcyl = HWIF(drive)->INB(IDE_BCOUNTH_REG); > > @@ -1484,7 +1487,7 @@ static ide_startstop_t cdrom_pc_intr (ide_drive_t *drive) > if (thislen > len) thislen = len; > > /* The drive wants to be written to. */ > - if ((ireason & 3) == 0) { > + if (ireason == 0) { > if (!rq->data) { > blk_dump_rq_flags(rq, "cdrom_pc_intr, write"); > goto confused; > @@ -1506,9 +1509,9 @@ static ide_startstop_t cdrom_pc_intr (ide_drive_t *drive) > } > > /* Same drill for reading. */ > - else if ((ireason & 3) == 2) { > + else if (ireason == 2) { > if (!rq->data) { > - blk_dump_rq_flags(rq, "cdrom_pc_intr, write"); > + blk_dump_rq_flags(rq, "cdrom_pc_intr, read"); > goto confused; > } > /* Transfer the data. */ > @@ -1632,8 +1635,8 @@ static int cdrom_write_check_ireason(ide_drive_t *drive, int len, int ireason) > return 0; > else if (ireason == 2) { > /* Whoops... The drive wants to send data. */ > - printk(KERN_ERR "%s: write_intr: wrong transfer direction!\n", > - drive->name); > + printk(KERN_ERR "%s: %s: wrong transfer direction!\n", > + drive->name, __FUNCTION__); > > while (len > 0) { > int dum = 0; > @@ -1642,8 +1645,8 @@ static int cdrom_write_check_ireason(ide_drive_t *drive, int len, int ireason) > } > } else { > /* Drive wants a command packet, or invalid ireason... */ > - printk(KERN_ERR "%s: write_intr: bad interrupt reason %x\n", > - drive->name, ireason); > + printk(KERN_ERR "%s: %s: bad interrupt reason 0x%02x\n", > + drive->name, __FUNCTION__, ireason); > } > > cdrom_end_request(drive, 0); > @@ -1805,8 +1808,9 @@ static ide_startstop_t cdrom_write_intr(ide_drive_t *drive) > /* Check for errors. */ > if (dma) { > info->dma = 0; > - if ((dma_error = HWIF(drive)->ide_dma_end(drive))) { > - printk(KERN_ERR "ide-cd: write dma error\n"); > + dma_error = HWIF(drive)->ide_dma_end(drive); > + if (dma_error) { > + printk(KERN_ERR "%s: DMA write error\n", drive->name); > ide_dma_off(drive); > } > } > @@ -1826,7 +1830,7 @@ static ide_startstop_t cdrom_write_intr(ide_drive_t *drive) > } > > /* Read the interrupt reason and the transfer length. */ > - ireason = HWIF(drive)->INB(IDE_IREASON_REG); > + ireason = HWIF(drive)->INB(IDE_IREASON_REG) & 0x3; > lowcyl = HWIF(drive)->INB(IDE_BCOUNTL_REG); > highcyl = HWIF(drive)->INB(IDE_BCOUNTH_REG); > > @@ -1839,8 +1843,9 @@ static ide_startstop_t cdrom_write_intr(ide_drive_t *drive) > */ > uptodate = 1; > if (rq->current_nr_sectors > 0) { > - printk(KERN_ERR "%s: write_intr: data underrun (%d blocks)\n", > - drive->name, rq->current_nr_sectors); > + printk(KERN_ERR "%s: %s: data underrun (%d blocks)\n", > + drive->name, __FUNCTION__, > + rq->current_nr_sectors); > uptodate = 0; > } > cdrom_end_request(drive, uptodate); > @@ -1860,7 +1865,8 @@ static ide_startstop_t cdrom_write_intr(ide_drive_t *drive) > int this_transfer; > > if (!rq->current_nr_sectors) { > - printk(KERN_ERR "ide-cd: write_intr: oops\n"); > + printk(KERN_ERR "%s: %s: confused, missing data\n", > + drive->name, __FUNCTION__); > break; > } > > @@ -2688,14 +2694,14 @@ void ide_cdrom_update_speed (ide_drive_t *drive, struct atapi_capabilities_page > if (!drive->id->model[0] && > !strncmp(drive->id->fw_rev, "241N", 4)) { > CDROM_STATE_FLAGS(drive)->current_speed = > - (((unsigned int)cap->curspeed) + (176/2)) / 176; > + (le16_to_cpu(cap->curspeed) + (176/2)) / 176; > CDROM_CONFIG_FLAGS(drive)->max_speed = > - (((unsigned int)cap->maxspeed) + (176/2)) / 176; > + (le16_to_cpu(cap->maxspeed) + (176/2)) / 176; > } else { > CDROM_STATE_FLAGS(drive)->current_speed = > - (ntohs(cap->curspeed) + (176/2)) / 176; > + (be16_to_cpu(cap->curspeed) + (176/2)) / 176; > CDROM_CONFIG_FLAGS(drive)->max_speed = > - (ntohs(cap->maxspeed) + (176/2)) / 176; > + (be16_to_cpu(cap->maxspeed) + (176/2)) / 176; > } > } > > @@ -2909,6 +2915,9 @@ static int ide_cdrom_register (ide_drive_t *drive, int nslots) > if (!CDROM_CONFIG_FLAGS(drive)->ram) > devinfo->mask |= CDC_RAM; > > + if (CDROM_CONFIG_FLAGS(drive)->no_speed_select) > + devinfo->mask |= CDC_SELECT_SPEED; > + > devinfo->disk = info->disk; > return register_cdrom(devinfo); > } > @@ -3161,7 +3170,7 @@ int ide_cdrom_setup (ide_drive_t *drive) > CDROM_CONFIG_FLAGS(drive)->limit_nframes = 1; > /* the 3231 model does not support the SET_CD_SPEED command */ > else if (!strcmp(drive->id->model, "SAMSUNG CD-ROM SCR-3231")) > - cdi->mask |= CDC_SELECT_SPEED; > + CDROM_CONFIG_FLAGS(drive)->no_speed_select = 1; > > #if ! STANDARD_ATAPI > /* by default Sanyo 3 CD changer support is turned off and > @@ -3504,15 +3513,8 @@ static int ide_cd_probe(ide_drive_t *drive) > g->driverfs_dev = &drive->gendev; > g->flags = GENHD_FL_CD | GENHD_FL_REMOVABLE; > if (ide_cdrom_setup(drive)) { > - struct cdrom_device_info *devinfo = &info->devinfo; > ide_proc_unregister_driver(drive, &ide_cdrom_driver); > - kfree(info->buffer); > - kfree(info->toc); > - kfree(info->changer_info); > - if (devinfo->handle == drive && unregister_cdrom(devinfo)) > - printk (KERN_ERR "%s: ide_cdrom_cleanup failed to unregister device from the cdrom > driver.\n", drive->name); > - kfree(info); > - drive->driver_data = NULL; > + ide_cd_release(&info->kref); > goto failed; > } > > diff --git a/drivers/ide/ide-cd.h b/drivers/ide/ide-cd.h > index 228b29c..1b302fe 100644 > --- a/drivers/ide/ide-cd.h > +++ b/drivers/ide/ide-cd.h > @@ -91,7 +91,8 @@ struct ide_cd_config_flags { > __u8 close_tray : 1; /* can close the tray */ > __u8 writing : 1; /* pseudo write in progress */ > __u8 mo_drive : 1; /* drive is an MO device */ > - __u8 reserved : 2; > + __u8 no_speed_select : 1; /* SET_CD_SPEED command is unsupported. */ > + __u8 reserved : 1; > byte max_speed; /* Max speed of the drive */ > }; > #define CDROM_CONFIG_FLAGS(drive) (&(((struct cdrom_info *)(drive->driver_data))->config_flags)) > diff --git a/drivers/ide/pci/cmd64x.c b/drivers/ide/pci/cmd64x.c > index 51fca44..bc55333 100644 > --- a/drivers/ide/pci/cmd64x.c > +++ b/drivers/ide/pci/cmd64x.c > @@ -1,5 +1,5 @@ > /* > - * linux/drivers/ide/pci/cmd64x.c Version 1.51 Nov 8, 2007 > + * linux/drivers/ide/pci/cmd64x.c Version 1.52 Dec 24, 2007 > * > * cmd64x.c: Enable interrupts at initialization time on Ultra/PCI machines. > * Due to massive hardware bugs, UltraDMA is only supported > @@ -564,6 +564,7 @@ static const struct ide_port_info cmd64x_chipsets[] __devinitdata = { > .init_chipset = init_chipset_cmd64x, > .init_hwif = init_hwif_cmd64x, > .enablebits = {{0x51,0x04,0x04}, {0x51,0x08,0x08}}, > + .chipset = ide_cmd646, > .host_flags = IDE_HFLAG_ABUSE_PREFETCH | IDE_HFLAG_BOOTABLE, > .pio_mask = ATA_PIO5, > .mwdma_mask = ATA_MWDMA2, > @@ -573,7 +574,6 @@ static const struct ide_port_info cmd64x_chipsets[] __devinitdata = { > .init_chipset = init_chipset_cmd64x, > .init_hwif = init_hwif_cmd64x, > .enablebits = {{0x51,0x04,0x04}, {0x51,0x08,0x08}}, > - .chipset = ide_cmd646, > .host_flags = IDE_HFLAG_ABUSE_PREFETCH | IDE_HFLAG_BOOTABLE, > .pio_mask = ATA_PIO5, > .mwdma_mask = ATA_MWDMA2, > diff --git a/drivers/ide/pci/cs5535.c b/drivers/ide/pci/cs5535.c > index 9094916..ddcbeba 100644 > --- a/drivers/ide/pci/cs5535.c > +++ b/drivers/ide/pci/cs5535.c > @@ -49,7 +49,7 @@ > #define ATAC_BM0_PRD 0x04 > #define CS5535_CABLE_DETECT 0x48 > > -/* Format I PIO settings. We seperate out cmd and data for safer timings */ > +/* Format I PIO settings. We separate out cmd and data for safer timings */ > > static unsigned int cs5535_pio_cmd_timings[5] = > { 0xF7F4, 0x53F3, 0x13F1, 0x5131, 0x1131 }; - To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html