diff options
author | Christopher Harvey <charvey@matrox.com> | 2013-04-05 12:15:30 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-04-12 00:07:27 -0400 |
commit | c2ed8844246dd4c46208c5f6fa79fd3cfcc671ca (patch) | |
tree | 6e367f0a2993cf2d286de5ad6f810eec0fcfa8ad /drivers/gpu/drm/mgag200/mgag200_main.c | |
parent | 715f59cc2391cb4e28a4d464a0564a60a00ecca4 (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.c | 29 |
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 */ | ||
80 | static 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 | |||
88 | static int mga_probe_vram(struct mga_device *mdev, void __iomem *mem) | 79 | static 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 | ||
203 | void 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 | } |