Lines Matching refs:pb
113 static void frob_econtrol(struct parport *pb, unsigned char m, in frob_econtrol() argument
119 ectr = inb(ECONTROL(pb)); in frob_econtrol()
124 outb((ectr & ~m) ^ v, ECONTROL(pb)); in frob_econtrol()
208 static int clear_epp_timeout(struct parport *pb) in clear_epp_timeout() argument
212 if (!(parport_pc_read_status(pb) & 0x01)) in clear_epp_timeout()
216 parport_pc_read_status(pb); in clear_epp_timeout()
217 r = parport_pc_read_status(pb); in clear_epp_timeout()
218 outb(r | 0x01, STATUS(pb)); /* Some reset by writing 1 */ in clear_epp_timeout()
219 outb(r & 0xfe, STATUS(pb)); /* Others by writing 0 */ in clear_epp_timeout()
220 r = parport_pc_read_status(pb); in clear_epp_timeout()
1414 static int parport_SPP_supported(struct parport *pb) in parport_SPP_supported() argument
1424 clear_epp_timeout(pb); in parport_SPP_supported()
1428 outb(w, CONTROL(pb)); in parport_SPP_supported()
1435 r = inb(CONTROL(pb)); in parport_SPP_supported()
1438 outb(w, CONTROL(pb)); in parport_SPP_supported()
1439 r = inb(CONTROL(pb)); in parport_SPP_supported()
1440 outb(0xc, CONTROL(pb)); in parport_SPP_supported()
1449 "wrote 0x%02x, read 0x%02x\n", pb->base, w, r); in parport_SPP_supported()
1454 parport_pc_write_data(pb, w); in parport_SPP_supported()
1455 r = parport_pc_read_data(pb); in parport_SPP_supported()
1458 parport_pc_write_data(pb, w); in parport_SPP_supported()
1459 r = parport_pc_read_data(pb); in parport_SPP_supported()
1468 "wrote 0x%02x, read 0x%02x\n", pb->base, w, r); in parport_SPP_supported()
1471 pb->base); in parport_SPP_supported()
1495 static int parport_ECR_present(struct parport *pb) in parport_ECR_present() argument
1497 struct parport_pc_private *priv = pb->private_data; in parport_ECR_present()
1500 outb(r, CONTROL(pb)); in parport_ECR_present()
1501 if ((inb(ECONTROL(pb)) & 0x3) == (r & 0x3)) { in parport_ECR_present()
1502 outb(r ^ 0x2, CONTROL(pb)); /* Toggle bit 1 */ in parport_ECR_present()
1504 r = inb(CONTROL(pb)); in parport_ECR_present()
1505 if ((inb(ECONTROL(pb)) & 0x2) == (r & 0x2)) in parport_ECR_present()
1509 if ((inb(ECONTROL(pb)) & 0x3) != 0x1) in parport_ECR_present()
1512 ECR_WRITE(pb, 0x34); in parport_ECR_present()
1513 if (inb(ECONTROL(pb)) != 0x35) in parport_ECR_present()
1517 outb(0xc, CONTROL(pb)); in parport_ECR_present()
1520 frob_set_mode(pb, ECR_SPP); in parport_ECR_present()
1525 outb(0xc, CONTROL(pb)); in parport_ECR_present()
1547 static int parport_PS2_supported(struct parport *pb) in parport_PS2_supported() argument
1551 clear_epp_timeout(pb); in parport_PS2_supported()
1554 parport_pc_data_reverse(pb); in parport_PS2_supported()
1556 parport_pc_write_data(pb, 0x55); in parport_PS2_supported()
1557 if (parport_pc_read_data(pb) != 0x55) in parport_PS2_supported()
1560 parport_pc_write_data(pb, 0xaa); in parport_PS2_supported()
1561 if (parport_pc_read_data(pb) != 0xaa) in parport_PS2_supported()
1565 parport_pc_data_forward(pb); in parport_PS2_supported()
1568 pb->modes |= PARPORT_MODE_TRISTATE; in parport_PS2_supported()
1570 struct parport_pc_private *priv = pb->private_data; in parport_PS2_supported()
1578 static int parport_ECP_supported(struct parport *pb) in parport_ECP_supported() argument
1583 struct parport_pc_private *priv = pb->private_data; in parport_ECP_supported()
1592 ECR_WRITE(pb, ECR_SPP << 5); /* Reset FIFO */ in parport_ECP_supported()
1593 ECR_WRITE(pb, ECR_TST << 5); /* TEST FIFO */ in parport_ECP_supported()
1594 for (i = 0; i < 1024 && !(inb(ECONTROL(pb)) & 0x02); i++) in parport_ECP_supported()
1595 outb(0xaa, FIFO(pb)); in parport_ECP_supported()
1602 ECR_WRITE(pb, ECR_SPP << 5); in parport_ECP_supported()
1608 printk(KERN_DEBUG "0x%lx: FIFO is %d bytes\n", pb->base, i); in parport_ECP_supported()
1611 frob_econtrol(pb, 1<<2, 1<<2); in parport_ECP_supported()
1612 frob_econtrol(pb, 1<<2, 0); in parport_ECP_supported()
1614 inb(FIFO(pb)); in parport_ECP_supported()
1616 if (inb(ECONTROL(pb)) & (1<<2)) in parport_ECP_supported()
1623 pb->base, i); in parport_ECP_supported()
1632 frob_set_mode(pb, ECR_PS2); /* Reset FIFO and enable PS2 */ in parport_ECP_supported()
1633 parport_pc_data_reverse(pb); /* Must be in PS2 mode */ in parport_ECP_supported()
1634 frob_set_mode(pb, ECR_TST); /* Test FIFO */ in parport_ECP_supported()
1635 frob_econtrol(pb, 1<<2, 1<<2); in parport_ECP_supported()
1636 frob_econtrol(pb, 1<<2, 0); in parport_ECP_supported()
1638 outb(0xaa, FIFO(pb)); in parport_ECP_supported()
1639 if (inb(ECONTROL(pb)) & (1<<2)) in parport_ECP_supported()
1646 pb->base, i); in parport_ECP_supported()
1653 ECR_WRITE(pb, ECR_SPP << 5); /* Reset FIFO */ in parport_ECP_supported()
1654 ECR_WRITE(pb, 0xf4); /* Configuration mode */ in parport_ECP_supported()
1655 config = inb(CONFIGA(pb)); in parport_ECP_supported()
1661 pb->base); in parport_ECP_supported()
1666 pb->base); in parport_ECP_supported()
1670 pb->base); in parport_ECP_supported()
1679 pb->base, 8 * pword); in parport_ECP_supported()
1681 printk(KERN_DEBUG "0x%lx: Interrupts are ISA-%s\n", pb->base, in parport_ECP_supported()
1684 configb = inb(CONFIGB(pb)); in parport_ECP_supported()
1686 pb->base, config, configb); in parport_ECP_supported()
1687 printk(KERN_DEBUG "0x%lx: ECP settings irq=", pb->base); in parport_ECP_supported()
1700 frob_set_mode(pb, ECR_SPP); in parport_ECP_supported()
1707 static int intel_bug_present_check_epp(struct parport *pb) in intel_bug_present_check_epp() argument
1709 const struct parport_pc_private *priv = pb->private_data; in intel_bug_present_check_epp()
1714 unsigned char ecr = inb(ECONTROL(pb)); in intel_bug_present_check_epp()
1717 ECR_WRITE(pb, i); in intel_bug_present_check_epp()
1718 if (clear_epp_timeout(pb)) { in intel_bug_present_check_epp()
1725 ECR_WRITE(pb, ecr); in intel_bug_present_check_epp()
1730 static int intel_bug_present(struct parport *pb) in intel_bug_present() argument
1733 if (pb->dev != NULL) { in intel_bug_present()
1737 return intel_bug_present_check_epp(pb); in intel_bug_present()
1740 static int intel_bug_present(struct parport *pb) in intel_bug_present() argument
1746 static int parport_ECPPS2_supported(struct parport *pb) in parport_ECPPS2_supported() argument
1748 const struct parport_pc_private *priv = pb->private_data; in parport_ECPPS2_supported()
1755 oecr = inb(ECONTROL(pb)); in parport_ECPPS2_supported()
1756 ECR_WRITE(pb, ECR_PS2 << 5); in parport_ECPPS2_supported()
1757 result = parport_PS2_supported(pb); in parport_ECPPS2_supported()
1758 ECR_WRITE(pb, oecr); in parport_ECPPS2_supported()
1764 static int parport_EPP_supported(struct parport *pb) in parport_EPP_supported() argument
1780 if (!clear_epp_timeout(pb)) in parport_EPP_supported()
1784 if (intel_bug_present(pb)) in parport_EPP_supported()
1787 pb->modes |= PARPORT_MODE_EPP; in parport_EPP_supported()
1790 pb->ops->epp_read_data = parport_pc_epp_read_data; in parport_EPP_supported()
1791 pb->ops->epp_write_data = parport_pc_epp_write_data; in parport_EPP_supported()
1792 pb->ops->epp_read_addr = parport_pc_epp_read_addr; in parport_EPP_supported()
1793 pb->ops->epp_write_addr = parport_pc_epp_write_addr; in parport_EPP_supported()
1798 static int parport_ECPEPP_supported(struct parport *pb) in parport_ECPEPP_supported() argument
1800 struct parport_pc_private *priv = pb->private_data; in parport_ECPEPP_supported()
1807 oecr = inb(ECONTROL(pb)); in parport_ECPEPP_supported()
1809 ECR_WRITE(pb, 0x80); in parport_ECPEPP_supported()
1810 outb(0x04, CONTROL(pb)); in parport_ECPEPP_supported()
1811 result = parport_EPP_supported(pb); in parport_ECPEPP_supported()
1813 ECR_WRITE(pb, oecr); in parport_ECPEPP_supported()
1817 pb->ops->epp_read_data = parport_pc_ecpepp_read_data; in parport_ECPEPP_supported()
1818 pb->ops->epp_write_data = parport_pc_ecpepp_write_data; in parport_ECPEPP_supported()
1819 pb->ops->epp_read_addr = parport_pc_ecpepp_read_addr; in parport_ECPEPP_supported()
1820 pb->ops->epp_write_addr = parport_pc_ecpepp_write_addr; in parport_ECPEPP_supported()
1829 static int parport_PS2_supported(struct parport *pb) { return 0; } in parport_PS2_supported() argument
1831 static int parport_ECP_supported(struct parport *pb) in parport_ECP_supported() argument
1836 static int parport_EPP_supported(struct parport *pb) in parport_EPP_supported() argument
1841 static int parport_ECPEPP_supported(struct parport *pb) in parport_ECPEPP_supported() argument
1846 static int parport_ECPPS2_supported(struct parport *pb) in parport_ECPPS2_supported() argument
1856 static int programmable_irq_support(struct parport *pb) in programmable_irq_support() argument
1859 unsigned char oecr = inb(ECONTROL(pb)); in programmable_irq_support()
1864 ECR_WRITE(pb, ECR_CNF << 5); /* Configuration MODE */ in programmable_irq_support()
1866 intrLine = (inb(CONFIGB(pb)) >> 3) & 0x07; in programmable_irq_support()
1869 ECR_WRITE(pb, oecr); in programmable_irq_support()
1873 static int irq_probe_ECP(struct parport *pb) in irq_probe_ECP() argument
1880 ECR_WRITE(pb, ECR_SPP << 5); /* Reset FIFO */ in irq_probe_ECP()
1881 ECR_WRITE(pb, (ECR_TST << 5) | 0x04); in irq_probe_ECP()
1882 ECR_WRITE(pb, ECR_TST << 5); in irq_probe_ECP()
1885 for (i = 0; i < 1024 && !(inb(ECONTROL(pb)) & 0x02) ; i++) in irq_probe_ECP()
1886 outb(0xaa, FIFO(pb)); in irq_probe_ECP()
1888 pb->irq = probe_irq_off(irqs); in irq_probe_ECP()
1889 ECR_WRITE(pb, ECR_SPP << 5); in irq_probe_ECP()
1891 if (pb->irq <= 0) in irq_probe_ECP()
1892 pb->irq = PARPORT_IRQ_NONE; in irq_probe_ECP()
1894 return pb->irq; in irq_probe_ECP()
1901 static int irq_probe_EPP(struct parport *pb) in irq_probe_EPP() argument
1909 if (pb->modes & PARPORT_MODE_PCECR) in irq_probe_EPP()
1910 oecr = inb(ECONTROL(pb)); in irq_probe_EPP()
1914 if (pb->modes & PARPORT_MODE_PCECR) in irq_probe_EPP()
1915 frob_econtrol(pb, 0x10, 0x10); in irq_probe_EPP()
1917 clear_epp_timeout(pb); in irq_probe_EPP()
1918 parport_pc_frob_control(pb, 0x20, 0x20); in irq_probe_EPP()
1919 parport_pc_frob_control(pb, 0x10, 0x10); in irq_probe_EPP()
1920 clear_epp_timeout(pb); in irq_probe_EPP()
1925 parport_pc_read_epp(pb); in irq_probe_EPP()
1928 pb->irq = probe_irq_off(irqs); in irq_probe_EPP()
1929 if (pb->modes & PARPORT_MODE_PCECR) in irq_probe_EPP()
1930 ECR_WRITE(pb, oecr); in irq_probe_EPP()
1931 parport_pc_write_control(pb, 0xc); in irq_probe_EPP()
1933 if (pb->irq <= 0) in irq_probe_EPP()
1934 pb->irq = PARPORT_IRQ_NONE; in irq_probe_EPP()
1936 return pb->irq; in irq_probe_EPP()
1940 static int irq_probe_SPP(struct parport *pb) in irq_probe_SPP() argument
1953 static int parport_irq_probe(struct parport *pb) in parport_irq_probe() argument
1955 struct parport_pc_private *priv = pb->private_data; in parport_irq_probe()
1958 pb->irq = programmable_irq_support(pb); in parport_irq_probe()
1960 if (pb->irq == PARPORT_IRQ_NONE) in parport_irq_probe()
1961 pb->irq = irq_probe_ECP(pb); in parport_irq_probe()
1964 if ((pb->irq == PARPORT_IRQ_NONE) && priv->ecr && in parport_irq_probe()
1965 (pb->modes & PARPORT_MODE_EPP)) in parport_irq_probe()
1966 pb->irq = irq_probe_EPP(pb); in parport_irq_probe()
1968 clear_epp_timeout(pb); in parport_irq_probe()
1970 if (pb->irq == PARPORT_IRQ_NONE && (pb->modes & PARPORT_MODE_EPP)) in parport_irq_probe()
1971 pb->irq = irq_probe_EPP(pb); in parport_irq_probe()
1973 clear_epp_timeout(pb); in parport_irq_probe()
1975 if (pb->irq == PARPORT_IRQ_NONE) in parport_irq_probe()
1976 pb->irq = irq_probe_SPP(pb); in parport_irq_probe()
1978 if (pb->irq == PARPORT_IRQ_NONE) in parport_irq_probe()
1979 pb->irq = get_superio_irq(pb); in parport_irq_probe()
1981 return pb->irq; in parport_irq_probe()