56 #include <linux/module.h>
58 #include <linux/parport.h>
63 #include <asm/setup.h>
73 #define DPRINTK printk
79 static volatile int dummy;
81 #define pia(dev) ((struct pia *)(dev->base))
84 static void mfc3_write_data(
struct parport *
p,
unsigned char data)
93 static unsigned char mfc3_read_data(
struct parport *
p)
99 static unsigned char control_pc_to_mfc3(
unsigned char control)
101 unsigned char ret = 32|64;
114 static unsigned char control_mfc3_to_pc(
unsigned char control)
122 ret &= ~PARPORT_CONTROL_AUTOFD;
124 ret &= ~PARPORT_CONTROL_SELECT;
128 static void mfc3_write_control(
struct parport *
p,
unsigned char control)
131 pia(p)->ppra = (
pia(p)->ppra & 0x1f) | control_pc_to_mfc3(control);
134 static unsigned char mfc3_read_control(
struct parport *p)
137 return control_mfc3_to_pc(
pia(p)->
ppra & 0xe0);
140 static unsigned char mfc3_frob_control(
struct parport *p,
unsigned char mask,
unsigned char val)
145 old = mfc3_read_control(p);
146 mfc3_write_control(p, (old & ~mask) ^ val);
150 static unsigned char status_mfc3_to_pc(
unsigned char status)
168 static unsigned char mfc3_read_status(
struct parport *p)
172 status = status_mfc3_to_pc(
pia(p)->
ppra & 0x1f);
177 static int use_cnt = 0;
184 if (this_port[i] !=
NULL)
185 if (
pia(this_port[i])->crb & 128) {
187 parport_generic_irq(this_port[i]);
192 static void mfc3_enable_irq(
struct parport *p)
197 static void mfc3_disable_irq(
struct parport *p)
202 static void mfc3_data_forward(
struct parport *p)
210 static void mfc3_data_reverse(
struct parport *p)
223 s->
u.
amiga.statusdir = 0xe0;
251 .write_data = mfc3_write_data,
252 .read_data = mfc3_read_data,
254 .write_control = mfc3_write_control,
255 .read_control = mfc3_read_control,
256 .frob_control = mfc3_frob_control,
258 .read_status = mfc3_read_status,
260 .enable_irq = mfc3_enable_irq,
261 .disable_irq = mfc3_disable_irq,
263 .data_forward = mfc3_data_forward,
264 .data_reverse = mfc3_data_reverse,
266 .init_state = mfc3_init_state,
267 .save_state = mfc3_save_state,
268 .restore_state = mfc3_restore_state,
288 static int __init parport_mfc3_init(
void)
293 struct zorro_dev *z =
NULL;
299 unsigned long piabase = z->resource.start+
PIABASE;
326 this_port[pias++] =
p;
343 return pias ? 0 : -
ENODEV;
346 static void __exit parport_mfc3_exit(
void)
350 for (i = 0; i <
MAX_MFC; i++) {