video: fbdev: don't print error message on framebuffer_alloc() failure
[linux-block.git] / drivers / video / fbdev / pvr2fb.c
index 73d92d8a85cc2e026c6aad4a23676884183ca515..7ff4b6b842824666556310a92da657eee6520721 100644 (file)
@@ -140,7 +140,7 @@ static struct pvr2fb_par {
        unsigned char is_doublescan;    /* Are scanlines output twice? (doublescan) */
        unsigned char is_lowres;        /* Is horizontal pixel-doubling enabled? */
 
-       unsigned long mmio_base;        /* MMIO base */
+       void __iomem *mmio_base;        /* MMIO base */
        u32 palette[16];
 } *currentpar;
 
@@ -194,39 +194,6 @@ static unsigned int shdma = PVR2_CASCADE_CHAN;
 static unsigned int pvr2dma = ONCHIP_NR_DMA_CHANNELS;
 #endif
 
-static int pvr2fb_setcolreg(unsigned int regno, unsigned int red, unsigned int green, unsigned int blue,
-                            unsigned int transp, struct fb_info *info);
-static int pvr2fb_blank(int blank, struct fb_info *info);
-static unsigned long get_line_length(int xres_virtual, int bpp);
-static void set_color_bitfields(struct fb_var_screeninfo *var);
-static int pvr2fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info);
-static int pvr2fb_set_par(struct fb_info *info);
-static void pvr2_update_display(struct fb_info *info);
-static void pvr2_init_display(struct fb_info *info);
-static void pvr2_do_blank(void);
-static irqreturn_t pvr2fb_interrupt(int irq, void *dev_id);
-static int pvr2_init_cable(void);
-static int pvr2_get_param(const struct pvr2_params *p, const char *s,
-                            int val, int size);
-#ifdef CONFIG_PVR2_DMA
-static ssize_t pvr2fb_write(struct fb_info *info, const char *buf,
-                           size_t count, loff_t *ppos);
-#endif
-
-static struct fb_ops pvr2fb_ops = {
-       .owner          = THIS_MODULE,
-       .fb_setcolreg   = pvr2fb_setcolreg,
-       .fb_blank       = pvr2fb_blank,
-       .fb_check_var   = pvr2fb_check_var,
-       .fb_set_par     = pvr2fb_set_par,
-#ifdef CONFIG_PVR2_DMA
-       .fb_write       = pvr2fb_write,
-#endif
-       .fb_fillrect    = cfb_fillrect,
-       .fb_copyarea    = cfb_copyarea,
-       .fb_imageblit   = cfb_imageblit,
-};
-
 static struct fb_videomode pvr2_modedb[] = {
     /*
      * Broadcast video modes (PAL and NTSC).  I'm unfamiliar with
@@ -354,6 +321,36 @@ static int pvr2fb_setcolreg(unsigned int regno, unsigned int red,
        return 0;
 }
 
+/*
+ * Determine the cable type and initialize the cable output format.  Don't do
+ * anything if the cable type has been overidden (via "cable:XX").
+ */
+
+#define PCTRA ((void __iomem *)0xff80002c)
+#define PDTRA ((void __iomem *)0xff800030)
+#define VOUTC ((void __iomem *)0xa0702c00)
+
+static int pvr2_init_cable(void)
+{
+       if (cable_type < 0) {
+               fb_writel((fb_readl(PCTRA) & 0xfff0ffff) | 0x000a0000,
+                         PCTRA);
+               cable_type = (fb_readw(PDTRA) >> 8) & 3;
+       }
+
+       /* Now select the output format (either composite or other) */
+       /* XXX: Save the previous val first, as this reg is also AICA
+         related */
+       if (cable_type == CT_COMPOSITE)
+               fb_writel(3 << 8, VOUTC);
+       else if (cable_type == CT_RGB)
+               fb_writel(1 << 9, VOUTC);
+       else
+               fb_writel(0, VOUTC);
+
+       return cable_type;
+}
+
 static int pvr2fb_set_par(struct fb_info *info)
 {
        struct pvr2fb_par *par = (struct pvr2fb_par *)info->par;
@@ -623,7 +620,7 @@ static void pvr2_do_blank(void)
        is_blanked = do_blank > 0 ? do_blank : 0;
 }
 
-static irqreturn_t pvr2fb_interrupt(int irq, void *dev_id)
+static irqreturn_t __maybe_unused pvr2fb_interrupt(int irq, void *dev_id)
 {
        struct fb_info *info = dev_id;
 
@@ -642,36 +639,6 @@ static irqreturn_t pvr2fb_interrupt(int irq, void *dev_id)
        return IRQ_HANDLED;
 }
 
-/*
- * Determine the cable type and initialize the cable output format.  Don't do
- * anything if the cable type has been overidden (via "cable:XX").
- */
-
-#define PCTRA 0xff80002c
-#define PDTRA 0xff800030
-#define VOUTC 0xa0702c00
-
-static int pvr2_init_cable(void)
-{
-       if (cable_type < 0) {
-               fb_writel((fb_readl(PCTRA) & 0xfff0ffff) | 0x000a0000,
-                         PCTRA);
-               cable_type = (fb_readw(PDTRA) >> 8) & 3;
-       }
-
-       /* Now select the output format (either composite or other) */
-       /* XXX: Save the previous val first, as this reg is also AICA
-         related */
-       if (cable_type == CT_COMPOSITE)
-               fb_writel(3 << 8, VOUTC);
-       else if (cable_type == CT_RGB)
-               fb_writel(1 << 9, VOUTC);
-       else
-               fb_writel(0, VOUTC);
-
-       return cable_type;
-}
-
 #ifdef CONFIG_PVR2_DMA
 static ssize_t pvr2fb_write(struct fb_info *info, const char *buf,
                            size_t count, loff_t *ppos)
@@ -742,6 +709,46 @@ out_unmap:
 }
 #endif /* CONFIG_PVR2_DMA */
 
+static struct fb_ops pvr2fb_ops = {
+       .owner          = THIS_MODULE,
+       .fb_setcolreg   = pvr2fb_setcolreg,
+       .fb_blank       = pvr2fb_blank,
+       .fb_check_var   = pvr2fb_check_var,
+       .fb_set_par     = pvr2fb_set_par,
+#ifdef CONFIG_PVR2_DMA
+       .fb_write       = pvr2fb_write,
+#endif
+       .fb_fillrect    = cfb_fillrect,
+       .fb_copyarea    = cfb_copyarea,
+       .fb_imageblit   = cfb_imageblit,
+};
+
+#ifndef MODULE
+static int pvr2_get_param_val(const struct pvr2_params *p, const char *s,
+                             int size)
+{
+       int i;
+
+       for (i = 0; i < size; i++) {
+               if (!strncasecmp(p[i].name, s, strlen(s)))
+                       return p[i].val;
+       }
+       return -1;
+}
+#endif
+
+static char *pvr2_get_param_name(const struct pvr2_params *p, int val,
+                         int size)
+{
+       int i;
+
+       for (i = 0; i < size; i++) {
+               if (p[i].val == val)
+                       return p[i].name;
+       }
+       return NULL;
+}
+
 /**
  * pvr2fb_common_init
  *
@@ -760,7 +767,7 @@ out_unmap:
  * in for flexibility anyways. Who knows, maybe someone has tv-out on a
  * PCI-based version of these things ;-)
  */
-static int pvr2fb_common_init(void)
+static int __maybe_unused pvr2fb_common_init(void)
 {
        struct pvr2fb_par *par = currentpar;
        unsigned long modememused, rev;
@@ -773,8 +780,8 @@ static int pvr2fb_common_init(void)
                goto out_err;
        }
 
-       par->mmio_base = (unsigned long)ioremap_nocache(pvr2_fix.mmio_start,
-                                                       pvr2_fix.mmio_len);
+       par->mmio_base = ioremap_nocache(pvr2_fix.mmio_start,
+                                        pvr2_fix.mmio_len);
        if (!par->mmio_base) {
                printk(KERN_ERR "pvr2fb: Failed to remap mmio space\n");
                goto out_err;
@@ -822,8 +829,8 @@ static int pvr2fb_common_init(void)
                fb_info->var.xres, fb_info->var.yres,
                fb_info->var.bits_per_pixel,
                get_line_length(fb_info->var.xres, fb_info->var.bits_per_pixel),
-               (char *)pvr2_get_param(cables, NULL, cable_type, 3),
-               (char *)pvr2_get_param(outputs, NULL, video_output, 3));
+               pvr2_get_param_name(cables, cable_type, 3),
+               pvr2_get_param_name(outputs, video_output, 3));
 
 #ifdef CONFIG_SH_STORE_QUEUES
        fb_notice(fb_info, "registering with SQ API\n");
@@ -841,7 +848,7 @@ out_err:
        if (fb_info->screen_base)
                iounmap(fb_info->screen_base);
        if (par->mmio_base)
-               iounmap((void *)par->mmio_base);
+               iounmap(par->mmio_base);
 
        return -ENXIO;
 }
@@ -901,15 +908,15 @@ static int __init pvr2fb_dc_init(void)
        return pvr2fb_common_init();
 }
 
-static void __exit pvr2fb_dc_exit(void)
+static void pvr2fb_dc_exit(void)
 {
        if (fb_info->screen_base) {
                iounmap(fb_info->screen_base);
                fb_info->screen_base = NULL;
        }
        if (currentpar->mmio_base) {
-               iounmap((void *)currentpar->mmio_base);
-               currentpar->mmio_base = 0;
+               iounmap(currentpar->mmio_base);
+               currentpar->mmio_base = NULL;
        }
 
        free_irq(HW_EVENT_VSYNC, fb_info);
@@ -958,8 +965,8 @@ static void pvr2fb_pci_remove(struct pci_dev *pdev)
                fb_info->screen_base = NULL;
        }
        if (currentpar->mmio_base) {
-               iounmap((void *)currentpar->mmio_base);
-               currentpar->mmio_base = 0;
+               iounmap(currentpar->mmio_base);
+               currentpar->mmio_base = NULL;
        }
 
        pci_release_regions(pdev);
@@ -985,29 +992,12 @@ static int __init pvr2fb_pci_init(void)
        return pci_register_driver(&pvr2fb_pci_driver);
 }
 
-static void __exit pvr2fb_pci_exit(void)
+static void pvr2fb_pci_exit(void)
 {
        pci_unregister_driver(&pvr2fb_pci_driver);
 }
 #endif /* CONFIG_PCI */
 
-static int pvr2_get_param(const struct pvr2_params *p, const char *s, int val,
-                         int size)
-{
-       int i;
-
-       for (i = 0 ; i < size ; i++ ) {
-               if (s != NULL) {
-                       if (!strncasecmp(p[i].name, s, strlen(s)))
-                               return p[i].val;
-               } else {
-                       if (p[i].val == val)
-                               return (int)p[i].name;
-               }
-       }
-       return -1;
-}
-
 /*
  * Parse command arguments.  Supported arguments are:
  *    inverse                             Use inverse color maps
@@ -1047,9 +1037,9 @@ static int __init pvr2fb_setup(char *options)
        }
 
        if (*cable_arg)
-               cable_type = pvr2_get_param(cables, cable_arg, 0, 3);
+               cable_type = pvr2_get_param_val(cables, cable_arg, 3);
        if (*output_arg)
-               video_output = pvr2_get_param(outputs, output_arg, 0, 3);
+               video_output = pvr2_get_param_val(outputs, output_arg, 3);
 
        return 0;
 }
@@ -1082,12 +1072,8 @@ static int __init pvr2fb_init(void)
 #endif
 
        fb_info = framebuffer_alloc(sizeof(struct pvr2fb_par), NULL);
-
-       if (!fb_info) {
-               printk(KERN_ERR "Failed to allocate memory for fb_info\n");
+       if (!fb_info)
                return -ENOMEM;
-       }
-
 
        currentpar = fb_info->par;