Lines Matching +full:i2c +full:- +full:retry +full:- +full:count

1 // SPDX-License-Identifier: GPL-2.0-only
32 #include <linux/i2c.h>
35 #include <linux/nvmem-provider.h>
38 #include <linux/hwmon-sysfs.h>
64 dev_dbg(dev, "ds1682_show() called on %s\n", attr->attr.name);
67 rc = i2c_smbus_read_i2c_block_data(client, sattr->index, sattr->nr,
70 return -EIO;
74 if (sattr->index == DS1682_REG_ELAPSED) {
77 /* Detect and retry when a tick occurs mid-read */
79 rc = i2c_smbus_read_i2c_block_data(client, sattr->index,
80 sattr->nr,
83 return -EIO;
87 retries--;
95 return sprintf(buf, "%llu\n", (sattr->nr == 4) ? (val * 250) : val);
99 const char *buf, size_t count)
107 dev_dbg(dev, "ds1682_store() called on %s\n", attr->attr.name);
113 return -EINVAL;
117 * resolution, scale input down to quarter-seconds */
118 if (sattr->nr == 4)
123 rc = i2c_smbus_write_i2c_block_data(client, sattr->index, sattr->nr,
127 sattr->index, sattr->nr);
128 return -EIO;
131 return count;
158 char *buf, loff_t off, size_t count)
163 dev_dbg(&client->dev, "ds1682_eeprom_read(p=%p, off=%lli, c=%zi)\n",
164 buf, off, count);
167 count, buf);
169 return -EIO;
171 return count;
176 char *buf, loff_t off, size_t count)
180 dev_dbg(&client->dev, "ds1682_eeprom_write(p=%p, off=%lli, c=%zi)\n",
181 buf, off, count);
185 count, buf) < 0)
186 return -EIO;
188 return count;
229 .dev = &client->dev,
240 if (!i2c_check_functionality(client->adapter,
242 dev_err(&client->dev, "i2c bus does not support the ds1682\n");
243 rc = -ENODEV;
247 nvmem = devm_nvmem_register(&client->dev, &config);
251 rc = sysfs_create_group(&client->dev.kobj, &ds1682_group);
255 rc = sysfs_create_bin_file(&client->dev.kobj, &ds1682_eeprom_attr);
262 sysfs_remove_group(&client->dev.kobj, &ds1682_group);
269 sysfs_remove_bin_file(&client->dev.kobj, &ds1682_eeprom_attr);
270 sysfs_remove_group(&client->dev.kobj, &ds1682_group);
277 MODULE_DEVICE_TABLE(i2c, ds1682_id);