hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/video/fbdev/arcfb.c
....@@ -419,6 +419,8 @@
419419 schedule();
420420 finish_wait(&arcfb_waitq, &wait);
421421 }
422
+ fallthrough;
423
+
422424 case FBIO_GETCONTROL2:
423425 {
424426 unsigned char ctl2;
....@@ -489,7 +491,7 @@
489491 return err;
490492 }
491493
492
-static struct fb_ops arcfb_ops = {
494
+static const struct fb_ops arcfb_ops = {
493495 .owner = THIS_MODULE,
494496 .fb_open = arcfb_open,
495497 .fb_read = fb_sys_read,
....@@ -521,7 +523,7 @@
521523
522524 info = framebuffer_alloc(sizeof(struct arcfb_par), &dev->dev);
523525 if (!info)
524
- goto err;
526
+ goto err_fb_alloc;
525527
526528 info->screen_base = (char __iomem *)videomemory;
527529 info->fbops = &arcfb_ops;
....@@ -533,7 +535,7 @@
533535
534536 if (!dio_addr || !cio_addr || !c2io_addr) {
535537 printk(KERN_WARNING "no IO addresses supplied\n");
536
- goto err1;
538
+ goto err_addr;
537539 }
538540 par->dio_addr = dio_addr;
539541 par->cio_addr = cio_addr;
....@@ -542,10 +544,6 @@
542544 par->cslut[1] = 0x06;
543545 info->flags = FBINFO_FLAG_DEFAULT;
544546 spin_lock_init(&par->lock);
545
- retval = register_framebuffer(info);
546
- if (retval < 0)
547
- goto err1;
548
- platform_set_drvdata(dev, info);
549547 if (irq) {
550548 par->irq = irq;
551549 if (request_irq(par->irq, &arcfb_interrupt, IRQF_SHARED,
....@@ -553,9 +551,13 @@
553551 printk(KERN_INFO
554552 "arcfb: Failed req IRQ %d\n", par->irq);
555553 retval = -EBUSY;
556
- goto err1;
554
+ goto err_addr;
557555 }
558556 }
557
+ retval = register_framebuffer(info);
558
+ if (retval < 0)
559
+ goto err_register_fb;
560
+ platform_set_drvdata(dev, info);
559561 fb_info(info, "Arc frame buffer device, using %dK of video memory\n",
560562 videomemorysize >> 10);
561563
....@@ -578,9 +580,12 @@
578580 }
579581
580582 return 0;
581
-err1:
583
+
584
+err_register_fb:
585
+ free_irq(par->irq, info);
586
+err_addr:
582587 framebuffer_release(info);
583
-err:
588
+err_fb_alloc:
584589 vfree(videomemory);
585590 return retval;
586591 }
....@@ -591,6 +596,8 @@
591596
592597 if (info) {
593598 unregister_framebuffer(info);
599
+ if (irq)
600
+ free_irq(((struct arcfb_par *)(info->par))->irq, info);
594601 vfree((void __force *)info->screen_base);
595602 framebuffer_release(info);
596603 }