diff options
Diffstat (limited to 'drivers/cdrom/gdrom.c')
| -rw-r--r-- | drivers/cdrom/gdrom.c | 46 | 
1 files changed, 24 insertions, 22 deletions
diff --git a/drivers/cdrom/gdrom.c b/drivers/cdrom/gdrom.c index de65915308f..584bc312640 100644 --- a/drivers/cdrom/gdrom.c +++ b/drivers/cdrom/gdrom.c @@ -395,10 +395,12 @@ static int gdrom_drivestatus(struct cdrom_device_info *cd_info, int ignore)  	return CDS_NO_INFO;  } -static int gdrom_mediachanged(struct cdrom_device_info *cd_info, int ignore) +static unsigned int gdrom_check_events(struct cdrom_device_info *cd_info, +				       unsigned int clearing, int ignore)  {  	/* check the sense key */ -	return (__raw_readb(GDROM_ERROR_REG) & 0xF0) == 0x60; +	return (__raw_readb(GDROM_ERROR_REG) & 0xF0) == 0x60 ? +		DISK_EVENT_MEDIA_CHANGE : 0;  }  /* reset the G1 bus */ @@ -483,7 +485,7 @@ static struct cdrom_device_ops gdrom_ops = {  	.open			= gdrom_open,  	.release		= gdrom_release,  	.drive_status		= gdrom_drivestatus, -	.media_changed		= gdrom_mediachanged, +	.check_events		= gdrom_check_events,  	.get_last_session	= gdrom_get_last_session,  	.reset			= gdrom_hardreset,  	.audio_ioctl		= gdrom_audio_ioctl, @@ -501,17 +503,17 @@ static int gdrom_bdops_open(struct block_device *bdev, fmode_t mode)  	return ret;  } -static int gdrom_bdops_release(struct gendisk *disk, fmode_t mode) +static void gdrom_bdops_release(struct gendisk *disk, fmode_t mode)  {  	mutex_lock(&gdrom_mutex);  	cdrom_release(gd.cd_info, mode);  	mutex_unlock(&gdrom_mutex); -	return 0;  } -static int gdrom_bdops_mediachanged(struct gendisk *disk) +static unsigned int gdrom_bdops_check_events(struct gendisk *disk, +					     unsigned int clearing)  { -	return cdrom_media_changed(gd.cd_info); +	return cdrom_check_events(gd.cd_info, clearing);  }  static int gdrom_bdops_ioctl(struct block_device *bdev, fmode_t mode, @@ -530,7 +532,7 @@ static const struct block_device_operations gdrom_bdops = {  	.owner			= THIS_MODULE,  	.open			= gdrom_bdops_open,  	.release		= gdrom_bdops_release, -	.media_changed		= gdrom_bdops_mediachanged, +	.check_events		= gdrom_bdops_check_events,  	.ioctl			= gdrom_bdops_ioctl,  }; @@ -554,16 +556,16 @@ static irqreturn_t gdrom_dma_interrupt(int irq, void *dev_id)  	return IRQ_HANDLED;  } -static int __devinit gdrom_set_interrupt_handlers(void) +static int gdrom_set_interrupt_handlers(void)  {  	int err;  	err = request_irq(HW_EVENT_GDROM_CMD, gdrom_command_interrupt, -		IRQF_DISABLED, "gdrom_command", &gd); +		0, "gdrom_command", &gd);  	if (err)  		return err;  	err = request_irq(HW_EVENT_GDROM_DMA, gdrom_dma_interrupt, -		IRQF_DISABLED, "gdrom_dma", &gd); +		0, "gdrom_dma", &gd);  	if (err)  		free_irq(HW_EVENT_GDROM_CMD, &gd);  	return err; @@ -600,7 +602,7 @@ static void gdrom_readdisk_dma(struct work_struct *work)  		spin_unlock(&gdrom_lock);  		block = blk_rq_pos(req)/GD_TO_BLK + GD_SESSION_OFFSET;  		block_cnt = blk_rq_sectors(req)/GD_TO_BLK; -		__raw_writel(virt_to_phys(req->buffer), GDROM_DMA_STARTADDR_REG); +		__raw_writel(virt_to_phys(bio_data(req->bio)), GDROM_DMA_STARTADDR_REG);  		__raw_writel(block_cnt * GDROM_HARD_SECTOR, GDROM_DMA_LENGTH_REG);  		__raw_writel(1, GDROM_DMA_DIRECTION_REG);  		__raw_writel(1, GDROM_DMA_ENABLE_REG); @@ -678,7 +680,7 @@ static void gdrom_request(struct request_queue *rq)  }  /* Print string identifying GD ROM device */ -static int __devinit gdrom_outputversion(void) +static int gdrom_outputversion(void)  {  	struct gdrom_id *id;  	char *model_name, *manuf_name, *firmw_ver; @@ -712,7 +714,7 @@ free_id:  }  /* set the default mode for DMA transfer */ -static int __devinit gdrom_init_dma_mode(void) +static int gdrom_init_dma_mode(void)  {  	__raw_writeb(0x13, GDROM_ERROR_REG);  	__raw_writeb(0x22, GDROM_INTSEC_REG); @@ -733,7 +735,7 @@ static int __devinit gdrom_init_dma_mode(void)  	return 0;  } -static void __devinit probe_gdrom_setupcd(void) +static void probe_gdrom_setupcd(void)  {  	gd.cd_info->ops = &gdrom_ops;  	gd.cd_info->capacity = 1; @@ -742,7 +744,7 @@ static void __devinit probe_gdrom_setupcd(void)  		CDC_SELECT_DISC;  } -static void __devinit probe_gdrom_setupdisk(void) +static void probe_gdrom_setupdisk(void)  {  	gd.disk->major = gdrom_major;  	gd.disk->first_minor = 1; @@ -750,7 +752,7 @@ static void __devinit probe_gdrom_setupdisk(void)  	strcpy(gd.disk->disk_name, GDROM_DEV_NAME);  } -static int __devinit probe_gdrom_setupqueue(void) +static int probe_gdrom_setupqueue(void)  {  	blk_queue_logical_block_size(gd.gdrom_rq, GDROM_HARD_SECTOR);  	/* using DMA so memory will need to be contiguous */ @@ -765,7 +767,7 @@ static int __devinit probe_gdrom_setupqueue(void)   * register this as a block device and as compliant with the   * universal CD Rom driver interface   */ -static int __devinit probe_gdrom(struct platform_device *devptr) +static int probe_gdrom(struct platform_device *devptr)  {  	int err;  	/* Start the device */ @@ -828,16 +830,16 @@ probe_fail_cdrom_register:  	del_gendisk(gd.disk);  probe_fail_no_disk:  	kfree(gd.cd_info); +probe_fail_no_mem:  	unregister_blkdev(gdrom_major, GDROM_DEV_NAME);  	gdrom_major = 0; -probe_fail_no_mem:  	pr_warning("Probe failed - error is 0x%X\n", err);  	return err;  } -static int __devexit remove_gdrom(struct platform_device *devptr) +static int remove_gdrom(struct platform_device *devptr)  { -	flush_scheduled_work(); +	flush_work(&work);  	blk_cleanup_queue(gd.gdrom_rq);  	free_irq(HW_EVENT_GDROM_CMD, &gd);  	free_irq(HW_EVENT_GDROM_DMA, &gd); @@ -851,7 +853,7 @@ static int __devexit remove_gdrom(struct platform_device *devptr)  static struct platform_driver gdrom_driver = {  	.probe = probe_gdrom, -	.remove = __devexit_p(remove_gdrom), +	.remove = remove_gdrom,  	.driver = {  			.name = GDROM_DEV_NAME,  	},  | 
