Lines Matching +full:off +full:- +full:chip

1 // SPDX-License-Identifier: GPL-2.0
8 * and 4 programmable non-volatile GPIO pins.
32 static int ds4510_mem_write(uint8_t chip, int offset, uint8_t *buf, int count) in ds4510_mem_write() argument
38 wrlen = DS4510_EEPROM_PAGE_SIZE - in ds4510_mem_write()
42 if (i2c_write(chip, offset, 1, &buf[i], wrlen)) in ds4510_mem_write()
43 return -1; in ds4510_mem_write()
50 count -= wrlen; in ds4510_mem_write()
61 static int ds4510_mem_read(uint8_t chip, int offset, uint8_t *buf, int count) in ds4510_mem_read() argument
63 return i2c_read(chip, offset, 1, buf, count); in ds4510_mem_read()
68 * nv = 0 - Writes to SEEPROM registers behave like EEPROM
69 * nv = 1 - Writes to SEEPROM registers behave like SRAM
71 static int ds4510_see_write(uint8_t chip, uint8_t nv) in ds4510_see_write() argument
75 if (i2c_read(chip, DS4510_CFG, 1, &data, 1)) in ds4510_see_write()
76 return -1; in ds4510_see_write()
83 return ds4510_mem_write(chip, DS4510_CFG, &data, 1); in ds4510_see_write()
87 * Write de-assertion of reset signal delay
89 static int ds4510_rstdelay_write(uint8_t chip, uint8_t delay) in ds4510_rstdelay_write() argument
93 if (i2c_read(chip, DS4510_RSTDELAY, 1, &data, 1)) in ds4510_rstdelay_write()
94 return -1; in ds4510_rstdelay_write()
99 return ds4510_mem_write(chip, DS4510_RSTDELAY, &data, 1); in ds4510_rstdelay_write()
105 static int ds4510_pullup_write(uint8_t chip, uint8_t val) in ds4510_pullup_write() argument
109 return ds4510_mem_write(chip, DS4510_PULLUP, (uint8_t *)&val, 1); in ds4510_pullup_write()
115 static int ds4510_pullup_read(uint8_t chip) in ds4510_pullup_read() argument
119 if (i2c_read(chip, DS4510_PULLUP, 1, &val, 1)) in ds4510_pullup_read()
120 return -1; in ds4510_pullup_read()
128 static int ds4510_gpio_write(uint8_t chip, uint8_t val) in ds4510_gpio_write() argument
134 if (i2c_read(chip, DS4510_IO0 - i, 1, &data, 1)) in ds4510_gpio_write()
135 return -1; in ds4510_gpio_write()
142 if (ds4510_mem_write(chip, DS4510_IO0 - i, &data, 1)) in ds4510_gpio_write()
143 return -1; in ds4510_gpio_write()
152 static int ds4510_gpio_read(uint8_t chip) in ds4510_gpio_read() argument
159 if (i2c_read(chip, DS4510_IO0 - i, 1, &data, 1)) in ds4510_gpio_read()
160 return -1; in ds4510_gpio_read()
172 static int ds4510_gpio_read_val(uint8_t chip) in ds4510_gpio_read_val() argument
176 if (i2c_read(chip, DS4510_IO_STATUS, 1, &val, 1)) in ds4510_gpio_read_val()
177 return -1; in ds4510_gpio_read_val()
185 static int ds4510_info(uint8_t chip) in ds4510_info() argument
191 printf("DS4510 @ 0x%x:\n\n", chip); in ds4510_info()
193 if (i2c_read(chip, DS4510_RSTDELAY, 1, &data, 1)) in ds4510_info()
194 return -1; in ds4510_info()
197 if (i2c_read(chip, DS4510_CFG, 1, &data, 1)) in ds4510_info()
198 return -1; in ds4510_info()
207 printf("---------------\n"); in ds4510_info()
210 tmp = ds4510_pullup_read(chip); in ds4510_info()
211 if (tmp == -1) in ds4510_info()
213 for (i = DS4510_NUM_IO - 1; i >= 0; i--) in ds4510_info()
218 tmp = ds4510_gpio_read(chip); in ds4510_info()
219 if (tmp == -1) in ds4510_info()
220 return -1; in ds4510_info()
221 for (i = DS4510_NUM_IO - 1; i >= 0; i--) in ds4510_info()
226 tmp = ds4510_gpio_read_val(chip); in ds4510_info()
227 if (tmp == -1) in ds4510_info()
228 return -1; in ds4510_info()
229 for (i = DS4510_NUM_IO - 1; i >= 0; i--) in ds4510_info()
251 static uint8_t chip = 0x51; in do_ds4510() local
257 ulong off; in do_ds4510() local
265 if (!c || !((argc == (c->maxargs)) || in do_ds4510()
266 (((int)c->cmd == DS4510_CMD_DEVICE) && in do_ds4510()
267 (argc == (c->maxargs - 1))))) { in do_ds4510()
271 /* arg2 used as chip addr and pin number */ in do_ds4510()
279 switch ((int)c->cmd) { in do_ds4510()
282 chip = ul_arg2; in do_ds4510()
283 printf("Current device address: 0x%x\n", chip); in do_ds4510()
286 return ds4510_see_write(chip, ul_arg2); in do_ds4510()
288 tmp = ds4510_gpio_read(chip); in do_ds4510()
289 if (tmp == -1) in do_ds4510()
290 return -1; in do_ds4510()
295 return ds4510_gpio_write(chip, tmp); in do_ds4510()
297 tmp = ds4510_gpio_read_val(chip); in do_ds4510()
298 if (tmp == -1) in do_ds4510()
299 return -1; in do_ds4510()
302 tmp = ds4510_pullup_read(chip); in do_ds4510()
303 if (tmp == -1) in do_ds4510()
304 return -1; in do_ds4510()
309 return ds4510_pullup_write(chip, tmp); in do_ds4510()
311 return ds4510_info(chip); in do_ds4510()
313 return ds4510_rstdelay_write(chip, ul_arg2); in do_ds4510()
316 off = DS4510_EEPROM; in do_ds4510()
320 off = DS4510_SEEPROM; in do_ds4510()
324 off = DS4510_SRAM; in do_ds4510()
340 off += simple_strtoul(argv[4], NULL, 16); in do_ds4510()
343 if ((off + cnt) > end) { in do_ds4510()
345 return -1; in do_ds4510()
348 return rw_func(chip, off, (uint8_t *)addr, cnt); in do_ds4510()
355 " - show or set current device address\n"
357 " - display ds4510 info\n"
359 " - set pin low or high-Z\n"
361 " - read value of pin\n"
363 " - disable/enable pullup on specified pin\n"
365 " - make gpio and seeprom writes volatile/non-volatile"
367 "ds4510 rstdelay 0-3\n"
368 " - set reset output delay"
370 "ds4510 eeprom read addr off cnt\n"
371 "ds4510 eeprom write addr off cnt\n"
372 " - read/write 'cnt' bytes at EEPROM offset 'off'\n"
373 "ds4510 seeprom read addr off cnt\n"
374 "ds4510 seeprom write addr off cnt\n"
375 " - read/write 'cnt' bytes at SRAM-shadowed EEPROM offset 'off'\n"
376 "ds4510 sram read addr off cnt\n"
377 "ds4510 sram write addr off cnt\n"
378 " - read/write 'cnt' bytes at SRAM offset 'off'"