Lines Matching refs:pb

112 static void frob_econtrol(struct parport *pb, unsigned char m,  in frob_econtrol()  argument
118 ectr = inb(ECONTROL(pb)); in frob_econtrol()
123 outb((ectr & ~m) ^ v, ECONTROL(pb)); in frob_econtrol()
207 static int clear_epp_timeout(struct parport *pb) in clear_epp_timeout() argument
211 if (!(parport_pc_read_status(pb) & 0x01)) in clear_epp_timeout()
215 parport_pc_read_status(pb); in clear_epp_timeout()
216 r = parport_pc_read_status(pb); in clear_epp_timeout()
217 outb(r | 0x01, STATUS(pb)); /* Some reset by writing 1 */ in clear_epp_timeout()
218 outb(r & 0xfe, STATUS(pb)); /* Others by writing 0 */ in clear_epp_timeout()
219 r = parport_pc_read_status(pb); in clear_epp_timeout()
1413 static int parport_SPP_supported(struct parport *pb) in parport_SPP_supported() argument
1423 clear_epp_timeout(pb); in parport_SPP_supported()
1427 outb(w, CONTROL(pb)); in parport_SPP_supported()
1434 r = inb(CONTROL(pb)); in parport_SPP_supported()
1437 outb(w, CONTROL(pb)); in parport_SPP_supported()
1438 r = inb(CONTROL(pb)); in parport_SPP_supported()
1439 outb(0xc, CONTROL(pb)); in parport_SPP_supported()
1448 "wrote 0x%02x, read 0x%02x\n", pb->base, w, r); in parport_SPP_supported()
1453 parport_pc_write_data(pb, w); in parport_SPP_supported()
1454 r = parport_pc_read_data(pb); in parport_SPP_supported()
1457 parport_pc_write_data(pb, w); in parport_SPP_supported()
1458 r = parport_pc_read_data(pb); in parport_SPP_supported()
1467 "wrote 0x%02x, read 0x%02x\n", pb->base, w, r); in parport_SPP_supported()
1470 pb->base); in parport_SPP_supported()
1494 static int parport_ECR_present(struct parport *pb) in parport_ECR_present() argument
1496 struct parport_pc_private *priv = pb->private_data; in parport_ECR_present()
1499 outb(r, CONTROL(pb)); in parport_ECR_present()
1500 if ((inb(ECONTROL(pb)) & 0x3) == (r & 0x3)) { in parport_ECR_present()
1501 outb(r ^ 0x2, CONTROL(pb)); /* Toggle bit 1 */ in parport_ECR_present()
1503 r = inb(CONTROL(pb)); in parport_ECR_present()
1504 if ((inb(ECONTROL(pb)) & 0x2) == (r & 0x2)) in parport_ECR_present()
1508 if ((inb(ECONTROL(pb)) & 0x3) != 0x1) in parport_ECR_present()
1511 ECR_WRITE(pb, 0x34); in parport_ECR_present()
1512 if (inb(ECONTROL(pb)) != 0x35) in parport_ECR_present()
1516 outb(0xc, CONTROL(pb)); in parport_ECR_present()
1519 frob_set_mode(pb, ECR_SPP); in parport_ECR_present()
1524 outb(0xc, CONTROL(pb)); in parport_ECR_present()
1546 static int parport_PS2_supported(struct parport *pb) in parport_PS2_supported() argument
1550 clear_epp_timeout(pb); in parport_PS2_supported()
1553 parport_pc_data_reverse(pb); in parport_PS2_supported()
1555 parport_pc_write_data(pb, 0x55); in parport_PS2_supported()
1556 if (parport_pc_read_data(pb) != 0x55) in parport_PS2_supported()
1559 parport_pc_write_data(pb, 0xaa); in parport_PS2_supported()
1560 if (parport_pc_read_data(pb) != 0xaa) in parport_PS2_supported()
1564 parport_pc_data_forward(pb); in parport_PS2_supported()
1567 pb->modes |= PARPORT_MODE_TRISTATE; in parport_PS2_supported()
1569 struct parport_pc_private *priv = pb->private_data; in parport_PS2_supported()
1577 static int parport_ECP_supported(struct parport *pb) in parport_ECP_supported() argument
1582 struct parport_pc_private *priv = pb->private_data; in parport_ECP_supported()
1591 ECR_WRITE(pb, ECR_SPP << 5); /* Reset FIFO */ in parport_ECP_supported()
1592 ECR_WRITE(pb, ECR_TST << 5); /* TEST FIFO */ in parport_ECP_supported()
1593 for (i = 0; i < 1024 && !(inb(ECONTROL(pb)) & 0x02); i++) in parport_ECP_supported()
1594 outb(0xaa, FIFO(pb)); in parport_ECP_supported()
1601 ECR_WRITE(pb, ECR_SPP << 5); in parport_ECP_supported()
1607 printk(KERN_DEBUG "0x%lx: FIFO is %d bytes\n", pb->base, i); in parport_ECP_supported()
1610 frob_econtrol(pb, 1<<2, 1<<2); in parport_ECP_supported()
1611 frob_econtrol(pb, 1<<2, 0); in parport_ECP_supported()
1613 inb(FIFO(pb)); in parport_ECP_supported()
1615 if (inb(ECONTROL(pb)) & (1<<2)) in parport_ECP_supported()
1622 pb->base, i); in parport_ECP_supported()
1631 frob_set_mode(pb, ECR_PS2); /* Reset FIFO and enable PS2 */ in parport_ECP_supported()
1632 parport_pc_data_reverse(pb); /* Must be in PS2 mode */ in parport_ECP_supported()
1633 frob_set_mode(pb, ECR_TST); /* Test FIFO */ in parport_ECP_supported()
1634 frob_econtrol(pb, 1<<2, 1<<2); in parport_ECP_supported()
1635 frob_econtrol(pb, 1<<2, 0); in parport_ECP_supported()
1637 outb(0xaa, FIFO(pb)); in parport_ECP_supported()
1638 if (inb(ECONTROL(pb)) & (1<<2)) in parport_ECP_supported()
1645 pb->base, i); in parport_ECP_supported()
1652 ECR_WRITE(pb, ECR_SPP << 5); /* Reset FIFO */ in parport_ECP_supported()
1653 ECR_WRITE(pb, 0xf4); /* Configuration mode */ in parport_ECP_supported()
1654 config = inb(CONFIGA(pb)); in parport_ECP_supported()
1660 pb->base); in parport_ECP_supported()
1665 pb->base); in parport_ECP_supported()
1669 pb->base); in parport_ECP_supported()
1678 pb->base, 8 * pword); in parport_ECP_supported()
1680 printk(KERN_DEBUG "0x%lx: Interrupts are ISA-%s\n", pb->base, in parport_ECP_supported()
1683 configb = inb(CONFIGB(pb)); in parport_ECP_supported()
1685 pb->base, config, configb); in parport_ECP_supported()
1686 printk(KERN_DEBUG "0x%lx: ECP settings irq=", pb->base); in parport_ECP_supported()
1699 frob_set_mode(pb, ECR_SPP); in parport_ECP_supported()
1706 static int intel_bug_present_check_epp(struct parport *pb) in intel_bug_present_check_epp() argument
1708 const struct parport_pc_private *priv = pb->private_data; in intel_bug_present_check_epp()
1713 unsigned char ecr = inb(ECONTROL(pb)); in intel_bug_present_check_epp()
1716 ECR_WRITE(pb, i); in intel_bug_present_check_epp()
1717 if (clear_epp_timeout(pb)) { in intel_bug_present_check_epp()
1724 ECR_WRITE(pb, ecr); in intel_bug_present_check_epp()
1729 static int intel_bug_present(struct parport *pb) in intel_bug_present() argument
1732 if (pb->dev != NULL) { in intel_bug_present()
1736 return intel_bug_present_check_epp(pb); in intel_bug_present()
1739 static int intel_bug_present(struct parport *pb) in intel_bug_present() argument
1745 static int parport_ECPPS2_supported(struct parport *pb) in parport_ECPPS2_supported() argument
1747 const struct parport_pc_private *priv = pb->private_data; in parport_ECPPS2_supported()
1754 oecr = inb(ECONTROL(pb)); in parport_ECPPS2_supported()
1755 ECR_WRITE(pb, ECR_PS2 << 5); in parport_ECPPS2_supported()
1756 result = parport_PS2_supported(pb); in parport_ECPPS2_supported()
1757 ECR_WRITE(pb, oecr); in parport_ECPPS2_supported()
1763 static int parport_EPP_supported(struct parport *pb) in parport_EPP_supported() argument
1779 if (!clear_epp_timeout(pb)) in parport_EPP_supported()
1783 if (intel_bug_present(pb)) in parport_EPP_supported()
1786 pb->modes |= PARPORT_MODE_EPP; in parport_EPP_supported()
1789 pb->ops->epp_read_data = parport_pc_epp_read_data; in parport_EPP_supported()
1790 pb->ops->epp_write_data = parport_pc_epp_write_data; in parport_EPP_supported()
1791 pb->ops->epp_read_addr = parport_pc_epp_read_addr; in parport_EPP_supported()
1792 pb->ops->epp_write_addr = parport_pc_epp_write_addr; in parport_EPP_supported()
1797 static int parport_ECPEPP_supported(struct parport *pb) in parport_ECPEPP_supported() argument
1799 struct parport_pc_private *priv = pb->private_data; in parport_ECPEPP_supported()
1806 oecr = inb(ECONTROL(pb)); in parport_ECPEPP_supported()
1808 ECR_WRITE(pb, 0x80); in parport_ECPEPP_supported()
1809 outb(0x04, CONTROL(pb)); in parport_ECPEPP_supported()
1810 result = parport_EPP_supported(pb); in parport_ECPEPP_supported()
1812 ECR_WRITE(pb, oecr); in parport_ECPEPP_supported()
1816 pb->ops->epp_read_data = parport_pc_ecpepp_read_data; in parport_ECPEPP_supported()
1817 pb->ops->epp_write_data = parport_pc_ecpepp_write_data; in parport_ECPEPP_supported()
1818 pb->ops->epp_read_addr = parport_pc_ecpepp_read_addr; in parport_ECPEPP_supported()
1819 pb->ops->epp_write_addr = parport_pc_ecpepp_write_addr; in parport_ECPEPP_supported()
1828 static int parport_PS2_supported(struct parport *pb) { return 0; } in parport_PS2_supported() argument
1830 static int parport_ECP_supported(struct parport *pb) in parport_ECP_supported() argument
1835 static int parport_EPP_supported(struct parport *pb) in parport_EPP_supported() argument
1840 static int parport_ECPEPP_supported(struct parport *pb) in parport_ECPEPP_supported() argument
1845 static int parport_ECPPS2_supported(struct parport *pb) in parport_ECPPS2_supported() argument
1855 static int programmable_irq_support(struct parport *pb) in programmable_irq_support() argument
1858 unsigned char oecr = inb(ECONTROL(pb)); in programmable_irq_support()
1863 ECR_WRITE(pb, ECR_CNF << 5); /* Configuration MODE */ in programmable_irq_support()
1865 intrLine = (inb(CONFIGB(pb)) >> 3) & 0x07; in programmable_irq_support()
1868 ECR_WRITE(pb, oecr); in programmable_irq_support()
1872 static int irq_probe_ECP(struct parport *pb) in irq_probe_ECP() argument
1879 ECR_WRITE(pb, ECR_SPP << 5); /* Reset FIFO */ in irq_probe_ECP()
1880 ECR_WRITE(pb, (ECR_TST << 5) | 0x04); in irq_probe_ECP()
1881 ECR_WRITE(pb, ECR_TST << 5); in irq_probe_ECP()
1884 for (i = 0; i < 1024 && !(inb(ECONTROL(pb)) & 0x02) ; i++) in irq_probe_ECP()
1885 outb(0xaa, FIFO(pb)); in irq_probe_ECP()
1887 pb->irq = probe_irq_off(irqs); in irq_probe_ECP()
1888 ECR_WRITE(pb, ECR_SPP << 5); in irq_probe_ECP()
1890 if (pb->irq <= 0) in irq_probe_ECP()
1891 pb->irq = PARPORT_IRQ_NONE; in irq_probe_ECP()
1893 return pb->irq; in irq_probe_ECP()
1900 static int irq_probe_EPP(struct parport *pb) in irq_probe_EPP() argument
1908 if (pb->modes & PARPORT_MODE_PCECR) in irq_probe_EPP()
1909 oecr = inb(ECONTROL(pb)); in irq_probe_EPP()
1913 if (pb->modes & PARPORT_MODE_PCECR) in irq_probe_EPP()
1914 frob_econtrol(pb, 0x10, 0x10); in irq_probe_EPP()
1916 clear_epp_timeout(pb); in irq_probe_EPP()
1917 parport_pc_frob_control(pb, 0x20, 0x20); in irq_probe_EPP()
1918 parport_pc_frob_control(pb, 0x10, 0x10); in irq_probe_EPP()
1919 clear_epp_timeout(pb); in irq_probe_EPP()
1924 parport_pc_read_epp(pb); in irq_probe_EPP()
1927 pb->irq = probe_irq_off(irqs); in irq_probe_EPP()
1928 if (pb->modes & PARPORT_MODE_PCECR) in irq_probe_EPP()
1929 ECR_WRITE(pb, oecr); in irq_probe_EPP()
1930 parport_pc_write_control(pb, 0xc); in irq_probe_EPP()
1932 if (pb->irq <= 0) in irq_probe_EPP()
1933 pb->irq = PARPORT_IRQ_NONE; in irq_probe_EPP()
1935 return pb->irq; in irq_probe_EPP()
1939 static int irq_probe_SPP(struct parport *pb) in irq_probe_SPP() argument
1952 static int parport_irq_probe(struct parport *pb) in parport_irq_probe() argument
1954 struct parport_pc_private *priv = pb->private_data; in parport_irq_probe()
1957 pb->irq = programmable_irq_support(pb); in parport_irq_probe()
1959 if (pb->irq == PARPORT_IRQ_NONE) in parport_irq_probe()
1960 pb->irq = irq_probe_ECP(pb); in parport_irq_probe()
1963 if ((pb->irq == PARPORT_IRQ_NONE) && priv->ecr && in parport_irq_probe()
1964 (pb->modes & PARPORT_MODE_EPP)) in parport_irq_probe()
1965 pb->irq = irq_probe_EPP(pb); in parport_irq_probe()
1967 clear_epp_timeout(pb); in parport_irq_probe()
1969 if (pb->irq == PARPORT_IRQ_NONE && (pb->modes & PARPORT_MODE_EPP)) in parport_irq_probe()
1970 pb->irq = irq_probe_EPP(pb); in parport_irq_probe()
1972 clear_epp_timeout(pb); in parport_irq_probe()
1974 if (pb->irq == PARPORT_IRQ_NONE) in parport_irq_probe()
1975 pb->irq = irq_probe_SPP(pb); in parport_irq_probe()
1977 if (pb->irq == PARPORT_IRQ_NONE) in parport_irq_probe()
1978 pb->irq = get_superio_irq(pb); in parport_irq_probe()
1980 return pb->irq; in parport_irq_probe()