Lines Matching refs:edev
41 struct eeprom_93xx46_dev *edev; in eeprom_93xx46_bin_read() local
49 edev = dev_get_drvdata(dev); in eeprom_93xx46_bin_read()
51 if (unlikely(off >= edev->bin.size)) in eeprom_93xx46_bin_read()
53 if ((off + count) > edev->bin.size) in eeprom_93xx46_bin_read()
54 count = edev->bin.size - off; in eeprom_93xx46_bin_read()
58 cmd_addr = OP_READ << edev->addrlen; in eeprom_93xx46_bin_read()
60 if (edev->addrlen == 7) { in eeprom_93xx46_bin_read()
68 dev_dbg(&edev->spi->dev, "read cmd 0x%x, %d Hz\n", in eeprom_93xx46_bin_read()
69 cmd_addr, edev->spi->max_speed_hz); in eeprom_93xx46_bin_read()
84 mutex_lock(&edev->lock); in eeprom_93xx46_bin_read()
86 if (edev->pdata->prepare) in eeprom_93xx46_bin_read()
87 edev->pdata->prepare(edev); in eeprom_93xx46_bin_read()
89 ret = spi_sync(edev->spi, &m); in eeprom_93xx46_bin_read()
93 dev_err(&edev->spi->dev, "read %zu bytes at %d: err. %d\n", in eeprom_93xx46_bin_read()
97 if (edev->pdata->finish) in eeprom_93xx46_bin_read()
98 edev->pdata->finish(edev); in eeprom_93xx46_bin_read()
100 mutex_unlock(&edev->lock); in eeprom_93xx46_bin_read()
104 static int eeprom_93xx46_ew(struct eeprom_93xx46_dev *edev, int is_on) in eeprom_93xx46_ew() argument
111 cmd_addr = OP_START << edev->addrlen; in eeprom_93xx46_ew()
112 if (edev->addrlen == 7) { in eeprom_93xx46_ew()
120 dev_dbg(&edev->spi->dev, "ew cmd 0x%04x\n", cmd_addr); in eeprom_93xx46_ew()
130 mutex_lock(&edev->lock); in eeprom_93xx46_ew()
132 if (edev->pdata->prepare) in eeprom_93xx46_ew()
133 edev->pdata->prepare(edev); in eeprom_93xx46_ew()
135 ret = spi_sync(edev->spi, &m); in eeprom_93xx46_ew()
139 dev_err(&edev->spi->dev, "erase/write %sable error %d\n", in eeprom_93xx46_ew()
142 if (edev->pdata->finish) in eeprom_93xx46_ew()
143 edev->pdata->finish(edev); in eeprom_93xx46_ew()
145 mutex_unlock(&edev->lock); in eeprom_93xx46_ew()
150 eeprom_93xx46_write_word(struct eeprom_93xx46_dev *edev, in eeprom_93xx46_write_word() argument
158 cmd_addr = OP_WRITE << edev->addrlen; in eeprom_93xx46_write_word()
160 if (edev->addrlen == 7) { in eeprom_93xx46_write_word()
170 dev_dbg(&edev->spi->dev, "write cmd 0x%x\n", cmd_addr); in eeprom_93xx46_write_word()
185 ret = spi_sync(edev->spi, &m); in eeprom_93xx46_write_word()
196 struct eeprom_93xx46_dev *edev; in eeprom_93xx46_bin_write() local
201 edev = dev_get_drvdata(dev); in eeprom_93xx46_bin_write()
203 if (unlikely(off >= edev->bin.size)) in eeprom_93xx46_bin_write()
205 if ((off + count) > edev->bin.size) in eeprom_93xx46_bin_write()
206 count = edev->bin.size - off; in eeprom_93xx46_bin_write()
211 if (edev->addrlen == 6) { in eeprom_93xx46_bin_write()
217 ret = eeprom_93xx46_ew(edev, 1); in eeprom_93xx46_bin_write()
221 mutex_lock(&edev->lock); in eeprom_93xx46_bin_write()
223 if (edev->pdata->prepare) in eeprom_93xx46_bin_write()
224 edev->pdata->prepare(edev); in eeprom_93xx46_bin_write()
227 ret = eeprom_93xx46_write_word(edev, &buf[i], off + i); in eeprom_93xx46_bin_write()
229 dev_err(&edev->spi->dev, "write failed at %d: %d\n", in eeprom_93xx46_bin_write()
235 if (edev->pdata->finish) in eeprom_93xx46_bin_write()
236 edev->pdata->finish(edev); in eeprom_93xx46_bin_write()
238 mutex_unlock(&edev->lock); in eeprom_93xx46_bin_write()
241 eeprom_93xx46_ew(edev, 0); in eeprom_93xx46_bin_write()
245 static int eeprom_93xx46_eral(struct eeprom_93xx46_dev *edev) in eeprom_93xx46_eral() argument
247 struct eeprom_93xx46_platform_data *pd = edev->pdata; in eeprom_93xx46_eral()
253 cmd_addr = OP_START << edev->addrlen; in eeprom_93xx46_eral()
254 if (edev->addrlen == 7) { in eeprom_93xx46_eral()
270 mutex_lock(&edev->lock); in eeprom_93xx46_eral()
272 if (edev->pdata->prepare) in eeprom_93xx46_eral()
273 edev->pdata->prepare(edev); in eeprom_93xx46_eral()
275 ret = spi_sync(edev->spi, &m); in eeprom_93xx46_eral()
277 dev_err(&edev->spi->dev, "erase error %d\n", ret); in eeprom_93xx46_eral()
282 pd->finish(edev); in eeprom_93xx46_eral()
284 mutex_unlock(&edev->lock); in eeprom_93xx46_eral()
292 struct eeprom_93xx46_dev *edev = dev_get_drvdata(dev); in eeprom_93xx46_store_erase() local
297 ret = eeprom_93xx46_ew(edev, 1); in eeprom_93xx46_store_erase()
300 ret = eeprom_93xx46_eral(edev); in eeprom_93xx46_store_erase()
303 ret = eeprom_93xx46_ew(edev, 0); in eeprom_93xx46_store_erase()
314 struct eeprom_93xx46_dev *edev; in eeprom_93xx46_probe() local
323 edev = kzalloc(sizeof(*edev), GFP_KERNEL); in eeprom_93xx46_probe()
324 if (!edev) in eeprom_93xx46_probe()
328 edev->addrlen = 7; in eeprom_93xx46_probe()
330 edev->addrlen = 6; in eeprom_93xx46_probe()
337 mutex_init(&edev->lock); in eeprom_93xx46_probe()
339 edev->spi = spi_dev_get(spi); in eeprom_93xx46_probe()
340 edev->pdata = pd; in eeprom_93xx46_probe()
342 sysfs_bin_attr_init(&edev->bin); in eeprom_93xx46_probe()
343 edev->bin.attr.name = "eeprom"; in eeprom_93xx46_probe()
344 edev->bin.attr.mode = S_IRUSR; in eeprom_93xx46_probe()
345 edev->bin.read = eeprom_93xx46_bin_read; in eeprom_93xx46_probe()
346 edev->bin.size = 128; in eeprom_93xx46_probe()
348 edev->bin.write = eeprom_93xx46_bin_write; in eeprom_93xx46_probe()
349 edev->bin.attr.mode |= S_IWUSR; in eeprom_93xx46_probe()
352 err = sysfs_create_bin_file(&spi->dev.kobj, &edev->bin); in eeprom_93xx46_probe()
365 spi_set_drvdata(spi, edev); in eeprom_93xx46_probe()
368 kfree(edev); in eeprom_93xx46_probe()
374 struct eeprom_93xx46_dev *edev = spi_get_drvdata(spi); in eeprom_93xx46_remove() local
376 if (!(edev->pdata->flags & EE_READONLY)) in eeprom_93xx46_remove()
379 sysfs_remove_bin_file(&spi->dev.kobj, &edev->bin); in eeprom_93xx46_remove()
380 kfree(edev); in eeprom_93xx46_remove()