diff options
Diffstat (limited to 'drivers/s390/char/con3215.c')
| -rw-r--r-- | drivers/s390/char/con3215.c | 8 | 
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c index 40084501c31..33b7141a182 100644 --- a/drivers/s390/char/con3215.c +++ b/drivers/s390/char/con3215.c @@ -44,6 +44,7 @@  #define RAW3215_NR_CCWS	    3  #define RAW3215_TIMEOUT	    HZ/10     /* time for delayed output */ +#define RAW3215_FIXED	    1	      /* 3215 console device is not be freed */  #define RAW3215_WORKING	    4	      /* set if a request is being worked on */  #define RAW3215_THROTTLED   8	      /* set if reading is disabled */  #define RAW3215_STOPPED	    16	      /* set if writing is disabled */ @@ -630,7 +631,8 @@ static void raw3215_shutdown(struct raw3215_info *raw)  	DECLARE_WAITQUEUE(wait, current);  	unsigned long flags; -	if (!(raw->port.flags & ASYNC_INITIALIZED)) +	if (!(raw->port.flags & ASYNC_INITIALIZED) || +	    (raw->flags & RAW3215_FIXED))  		return;  	/* Wait for outstanding requests, then free irq */  	spin_lock_irqsave(get_ccwdev_lock(raw->cdev), flags); @@ -805,7 +807,7 @@ static struct ccw_driver raw3215_ccw_driver = {  	.freeze		= &raw3215_pm_stop,  	.thaw		= &raw3215_pm_start,  	.restore	= &raw3215_pm_start, -	.int_class	= IOINT_C15, +	.int_class	= IRQIO_C15,  };  #ifdef CONFIG_TN3215_CONSOLE @@ -927,6 +929,8 @@ static int __init con3215_init(void)  	dev_set_drvdata(&cdev->dev, raw);  	cdev->handler = raw3215_irq; +	raw->flags |= RAW3215_FIXED; +  	/* Request the console irq */  	if (raw3215_startup(raw) != 0) {  		raw3215_free_info(raw);  |