Lines Matching +full:device +full:- +full:width

1 // SPDX-License-Identifier: GPL-2.0
3 * Framebuffer driver for mdpy (mediated virtual pci display device).
5 * See mdpy-defs.h for device specs
26 #include "mdpy-defs.h"
29 .id = "mdpy-fb",
36 .height = -1,
37 .width = -1,
61 u32 *pal = info->pseudo_palette; in mdpy_fb_setcolreg()
62 u32 cr = red >> (16 - info->var.red.length); in mdpy_fb_setcolreg()
63 u32 cg = green >> (16 - info->var.green.length); in mdpy_fb_setcolreg()
64 u32 cb = blue >> (16 - info->var.blue.length); in mdpy_fb_setcolreg()
68 return -EINVAL; in mdpy_fb_setcolreg()
70 value = (cr << info->var.red.offset) | in mdpy_fb_setcolreg()
71 (cg << info->var.green.offset) | in mdpy_fb_setcolreg()
72 (cb << info->var.blue.offset); in mdpy_fb_setcolreg()
73 if (info->var.transp.length > 0) { in mdpy_fb_setcolreg()
74 mask = (1 << info->var.transp.length) - 1; in mdpy_fb_setcolreg()
75 mask <<= info->var.transp.offset; in mdpy_fb_setcolreg()
85 if (info->screen_base) in mdpy_fb_destroy()
86 iounmap(info->screen_base); in mdpy_fb_destroy()
103 u32 format, width, height; in mdpy_fb_probe() local
110 ret = pci_request_regions(pdev, "mdpy-fb"); in mdpy_fb_probe()
115 pci_read_config_dword(pdev, MDPY_WIDTH_OFFSET, &width); in mdpy_fb_probe()
120 ret = -EINVAL; in mdpy_fb_probe()
123 if (width < 100 || width > 10000) { in mdpy_fb_probe()
124 pci_err(pdev, "width (%d) out of range\n", width); in mdpy_fb_probe()
125 ret = -EINVAL; in mdpy_fb_probe()
130 ret = -EINVAL; in mdpy_fb_probe()
134 width, height); in mdpy_fb_probe()
136 info = framebuffer_alloc(sizeof(struct mdpy_fb_par), &pdev->dev); in mdpy_fb_probe()
138 ret = -ENOMEM; in mdpy_fb_probe()
142 par = info->par; in mdpy_fb_probe()
144 info->fix = mdpy_fb_fix; in mdpy_fb_probe()
145 info->fix.smem_start = pci_resource_start(pdev, 0); in mdpy_fb_probe()
146 info->fix.smem_len = pci_resource_len(pdev, 0); in mdpy_fb_probe()
147 info->fix.line_length = width * 4; in mdpy_fb_probe()
149 info->var = mdpy_fb_var; in mdpy_fb_probe()
150 info->var.xres = width; in mdpy_fb_probe()
151 info->var.yres = height; in mdpy_fb_probe()
152 info->var.xres_virtual = width; in mdpy_fb_probe()
153 info->var.yres_virtual = height; in mdpy_fb_probe()
155 info->screen_size = info->fix.smem_len; in mdpy_fb_probe()
156 info->screen_base = ioremap(info->fix.smem_start, in mdpy_fb_probe()
157 info->screen_size); in mdpy_fb_probe()
158 if (!info->screen_base) { in mdpy_fb_probe()
160 ret = -EIO; in mdpy_fb_probe()
164 info->apertures = alloc_apertures(1); in mdpy_fb_probe()
165 if (!info->apertures) { in mdpy_fb_probe()
166 ret = -ENOMEM; in mdpy_fb_probe()
169 info->apertures->ranges[0].base = info->fix.smem_start; in mdpy_fb_probe()
170 info->apertures->ranges[0].size = info->fix.smem_len; in mdpy_fb_probe()
172 info->fbops = &mdpy_fb_ops; in mdpy_fb_probe()
173 info->flags = FBINFO_DEFAULT; in mdpy_fb_probe()
174 info->pseudo_palette = par->palette; in mdpy_fb_probe()
178 pci_err(pdev, "mdpy-fb device register failed: %d\n", ret); in mdpy_fb_probe()
182 pci_info(pdev, "fb%d registered\n", info->node); in mdpy_fb_probe()
186 iounmap(info->screen_base); in mdpy_fb_probe()
208 .device = MDPY_PCI_DEVICE_ID,
217 .name = "mdpy-fb",