Lines Matching defs:spi

15 #include <linux/spi/spi.h>
59 static int ezport_start_programming(struct spi_device *spi, struct gpio_desc *reset)
68 spi_bus_lock(spi->controller);
73 ret = spi_sync_locked(spi, &msg);
85 ret = spi_sync_locked(spi, &msg);
88 spi_bus_unlock(spi->controller);
92 static void ezport_stop_programming(struct spi_device *spi, struct gpio_desc *reset)
95 spi_bus_lock(spi->controller);
97 spi_bus_unlock(spi->controller);
100 static int ezport_get_status_register(struct spi_device *spi)
104 ret = spi_w8r8(spi, EZPORT_CMD_RDSR);
108 dev_err(&spi->dev, "Invalid EzPort status, EzPort is not functional!\n");
115 static int ezport_soft_reset(struct spi_device *spi)
120 ret = spi_write(spi, &cmd, 1);
129 static int ezport_send_simple(struct spi_device *spi, u8 cmd)
133 ret = spi_write(spi, &cmd, 1);
137 return ezport_get_status_register(spi);
140 static int ezport_wait_write(struct spi_device *spi, u32 retries)
146 ret = ezport_get_status_register(spi);
155 static int ezport_write_enable(struct spi_device *spi)
160 ret = ezport_send_simple(spi, EZPORT_CMD_WREN);
166 dev_err(&spi->dev, "EzPort write enable timed out\n");
172 static int ezport_bulk_erase(struct spi_device *spi)
177 dev_dbg(&spi->dev, "EzPort bulk erase...\n");
179 ret = ezport_write_enable(spi);
183 ret = spi_write(spi, &cmd, 1);
187 ret = ezport_wait_write(spi, 1000);
194 static int ezport_section_erase(struct spi_device *spi, u32 address)
199 dev_dbg(&spi->dev, "Ezport section erase @ 0x%06x...\n", address);
204 ret = ezport_write_enable(spi);
208 ret = spi_write(spi, query, sizeof(query));
212 return ezport_wait_write(spi, 200);
215 static int ezport_flash_transfer(struct spi_device *spi, u32 address,
222 dev_dbg(&spi->dev, "EzPort write %zu bytes @ 0x%06x...\n", payload_size, address);
224 ret = ezport_write_enable(spi);
243 ret = spi_sync_transfer(spi, xfers, 2);
248 return ezport_wait_write(spi, 40);
251 static int ezport_flash_compare(struct spi_device *spi, u32 address,
275 ret = spi_sync_transfer(spi, xfers, 2);
283 dev_dbg(&spi->dev, "Verification failure @ %06x", address);
293 static int ezport_firmware_compare_data(struct spi_device *spi,
300 dev_dbg(&spi->dev, "EzPort compare data with %zu bytes...\n", size);
302 ret = ezport_get_status_register(spi);
307 dev_info(&spi->dev, "Device is in secure mode (status=0x%02x)!\n", ret);
308 dev_info(&spi->dev, "FW verification is not possible\n");
315 ret = ezport_flash_compare(spi, address, data+address, transfer_size);
325 static int ezport_firmware_flash_data(struct spi_device *spi,
332 dev_dbg(&spi->dev, "EzPort flash data with %zu bytes...\n", size);
334 ret = ezport_get_status_register(spi);
339 ret = ezport_bulk_erase(spi);
348 ret = ezport_section_erase(spi, address);
357 ret = ezport_flash_transfer(spi, address,
369 dev_dbg(&spi->dev, "EzPort verify flashed data...\n");
370 ret = ezport_firmware_compare_data(spi, data, size);
377 dev_err(&spi->dev, "Failed to verify flashed data: %d\n", ret);
379 ret = ezport_soft_reset(spi);
381 dev_warn(&spi->dev, "EzPort reset failed!\n");
386 static int ezport_firmware_load(struct spi_device *spi, const char *fwname)
391 ret = request_firmware(&fw, fwname, &spi->dev);
393 dev_err(&spi->dev, "Could not get firmware: %d\n", ret);
397 ret = ezport_firmware_flash_data(spi, fw->data, fw->size);
406 * @spi: SPI device for NXP EzPort interface
414 static int ezport_flash(struct spi_device *spi, struct gpio_desc *reset, const char *fwname)
418 ret = ezport_start_programming(spi, reset);
422 ret = ezport_firmware_load(spi, fwname);
424 ezport_stop_programming(spi, reset);
427 dev_err(&spi->dev, "Failed to flash firmware: %d\n", ret);
429 dev_dbg(&spi->dev, "Finished FW flashing!\n");
504 static int gehc_achc_probe(struct spi_device *spi)
509 spi->max_speed_hz = ACHC_MAX_FREQ_HZ;
510 spi->bits_per_word = 8;
511 spi->mode = SPI_MODE_0;
513 achc = devm_kzalloc(&spi->dev, sizeof(*achc), GFP_KERNEL);
516 spi_set_drvdata(spi, achc);
517 achc->main = spi;
521 ret = of_property_read_u32_index(spi->dev.of_node, "reg", 1, &ezport_reg);
523 return dev_err_probe(&spi->dev, ret, "missing second reg entry!\n");
525 achc->ezport = spi_new_ancillary_device(spi, ezport_reg);
529 ret = devm_add_action_or_reset(&spi->dev, unregister_ezport, achc->ezport);
533 achc->reset = devm_gpiod_get(&spi->dev, "reset", GPIOD_OUT_LOW);
535 return dev_err_probe(&spi->dev, PTR_ERR(achc->reset), "Could not get reset gpio\n");
545 MODULE_DEVICE_TABLE(spi, gehc_achc_id);