Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 182206
b: refs/heads/master
c: 18814ee
h: refs/heads/master
v: v3
  • Loading branch information
Finn Thain authored and Geert Uytterhoeven committed Feb 27, 2010
1 parent 6da3849 commit 9f5c248
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 36 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 11e8faca2e501c25d2f98c1b9534776a9a9704c5
refs/heads/master: 18814ee846357509ceb13d4351eec71acd007480
6 changes: 6 additions & 0 deletions trunk/arch/m68k/mac/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
#include <linux/init.h>
#include <linux/vt_kern.h>
#include <linux/platform_device.h>
#include <linux/adb.h>
#include <linux/cuda.h>

#define BOOTINFO_COMPAT_1_0
#include <asm/setup.h>
Expand Down Expand Up @@ -889,6 +891,10 @@ static void __init mac_identify(void)
oss_init();
psc_init();
baboon_init();

#ifdef CONFIG_ADB_CUDA
find_via_cuda();
#endif
}

static void __init mac_report_hardware(void)
Expand Down
6 changes: 4 additions & 2 deletions trunk/drivers/macintosh/adb.c
Original file line number Diff line number Diff line change
Expand Up @@ -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") ||
Expand Down
74 changes: 41 additions & 33 deletions trunk/drivers/macintosh/via-cuda.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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;
Expand Down Expand Up @@ -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)
{
Expand All @@ -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);
Expand All @@ -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 */

Expand Down Expand Up @@ -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
Expand All @@ -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.
Expand Down

0 comments on commit 9f5c248

Please sign in to comment.