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

4  * SPDX-License-Identifier:	GPL-2.0
9 * and 4 programmable non-volatile GPIO pins.
33 static int ds4510_mem_write(uint8_t chip, int offset, uint8_t *buf, int count) in ds4510_mem_write() argument
39 wrlen = DS4510_EEPROM_PAGE_SIZE - in ds4510_mem_write()
43 if (i2c_write(chip, offset, 1, &buf[i], wrlen)) in ds4510_mem_write()
44 return -1; in ds4510_mem_write()
51 count -= wrlen; in ds4510_mem_write()
62 static int ds4510_mem_read(uint8_t chip, int offset, uint8_t *buf, int count) in ds4510_mem_read() argument
64 return i2c_read(chip, offset, 1, buf, count); in ds4510_mem_read()
69 * nv = 0 - Writes to SEEPROM registers behave like EEPROM
70 * nv = 1 - Writes to SEEPROM registers behave like SRAM
72 static int ds4510_see_write(uint8_t chip, uint8_t nv) in ds4510_see_write() argument
76 if (i2c_read(chip, DS4510_CFG, 1, &data, 1)) in ds4510_see_write()
77 return -1; in ds4510_see_write()
84 return ds4510_mem_write(chip, DS4510_CFG, &data, 1); in ds4510_see_write()
88 * Write de-assertion of reset signal delay
90 static int ds4510_rstdelay_write(uint8_t chip, uint8_t delay) in ds4510_rstdelay_write() argument
94 if (i2c_read(chip, DS4510_RSTDELAY, 1, &data, 1)) in ds4510_rstdelay_write()
95 return -1; in ds4510_rstdelay_write()
100 return ds4510_mem_write(chip, DS4510_RSTDELAY, &data, 1); in ds4510_rstdelay_write()
106 static int ds4510_pullup_write(uint8_t chip, uint8_t val) in ds4510_pullup_write() argument
110 return ds4510_mem_write(chip, DS4510_PULLUP, (uint8_t *)&val, 1); in ds4510_pullup_write()
116 static int ds4510_pullup_read(uint8_t chip) in ds4510_pullup_read() argument
120 if (i2c_read(chip, DS4510_PULLUP, 1, &val, 1)) in ds4510_pullup_read()
121 return -1; in ds4510_pullup_read()
129 static int ds4510_gpio_write(uint8_t chip, uint8_t val) in ds4510_gpio_write() argument
135 if (i2c_read(chip, DS4510_IO0 - i, 1, &data, 1)) in ds4510_gpio_write()
136 return -1; in ds4510_gpio_write()
143 if (ds4510_mem_write(chip, DS4510_IO0 - i, &data, 1)) in ds4510_gpio_write()
144 return -1; in ds4510_gpio_write()
153 static int ds4510_gpio_read(uint8_t chip) in ds4510_gpio_read() argument
160 if (i2c_read(chip, DS4510_IO0 - i, 1, &data, 1)) in ds4510_gpio_read()
161 return -1; in ds4510_gpio_read()
173 static int ds4510_gpio_read_val(uint8_t chip) in ds4510_gpio_read_val() argument
177 if (i2c_read(chip, DS4510_IO_STATUS, 1, &val, 1)) in ds4510_gpio_read_val()
178 return -1; in ds4510_gpio_read_val()
186 static int ds4510_info(uint8_t chip) in ds4510_info() argument
192 printf("DS4510 @ 0x%x:\n\n", chip); in ds4510_info()
194 if (i2c_read(chip, DS4510_RSTDELAY, 1, &data, 1)) in ds4510_info()
195 return -1; in ds4510_info()
198 if (i2c_read(chip, DS4510_CFG, 1, &data, 1)) in ds4510_info()
199 return -1; in ds4510_info()
208 printf("---------------\n"); in ds4510_info()
211 tmp = ds4510_pullup_read(chip); in ds4510_info()
212 if (tmp == -1) in ds4510_info()
214 for (i = DS4510_NUM_IO - 1; i >= 0; i--) in ds4510_info()
219 tmp = ds4510_gpio_read(chip); in ds4510_info()
220 if (tmp == -1) in ds4510_info()
221 return -1; in ds4510_info()
222 for (i = DS4510_NUM_IO - 1; i >= 0; i--) in ds4510_info()
227 tmp = ds4510_gpio_read_val(chip); in ds4510_info()
228 if (tmp == -1) in ds4510_info()
229 return -1; in ds4510_info()
230 for (i = DS4510_NUM_IO - 1; i >= 0; i--) in ds4510_info()
252 static uint8_t chip = 0x51; in do_ds4510() local
258 ulong off; in do_ds4510() local
266 if (!c || !((argc == (c->maxargs)) || in do_ds4510()
267 (((int)c->cmd == DS4510_CMD_DEVICE) && in do_ds4510()
268 (argc == (c->maxargs - 1))))) { in do_ds4510()
272 /* arg2 used as chip addr and pin number */ in do_ds4510()
280 switch ((int)c->cmd) { in do_ds4510()
283 chip = ul_arg2; in do_ds4510()
284 printf("Current device address: 0x%x\n", chip); in do_ds4510()
287 return ds4510_see_write(chip, ul_arg2); in do_ds4510()
289 tmp = ds4510_gpio_read(chip); in do_ds4510()
290 if (tmp == -1) in do_ds4510()
291 return -1; in do_ds4510()
296 return ds4510_gpio_write(chip, tmp); in do_ds4510()
298 tmp = ds4510_gpio_read_val(chip); in do_ds4510()
299 if (tmp == -1) in do_ds4510()
300 return -1; in do_ds4510()
303 tmp = ds4510_pullup_read(chip); in do_ds4510()
304 if (tmp == -1) in do_ds4510()
305 return -1; in do_ds4510()
310 return ds4510_pullup_write(chip, tmp); in do_ds4510()
312 return ds4510_info(chip); in do_ds4510()
314 return ds4510_rstdelay_write(chip, ul_arg2); in do_ds4510()
317 off = DS4510_EEPROM; in do_ds4510()
321 off = DS4510_SEEPROM; in do_ds4510()
325 off = DS4510_SRAM; in do_ds4510()
341 off += simple_strtoul(argv[4], NULL, 16); in do_ds4510()
344 if ((off + cnt) > end) { in do_ds4510()
346 return -1; in do_ds4510()
349 return rw_func(chip, off, (uint8_t *)addr, cnt); in do_ds4510()
356 " - show or set current device address\n"
358 " - display ds4510 info\n"
360 " - set pin low or high-Z\n"
362 " - read value of pin\n"
364 " - disable/enable pullup on specified pin\n"
366 " - make gpio and seeprom writes volatile/non-volatile"
368 "ds4510 rstdelay 0-3\n"
369 " - set reset output delay"
371 "ds4510 eeprom read addr off cnt\n"
372 "ds4510 eeprom write addr off cnt\n"
373 " - read/write 'cnt' bytes at EEPROM offset 'off'\n"
374 "ds4510 seeprom read addr off cnt\n"
375 "ds4510 seeprom write addr off cnt\n"
376 " - read/write 'cnt' bytes at SRAM-shadowed EEPROM offset 'off'\n"
377 "ds4510 sram read addr off cnt\n"
378 "ds4510 sram write addr off cnt\n"
379 " - read/write 'cnt' bytes at SRAM offset 'off'"