static int es705_slim_read(struct es705_priv *es705, void *rspn, int len) { int rc = 0; int i; struct slim_device *sbdev = es705->gen0_client; struct slim_ele_access msg = { .start_offset = ES705_READ_VE_OFFSET, .num_bytes = ES705_READ_VE_WIDTH, .comp = NULL, }; BUG_ON(len < 0); for (i = 0; i < MAX_SMB_TRIALS; i++) { char buf[4] = {0}; rc = slim_request_val_element(sbdev, &msg, buf, 4); memcpy(rspn, buf, 4); if (!rc) break; usleep_range(SMB_DELAY, SMB_DELAY); } if (i == MAX_SMB_TRIALS) dev_err(&sbdev->dev, "%s(): reach SLIMBus read trials (%d)\n", __func__, MAX_SMB_TRIALS); return rc; }
int escore_slim_read(struct escore_priv *escore, void *buf, int len) { int retry = MAX_SMB_TRIALS; int rc; struct slim_device *sbdev = escore->gen0_client; DECLARE_COMPLETION_ONSTACK(read_done); struct slim_ele_access msg = { .start_offset = ES_READ_VE_OFFSET, .num_bytes = ES_READ_VE_WIDTH, .comp = NULL, }; rc = slim_get_logical_addr(sbdev, escore->gen0_client->e_addr, 6, &(escore->gen0_client->laddr)); if (rc) dev_err(&sbdev->dev, "%s(): get logical addr err %d\n", __func__, rc); do { rc = slim_request_val_element(sbdev, &msg, buf, len); if (rc != 0) dev_warn(&sbdev->dev, "%s: Warnning read failed rc=%d\n", __func__, rc); else break; usleep_range(SMB_DELAY, SMB_DELAY); } while (--retry); if (rc != 0) dev_err(&sbdev->dev, "%s: Error read failed rc=%d after %d retries\n", __func__, rc, MAX_SMB_TRIALS); return rc; }