| .. | .. |
|---|
| 419 | 419 | schedule(); |
|---|
| 420 | 420 | finish_wait(&arcfb_waitq, &wait); |
|---|
| 421 | 421 | } |
|---|
| 422 | + fallthrough; |
|---|
| 423 | + |
|---|
| 422 | 424 | case FBIO_GETCONTROL2: |
|---|
| 423 | 425 | { |
|---|
| 424 | 426 | unsigned char ctl2; |
|---|
| .. | .. |
|---|
| 489 | 491 | return err; |
|---|
| 490 | 492 | } |
|---|
| 491 | 493 | |
|---|
| 492 | | -static struct fb_ops arcfb_ops = { |
|---|
| 494 | +static const struct fb_ops arcfb_ops = { |
|---|
| 493 | 495 | .owner = THIS_MODULE, |
|---|
| 494 | 496 | .fb_open = arcfb_open, |
|---|
| 495 | 497 | .fb_read = fb_sys_read, |
|---|
| .. | .. |
|---|
| 542 | 544 | par->cslut[1] = 0x06; |
|---|
| 543 | 545 | info->flags = FBINFO_FLAG_DEFAULT; |
|---|
| 544 | 546 | spin_lock_init(&par->lock); |
|---|
| 545 | | - retval = register_framebuffer(info); |
|---|
| 546 | | - if (retval < 0) |
|---|
| 547 | | - goto err1; |
|---|
| 548 | | - platform_set_drvdata(dev, info); |
|---|
| 549 | 547 | if (irq) { |
|---|
| 550 | 548 | par->irq = irq; |
|---|
| 551 | 549 | if (request_irq(par->irq, &arcfb_interrupt, IRQF_SHARED, |
|---|
| .. | .. |
|---|
| 556 | 554 | goto err1; |
|---|
| 557 | 555 | } |
|---|
| 558 | 556 | } |
|---|
| 557 | + retval = register_framebuffer(info); |
|---|
| 558 | + if (retval < 0) |
|---|
| 559 | + goto err1; |
|---|
| 560 | + platform_set_drvdata(dev, info); |
|---|
| 559 | 561 | fb_info(info, "Arc frame buffer device, using %dK of video memory\n", |
|---|
| 560 | 562 | videomemorysize >> 10); |
|---|
| 561 | 563 | |
|---|
| .. | .. |
|---|
| 591 | 593 | |
|---|
| 592 | 594 | if (info) { |
|---|
| 593 | 595 | unregister_framebuffer(info); |
|---|
| 596 | + if (irq) |
|---|
| 597 | + free_irq(((struct arcfb_par *)(info->par))->irq, info); |
|---|
| 594 | 598 | vfree((void __force *)info->screen_base); |
|---|
| 595 | 599 | framebuffer_release(info); |
|---|
| 596 | 600 | } |
|---|