diff options
Diffstat (limited to 'drivers/char/pcmcia/synclink_cs.c')
-rw-r--r-- | drivers/char/pcmcia/synclink_cs.c | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c index a6cbd3239921..7b1e055184d1 100644 --- a/drivers/char/pcmcia/synclink_cs.c +++ b/drivers/char/pcmcia/synclink_cs.c | |||
@@ -228,7 +228,7 @@ typedef struct _mgslpc_info { | |||
228 | struct _input_signal_events input_signal_events; | 228 | struct _input_signal_events input_signal_events; |
229 | 229 | ||
230 | /* PCMCIA support */ | 230 | /* PCMCIA support */ |
231 | dev_link_t link; | 231 | struct pcmcia_device *p_dev; |
232 | dev_node_t node; | 232 | dev_node_t node; |
233 | int stop; | 233 | int stop; |
234 | 234 | ||
@@ -536,11 +536,11 @@ static void ldisc_receive_buf(struct tty_struct *tty, | |||
536 | static int mgslpc_attach(struct pcmcia_device *p_dev) | 536 | static int mgslpc_attach(struct pcmcia_device *p_dev) |
537 | { | 537 | { |
538 | MGSLPC_INFO *info; | 538 | MGSLPC_INFO *info; |
539 | dev_link_t *link; | 539 | dev_link_t *link = dev_to_instance(p_dev); |
540 | 540 | ||
541 | if (debug_level >= DEBUG_LEVEL_INFO) | 541 | if (debug_level >= DEBUG_LEVEL_INFO) |
542 | printk("mgslpc_attach\n"); | 542 | printk("mgslpc_attach\n"); |
543 | 543 | ||
544 | info = (MGSLPC_INFO *)kmalloc(sizeof(MGSLPC_INFO), GFP_KERNEL); | 544 | info = (MGSLPC_INFO *)kmalloc(sizeof(MGSLPC_INFO), GFP_KERNEL); |
545 | if (!info) { | 545 | if (!info) { |
546 | printk("Error can't allocate device instance data\n"); | 546 | printk("Error can't allocate device instance data\n"); |
@@ -565,22 +565,19 @@ static int mgslpc_attach(struct pcmcia_device *p_dev) | |||
565 | info->imrb_value = 0xffff; | 565 | info->imrb_value = 0xffff; |
566 | info->pim_value = 0xff; | 566 | info->pim_value = 0xff; |
567 | 567 | ||
568 | link = &info->link; | 568 | info->p_dev = p_dev; |
569 | link->priv = info; | 569 | link->priv = info; |
570 | 570 | ||
571 | /* Initialize the dev_link_t structure */ | 571 | /* Initialize the dev_link_t structure */ |
572 | 572 | ||
573 | /* Interrupt setup */ | 573 | /* Interrupt setup */ |
574 | link->irq.Attributes = IRQ_TYPE_EXCLUSIVE; | 574 | link->irq.Attributes = IRQ_TYPE_EXCLUSIVE; |
575 | link->irq.IRQInfo1 = IRQ_LEVEL_ID; | 575 | link->irq.IRQInfo1 = IRQ_LEVEL_ID; |
576 | link->irq.Handler = NULL; | 576 | link->irq.Handler = NULL; |
577 | 577 | ||
578 | link->conf.Attributes = 0; | 578 | link->conf.Attributes = 0; |
579 | link->conf.IntType = INT_MEMORY_AND_IO; | 579 | link->conf.IntType = INT_MEMORY_AND_IO; |
580 | 580 | ||
581 | link->handle = p_dev; | ||
582 | p_dev->instance = link; | ||
583 | |||
584 | link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; | 581 | link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; |
585 | mgslpc_config(link); | 582 | mgslpc_config(link); |
586 | 583 | ||
@@ -673,7 +670,7 @@ static void mgslpc_config(dev_link_t *link) | |||
673 | /* add to linked list of devices */ | 670 | /* add to linked list of devices */ |
674 | sprintf(info->node.dev_name, "mgslpc0"); | 671 | sprintf(info->node.dev_name, "mgslpc0"); |
675 | info->node.major = info->node.minor = 0; | 672 | info->node.major = info->node.minor = 0; |
676 | link->dev = &info->node; | 673 | link->dev_node = &info->node; |
677 | 674 | ||
678 | printk(KERN_INFO "%s: index 0x%02x:", | 675 | printk(KERN_INFO "%s: index 0x%02x:", |
679 | info->node.dev_name, link->conf.ConfigIndex); | 676 | info->node.dev_name, link->conf.ConfigIndex); |
@@ -1259,7 +1256,7 @@ static irqreturn_t mgslpc_isr(int irq, void *dev_id, struct pt_regs * regs) | |||
1259 | if (!info) | 1256 | if (!info) |
1260 | return IRQ_NONE; | 1257 | return IRQ_NONE; |
1261 | 1258 | ||
1262 | if (!(info->link.state & DEV_CONFIG)) | 1259 | if (!(info->p_dev->state & DEV_CONFIG)) |
1263 | return IRQ_HANDLED; | 1260 | return IRQ_HANDLED; |
1264 | 1261 | ||
1265 | spin_lock(&info->lock); | 1262 | spin_lock(&info->lock); |