Lines Matching refs:pi
63 static void bpck6_send_cmd(struct pi_adapter *pi, u8 cmd)
65 switch (mode_map[pi->mode]) {
70 parport_write_data(pi->pardev->port, cmd);
71 parport_frob_control(pi->pardev->port, 0, PARPORT_CONTROL_AUTOFD);
76 pi->pardev->port->ops->epp_write_addr(pi->pardev->port, &cmd, 1, 0);
81 static u8 bpck6_rd_data_byte(struct pi_adapter *pi)
85 switch (mode_map[pi->mode]) {
88 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_STROBE,
90 data = parport_read_status(pi->pardev->port);
92 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_STROBE,
94 data |= parport_read_status(pi->pardev->port) & 0xB8;
98 parport_data_reverse(pi->pardev->port);
99 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_STROBE,
101 data = parport_read_data(pi->pardev->port);
102 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_STROBE, 0);
103 parport_data_forward(pi->pardev->port);
108 pi->pardev->port->ops->epp_read_data(pi->pardev->port, &data, 1, 0);
115 static void bpck6_wr_data_byte(struct pi_adapter *pi, u8 data)
117 switch (mode_map[pi->mode]) {
122 parport_write_data(pi->pardev->port, data);
123 parport_frob_control(pi->pardev->port, 0, PARPORT_CONTROL_INIT);
128 pi->pardev->port->ops->epp_write_data(pi->pardev->port, &data, 1, 0);
133 static int bpck6_read_regr(struct pi_adapter *pi, int cont, int reg)
137 bpck6_send_cmd(pi, port | ACCESS_PORT | ACCESS_READ);
138 return bpck6_rd_data_byte(pi);
141 static void bpck6_write_regr(struct pi_adapter *pi, int cont, int reg, int val)
145 bpck6_send_cmd(pi, port | ACCESS_PORT | ACCESS_WRITE);
146 bpck6_wr_data_byte(pi, val);
149 static void bpck6_wait_for_fifo(struct pi_adapter *pi)
153 if (pi->private & fifo_wait) {
155 parport_read_status(pi->pardev->port);
159 static void bpck6_write_block(struct pi_adapter *pi, char *buf, int len)
163 bpck6_send_cmd(pi, REG_BLKSIZE | ACCESS_REG | ACCESS_WRITE);
164 bpck6_wr_data_byte(pi, (u8)len);
165 bpck6_wr_data_byte(pi, (u8)(len >> 8));
166 bpck6_wr_data_byte(pi, 0);
168 bpck6_send_cmd(pi, CMD_PREFIX_SET | PREFIX_IO16 | PREFIX_BLK);
169 bpck6_send_cmd(pi, ATA_REG_DATA | ACCESS_PORT | ACCESS_WRITE);
171 switch (mode_map[pi->mode]) {
175 parport_write_data(pi->pardev->port, *buf++);
176 parport_frob_control(pi->pardev->port, 0,
182 bpck6_send_cmd(pi, CMD_PREFIX_SET | PREFIX_FASTWR);
184 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_STROBE,
189 parport_write_data(pi->pardev->port, last);
196 parport_frob_control(pi->pardev->port, 0,
199 parport_write_data(pi->pardev->port, this);
204 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_STROBE,
206 bpck6_send_cmd(pi, CMD_PREFIX_RESET | PREFIX_FASTWR);
209 pi->pardev->port->ops->epp_write_data(pi->pardev->port, buf,
211 bpck6_wait_for_fifo(pi);
214 pi->pardev->port->ops->epp_write_data(pi->pardev->port, buf,
216 bpck6_wait_for_fifo(pi);
219 pi->pardev->port->ops->epp_write_data(pi->pardev->port, buf,
221 bpck6_wait_for_fifo(pi);
225 bpck6_send_cmd(pi, CMD_PREFIX_RESET | PREFIX_IO16 | PREFIX_BLK);
228 static void bpck6_read_block(struct pi_adapter *pi, char *buf, int len)
230 bpck6_send_cmd(pi, REG_BLKSIZE | ACCESS_REG | ACCESS_WRITE);
231 bpck6_wr_data_byte(pi, (u8)len);
232 bpck6_wr_data_byte(pi, (u8)(len >> 8));
233 bpck6_wr_data_byte(pi, 0);
235 bpck6_send_cmd(pi, CMD_PREFIX_SET | PREFIX_IO16 | PREFIX_BLK);
236 bpck6_send_cmd(pi, ATA_REG_DATA | ACCESS_PORT | ACCESS_READ);
238 switch (mode_map[pi->mode]) {
244 parport_frob_control(pi->pardev->port,
247 d = parport_read_status(pi->pardev->port);
249 parport_frob_control(pi->pardev->port,
252 d |= parport_read_status(pi->pardev->port) & 0xB8;
259 parport_data_reverse(pi->pardev->port);
261 parport_frob_control(pi->pardev->port,
264 *buf++ = parport_read_data(pi->pardev->port);
267 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_STROBE,
269 parport_data_forward(pi->pardev->port);
272 pi->pardev->port->ops->epp_read_data(pi->pardev->port, buf, len,
276 pi->pardev->port->ops->epp_read_data(pi->pardev->port, buf, len,
280 pi->pardev->port->ops->epp_read_data(pi->pardev->port, buf, len,
285 bpck6_send_cmd(pi, CMD_PREFIX_RESET | PREFIX_IO16 | PREFIX_BLK);
288 static int bpck6_open(struct pi_adapter *pi)
292 pi->saved_r0 = parport_read_data(pi->pardev->port);
293 pi->saved_r2 = parport_read_control(pi->pardev->port) & 0x5F;
295 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_SELECT,
297 if (pi->saved_r0 == 'b')
298 parport_write_data(pi->pardev->port, 'x');
299 parport_write_data(pi->pardev->port, 'b');
300 parport_write_data(pi->pardev->port, 'p');
301 parport_write_data(pi->pardev->port, pi->unit);
302 parport_write_data(pi->pardev->port, ~pi->unit);
304 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_SELECT, 0);
305 parport_write_control(pi->pardev->port, PARPORT_CONTROL_INIT);
307 i = mode_map[pi->mode] & 0x0C;
309 i = (mode_map[pi->mode] & 2) | 1;
310 parport_write_data(pi->pardev->port, i);
312 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_SELECT,
314 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_AUTOFD,
318 k = parport_read_status(pi->pardev->port) & 0xB8;
322 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_AUTOFD, 0);
323 k = (parport_read_status(pi->pardev->port) & 0xB8) ^ 0xB8;
329 parport_frob_control(pi->pardev->port,
333 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_SELECT, 0);
336 pi->private = 0;
338 bpck6_send_cmd(pi, ACCESS_REG | ACCESS_WRITE | REG_RAMSIZE);
339 bpck6_wr_data_byte(pi, RAMSIZE_128K);
341 bpck6_send_cmd(pi, ACCESS_REG | ACCESS_READ | REG_VERSION);
342 if ((bpck6_rd_data_byte(pi) & 0x3F) == 0x0C)
343 pi->private |= fifo_wait;
348 parport_write_control(pi->pardev->port, pi->saved_r2);
349 parport_write_data(pi->pardev->port, pi->saved_r0);
354 static void bpck6_deselect(struct pi_adapter *pi)
356 if (mode_map[pi->mode] & 4) {
358 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_INIT,
362 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_SELECT,
366 parport_write_data(pi->pardev->port, pi->saved_r0);
367 parport_write_control(pi->pardev->port,
368 pi->saved_r2 | PARPORT_CONTROL_SELECT);
369 parport_write_control(pi->pardev->port, pi->saved_r2);
372 static void bpck6_wr_extout(struct pi_adapter *pi, u8 regdata)
374 bpck6_send_cmd(pi, REG_VERSION | ACCESS_REG | ACCESS_WRITE);
375 bpck6_wr_data_byte(pi, (u8)((regdata & 0x03) << 6));
378 static void bpck6_connect(struct pi_adapter *pi)
380 dev_dbg(&pi->dev, "connect\n");
382 bpck6_open(pi);
383 bpck6_wr_extout(pi, 0x3);
386 static void bpck6_disconnect(struct pi_adapter *pi)
388 dev_dbg(&pi->dev, "disconnect\n");
389 bpck6_wr_extout(pi, 0x0);
390 bpck6_deselect(pi);
394 static int bpck6_test_port(struct pi_adapter *pi)
396 dev_dbg(&pi->dev, "PARPORT indicates modes=%x for lp=0x%lx\n",
397 pi->pardev->port->modes, pi->pardev->port->base);
400 if (pi->pardev->port->modes & PARPORT_MODE_EPP)
402 if (pi->pardev->port->modes & PARPORT_MODE_TRISTATE)
407 static int bpck6_probe_unit(struct pi_adapter *pi)
411 dev_dbg(&pi->dev, "PROBE UNIT %x on port:%x\n", pi->unit, pi->port);
413 saved_mode = pi->mode;
415 pi->mode = 0;
417 out = bpck6_open(pi);
419 dev_dbg(&pi->dev, "ppc_open returned %2x\n", out);
422 bpck6_deselect(pi);
423 dev_dbg(&pi->dev, "leaving probe\n");
424 pi->mode = saved_mode;
428 dev_dbg(&pi->dev, "Failed open\n");
429 pi->mode = saved_mode;
434 static void bpck6_log_adapter(struct pi_adapter *pi)
438 dev_info(&pi->dev,
440 pi->unit, pi->port, pi->mode, mode_string[pi->mode], pi->delay);