mirror of
https://github.com/suyu-emu/horinux.git
synced 2026-09-21 14:15:21 -07:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k:
m68k: amiga - Floppy platform device conversion
m68k: amiga - Sound platform device conversion
m68k: amiga - Frame buffer platform device conversion
m68k: amiga - Zorro host bridge platform device conversion
m68k: amiga - Zorro bus modalias support
platform: Make platform resource input parameters const
m68k: invoke oom-killer from page fault
serial167: Kill unused variables
m68k: Implement generic_find_next_{zero_,}le_bit()
m68k: hp300 - Checkpatch cleanup
m68k: Remove trailing spaces in messages
m68k: Simplify param.h by using <asm-generic/param.h>
m68k: Remove BKL from rtc implementations
This commit is contained in:
@@ -2,6 +2,6 @@
|
||||
# Makefile for Linux arch/m68k/amiga source directory
|
||||
#
|
||||
|
||||
obj-y := config.o amiints.o cia.o chipram.o amisound.o
|
||||
obj-y := config.o amiints.o cia.o chipram.o amisound.o platform.o
|
||||
|
||||
obj-$(CONFIG_AMIGA_PCMCIA) += pcmcia.o
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Copyright (C) 2007-2009 Geert Uytterhoeven
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/zorro.h>
|
||||
|
||||
#include <asm/amigahw.h>
|
||||
|
||||
|
||||
#ifdef CONFIG_ZORRO
|
||||
|
||||
static const struct resource zorro_resources[] __initconst = {
|
||||
/* Zorro II regions (on Zorro II/III) */
|
||||
{
|
||||
.name = "Zorro II exp",
|
||||
.start = 0x00e80000,
|
||||
.end = 0x00efffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.name = "Zorro II mem",
|
||||
.start = 0x00200000,
|
||||
.end = 0x009fffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
/* Zorro III regions (on Zorro III only) */
|
||||
{
|
||||
.name = "Zorro III exp",
|
||||
.start = 0xff000000,
|
||||
.end = 0xffffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.name = "Zorro III cfg",
|
||||
.start = 0x40000000,
|
||||
.end = 0x7fffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
static int __init amiga_init_bus(void)
|
||||
{
|
||||
if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT(ZORRO))
|
||||
return -ENODEV;
|
||||
|
||||
platform_device_register_simple("amiga-zorro", -1, zorro_resources,
|
||||
AMIGAHW_PRESENT(ZORRO3) ? 4 : 2);
|
||||
return 0;
|
||||
}
|
||||
|
||||
subsys_initcall(amiga_init_bus);
|
||||
|
||||
#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);
|
||||
|
||||
|
||||
/* sound hardware */
|
||||
if (AMIGAHW_PRESENT(AMI_AUDIO))
|
||||
platform_device_register_simple("amiga-audio", -1, NULL, 0);
|
||||
|
||||
|
||||
/* storage interfaces */
|
||||
if (AMIGAHW_PRESENT(AMI_FLOPPY))
|
||||
platform_device_register_simple("amiga-floppy", -1, NULL, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
device_initcall(amiga_init_devices);
|
||||
@@ -9,7 +9,6 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/capability.h>
|
||||
#include <linux/fcntl.h>
|
||||
@@ -35,10 +34,9 @@
|
||||
static unsigned char days_in_mo[] =
|
||||
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||
|
||||
static char rtc_status;
|
||||
static atomic_t rtc_status = ATOMIC_INIT(1);
|
||||
|
||||
static int rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
static long rtc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE;
|
||||
unsigned char msr;
|
||||
@@ -132,29 +130,20 @@ static int rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
|
||||
}
|
||||
|
||||
/*
|
||||
* We enforce only one user at a time here with the open/close.
|
||||
* Also clear the previous interrupt data on an open, and clean
|
||||
* up things on a close.
|
||||
* We enforce only one user at a time here with the open/close.
|
||||
*/
|
||||
|
||||
static int rtc_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
lock_kernel();
|
||||
if(rtc_status) {
|
||||
unlock_kernel();
|
||||
if (!atomic_dec_and_test(&rtc_status)) {
|
||||
atomic_inc(&rtc_status);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
rtc_status = 1;
|
||||
unlock_kernel();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rtc_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
lock_kernel();
|
||||
rtc_status = 0;
|
||||
unlock_kernel();
|
||||
atomic_inc(&rtc_status);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -163,9 +152,9 @@ static int rtc_release(struct inode *inode, struct file *file)
|
||||
*/
|
||||
|
||||
static const struct file_operations rtc_fops = {
|
||||
.ioctl = rtc_ioctl,
|
||||
.open = rtc_open,
|
||||
.release = rtc_release,
|
||||
.unlocked_ioctl = rtc_ioctl,
|
||||
.open = rtc_open,
|
||||
.release = rtc_release,
|
||||
};
|
||||
|
||||
static struct miscdevice rtc_dev = {
|
||||
|
||||
@@ -1,4 +1,2 @@
|
||||
extern void hp300_sched_init(irq_handler_t vector);
|
||||
extern unsigned long hp300_gettimeoffset (void);
|
||||
|
||||
|
||||
extern unsigned long hp300_gettimeoffset(void);
|
||||
|
||||
@@ -365,6 +365,10 @@ static inline int minix_test_bit(int nr, const void *vaddr)
|
||||
#define ext2_set_bit_atomic(lock, nr, addr) test_and_set_bit((nr) ^ 24, (unsigned long *)(addr))
|
||||
#define ext2_clear_bit(nr, addr) __test_and_clear_bit((nr) ^ 24, (unsigned long *)(addr))
|
||||
#define ext2_clear_bit_atomic(lock, nr, addr) test_and_clear_bit((nr) ^ 24, (unsigned long *)(addr))
|
||||
#define ext2_find_next_zero_bit(addr, size, offset) \
|
||||
generic_find_next_zero_le_bit((unsigned long *)addr, size, offset)
|
||||
#define ext2_find_next_bit(addr, size, offset) \
|
||||
generic_find_next_le_bit((unsigned long *)addr, size, offset)
|
||||
|
||||
static inline int ext2_test_bit(int nr, const void *vaddr)
|
||||
{
|
||||
@@ -394,10 +398,9 @@ static inline int ext2_find_first_zero_bit(const void *vaddr, unsigned size)
|
||||
return (p - addr) * 32 + res;
|
||||
}
|
||||
|
||||
static inline int ext2_find_next_zero_bit(const void *vaddr, unsigned size,
|
||||
unsigned offset)
|
||||
static inline unsigned long generic_find_next_zero_le_bit(const unsigned long *addr,
|
||||
unsigned long size, unsigned long offset)
|
||||
{
|
||||
const unsigned long *addr = vaddr;
|
||||
const unsigned long *p = addr + (offset >> 5);
|
||||
int bit = offset & 31UL, res;
|
||||
|
||||
@@ -437,10 +440,9 @@ static inline int ext2_find_first_bit(const void *vaddr, unsigned size)
|
||||
return (p - addr) * 32 + res;
|
||||
}
|
||||
|
||||
static inline int ext2_find_next_bit(const void *vaddr, unsigned size,
|
||||
unsigned offset)
|
||||
static inline unsigned long generic_find_next_le_bit(const unsigned long *addr,
|
||||
unsigned long size, unsigned long offset)
|
||||
{
|
||||
const unsigned long *addr = vaddr;
|
||||
const unsigned long *p = addr + (offset >> 5);
|
||||
int bit = offset & 31UL, res;
|
||||
|
||||
|
||||
@@ -1,26 +1,12 @@
|
||||
#ifndef _M68K_PARAM_H
|
||||
#define _M68K_PARAM_H
|
||||
|
||||
#ifdef __KERNEL__
|
||||
# define HZ CONFIG_HZ /* Internal kernel timer frequency */
|
||||
# define USER_HZ 100 /* .. some user interfaces are in "ticks" */
|
||||
# define CLOCKS_PER_SEC (USER_HZ) /* like times() */
|
||||
#endif
|
||||
|
||||
#ifndef HZ
|
||||
#define HZ 100
|
||||
#endif
|
||||
|
||||
#ifdef __uClinux__
|
||||
#define EXEC_PAGESIZE 4096
|
||||
#else
|
||||
#define EXEC_PAGESIZE 8192
|
||||
#endif
|
||||
|
||||
#ifndef NOGROUP
|
||||
#define NOGROUP (-1)
|
||||
#endif
|
||||
|
||||
#define MAXHOSTNAMELEN 64 /* max length of hostname */
|
||||
#include <asm-generic/param.h>
|
||||
|
||||
#endif /* _M68K_PARAM_H */
|
||||
|
||||
@@ -455,7 +455,7 @@ static inline void access_error040(struct frame *fp)
|
||||
|
||||
if (do_page_fault(&fp->ptregs, addr, errorcode)) {
|
||||
#ifdef DEBUG
|
||||
printk("do_page_fault() !=0 \n");
|
||||
printk("do_page_fault() !=0\n");
|
||||
#endif
|
||||
if (user_mode(&fp->ptregs)){
|
||||
/* delay writebacks after signal delivery */
|
||||
|
||||
@@ -148,7 +148,7 @@ static void mac_cache_card_flush(int writeback)
|
||||
void __init config_mac(void)
|
||||
{
|
||||
if (!MACH_IS_MAC)
|
||||
printk(KERN_ERR "ERROR: no Mac, but config_mac() called!! \n");
|
||||
printk(KERN_ERR "ERROR: no Mac, but config_mac() called!!\n");
|
||||
|
||||
mach_sched_init = mac_sched_init;
|
||||
mach_init_IRQ = mac_init_IRQ;
|
||||
@@ -867,7 +867,7 @@ static void __init mac_identify(void)
|
||||
*/
|
||||
iop_preinit();
|
||||
|
||||
printk(KERN_INFO "Detected Macintosh model: %d \n", model);
|
||||
printk(KERN_INFO "Detected Macintosh model: %d\n", model);
|
||||
|
||||
/*
|
||||
* Report booter data:
|
||||
@@ -878,12 +878,12 @@ static void __init mac_identify(void)
|
||||
mac_bi_data.videoaddr, mac_bi_data.videorow,
|
||||
mac_bi_data.videodepth, mac_bi_data.dimensions & 0xFFFF,
|
||||
mac_bi_data.dimensions >> 16);
|
||||
printk(KERN_DEBUG " Videological 0x%lx phys. 0x%lx, SCC at 0x%lx \n",
|
||||
printk(KERN_DEBUG " Videological 0x%lx phys. 0x%lx, SCC at 0x%lx\n",
|
||||
mac_bi_data.videological, mac_orig_videoaddr,
|
||||
mac_bi_data.sccbase);
|
||||
printk(KERN_DEBUG " Boottime: 0x%lx GMTBias: 0x%lx \n",
|
||||
printk(KERN_DEBUG " Boottime: 0x%lx GMTBias: 0x%lx\n",
|
||||
mac_bi_data.boottime, mac_bi_data.gmtbias);
|
||||
printk(KERN_DEBUG " Machine ID: %ld CPUid: 0x%lx memory size: 0x%lx \n",
|
||||
printk(KERN_DEBUG " Machine ID: %ld CPUid: 0x%lx memory size: 0x%lx\n",
|
||||
mac_bi_data.id, mac_bi_data.cpuid, mac_bi_data.memsize);
|
||||
|
||||
iop_init();
|
||||
|
||||
+4
-10
@@ -154,7 +154,6 @@ good_area:
|
||||
* the fault.
|
||||
*/
|
||||
|
||||
survive:
|
||||
fault = handle_mm_fault(mm, vma, address, write ? FAULT_FLAG_WRITE : 0);
|
||||
#ifdef DEBUG
|
||||
printk("handle_mm_fault returns %d\n",fault);
|
||||
@@ -180,15 +179,10 @@ good_area:
|
||||
*/
|
||||
out_of_memory:
|
||||
up_read(&mm->mmap_sem);
|
||||
if (is_global_init(current)) {
|
||||
yield();
|
||||
down_read(&mm->mmap_sem);
|
||||
goto survive;
|
||||
}
|
||||
|
||||
printk("VM: killing process %s\n", current->comm);
|
||||
if (user_mode(regs))
|
||||
do_group_exit(SIGKILL);
|
||||
if (!user_mode(regs))
|
||||
goto no_context;
|
||||
pagefault_out_of_memory();
|
||||
return 0;
|
||||
|
||||
no_context:
|
||||
current->thread.signo = SIGBUS;
|
||||
|
||||
+5
-14
@@ -9,7 +9,6 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/capability.h>
|
||||
#include <linux/fcntl.h>
|
||||
@@ -36,8 +35,7 @@ static const unsigned char days_in_mo[] =
|
||||
|
||||
static atomic_t rtc_ready = ATOMIC_INIT(1);
|
||||
|
||||
static int rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
static long rtc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
volatile MK48T08ptr_t rtc = (MK48T08ptr_t)MVME_RTC_BASE;
|
||||
unsigned long flags;
|
||||
@@ -120,22 +118,15 @@ static int rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
|
||||
}
|
||||
|
||||
/*
|
||||
* We enforce only one user at a time here with the open/close.
|
||||
* Also clear the previous interrupt data on an open, and clean
|
||||
* up things on a close.
|
||||
* We enforce only one user at a time here with the open/close.
|
||||
*/
|
||||
|
||||
static int rtc_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
lock_kernel();
|
||||
if( !atomic_dec_and_test(&rtc_ready) )
|
||||
{
|
||||
atomic_inc( &rtc_ready );
|
||||
unlock_kernel();
|
||||
return -EBUSY;
|
||||
}
|
||||
unlock_kernel();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -150,9 +141,9 @@ static int rtc_release(struct inode *inode, struct file *file)
|
||||
*/
|
||||
|
||||
static const struct file_operations rtc_fops = {
|
||||
.ioctl = rtc_ioctl,
|
||||
.open = rtc_open,
|
||||
.release = rtc_release,
|
||||
.unlocked_ioctl = rtc_ioctl,
|
||||
.open = rtc_open,
|
||||
.release = rtc_release,
|
||||
};
|
||||
|
||||
static struct miscdevice rtc_dev=
|
||||
|
||||
@@ -126,7 +126,7 @@ static void q40_reset(void)
|
||||
{
|
||||
halted = 1;
|
||||
printk("\n\n*******************************************\n"
|
||||
"Called q40_reset : press the RESET button!! \n"
|
||||
"Called q40_reset : press the RESET button!!\n"
|
||||
"*******************************************\n");
|
||||
Q40_LED_ON();
|
||||
while (1)
|
||||
|
||||
@@ -187,7 +187,7 @@ EXPORT_SYMBOL_GPL(platform_device_alloc);
|
||||
* released.
|
||||
*/
|
||||
int platform_device_add_resources(struct platform_device *pdev,
|
||||
struct resource *res, unsigned int num)
|
||||
const struct resource *res, unsigned int num)
|
||||
{
|
||||
struct resource *r;
|
||||
|
||||
@@ -367,7 +367,7 @@ EXPORT_SYMBOL_GPL(platform_device_unregister);
|
||||
*/
|
||||
struct platform_device *platform_device_register_simple(const char *name,
|
||||
int id,
|
||||
struct resource *res,
|
||||
const struct resource *res,
|
||||
unsigned int num)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
|
||||
+21
-26
@@ -66,6 +66,7 @@
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/elevator.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/uaccess.h>
|
||||
@@ -1696,34 +1697,18 @@ static struct kobject *floppy_find(dev_t dev, int *part, void *data)
|
||||
return get_disk(unit[drive].gendisk);
|
||||
}
|
||||
|
||||
static int __init amiga_floppy_init(void)
|
||||
static int __init amiga_floppy_probe(struct platform_device *pdev)
|
||||
{
|
||||
int i, ret;
|
||||
|
||||
if (!MACH_IS_AMIGA)
|
||||
return -ENODEV;
|
||||
|
||||
if (!AMIGAHW_PRESENT(AMI_FLOPPY))
|
||||
return -ENODEV;
|
||||
|
||||
if (register_blkdev(FLOPPY_MAJOR,"fd"))
|
||||
return -EBUSY;
|
||||
|
||||
/*
|
||||
* We request DSKPTR, DSKLEN and DSKDATA only, because the other
|
||||
* floppy registers are too spreaded over the custom register space
|
||||
*/
|
||||
ret = -EBUSY;
|
||||
if (!request_mem_region(CUSTOM_PHYSADDR+0x20, 8, "amiflop [Paula]")) {
|
||||
printk("fd: cannot get floppy registers\n");
|
||||
goto out_blkdev;
|
||||
}
|
||||
|
||||
ret = -ENOMEM;
|
||||
if ((raw_buf = (char *)amiga_chip_alloc (RAW_BUF_SIZE, "Floppy")) ==
|
||||
NULL) {
|
||||
printk("fd: cannot get chip mem buffer\n");
|
||||
goto out_memregion;
|
||||
goto out_blkdev;
|
||||
}
|
||||
|
||||
ret = -EBUSY;
|
||||
@@ -1792,18 +1777,13 @@ out_irq2:
|
||||
free_irq(IRQ_AMIGA_DSKBLK, NULL);
|
||||
out_irq:
|
||||
amiga_chip_free(raw_buf);
|
||||
out_memregion:
|
||||
release_mem_region(CUSTOM_PHYSADDR+0x20, 8);
|
||||
out_blkdev:
|
||||
unregister_blkdev(FLOPPY_MAJOR,"fd");
|
||||
return ret;
|
||||
}
|
||||
|
||||
module_init(amiga_floppy_init);
|
||||
#ifdef MODULE
|
||||
|
||||
#if 0 /* not safe to unload */
|
||||
void cleanup_module(void)
|
||||
static int __exit amiga_floppy_remove(struct platform_device *pdev)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -1820,12 +1800,25 @@ void cleanup_module(void)
|
||||
custom.dmacon = DMAF_DISK; /* disable DMA */
|
||||
amiga_chip_free(raw_buf);
|
||||
blk_cleanup_queue(floppy_queue);
|
||||
release_mem_region(CUSTOM_PHYSADDR+0x20, 8);
|
||||
unregister_blkdev(FLOPPY_MAJOR, "fd");
|
||||
}
|
||||
#endif
|
||||
|
||||
#else
|
||||
static struct platform_driver amiga_floppy_driver = {
|
||||
.driver = {
|
||||
.name = "amiga-floppy",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init amiga_floppy_init(void)
|
||||
{
|
||||
return platform_driver_probe(&amiga_floppy_driver, amiga_floppy_probe);
|
||||
}
|
||||
|
||||
module_init(amiga_floppy_init);
|
||||
|
||||
#ifndef MODULE
|
||||
static int __init amiga_floppy_setup (char *str)
|
||||
{
|
||||
int n;
|
||||
@@ -1840,3 +1833,5 @@ static int __init amiga_floppy_setup (char *str)
|
||||
|
||||
__setup("floppy=", amiga_floppy_setup);
|
||||
#endif
|
||||
|
||||
MODULE_ALIAS("platform:amiga-floppy");
|
||||
|
||||
@@ -627,7 +627,6 @@ static irqreturn_t cd2401_rx_interrupt(int irq, void *dev_id)
|
||||
char data;
|
||||
int char_count;
|
||||
int save_cnt;
|
||||
int len;
|
||||
|
||||
/* determine the channel and change to that context */
|
||||
channel = (u_short) (base_addr[CyLICR] >> 2);
|
||||
@@ -1528,7 +1527,6 @@ static int
|
||||
cy_ioctl(struct tty_struct *tty, struct file *file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
unsigned long val;
|
||||
struct cyclades_port *info = tty->driver_data;
|
||||
int ret_val = 0;
|
||||
void __user *argp = (void __user *)arg;
|
||||
|
||||
@@ -674,6 +674,7 @@ static struct zorro_device_id a2065_zorro_tbl[] __devinitdata = {
|
||||
{ ZORRO_PROD_AMERISTAR_A2065 },
|
||||
{ 0 }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(zorro, a2065_zorro_tbl);
|
||||
|
||||
static struct zorro_driver a2065_driver = {
|
||||
.name = "a2065",
|
||||
|
||||
@@ -145,6 +145,7 @@ static struct zorro_device_id ariadne_zorro_tbl[] __devinitdata = {
|
||||
{ ZORRO_PROD_VILLAGE_TRONIC_ARIADNE },
|
||||
{ 0 }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(zorro, ariadne_zorro_tbl);
|
||||
|
||||
static struct zorro_driver ariadne_driver = {
|
||||
.name = "ariadne",
|
||||
|
||||
@@ -71,6 +71,7 @@ static struct zorro_device_id hydra_zorro_tbl[] __devinitdata = {
|
||||
{ ZORRO_PROD_HYDRA_SYSTEMS_AMIGANET },
|
||||
{ 0 }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(zorro, hydra_zorro_tbl);
|
||||
|
||||
static struct zorro_driver hydra_driver = {
|
||||
.name = "hydra",
|
||||
|
||||
@@ -102,6 +102,7 @@ static struct zorro_device_id zorro8390_zorro_tbl[] __devinitdata = {
|
||||
{ ZORRO_PROD_INDIVIDUAL_COMPUTERS_X_SURF, },
|
||||
{ 0 }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(zorro, zorro8390_zorro_tbl);
|
||||
|
||||
static struct zorro_driver zorro8390_driver = {
|
||||
.name = "zorro8390",
|
||||
|
||||
@@ -69,6 +69,7 @@ static struct zorro_device_id zorro7xx_zorro_tbl[] __devinitdata = {
|
||||
},
|
||||
{ 0 }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(zorro, zorro7xx_zorro_tbl);
|
||||
|
||||
static int __devinit zorro7xx_init_one(struct zorro_dev *z,
|
||||
const struct zorro_device_id *ent)
|
||||
|
||||
+31
-18
@@ -50,8 +50,9 @@
|
||||
#include <linux/fb.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/ioport.h>
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/uaccess.h>
|
||||
|
||||
#include <asm/system.h>
|
||||
#include <asm/irq.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
|
||||
*/
|
||||
|
||||
static void amifb_deinit(void);
|
||||
static void amifb_deinit(struct platform_device *pdev);
|
||||
|
||||
/*
|
||||
* Internal routines
|
||||
@@ -2246,7 +2247,7 @@ static inline void chipfree(void)
|
||||
* Initialisation
|
||||
*/
|
||||
|
||||
static int __init amifb_init(void)
|
||||
static int __init amifb_probe(struct platform_device *pdev)
|
||||
{
|
||||
int tag, i, err = 0;
|
||||
u_long chipptr;
|
||||
@@ -2261,16 +2262,6 @@ static int __init amifb_init(void)
|
||||
}
|
||||
amifb_setup(option);
|
||||
#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;
|
||||
|
||||
switch (amiga_chipset) {
|
||||
@@ -2377,6 +2368,7 @@ default_chipset:
|
||||
fb_info.fbops = &amifb_ops;
|
||||
fb_info.par = ¤tpar;
|
||||
fb_info.flags = FBINFO_DEFAULT;
|
||||
fb_info.device = &pdev->dev;
|
||||
|
||||
if (!fb_find_mode(&fb_info.var, &fb_info, mode_option, ami_modedb,
|
||||
NUM_TOTAL_MODES, &ami_modedb[defmode], 4)) {
|
||||
@@ -2451,18 +2443,18 @@ default_chipset:
|
||||
return 0;
|
||||
|
||||
amifb_error:
|
||||
amifb_deinit();
|
||||
amifb_deinit(pdev);
|
||||
return err;
|
||||
}
|
||||
|
||||
static void amifb_deinit(void)
|
||||
static void amifb_deinit(struct platform_device *pdev)
|
||||
{
|
||||
if (fb_info.cmap.len)
|
||||
fb_dealloc_cmap(&fb_info.cmap);
|
||||
fb_dealloc_cmap(&fb_info.cmap);
|
||||
chipfree();
|
||||
if (videomemory)
|
||||
iounmap((void*)videomemory);
|
||||
release_mem_region(CUSTOM_PHYSADDR+0xe0, 0x120);
|
||||
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);
|
||||
amifb_deinit();
|
||||
amifb_deinit(pdev);
|
||||
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);
|
||||
|
||||
static void __exit amifb_exit(void)
|
||||
{
|
||||
platform_driver_unregister(&amifb_driver);
|
||||
}
|
||||
|
||||
module_exit(amifb_exit);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:amiga-video");
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user