static void c2port_write_ar(struct c2port_device *dev, u8 addr) { struct c2port_ops *ops = dev->ops; int i; /* START field */ c2port_strobe_ck(dev); /* INS field (11b, LSB first) */ ops->c2d_dir(dev, 0); ops->c2d_set(dev, 1); c2port_strobe_ck(dev); ops->c2d_set(dev, 1); c2port_strobe_ck(dev); /* ADDRESS field */ for (i = 0; i < 8; i++) { ops->c2d_set(dev, addr & 0x01); c2port_strobe_ck(dev); addr >>= 1; } /* STOP field */ ops->c2d_dir(dev, 1); c2port_strobe_ck(dev); }
static int c2port_read_ar(struct c2port_device *dev, u8 *addr) { struct c2port_ops *ops = dev->ops; int i; /* START field */ c2port_strobe_ck(dev); /* INS field (10b, LSB first) */ ops->c2d_dir(dev, 0); ops->c2d_set(dev, 0); c2port_strobe_ck(dev); ops->c2d_set(dev, 1); c2port_strobe_ck(dev); /* ADDRESS field */ ops->c2d_dir(dev, 1); *addr = 0; for (i = 0; i < 8; i++) { *addr >>= 1; /* shift in 8-bit ADDRESS field LSB first */ c2port_strobe_ck(dev); if (ops->c2d_get(dev)) *addr |= 0x80; } /* STOP field */ c2port_strobe_ck(dev); return 0; }
static void c2port_write_ar(struct c2port_device *dev, u8 addr) { struct c2port_ops *ops = dev->ops; int i; c2port_strobe_ck(dev); ops->c2d_dir(dev, 0); ops->c2d_set(dev, 1); c2port_strobe_ck(dev); ops->c2d_set(dev, 1); c2port_strobe_ck(dev); for (i = 0; i < 8; i++) { ops->c2d_set(dev, addr & 0x01); c2port_strobe_ck(dev); addr >>= 1; } ops->c2d_dir(dev, 1); c2port_strobe_ck(dev); }
static int c2port_read_ar(struct c2port_device *dev, u8 *addr) { struct c2port_ops *ops = dev->ops; int i; c2port_strobe_ck(dev); ops->c2d_dir(dev, 0); ops->c2d_set(dev, 0); c2port_strobe_ck(dev); ops->c2d_set(dev, 1); c2port_strobe_ck(dev); ops->c2d_dir(dev, 1); *addr = 0; for (i = 0; i < 8; i++) { *addr >>= 1; c2port_strobe_ck(dev); if (ops->c2d_get(dev)) *addr |= 0x80; } c2port_strobe_ck(dev); return 0; }
static int c2port_read_dr(struct c2port_device *dev, u8 *data) { struct c2port_ops *ops = dev->ops; int timeout, i; /* START field */ c2port_strobe_ck(dev); /* INS field (00b, LSB first) */ ops->c2d_dir(dev, 0); ops->c2d_set(dev, 0); c2port_strobe_ck(dev); ops->c2d_set(dev, 0); c2port_strobe_ck(dev); /* LENGTH field (00b, LSB first -> 1 byte) */ ops->c2d_set(dev, 0); c2port_strobe_ck(dev); ops->c2d_set(dev, 0); c2port_strobe_ck(dev); /* WAIT field */ ops->c2d_dir(dev, 1); timeout = 20; do { c2port_strobe_ck(dev); if (ops->c2d_get(dev)) break; udelay(1); } while (--timeout > 0); if (timeout == 0) return -EIO; /* DATA field */ *data = 0; for (i = 0; i < 8; i++) { *data >>= 1; /* shift in 8-bit DATA field LSB first */ c2port_strobe_ck(dev); if (ops->c2d_get(dev)) *data |= 0x80; } /* STOP field */ c2port_strobe_ck(dev); return 0; }
static int c2port_read_dr(struct c2port_device *dev, u8 *data) { struct c2port_ops *ops = dev->ops; int timeout, i; c2port_strobe_ck(dev); ops->c2d_dir(dev, 0); ops->c2d_set(dev, 0); c2port_strobe_ck(dev); ops->c2d_set(dev, 0); c2port_strobe_ck(dev); ops->c2d_set(dev, 0); c2port_strobe_ck(dev); ops->c2d_set(dev, 0); c2port_strobe_ck(dev); ops->c2d_dir(dev, 1); timeout = 20; do { c2port_strobe_ck(dev); if (ops->c2d_get(dev)) break; udelay(1); } while (--timeout > 0); if (timeout == 0) return -EIO; *data = 0; for (i = 0; i < 8; i++) { *data >>= 1; c2port_strobe_ck(dev); if (ops->c2d_get(dev)) *data |= 0x80; } c2port_strobe_ck(dev); return 0; }
static int c2port_write_dr(struct c2port_device *dev, u8 data) { struct c2port_ops *ops = dev->ops; int timeout, i; /* START field */ c2port_strobe_ck(dev); /* INS field (01b, LSB first) */ ops->c2d_dir(dev, 0); ops->c2d_set(dev, 1); c2port_strobe_ck(dev); ops->c2d_set(dev, 0); c2port_strobe_ck(dev); /* LENGTH field (00b, LSB first -> 1 byte) */ ops->c2d_set(dev, 0); c2port_strobe_ck(dev); ops->c2d_set(dev, 0); c2port_strobe_ck(dev); /* DATA field */ for (i = 0; i < 8; i++) { ops->c2d_set(dev, data & 0x01); c2port_strobe_ck(dev); data >>= 1; } /* WAIT field */ ops->c2d_dir(dev, 1); timeout = 20; do { c2port_strobe_ck(dev); if (ops->c2d_get(dev)) break; udelay(1); } while (--timeout > 0); if (timeout == 0) return -EIO; /* STOP field */ c2port_strobe_ck(dev); return 0; }
static int c2port_write_dr(struct c2port_device *dev, u8 data) { struct c2port_ops *ops = dev->ops; int timeout, i; c2port_strobe_ck(dev); ops->c2d_dir(dev, 0); ops->c2d_set(dev, 1); c2port_strobe_ck(dev); ops->c2d_set(dev, 0); c2port_strobe_ck(dev); ops->c2d_set(dev, 0); c2port_strobe_ck(dev); ops->c2d_set(dev, 0); c2port_strobe_ck(dev); for (i = 0; i < 8; i++) { ops->c2d_set(dev, data & 0x01); c2port_strobe_ck(dev); data >>= 1; } ops->c2d_dir(dev, 1); timeout = 20; do { c2port_strobe_ck(dev); if (ops->c2d_get(dev)) break; udelay(1); } while (--timeout > 0); if (timeout == 0) return -EIO; c2port_strobe_ck(dev); return 0; }