m68k: amiga - Frame buffer platform device conversion
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
This commit is contained in:
@@ -56,3 +56,18 @@ static int __init amiga_init_bus(void)
|
|||||||
subsys_initcall(amiga_init_bus);
|
subsys_initcall(amiga_init_bus);
|
||||||
|
|
||||||
#endif /* CONFIG_ZORRO */
|
#endif /* CONFIG_ZORRO */
|
||||||
|
|
||||||
|
|
||||||
|
static int __init amiga_init_devices(void)
|
||||||
|
{
|
||||||
|
if (!MACH_IS_AMIGA)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
/* video hardware */
|
||||||
|
if (AMIGAHW_PRESENT(AMI_VIDEO))
|
||||||
|
platform_device_register_simple("amiga-video", -1, NULL, 0);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
device_initcall(amiga_init_devices);
|
||||||
|
@@ -50,8 +50,9 @@
|
|||||||
#include <linux/fb.h>
|
#include <linux/fb.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
|
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/amigahw.h>
|
#include <asm/amigahw.h>
|
||||||
@@ -1135,7 +1136,7 @@ static int amifb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg
|
|||||||
* Interface to the low level console driver
|
* Interface to the low level console driver
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void amifb_deinit(void);
|
static void amifb_deinit(struct platform_device *pdev);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Internal routines
|
* Internal routines
|
||||||
@@ -2246,7 +2247,7 @@ static inline void chipfree(void)
|
|||||||
* Initialisation
|
* Initialisation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int __init amifb_init(void)
|
static int __init amifb_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
int tag, i, err = 0;
|
int tag, i, err = 0;
|
||||||
u_long chipptr;
|
u_long chipptr;
|
||||||
@@ -2261,16 +2262,6 @@ static int __init amifb_init(void)
|
|||||||
}
|
}
|
||||||
amifb_setup(option);
|
amifb_setup(option);
|
||||||
#endif
|
#endif
|
||||||
if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT(AMI_VIDEO))
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We request all registers starting from bplpt[0]
|
|
||||||
*/
|
|
||||||
if (!request_mem_region(CUSTOM_PHYSADDR+0xe0, 0x120,
|
|
||||||
"amifb [Denise/Lisa]"))
|
|
||||||
return -EBUSY;
|
|
||||||
|
|
||||||
custom.dmacon = DMAF_ALL | DMAF_MASTER;
|
custom.dmacon = DMAF_ALL | DMAF_MASTER;
|
||||||
|
|
||||||
switch (amiga_chipset) {
|
switch (amiga_chipset) {
|
||||||
@@ -2377,6 +2368,7 @@ default_chipset:
|
|||||||
fb_info.fbops = &amifb_ops;
|
fb_info.fbops = &amifb_ops;
|
||||||
fb_info.par = ¤tpar;
|
fb_info.par = ¤tpar;
|
||||||
fb_info.flags = FBINFO_DEFAULT;
|
fb_info.flags = FBINFO_DEFAULT;
|
||||||
|
fb_info.device = &pdev->dev;
|
||||||
|
|
||||||
if (!fb_find_mode(&fb_info.var, &fb_info, mode_option, ami_modedb,
|
if (!fb_find_mode(&fb_info.var, &fb_info, mode_option, ami_modedb,
|
||||||
NUM_TOTAL_MODES, &ami_modedb[defmode], 4)) {
|
NUM_TOTAL_MODES, &ami_modedb[defmode], 4)) {
|
||||||
@@ -2451,18 +2443,18 @@ default_chipset:
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
amifb_error:
|
amifb_error:
|
||||||
amifb_deinit();
|
amifb_deinit(pdev);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void amifb_deinit(void)
|
static void amifb_deinit(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
if (fb_info.cmap.len)
|
if (fb_info.cmap.len)
|
||||||
fb_dealloc_cmap(&fb_info.cmap);
|
fb_dealloc_cmap(&fb_info.cmap);
|
||||||
|
fb_dealloc_cmap(&fb_info.cmap);
|
||||||
chipfree();
|
chipfree();
|
||||||
if (videomemory)
|
if (videomemory)
|
||||||
iounmap((void*)videomemory);
|
iounmap((void*)videomemory);
|
||||||
release_mem_region(CUSTOM_PHYSADDR+0xe0, 0x120);
|
|
||||||
custom.dmacon = DMAF_ALL | DMAF_MASTER;
|
custom.dmacon = DMAF_ALL | DMAF_MASTER;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3794,14 +3786,35 @@ static void ami_rebuild_copper(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit amifb_exit(void)
|
static int __exit amifb_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
unregister_framebuffer(&fb_info);
|
unregister_framebuffer(&fb_info);
|
||||||
amifb_deinit();
|
amifb_deinit(pdev);
|
||||||
amifb_video_off();
|
amifb_video_off();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct platform_driver amifb_driver = {
|
||||||
|
.remove = __exit_p(amifb_remove),
|
||||||
|
.driver = {
|
||||||
|
.name = "amiga-video",
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init amifb_init(void)
|
||||||
|
{
|
||||||
|
return platform_driver_probe(&amifb_driver, amifb_probe);
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(amifb_init);
|
module_init(amifb_init);
|
||||||
|
|
||||||
|
static void __exit amifb_exit(void)
|
||||||
|
{
|
||||||
|
platform_driver_unregister(&amifb_driver);
|
||||||
|
}
|
||||||
|
|
||||||
module_exit(amifb_exit);
|
module_exit(amifb_exit);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
MODULE_ALIAS("platform:amiga-video");
|
||||||
|
Reference in New Issue
Block a user