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: (24 commits) m68k: Define sigcontext ABI of ColdFire m68knommu: NPTL support for uClinux m68k: Add NPTL support m68k: Eliminate unused variable in page_to_phys() m68k: Switch to generic siginfo layout macfb: fix 24-bit visual and stuff macfb: cleanup fbdev: add some missing mac modes mac68k: start CUDA early valkyriefb: various fixes fbdev: mac_var_to_mode() fix mac68k: move macsonic and macmace platform devices mac68k: move mac_esp platform device mac68k: replace mac68k SCC code with platform device pmac-zilog: add platform driver pmac-zilog: cleanup mac68k: rework SWIM platform device mac68k: cleanup ataflop: Killl warning about unused variable flags m68k: Use DIV_ROUND_CLOSEST ...
This commit is contained in:
@@ -317,9 +317,11 @@ static int __init adb_init(void)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ((adb_controller == NULL) || adb_controller->init()) {
|
||||
printk(KERN_WARNING "Warning: no ADB interface detected\n");
|
||||
if (adb_controller != NULL && adb_controller->init &&
|
||||
adb_controller->init())
|
||||
adb_controller = NULL;
|
||||
if (adb_controller == NULL) {
|
||||
printk(KERN_WARNING "Warning: no ADB interface detected\n");
|
||||
} else {
|
||||
#ifdef CONFIG_PPC
|
||||
if (of_machine_is_compatible("AAPL,PowerBook1998") ||
|
||||
|
@@ -89,7 +89,6 @@ static int cuda_fully_inited;
|
||||
|
||||
#ifdef CONFIG_ADB
|
||||
static int cuda_probe(void);
|
||||
static int cuda_init(void);
|
||||
static int cuda_send_request(struct adb_request *req, int sync);
|
||||
static int cuda_adb_autopoll(int devs);
|
||||
static int cuda_reset_adb_bus(void);
|
||||
@@ -107,17 +106,42 @@ int cuda_request(struct adb_request *req,
|
||||
|
||||
#ifdef CONFIG_ADB
|
||||
struct adb_driver via_cuda_driver = {
|
||||
"CUDA",
|
||||
cuda_probe,
|
||||
cuda_init,
|
||||
cuda_send_request,
|
||||
cuda_adb_autopoll,
|
||||
cuda_poll,
|
||||
cuda_reset_adb_bus
|
||||
.name = "CUDA",
|
||||
.probe = cuda_probe,
|
||||
.send_request = cuda_send_request,
|
||||
.autopoll = cuda_adb_autopoll,
|
||||
.poll = cuda_poll,
|
||||
.reset_bus = cuda_reset_adb_bus,
|
||||
};
|
||||
#endif /* CONFIG_ADB */
|
||||
|
||||
#ifdef CONFIG_PPC
|
||||
#ifdef CONFIG_MAC
|
||||
int __init find_via_cuda(void)
|
||||
{
|
||||
struct adb_request req;
|
||||
int err;
|
||||
|
||||
if (macintosh_config->adb_type != MAC_ADB_CUDA)
|
||||
return 0;
|
||||
|
||||
via = via1;
|
||||
cuda_state = idle;
|
||||
|
||||
err = cuda_init_via();
|
||||
if (err) {
|
||||
printk(KERN_ERR "cuda_init_via() failed\n");
|
||||
via = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* enable autopoll */
|
||||
cuda_request(&req, NULL, 3, CUDA_PACKET, CUDA_AUTOPOLL, 1);
|
||||
while (!req.complete)
|
||||
cuda_poll();
|
||||
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
int __init find_via_cuda(void)
|
||||
{
|
||||
struct adb_request req;
|
||||
@@ -175,7 +199,7 @@ int __init find_via_cuda(void)
|
||||
vias = NULL;
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_PPC */
|
||||
#endif /* !defined CONFIG_MAC */
|
||||
|
||||
static int __init via_cuda_start(void)
|
||||
{
|
||||
@@ -184,14 +208,14 @@ static int __init via_cuda_start(void)
|
||||
|
||||
#ifdef CONFIG_MAC
|
||||
cuda_irq = IRQ_MAC_ADB;
|
||||
#else /* CONFIG_MAC */
|
||||
#else
|
||||
cuda_irq = irq_of_parse_and_map(vias, 0);
|
||||
if (cuda_irq == NO_IRQ) {
|
||||
printk(KERN_ERR "via-cuda: can't map interrupts for %s\n",
|
||||
vias->full_name);
|
||||
return -ENODEV;
|
||||
}
|
||||
#endif /* CONFIG_MAC */
|
||||
#endif
|
||||
|
||||
if (request_irq(cuda_irq, cuda_interrupt, 0, "ADB", cuda_interrupt)) {
|
||||
printk(KERN_ERR "via-cuda: can't request irq %d\n", cuda_irq);
|
||||
@@ -216,28 +240,10 @@ cuda_probe(void)
|
||||
#else
|
||||
if (macintosh_config->adb_type != MAC_ADB_CUDA)
|
||||
return -ENODEV;
|
||||
via = via1;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init
|
||||
cuda_init(void)
|
||||
{
|
||||
#ifdef CONFIG_PPC
|
||||
if (via == NULL)
|
||||
return -ENODEV;
|
||||
return 0;
|
||||
#else
|
||||
int err = cuda_init_via();
|
||||
if (err) {
|
||||
printk(KERN_ERR "cuda_init_via() failed\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
out_8(&via[IER], IER_SET|SR_INT); /* enable interrupt from SR */
|
||||
|
||||
return via_cuda_start();
|
||||
#endif
|
||||
}
|
||||
#endif /* CONFIG_ADB */
|
||||
|
||||
@@ -430,9 +436,11 @@ cuda_poll(void)
|
||||
/* cuda_interrupt only takes a normal lock, we disable
|
||||
* interrupts here to avoid re-entering and thus deadlocking.
|
||||
*/
|
||||
disable_irq(cuda_irq);
|
||||
if (cuda_irq)
|
||||
disable_irq(cuda_irq);
|
||||
cuda_interrupt(0, NULL);
|
||||
enable_irq(cuda_irq);
|
||||
if (cuda_irq)
|
||||
enable_irq(cuda_irq);
|
||||
}
|
||||
|
||||
static irqreturn_t
|
||||
@@ -446,7 +454,7 @@ cuda_interrupt(int irq, void *arg)
|
||||
|
||||
spin_lock(&cuda_lock);
|
||||
|
||||
/* On powermacs, this handler is registered for the VIA IRQ. But it uses
|
||||
/* On powermacs, this handler is registered for the VIA IRQ. But they use
|
||||
* just the shift register IRQ -- other VIA interrupt sources are disabled.
|
||||
* On m68k macs, the VIA IRQ sources are dispatched individually. Unless
|
||||
* we are polling, the shift register IRQ flag has already been cleared.
|
||||
|
Reference in New Issue
Block a user