Lines Matching +full:i2c +full:- +full:scl +full:- +full:hz
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* ------------------------------------------------------------------------ *
3 * i2c-parport.c I2C bus over parallel port *
4 * ------------------------------------------------------------------------ *
5 Copyright (C) 2003-2011 Jean Delvare <jdelvare@suse.de>
7 Based on older i2c-philips-par.c driver
8 Copyright (C) 1995-2000 Simon G. Vogl
13 * ------------------------------------------------------------------------ */
15 #define pr_fmt(fmt) "i2c-parport: " fmt
22 #include <linux/i2c.h>
23 #include <linux/i2c-algo-bit.h>
24 #include <linux/i2c-smbus.h>
89 /* type 6: Barco LPT->DVI (K5800236) adapter */
104 /* type 8: VCT-jig */
113 /* ----- Device list ------------------------------------------------------ */
128 static int parport[MAX_DEVICE] = {0, -1, -1, -1};
136 static int type = -1;
146 " 6 = Barco LPT->DVI (K5800236) adapter\n"
148 " 8 = VCT-jig\n"
151 /* ----- Low-level parallel port access ----------------------------------- */
190 /* ----- Unified line operation functions --------------------------------- */
195 u8 oldval = port_read[op->port](data); in line_set()
198 if ((op->inverted && !state) || (!op->inverted && state)) in line_set()
199 port_write[op->port](data, oldval | op->val); in line_set()
201 port_write[op->port](data, oldval & ~op->val); in line_set()
207 u8 oldval = port_read[op->port](data); in line_get()
209 return ((op->inverted && (oldval & op->val) != op->val) in line_get()
210 || (!op->inverted && (oldval & op->val) == op->val)); in line_get()
213 /* ----- I2C algorithm call-back functions and structures ----------------- */
238 cannot read SCL back, and will also make the data field point to
246 .timeout = HZ,
249 /* ----- I2c and parallel port call-back functions and structures --------- */
254 struct i2c_client *ara = adapter->ara; in i2c_parport_irq()
257 dev_dbg(&ara->dev, "SMBus alert received\n"); in i2c_parport_irq()
260 dev_dbg(&adapter->adapter.dev, in i2c_parport_irq()
281 if (parport[i] == -1) in i2c_parport_attach()
283 if (port->number == parport[i]) in i2c_parport_attach()
287 pr_debug("Not using parport%d.\n", port->number); in i2c_parport_attach()
299 pr_debug("attaching to %s\n", port->name); in i2c_parport_attach()
301 adapter->pdev = parport_register_dev_model(port, "i2c-parport", in i2c_parport_attach()
303 if (!adapter->pdev) { in i2c_parport_attach()
309 adapter->adapter.owner = THIS_MODULE; in i2c_parport_attach()
310 adapter->adapter.class = I2C_CLASS_HWMON; in i2c_parport_attach()
311 strscpy(adapter->adapter.name, "Parallel port adapter", in i2c_parport_attach()
312 sizeof(adapter->adapter.name)); in i2c_parport_attach()
313 adapter->algo_data = parport_algo_data; in i2c_parport_attach()
314 /* Slow down if we can't sense SCL */ in i2c_parport_attach()
316 adapter->algo_data.getscl = NULL; in i2c_parport_attach()
317 adapter->algo_data.udelay = 50; /* ~10 kbps */ in i2c_parport_attach()
319 adapter->algo_data.data = port; in i2c_parport_attach()
320 adapter->adapter.algo_data = &adapter->algo_data; in i2c_parport_attach()
321 adapter->adapter.dev.parent = port->physport->dev; in i2c_parport_attach()
323 if (parport_claim_or_block(adapter->pdev) < 0) { in i2c_parport_attach()
324 dev_err(&adapter->pdev->dev, in i2c_parport_attach()
329 /* Reset hardware to a sane state (SCL and SDA high) */ in i2c_parport_attach()
339 if (i2c_bit_add_bus(&adapter->adapter) < 0) { in i2c_parport_attach()
340 dev_err(&adapter->pdev->dev, "Unable to register with I2C\n"); in i2c_parport_attach()
348 ara = i2c_new_smbus_alert_device(&adapter->adapter, in i2c_parport_attach()
349 &adapter->alert_data); in i2c_parport_attach()
351 adapter->ara = ara; in i2c_parport_attach()
354 dev_warn(&adapter->pdev->dev, in i2c_parport_attach()
361 list_add_tail(&adapter->node, &adapter_list); in i2c_parport_attach()
366 parport_release(adapter->pdev); in i2c_parport_attach()
367 parport_unregister_device(adapter->pdev); in i2c_parport_attach()
379 if (adapter->pdev->port == port) { in i2c_parport_detach()
380 if (adapter->ara) { in i2c_parport_detach()
382 i2c_unregister_device(adapter->ara); in i2c_parport_detach()
384 i2c_del_adapter(&adapter->adapter); in i2c_parport_detach()
386 /* Un-init if needed (power off...) */ in i2c_parport_detach()
390 parport_release(adapter->pdev); in i2c_parport_detach()
391 parport_unregister_device(adapter->pdev); in i2c_parport_detach()
392 list_del(&adapter->node); in i2c_parport_detach()
400 .name = "i2c-parport",
407 MODULE_DESCRIPTION("I2C bus over parallel port");