Loading drivers/video/leo.c +26 −32 Original line number Diff line number Diff line Loading @@ -17,8 +17,8 @@ #include <linux/fb.h> #include <linux/mm.h> #include <linux/of_device.h> #include <linux/io.h> #include <asm/io.h> #include <asm/fbio.h> #include "sbuslib.h" Loading @@ -33,7 +33,6 @@ static int leo_blank(int, struct fb_info *); static int leo_mmap(struct fb_info *, struct vm_area_struct *); static int leo_ioctl(struct fb_info *, unsigned int, unsigned long); static int leo_pan_display(struct fb_var_screeninfo *, struct fb_info *); /* * Frame buffer operations Loading @@ -43,7 +42,6 @@ static struct fb_ops leo_ops = { .owner = THIS_MODULE, .fb_setcolreg = leo_setcolreg, .fb_blank = leo_blank, .fb_pan_display = leo_pan_display, .fb_fillrect = cfb_fillrect, .fb_copyarea = cfb_copyarea, .fb_imageblit = cfb_imageblit, Loading Loading @@ -129,7 +127,7 @@ struct leo_lc_ss1_usr { u8 unknown; }; struct leo_ld { struct leo_ld_ss0 { u8 xxx0[0xe00]; u32 csr; u32 wid; Loading Loading @@ -201,7 +199,8 @@ static void leo_wait(struct leo_lx_krn __iomem *lx_krn) int i; for (i = 0; (sbus_readl(&lx_krn->krn_csr) & LEO_KRN_CSR_PROGRESS) && i < 300000; (sbus_readl(&lx_krn->krn_csr) & LEO_KRN_CSR_PROGRESS) && i < 300000; i++) udelay(1); /* Busy wait at most 0.3 sec */ return; Loading Loading @@ -453,13 +452,12 @@ static void leo_init_wids(struct fb_info *info) wi.wi_index = 1; wi.wi_values [0] = 0x30; leo_wid_put(info, &wl); } static void leo_switch_from_graph(struct fb_info *info) { struct leo_par *par = (struct leo_par *) info->par; struct leo_ld __iomem *ss = (struct leo_ld __iomem *) par->ld_ss0; struct leo_ld_ss0 __iomem *ss = par->ld_ss0; unsigned long flags; u32 val; Loading @@ -485,19 +483,13 @@ static void leo_switch_from_graph(struct fb_info *info) val = sbus_readl(&par->lc_ss0_usr->csr); } while (val & 0x20000000); spin_unlock_irqrestore(&par->lock, flags); } static int leo_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) { /* We just use this to catch switches out of * graphics mode. */ leo_switch_from_graph(info); /* setup screen buffer for cfb_* functions */ sbus_writel(1, &ss->wid); sbus_writel(0x00ffffff, &ss->planemask); sbus_writel(0x310b90, &ss->rop); sbus_writel(0, &par->lc_ss0_usr->addrspace); if (var->xoffset || var->yoffset || var->vmode) return -EINVAL; return 0; spin_unlock_irqrestore(&par->lock, flags); } static void leo_init_hw(struct fb_info *info) Loading Loading @@ -542,7 +534,8 @@ static void leo_unmap_regs(struct of_device *op, struct fb_info *info, of_iounmap(&op->resource[0], info->screen_base, 0x800000); } static int __devinit leo_probe(struct of_device *op, const struct of_device_id *match) static int __devinit leo_probe(struct of_device *op, const struct of_device_id *match) { struct device_node *dp = op->node; struct fb_info *info; Loading Loading @@ -594,8 +587,9 @@ static int __devinit leo_probe(struct of_device *op, const struct of_device_id * !info->screen_base) goto out_unmap_regs; info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; info->flags = FBINFO_DEFAULT; info->fbops = &leo_ops; info->pseudo_palette = par->clut_data; leo_init_wids(info); leo_init_hw(info); Loading Loading @@ -649,7 +643,7 @@ static int __devexit leo_remove(struct of_device *op) static struct of_device_id leo_match[] = { { .name = "leo", .name = "SUNW,leo", }, {}, }; Loading Loading
drivers/video/leo.c +26 −32 Original line number Diff line number Diff line Loading @@ -17,8 +17,8 @@ #include <linux/fb.h> #include <linux/mm.h> #include <linux/of_device.h> #include <linux/io.h> #include <asm/io.h> #include <asm/fbio.h> #include "sbuslib.h" Loading @@ -33,7 +33,6 @@ static int leo_blank(int, struct fb_info *); static int leo_mmap(struct fb_info *, struct vm_area_struct *); static int leo_ioctl(struct fb_info *, unsigned int, unsigned long); static int leo_pan_display(struct fb_var_screeninfo *, struct fb_info *); /* * Frame buffer operations Loading @@ -43,7 +42,6 @@ static struct fb_ops leo_ops = { .owner = THIS_MODULE, .fb_setcolreg = leo_setcolreg, .fb_blank = leo_blank, .fb_pan_display = leo_pan_display, .fb_fillrect = cfb_fillrect, .fb_copyarea = cfb_copyarea, .fb_imageblit = cfb_imageblit, Loading Loading @@ -129,7 +127,7 @@ struct leo_lc_ss1_usr { u8 unknown; }; struct leo_ld { struct leo_ld_ss0 { u8 xxx0[0xe00]; u32 csr; u32 wid; Loading Loading @@ -201,7 +199,8 @@ static void leo_wait(struct leo_lx_krn __iomem *lx_krn) int i; for (i = 0; (sbus_readl(&lx_krn->krn_csr) & LEO_KRN_CSR_PROGRESS) && i < 300000; (sbus_readl(&lx_krn->krn_csr) & LEO_KRN_CSR_PROGRESS) && i < 300000; i++) udelay(1); /* Busy wait at most 0.3 sec */ return; Loading Loading @@ -453,13 +452,12 @@ static void leo_init_wids(struct fb_info *info) wi.wi_index = 1; wi.wi_values [0] = 0x30; leo_wid_put(info, &wl); } static void leo_switch_from_graph(struct fb_info *info) { struct leo_par *par = (struct leo_par *) info->par; struct leo_ld __iomem *ss = (struct leo_ld __iomem *) par->ld_ss0; struct leo_ld_ss0 __iomem *ss = par->ld_ss0; unsigned long flags; u32 val; Loading @@ -485,19 +483,13 @@ static void leo_switch_from_graph(struct fb_info *info) val = sbus_readl(&par->lc_ss0_usr->csr); } while (val & 0x20000000); spin_unlock_irqrestore(&par->lock, flags); } static int leo_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) { /* We just use this to catch switches out of * graphics mode. */ leo_switch_from_graph(info); /* setup screen buffer for cfb_* functions */ sbus_writel(1, &ss->wid); sbus_writel(0x00ffffff, &ss->planemask); sbus_writel(0x310b90, &ss->rop); sbus_writel(0, &par->lc_ss0_usr->addrspace); if (var->xoffset || var->yoffset || var->vmode) return -EINVAL; return 0; spin_unlock_irqrestore(&par->lock, flags); } static void leo_init_hw(struct fb_info *info) Loading Loading @@ -542,7 +534,8 @@ static void leo_unmap_regs(struct of_device *op, struct fb_info *info, of_iounmap(&op->resource[0], info->screen_base, 0x800000); } static int __devinit leo_probe(struct of_device *op, const struct of_device_id *match) static int __devinit leo_probe(struct of_device *op, const struct of_device_id *match) { struct device_node *dp = op->node; struct fb_info *info; Loading Loading @@ -594,8 +587,9 @@ static int __devinit leo_probe(struct of_device *op, const struct of_device_id * !info->screen_base) goto out_unmap_regs; info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; info->flags = FBINFO_DEFAULT; info->fbops = &leo_ops; info->pseudo_palette = par->clut_data; leo_init_wids(info); leo_init_hw(info); Loading Loading @@ -649,7 +643,7 @@ static int __devexit leo_remove(struct of_device *op) static struct of_device_id leo_match[] = { { .name = "leo", .name = "SUNW,leo", }, {}, }; Loading