Lines Matching +full:- +full:33000
1 // SPDX-License-Identifier: GPL-2.0-only
4 * - Based on i2c-piix4.c
5 * Copyright (c) 1998 - 2002 Frodo Looijaard <[email protected]> and
7 * - Intel SCH support
8 * Copyright (c) 2007 - 2008 Jacob Jun Pan <[email protected]>
50 static int backbone_speed = 33000; /* backbone speed in kHz */
52 MODULE_PARM_DESC(backbone_speed, "Backbone speed in kHz, (default = 33000)");
56 return ioread8(priv->smba + offset); in sch_io_rd8()
61 iowrite8(value, priv->smba + offset); in sch_io_wr8()
66 return ioread16(priv->smba + offset); in sch_io_rd16()
71 iowrite16(value, priv->smba + offset); in sch_io_wr16()
75 * sch_transaction - Start the i2c transaction
89 dev_dbg(&adap->dev, in sch_transaction()
100 dev_dbg(&adap->dev, "Completion (%02x). Clear...\n", temp); in sch_transaction()
102 dev_dbg(&adap->dev, "SMBus error (%02x). Resetting...\n", temp); in sch_transaction()
106 dev_err(&adap->dev, "SMBus is not ready: (%02x)\n", temp); in sch_transaction()
107 return -EAGAIN; in sch_transaction()
119 dev_err(&adap->dev, "SMBus Timeout!\n"); in sch_transaction()
121 rc = -EIO; in sch_transaction()
122 dev_dbg(&adap->dev, "Bus collision! SMBus may be locked until next hard reset. (sorry!)\n"); in sch_transaction()
123 /* Clock stops and target is stuck in mid-transmission */ in sch_transaction()
125 rc = -EIO; in sch_transaction()
126 dev_err(&adap->dev, "Error: no response!\n"); in sch_transaction()
128 dev_dbg(&adap->dev, "Post complete!\n"); in sch_transaction()
133 dev_dbg(&adap->dev, in sch_transaction()
137 rc = -ENXIO; in sch_transaction()
138 dev_dbg(&adap->dev, "No such address.\n"); in sch_transaction()
140 dev_dbg(&adap->dev, "Transaction (post): CNT=%02x, CMD=%02x, ADD=%02x, DAT0=%02x, DAT1=%02x\n", in sch_transaction()
148 * sch_access - the main access entry for i2c-sch access
169 dev_dbg(&adap->dev, "SMBus busy (%02x)\n", temp); in sch_access()
170 return -EAGAIN; in sch_access()
180 dev_notice(&adap->dev, "Clock divider uninitialized. Setting defaults\n"); in sch_access()
184 dev_dbg(&adap->dev, "access size: %d %s\n", size, str_read_write(read_write)); in sch_access()
200 sch_io_wr8(priv, SMBHSTDAT0, data->byte); in sch_access()
207 sch_io_wr8(priv, SMBHSTDAT0, data->word >> 0); in sch_access()
208 sch_io_wr8(priv, SMBHSTDAT1, data->word >> 8); in sch_access()
216 len = data->block[0]; in sch_access()
218 return -EINVAL; in sch_access()
221 sch_io_wr8(priv, SMBBLKDAT + i - 1, data->block[i]); in sch_access()
226 dev_warn(&adap->dev, "Unsupported transaction %d\n", size); in sch_access()
227 return -EOPNOTSUPP; in sch_access()
229 dev_dbg(&adap->dev, "write size %d to 0x%04x\n", size, SMBHSTCNT); in sch_access()
245 data->byte = sch_io_rd8(priv, SMBHSTDAT0); in sch_access()
248 data->word = (sch_io_rd8(priv, SMBHSTDAT0) << 0) + in sch_access()
252 data->block[0] = sch_io_rd8(priv, SMBHSTDAT0); in sch_access()
253 if (data->block[0] == 0 || data->block[0] > I2C_SMBUS_BLOCK_MAX) in sch_access()
254 return -EPROTO; in sch_access()
255 for (i = 1; i <= data->block[0]; i++) in sch_access()
256 data->block[i] = sch_io_rd8(priv, SMBBLKDAT + i - 1); in sch_access()
276 struct device *dev = &pdev->dev; in smbus_sch_probe()
282 return -ENOMEM; in smbus_sch_probe()
286 return -EBUSY; in smbus_sch_probe()
288 priv->smba = devm_ioport_map(dev, res->start, resource_size(res)); in smbus_sch_probe()
289 if (!priv->smba) in smbus_sch_probe()
290 return dev_err_probe(dev, -EBUSY, "SMBus region %pR already in use!\n", res); in smbus_sch_probe()
293 priv->adapter.dev.parent = dev; in smbus_sch_probe()
294 priv->adapter.owner = THIS_MODULE; in smbus_sch_probe()
295 priv->adapter.class = I2C_CLASS_HWMON; in smbus_sch_probe()
296 priv->adapter.algo = &smbus_algorithm; in smbus_sch_probe()
298 snprintf(priv->adapter.name, sizeof(priv->adapter.name), in smbus_sch_probe()
299 "SMBus SCH adapter at %04x", (unsigned short)res->start); in smbus_sch_probe()
301 return devm_i2c_add_adapter(dev, &priv->adapter); in smbus_sch_probe()