aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/mgag200/mgag200_main.c
diff options
context:
space:
mode:
authorChristopher Harvey <charvey@matrox.com>2013-04-05 12:15:30 -0400
committerDave Airlie <airlied@redhat.com>2013-04-12 00:07:27 -0400
commitc2ed8844246dd4c46208c5f6fa79fd3cfcc671ca (patch)
tree6e367f0a2993cf2d286de5ad6f810eec0fcfa8ad /drivers/gpu/drm/mgag200/mgag200_main.c
parent715f59cc2391cb4e28a4d464a0564a60a00ecca4 (diff)
drm/mgag200: Convert to managed device resources where possible
Signed-off-by: Christopher Harvey <charvey@matrox.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/mgag200/mgag200_main.c')
-rw-r--r--drivers/gpu/drm/mgag200/mgag200_main.c29
1 files changed, 5 insertions, 24 deletions
diff --git a/drivers/gpu/drm/mgag200/mgag200_main.c b/drivers/gpu/drm/mgag200/mgag200_main.c
index 64297c72464f..1f7ea057b2fc 100644
--- a/drivers/gpu/drm/mgag200/mgag200_main.c
+++ b/drivers/gpu/drm/mgag200/mgag200_main.c
@@ -76,15 +76,6 @@ static const struct drm_mode_config_funcs mga_mode_funcs = {
76 .fb_create = mgag200_user_framebuffer_create, 76 .fb_create = mgag200_user_framebuffer_create,
77}; 77};
78 78
79/* Unmap the framebuffer from the core and release the memory */
80static void mga_vram_fini(struct mga_device *mdev)
81{
82 pci_iounmap(mdev->dev->pdev, mdev->rmmio);
83 mdev->rmmio = NULL;
84 if (mdev->mc.vram_base)
85 release_mem_region(mdev->mc.vram_base, mdev->mc.vram_window);
86}
87
88static int mga_probe_vram(struct mga_device *mdev, void __iomem *mem) 79static int mga_probe_vram(struct mga_device *mdev, void __iomem *mem)
89{ 80{
90 int offset; 81 int offset;
@@ -140,7 +131,7 @@ static int mga_vram_init(struct mga_device *mdev)
140 remove_conflicting_framebuffers(aper, "mgafb", true); 131 remove_conflicting_framebuffers(aper, "mgafb", true);
141 kfree(aper); 132 kfree(aper);
142 133
143 if (!request_mem_region(mdev->mc.vram_base, mdev->mc.vram_window, 134 if (!devm_request_mem_region(mdev->dev->dev, mdev->mc.vram_base, mdev->mc.vram_window,
144 "mgadrmfb_vram")) { 135 "mgadrmfb_vram")) {
145 DRM_ERROR("can't reserve VRAM\n"); 136 DRM_ERROR("can't reserve VRAM\n");
146 return -ENXIO; 137 return -ENXIO;
@@ -173,13 +164,13 @@ static int mgag200_device_init(struct drm_device *dev,
173 mdev->rmmio_base = pci_resource_start(mdev->dev->pdev, 1); 164 mdev->rmmio_base = pci_resource_start(mdev->dev->pdev, 1);
174 mdev->rmmio_size = pci_resource_len(mdev->dev->pdev, 1); 165 mdev->rmmio_size = pci_resource_len(mdev->dev->pdev, 1);
175 166
176 if (!request_mem_region(mdev->rmmio_base, mdev->rmmio_size, 167 if (!devm_request_mem_region(mdev->dev->dev, mdev->rmmio_base, mdev->rmmio_size,
177 "mgadrmfb_mmio")) { 168 "mgadrmfb_mmio")) {
178 DRM_ERROR("can't reserve mmio registers\n"); 169 DRM_ERROR("can't reserve mmio registers\n");
179 return -ENOMEM; 170 return -ENOMEM;
180 } 171 }
181 172
182 mdev->rmmio = pci_iomap(dev->pdev, 1, 0); 173 mdev->rmmio = pcim_iomap(dev->pdev, 1, 0);
183 if (mdev->rmmio == NULL) 174 if (mdev->rmmio == NULL)
184 return -ENOMEM; 175 return -ENOMEM;
185 176
@@ -188,10 +179,8 @@ static int mgag200_device_init(struct drm_device *dev,
188 mdev->reg_1e24 = RREG32(0x1e24); 179 mdev->reg_1e24 = RREG32(0x1e24);
189 180
190 ret = mga_vram_init(mdev); 181 ret = mga_vram_init(mdev);
191 if (ret) { 182 if (ret)
192 release_mem_region(mdev->rmmio_base, mdev->rmmio_size);
193 return ret; 183 return ret;
194 }
195 184
196 mdev->bpp_shifts[0] = 0; 185 mdev->bpp_shifts[0] = 0;
197 mdev->bpp_shifts[1] = 1; 186 mdev->bpp_shifts[1] = 1;
@@ -200,12 +189,6 @@ static int mgag200_device_init(struct drm_device *dev,
200 return 0; 189 return 0;
201} 190}
202 191
203void mgag200_device_fini(struct mga_device *mdev)
204{
205 release_mem_region(mdev->rmmio_base, mdev->rmmio_size);
206 mga_vram_fini(mdev);
207}
208
209/* 192/*
210 * Functions here will be called by the core once it's bound the driver to 193 * Functions here will be called by the core once it's bound the driver to
211 * a PCI device 194 * a PCI device
@@ -217,7 +200,7 @@ int mgag200_driver_load(struct drm_device *dev, unsigned long flags)
217 struct mga_device *mdev; 200 struct mga_device *mdev;
218 int r; 201 int r;
219 202
220 mdev = kzalloc(sizeof(struct mga_device), GFP_KERNEL); 203 mdev = devm_kzalloc(dev->dev, sizeof(struct mga_device), GFP_KERNEL);
221 if (mdev == NULL) 204 if (mdev == NULL)
222 return -ENOMEM; 205 return -ENOMEM;
223 dev->dev_private = (void *)mdev; 206 dev->dev_private = (void *)mdev;
@@ -258,8 +241,6 @@ int mgag200_driver_unload(struct drm_device *dev)
258 mgag200_fbdev_fini(mdev); 241 mgag200_fbdev_fini(mdev);
259 drm_mode_config_cleanup(dev); 242 drm_mode_config_cleanup(dev);
260 mgag200_mm_fini(mdev); 243 mgag200_mm_fini(mdev);
261 mgag200_device_fini(mdev);
262 kfree(mdev);
263 dev->dev_private = NULL; 244 dev->dev_private = NULL;
264 return 0; 245 return 0;
265} 246}